带有求解器OSQP的cvxpy .solve()失败,在教程代码上出现“达到最大迭代次数”错误

时间:2019-10-30 18:00:26

标签: cvxpy

我正在尝试使用cvxpy。我已使用pip将1.1.0a1版安装到我的conda环境中,并克隆了the cvxpy github repository。尝试运行其SVM-example jupyter notebook时,prob.solve()会引发以下错误消息:

  

SolverError:解算器“ OSQP”失败。尝试使用其他求解器,或使用verbose = True求解以获取更多信息。

设置verbose=True并添加一些打印语句表明,求解器以

结尾
status:               maximum iterations reached
number of iterations: 10000
run time:             1.07e+00s
optimal rho estimate: 2.03e-01

对于正则化参数Lambda = 0.010974987654930561,而参数Lambda = 0.010476157527896646给出结果

status:               solved inaccurate
number of iterations: 10000
optimal objective:    0.8437
run time:             1.06e+00s
optimal rho estimate: 1.68e-01

由于这是“官方”示例代码,所以我猜我的问题是与其他软件包的某种形式的意外交互,但是甚至不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

我在计算机上运行了SVM示例,并遇到了与您相同的错误。看来我们需要更新它。

您的安装没有问题。求解器(即解决由CVXPY构造的问题的数值算法)有时可能会失败,即使问题是与DCP兼容的。通常,当数值数据过大或过小时,求解器都会失败,这可能会导致状况不佳的问题数据。一些求解器比其他求解器更健壮。

在这种情况下,我可以使用ECOS解算器(prob.solve(solver=cp.ECOS)(ECOS版本2.0.4,CVXPY 1.0.25)成功运行示例。

更一般而言,当求解器失败时,您可以尝试以下操作:

  1. 尝试另一个求解器。
  2. 使用verbose=Trueprob.solve(verbose=True))调用solve方法。这应该打印出详细的错误消息,以帮助您确定求解器失败的原因。
  3. solver-specific options传递到求解器(例如,增加最大迭代次数)。