52

我正在使用 CPLEX 来解决巨大的优化模型(超过 10 万个变量)现在我想看看我是否可以找到一个开源替代方案,我解决了混合整数问题 (MILP) 并且 CPLEX 效果很好,但是如果我们想要扩展,所以我真的需要找到替代方案或开始编写我们自己的临时优化库(这会很痛苦)

任何建议/见解将不胜感激

4

13 回答 13

25

我个人发现GLPK比 LP_SOLVE 更好(即更快)。它支持各种文件格式,另一个优势是它的库接口,可以与您的应用程序顺利集成。

于 2009-02-02T22:41:03.953 回答
23

COIN-OR 的另一个背书。我们发现线性优化器组件 (Clp) 非常强大,并且混合整数组件 (Cbc) 可以通过一些分析很好地调整。我们与 LP-Solve 和 GLPK 进行了比较。

对于真正棘手的问题,商业解决方案是必经之路。

于 2009-09-29T05:49:28.607 回答
15

试试 SCIP 求解器。我已将它用于具有超过 300K 变量且性能良好的 MILP 问题。它的 MILP 性能比 GLPK 好得多。Gurobi 在 MILP 问题上也有出色的表现(通常比 SCIP(2011 年 5 月)更好),但如果您不是学术用户,它可能会很昂贵。Gurobi 将使用多核来加速求解器。

于 2011-05-21T21:30:16.710 回答
12

如果我是你,我会尝试使用多求解器接口,例如 Osi (C++) 或 PuLP (python),这样你就可以编写一次代码,并使用多个求解器对其进行测试。

如果您要求解的整数程序很大,我会推荐使用 Python 而不是 C++,因为您的代码看起来会更简洁,并且 99% 的时间都花在求解器上。

相反,如果问题很小,那么将问题从 python 内存复制到求解器(来回)的时间就不再被忽视:在这种情况下,您可以使用编译语言尝试一些显着的性能改进.

但是如果问题非常巨大,那么编译语言将再次获胜,因为内存占用将大致除以 2(python 中没有问题的副本)。

于 2012-11-06T10:16:01.380 回答
10

你试过lp_solve吗?对于 Java,以下问题中还有一些其他建议:

于 2009-02-02T05:11:49.157 回答
10

我建议查看 COIN 项目。 硬币或

这里有许多优秀的求解器,包括用于非线性问题的 ipOPT 和几个混合整数求解器。

于 2009-05-06T01:11:35.390 回答
6

scip还不错!

于 2011-01-20T17:35:17.403 回答
6

尽管这可能不是您想听到的,但一方面商业求解器 CPLEX 和 Gurobi 与开源求解器之间存在光年。

尽管如此,你还是很幸运的,你的模型可以很好地与 GLPK、Coin 等类似,但总的来说,开源解决方案远远落后于商业求解器。如果不同,没有人愿意为 Gurobi 许可证支付 12.000 美元,甚至为 CPLEX 许可证支付更多。

在过去的几年里,我看到了许多对开源求解器来说非常困难的模型。相信我...

这不是大小的问题,而是数字难度的问题。

于 2013-01-25T18:10:09.147 回答
4

我很惊讶没有人提到 MIPCL ( http://www.mipcl-cpp.appspot.com/index.html )。该求解器声称在 LGPL 许可下是开源的(来源: http: //www.mipcl-cpp.appspot.com/licence.html),因此它也适用于非开源应用程序。但是真正开源所缺少的是求解器本身的源代码。

Hans Mittelmann 最近(2017 年 9 月 10 日)做了混合整数线性规划基准测试: http: //plato.asu.edu/ftp/milpc.html(您可能也有兴趣查看概览页面http://plato.asu .edu/bench.html或他的演讲幻灯片:http: //plato.asu.edu/talks/informs2017.pdf)。

在具有 12 个线程和 2 小时时间限制的混合整数线性规划基准测试中,MIPCL 设法解决了 79 个实例。只有商业求解器 CPLEX、Gurobi 和 XPRESS 能够在给定的约束(分别为 86 或 87 个实例)下解决更多问题。

同样在选择的性能指标(再次使用 12 个线程)方面,MIPCL 比基准 SCIP 衍生产品(FSCIPC、FSCIPS)和开源求解器 CBC 更快。同样,只有商业求解器 CPLEX、Gurobi 和 XPRESS 在性能方面明显胜过 MIPCL。

于 2017-11-15T13:39:16.090 回答
2

100k 个变量是个大问题。许多开源库不能很好地处理这么多变量。从我读过的内容来看, lp_solve 仅针对大约 30k 变量进行了测试。使用商业系统可能是您唯一的选择。

于 2009-08-13T14:46:17.423 回答
2

我使用 DICOPT 使用 NEOS 服务器(http://www.neos-server.org/neos/solvers/minco:DICOPT/GAMS.html)来解决大型(大约 1k 个变量和 1k 个约束)混合整数非线性程序并发现它很棒。

对于我的问题,DICOPT 比 Neos 服务器 BARON/KNITRO/LINDO/SBB 等上列出的其他 MINLP 求解器做得更好。

向 NEOS 提交作业有一定的限制,而且有点麻烦,但是免费访问强大的商业求解器足以弥补它。

于 2013-07-05T21:58:42.237 回答
1

我将在已经很好的答案中添加以下内容。

虽然正如其他人所指出的那样,商业求解器比免费替代方案更快、更有能力,重要的是要考虑你可以接受多少最优性差距。对于具有许多整数变量的大型问题,如果您可以接受 1% 甚至更大的最优性差距(默认值往往在 0.01% 左右或更小),您可能会获得更快的求解时间。

当然,如果您正在解决一个 1% 转化为数百万美元的问题,这是不可接受的 - 因此市场需要一流的解决方案。(这里Gurobi 与免费求解器的一些比较)

我同意其他人的观点,即使用生成独立于求解器的问题文件(例如 *.mps、*.lp 文件)的平台是值得的,因为您可以尝试其他求解器。我正在使用PuLP并且正在找到它,以及免费的 COIN_CBC 求解器,非常好。虽然仅限于许多整数变量的问题。

于 2016-10-11T23:31:15.037 回答
0

不是开源的,但如果您拥有 Microsoft Academic Alliance 许可证,则包括Microsoft Solver Foundation (MSF) 企业版。Gurobi对于学术目的也是免费的,我在我的论文研究中使用了它。

于 2010-03-12T17:15:28.880 回答