我正在使用CVXPY(版本1.0)来解决二次程序(QP),我经常遇到这个例外:
SolverError:解算器' xxx'失败。尝试另一个求解器。
这让我的程序非常脆弱。我尝试过不同的求解器,包括CVXOPT,OSQP,ECOS,ECOS_BB,SCS。他们都有或多或少相同的问题。我注意到,当我使求解器的停止条件更严格时(例如,降低绝对容错率),我更频繁地得到SolverError
,当我使其不那么严格时,SolverError
问题是衰弱甚至消失。我还发现CVXPY抛出SolverError
的方式是随机的:如果我多次运行相同的程序,有些运行有SolverError
而其他运行得到最佳结果。
虽然我可以通过尝试更多次并降低停止标准来避免SolverError,但我真的想了解异常背后的真正具体原因
SolverError:解算器' xxx'失败。尝试另一个求解器。
这个错误实际上没有提供信息,而且我没有找到解决问题的方法来改善解决问题的稳健性。它的原因是解决者特有的吗?是否针对一组明确定义的情况抛出此异常?或者它只是一种说法"由于未知原因而出现问题"?这可能是什么原因?
答案 0 :(得分:0)
如果您有解算器错误,则需要通过使用verbose = True调用solve方法进行调试,以查看详细的错误消息或使用更强大的商业解算器(如MOSEK)。求解器错误的具体原因取决于所使用的求解器。一个常见的原因是数字容差过于紧张或数据严重不足(即程序中浮点数的动态范围太大)。我将使用verbose = True修改SolverError消息。