我正在使用 CVXPY(版本 1.0)来解决二次程序(QP),我经常遇到这个异常:
SolverError: Solver 'xxx' failed. Try another solver.
这使我的程序非常脆弱。我尝试了不同的求解器,包括 CVXOPT、OSQP、ECOS、ECOS_BB、SCS。他们都或多或少有相同的问题。我注意到当我使求解器的停止标准更严格(例如,降低绝对误差容限)时,我得到
SolverError
更频繁地,当我让它不那么严格时,SolverError
问题得到缓解甚至消失。我也发现CVXPY抛出SolverError
的方式是随机的:如果我多次运行同一个程序,有些运行会出现 SolverError
和其他人获得最佳结果。虽然我可以通过尝试更多次并降低停止标准来避免 SolverError,但我真的很想了解异常背后的真正具体原因
SolverError: Solver 'xxx' failed. Try another solver.
这个错误并没有真正提供信息,我不知道如何提高解决问题的稳健性。其原因是否特定于求解器?是否为一组明确定义的情况抛出此异常?或者它只是一种说“由于未知原因出现问题”的方式?这些可能是什么原因?
最佳答案
如果您遇到求解器错误,则需要通过调用带有 verbose=True 的求解方法进行调试以查看详细的错误消息,或者使用更强大的商业求解器(如 MOSEK)。求解器错误的具体原因取决于所使用的求解器。一个常见的原因是数值容差太紧或数据缩放不当(即程序中浮点数的动态范围太大)。我将修改 SolverError 消息以使用 verbose=True 提及。
关于convex-optimization - CVXPY抛出 `SolverError`异常的具体原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49812920/