小编典典

Python混合整数线性规划

python

是否有适用于Python的混合整数线性编程(MILP)求解器?

GLPK python可以解决MILP问题吗?我读到它可以解决混合整数问题。
我是线性编程问题的新手。因此,如果混合整数编程与混合整数线性编程(MILP)不同,我会很困惑,无法真正区分。


阅读 638

收藏
2020-12-20

共1个答案

小编典典

Pulp 是一个python建模接口,可连接到
CBC
(开源),
CPLEX

(商业), Gurobi (商业), XPRESS-
MP
(商业)和
YALMIP
(开源)之类的
求解器

您还可以使用 Pyomo
为优化问题建模,然后调用外部求解器,即CPLEX,Gurobi GLPK和AMPL求解器库。

您还可以从 GLPK / Python PyGLPK
PyMathProg
调用GLPK 。

另一种建模语言是 CMPL
,它具有用于MIP求解器的python接口(仅适用于线性程序)。

上述所有求解器都可以求解混合整数 线性
程序
,而其中某些求解器(可以肯定地使用CPLEX,GUROBI和XRESS-
MP)可以求解混合整数 二次
程序
二次约束二次程序(以及圆锥程序),但这可能超出了本章的范围题)。

MIP指的是混合整数程序,但通常仅用于指线性程序。为了使术语更精确,应始终参考MILP或MINLP(混合整数非线性编程)。

请注意,CPLEX和GUROBI也具有自己的python API,但它们(以及)XPRESS-MP是商业产品,但可免费用于学术研究。
CyLP
与上面的Pulp类似,但与COIN-
OR求解器CBC和CGL和CLP接口。

请注意,商业和自由求解器的性能差异很大:后者大大落后于前者。 SCIP 是 _ 也许是最好的非商业求解器_ (请参阅下面的更新)。它的python接口PySCIPOpt
在这里

最后,如果您对简单的约束求解器(而非优化)感兴趣,请查看 python-constraint

我希望这有帮助!

更新

更多的求解器和python接口陷入了我的视野:

MIPCL似乎是 最快
的最快的非商业MIP求解器之一,它具有python界面,该界面具有相当好的文档。但是请注意,Python API不包括本机MIPCLShell附带的高级功能。我特别喜欢MIPCL-PY手册,该手册在一些小规模实现的基础上演示了运维管理中使用的一系列模型。它本身就是一本非常有趣的入门手册,无论您可能想使用哪种求解器/
API。

Google Optimization
Tools
,其中包括多种功能,例如

  • 约束规划求解器和线性规划( 非MIP )求解器
  • MIP求解器的接口(支持CBC,CLP,GLOP,GLPK,Gurobi,CPLEX和SCIP)
  • 图形的专用算法,旅行商问题,车辆路线问题以及箱装箱和背包问题

它具有有关多个传统OR问题和简单实现的大量文档。我找不到一个完整的Python
API文档,尽管存在一些例子在这里。对我来说,还不清楚其他求解器如何与接口连接以及这些求解器的方法是否可用。

CVXOPT,一个用于凸优化的开源软件包,它与GLPK(开源)和MOSEK
(商业)接口。它具有通用性,因为它可以解决许多问题类别(尤其是线性,二阶,半定,凸非线性)。唯一的缺点是,由于用户需要以“
Matlab-y”方式传递数据(即,指定矩阵,rhs矢量等),因此对复杂问题进行建模可能很麻烦。但是,可以从建模接口PICOS和…调用它。

CVXPY是用于凸优化问题的python嵌入式优化语言,包含CVXOPT作为默认求解器,但它可以连接到常用的MIP求解器

感谢RedPanda指出它也CVXOPT/CVXPY支持MIP求解器。

有关软件包和面向对象语言(不限于Python)的优化建模功能的非常全面的文章,请查看本文

2020-12-20