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

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

我正在使用 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/

相关文章:

python - 条件约束

python - CVXPY 中的逐元素乘法

用于查找 f(x) = a*min(b, x) 形式的函数最大值的算法?

python - 使用 Conda 安装 cvxopt 时出错

machine-learning - 逻辑回归中成本函数的局部和全局最小值

python - 安装Python包将会下载、安装和删除其他包

python - "pathological"凸函数的快速优化

c - 从 R 调用这个 C 函数(libqp_gsmo.c)的方法是什么?

python - CVXOPT二次编程接口(interface)

multithreading - 我强大的本地计算机与另一台远程计算机上的MATLAB Quadprog极其慢