最佳开源混合整数优化求解器

时间:2009-02-02 03:19:18

标签: mathematical-optimization linear-programming convex-optimization cplex

我正在使用CPLEX来解决巨大的优化模型(超过100k变量)现在我想看看我是否能找到一个开源替代品,我解决了混合整数问题(MILP)和CPLEX工作得很好但它非常如果我们想要扩展,那就太贵了,所以我真的需要找到一个替代方案,或者开始编写我们自己的ad-hoc优化库(这将是痛苦的)

非常感谢任何建议/见解

13 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:17)

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

对于真正棘手的问题,商业解决方案是可行的方法。

答案 2 :(得分:15)

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

答案 3 :(得分:9)

答案 4 :(得分:9)

我建议查看COIN项目。 COIN OR

这里有许多优秀的解决方案,包括ipOPT 对于非线性问题和一对 混合整数求解器也是如此。

答案 5 :(得分:9)

如果我是你,我会尝试使用诸如Osi(C ++)或PuLP(python)之类的多解算器接口,以便您可以编写一次代码,并使用许多求解器进行测试。

如果您要解决的整数程序很大,我建议使用python而不是C ++,因为您的代码看起来更干净,99%的时间将花在解算器上。

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

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

答案 6 :(得分:6)

Scip还不错!

答案 7 :(得分:6)

虽然这可能不是你想听到的,但是商业解决方案CPLEX和Gurobi与另一方面开源求解器之间存在光年。

尽管如此,你可以很幸运,你的模型可以与GLPK,Coin等合作,但总的来说,开源解决方案远远落后于商业解决方案。如果不同,没有人会为Gurobi许可证支付12.000美元,而CPLEX许可证则更多。

在过去的几年里,我见过很多很多模型,这些模型对于开源求解器来说都是困难的。相信我......

这不是一个大小问题,而是数字难题。

答案 8 :(得分:2)

100k变量是个大问题。许多开源库在许多变量中都不能很好地运行。从我读过的内容来看,lp_solve只测试了大约30k个变量。使用商业系统可能是您唯一的选择。

答案 9 :(得分:2)

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

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

向NEOS提交作业存在一些限制,这有点麻烦,但免费获得强大的商业解决方案可以弥补它。

答案 10 :(得分:1)

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

虽然正如其他人所指出的那样,商业解决方案比免费替代方案更快,更强大,因此考虑您可以接受多少最优性差距非常重要。对于具有许多整数变量的大问题,如果可以接受1%甚至更大的最优性差距(默认值通常在0.01%或更低),则可以获得更快的求解时间。

当然,如果你正在解决1%转化为数百万美元的问题,这是不可接受的 - 因此是一流求解者的市场。 (Gurobi与自由求解器的一些比较here

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

答案 11 :(得分:1)

我很惊讶没有人提到过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或他演讲的幻灯片:{{ 3}})。

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

此外,就所选性能指标而言(再次使用12个线程),MIPCL比基准SCIP派生(FSCIPC,FSCIPS)和开源求解器CBC更快。同样,只有商业解决方案CPLEX,Gurobi和XPRESS在性能方面显着超越MIPCL。

答案 12 :(得分:0)

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