我有一个混合整数规划问题。我目前正在使用 GLPK 作为我的求解器。但是我发现 GLPK 对线性规划问题很好,但是对于混合整数规划,它需要更长的时间,因此不符合我们的要求。我正在寻找其他软件。有没有其他好的开源工具可以快速解决混合整数规划问题?谢谢!
解决混合整数规划问题的最快软件(开源)是什么
如果你想要一些开源的东西,你可能想试试 COIN 的 CBC 代码(他们还有几个其他的 MILP 求解器,比如分支和价格框架,或 SYMPHONY)。
Gurobi 和 CPLEX 将快得多,并且在 2011 年或 2012 年的 INFORMS 会议上,Gurobi 比 CPLEX 更快(尽管性能指标当然取决于问题)。在我论文中解决的 MILP 中,Gurobi 比 CBC 快大约 15-100 倍,CPLEX 几乎与 Gurobi 一样快,但速度稍慢(比如快 12-80 倍)。
尽管最坏情况下的性能确实是指数级的,但执行时间将在很大程度上取决于问题结构。除非你利用特殊的结构(也许它是一个可以分解成许多小得多的问题的随机程序),否则你不太可能解决具有数百万个变量的 MILP,但是完全有可能解决具有数千个变量的非平凡 MILP不到一分钟的变化。(当然,这些问题也有可能需要一个小时或更长时间才能解决。)
正如 Brian Borchers 所指出的,CPLEX 和 Gurobi 都为一些研究人员提供免费许可证,这两个软件包中的一个确实是最适合用作通用 MILP 求解器的。
混合整数线性规划问题比线性规划问题更难解决。就计算复杂度而言,LP 可以在多项式时间内求解,而求解 MILP 是一个 NP-Hard 问题。用于求解 MILP 的已知算法具有指数最坏情况复杂性。
您可以查看其他用于混合整数线性规划的软件包,包括 SCIP(免费供学术使用)、CPLEX(商业,但具有学术许可选项)和 GUROBI(也具有学术许可选项的商业。)一个或多个这些软件包中的一个在您的问题上可能比 GLPK 快得多,但不要指望它们中的任何一个在解决 MILP 方面几乎与解决类似大小的 LP 一样快。
如果你想尝试一堆不同的求解器,试试 Julia 的JuMP 建模框架。它使您可以将模型编写为 JuMP 模型,然后用一行代码切换求解器。例如,对于 MILP 问题,您可以从 Bonmin、Cbc、Couenne、CPLEX、GLPK、Gurobi 和 MOSEK 求解器中进行选择。正因为如此,如果你用 JuMP 编写它,你可以尝试 Geoff 提到的所有求解器,看看哪些是有效的,而无需编写一堆代码。您自己的个人测试将是最好的知识来源,以了解最快的算法适用于您的问题。