高效的免费/开源SOCP(二阶锥规划)求解器

7
我正在寻找一个关于二阶锥规划求解器的推荐(或比较),主要考虑评估速度。该求解器必须免费供非营利性使用或是开源。
环境方面,我比较开放:独立的解决方案、库、Matlab、Python、R等都可以接受。
我的问题的约束条件具有显著的稀疏性,我相信好的求解器可以利用它来加速计算。
4个回答

5
你可能已经知道,cvxpy使用cvxopt或ecos作为求解器。
我只用过ecos来解线性规划问题,比cvxopt快3倍(在一个测试案例上)。
它有大约5k行C + Python包装器,可以处理scipy.sparse.csc格式的所有任务,值得一看。

谢谢,我之前还不知道 cvxpy 或 ecos。我读了 ecos 的论文,它的性能比较令人印象深刻。cvxpy 看起来可以让生活变得更加容易。你有没有其他我应该注意的 Python 包的提示? - ARF
抱歉,不行。Cvxpy有所帮助,但求解器是黑盒子,不透明的;例如,请参见check-constraints-are-ok-in-cvxpy-with-actual-values。此外,大多数ecos示例都是Matlab,几乎没有Python。我同意@ac_mosek的观点,商业或学术求解器可以更快地让您上手。不过,您可以尝试在http://scicomp.stackexchange.com上询问(提供更多关于问题规模等信息)。 - denis

4
你可能想要查看维护在这里的基准测试。

http://plato.la.asu.edu/bench.html

在那里,你可以找到各种大小的SOCP和QP测试。大多数求解器都会为您提供几个接口,没有问题。有关求解器列表,请查看此处

http://en.wikipedia.org/wiki/Second-order_cone_programming

我不确定它是否完整,但你可以从这里开始。
根据我的经验,在处理大规模问题时,商业求解器(如MOSEK和CPLEX)将提供更好的性能和稳定性,当然,鉴于我的用户名,我可能有偏见。
请记住,现在大多数商业供应商都可以为您提供学术或试用许可证。这对于测试和比较非常方便。
在我看来,您可以考虑让用户选择使用哪个求解器。这需要做一些额外的工作,但它可以为您和用户提供更多的灵活性。你可以在这里获得一些灵感。
Ipopt - COIN-OR项目: Cbc:
我建议您使用商业求解器来制定一个好的公式,以便这样的求解器可以快速解决。这是与其他人进行比较的基础。如果您有一些需要帮助解决的大型问题,可以通过mosek.com与我们联系。
cbc:https://projects.coin-or.org/Cbc ipopt:https://projects.coin-or.org/Ipopt

3
除了CVXPY (http://www.cvxpy.org/),您可能还可以考虑QCML (https://github.com/cvxgrp/qcml),它会生成与您的问题特定的C代码。
CVXPY一直在快速提升。在Check constraints are ok in cvxpy with actual values中的问题是来自一个完全过时的版本。假设您的问题不太大(少于一百万个变量),CVXPY可能会满足您的需求。即使是对于大型问题,您也可以使用CVXPY中的SCS求解器来找到一个快速(尽管准确度稍低)的解决方案。

1

还存在一个以MIT许可证发布的SCS (分裂锥求解器),它是用C编写的,并且有多个端口(Python、R等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接