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

时间:2018-04-13 08:51:33

标签: convex-optimization cvxopt quadratic-programming numerical-stability cvxpy

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

  

SolverError:解算器' xxx'失败。尝试另一个求解器。

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

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

  

SolverError:解算器' xxx'失败。尝试另一个求解器。

这个错误实际上没有提供信息,而且我没有找到解决问题的方法来改善解决问题的稳健性。它的原因是解决者特有的吗?是否针对一组明确定义的情况抛出此异常?或者它只是一种说法"由于未知原因而出现问题"?这可能是什么原因?

1 个答案:

答案 0 :(得分:0)

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