CVXPY抛出`SolverError`异常的具体原因是什么?

Ton*_*ony 6 convex-optimization numerical-stability cvxopt quadratic-programming cvxpy

我正在使用 CVXPY(版本 1.0)来解决二次程序(QP),我经常遇到这个异常:

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

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

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

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

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

ste*_*ven 5

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