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

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

有帮助吗?

解决方案

我个人发现 GLPK 更好(即快)比LP_SOLVE。它支持各种文件格式,以及进一步的优点是它的库接口,其允许与应用程序平滑整合。

其他提示

另一个签注 COIN-OR 。我们发现,线性优化器组件(CLP)是非常强的,和混合整数部分(CBC)可与一些分析进行调整得很好。我们用LP-解决和GLPK。

相比

有关真正棘手的问题,商业求解器是要走的路。

尝试SCIP解算器。我已经用了MILP问题,有超过30万的变量具有良好的性能。它的MILP性能比GLPK好得多。 Gurobi也有MILP问题(通常比SCIP(2011年5月)更好)的出色表现,但如果你不是一个学术的用户它可能是昂贵的。 Gurobi将使用多核加快解算器。

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

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

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

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

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

我建议您查看COIN项目。 COIN OR

许多优秀的求解器,这里包括ipOPT 非线性问题和一对夫妇 混合整数解算器,以及。

SCIP 是不差!

虽然这也许不是你想要听到的,但也有另一方面,一方面商业解算CPLEX和Gurobi和开源之间求解光年。

不过,你可以很幸运,你的优良样板工程与GLPK,硬币等,但一般的开源解决方案的商业求解器后面的方式。如果是不同的,没有人会支付$ 12.000的Gurobi许可证,更对CPLEX许可证。

在过去的几年中我已经看到,只是对困难的开源解决者众多,许多车型。相信我......

这与其说是大小的问题,而是数字的难度。

100k的变量是一个大问题。许多开放源码库不与许多变量运作良好。从我读lp_solve只进行了测试,30K左右的变量。使用商用系统可能是你唯一的选择。

我已经使用NEOS服务器使用DICOPT( HTTP:/ /www.neos-server.org/neos/solvers/minco:DICOPT/GAMS.html )来解决大(大约1k的变量和1K约束)混合整数非线性程序,并发现它优异。

有关我的问题DICOPT确实比近地天体的服务器男爵/ KNITRO / LINDO / SBB等等。

上列出的其他MINLP的求解器更好

有一定的约束作业提交给NEOS,这是略显繁琐,但一个强大的商业求解器免费获取超过弥补了它。

我将加入以下的已经非常出色的答案。

虽然,正如其他人指出,商业求解器要比考虑如何太大的最优缝隙你能接受它的重要替代品更快,能力更强。对于较大的问题有许多整数变量你可能会得到快得多的解决倍如果可以接受1%或甚至更大的最优间隙(默认往往是大约0.01%或更少)。

当然,如果你正在解决其中1%转化为百万美元,这是不能接受的问题 - 因此市场对顶级求解。 (Gurobi的一些比较自由的求解器这里

我会与他人同意使用产生解算器无关的问题的文件(例如* .mps,*。LP文件)的平台是值得的,因为你可以再尝试其他解决者。我使用的是纸浆和我发现它,和自由COIN_CBC解算器,优秀的。虽然限定用于与许多整数变量的问题。

我很惊讶没有人提到 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。

不是开源的,但如果你有一个Microsoft学术联盟执照,微软求解基金会包含(MSF)企业版。 Gurobi 还免费为学术目的,我用它在我的论文研究。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top