6

我正在寻找关于评估速度的二阶锥编程求解器的推荐(或比较)。求解器必须免费用于非营利用途或开源。

我对环境相当开放:独立的解决方案、库、Matlab、Python、R 等都是可以接受的。

我的问题在约束方面具有显着的稀疏性,我相信优秀的求解器可以利用这些约束来加快计算速度。

4

4 回答 4

4

您可能知道,cvxpy使用 cvxopt 或ecos作为求解器。
我只使用了一点点 ecos,因为 LP 而不是锥体(在一个测试用例上比 cvxopt 快 3 倍)。
它是 ~ 5k 行 c + python 包装器,什么都做!scipy.sparse.csc 格式;也许值得一瞧。

于 2014-04-15T19:10:32.100 回答
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

我建议您使用商业求解器来提出一个好的公式,这样的求解器可以尽可能快地求解。这就是与其他人比较的基础。如果您有一些不错的大规模问题需要帮助,您可以通过 mosek.com 联系我们。

于 2014-04-02T20:42:59.103 回答
3

除了 CVXPY ( http://www.cvxpy.org/ ),您还可以考虑 QCML ( https://github.com/cvxgrp/qcml ),它会生成针对您的问题的 C 代码。

CVXPY 的改进非常迅速。Check 约束中的问题在 cvxpy 中没有问题,实际值来自完全过时的版本。假设您的问题不是太大(少于一百万个变量),CVXPY 可能会满足您的需求。即使遇到大问题,您也可以使用 CVXPY 中的 SCS 求解器来找到快速(虽然不太准确)的解决方案。

于 2014-08-10T05:02:32.593 回答
1

在 MIT 许可证下还存在SCS(分裂圆锥求解器) ,它是用 C 编写的,它有多个端口(Python、R ..)。

于 2019-11-20T13:55:52.453 回答