6

我正在使用 CVXPY(1.0 版)求解二次规划(QP),我经常遇到这个异常:

SolverError:求解器“xxx”失败。尝试另一个求解器。

这使我的程序非常脆弱。我尝试过不同的求解器,包括 CVXOPT、OSQP、ECOS、ECOS_BB、SCS。他们都有或多或少相同的问题。我注意到,当我使求解器的停止标准更严格(例如,降低绝对误差容限)时,我得到SolverError的频率更高,而当我不那么严格时,SolverError问题会减弱甚至消失。我还发现 CVXPY 抛出的方式SolverError是随机的:如果我多次运行同一个程序,有些运行会得到最佳结果,SolverError而另一些会得到最佳结果。

虽然我可以通过尝试更多次并降低停止标准来避免 SolverError,但我真的很想了解异常背后的真正具体原因

SolverError:求解器“xxx”失败。尝试另一个求解器。

这个错误并没有真正提供信息,我不知道如何提高解决问题的稳健性。其原因是否特定于求解器?是否会针对一组明确定义的情况引发此异常?或者它只是一种说“由于未知原因出现问题”的方式?这些可能是什么原因?

4

1 回答 1

4

如果您遇到求解器错误,则需要通过调用带有 verbose=True 的求解方法进行调试以查看详细的错误消息,或者使用更强大的商业求解器(如 MOSEK)。求解器错误的具体原因取决于所使用的求解器。一个常见的原因是数值公差太小或数据缩放不当(即程序中浮点数的动态范围太大)。我将修改 SolverError 消息以提及使用 verbose=True。

于 2018-05-21T23:16:00.143 回答