是否有适用于Python的混合整数线性编程(MILP)求解器?
GLPK python可以解决MILP问题吗?我读到它可以解决混合整数问题。
我是线性编程问题的新手。因此,如果混合整数编程与混合整数线性编程(MILP)不同,我会很困惑,无法真正区分。
Answers:
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在这里。
另外,看看这个SO问题。
最后,如果您对简单的约束求解器(而非优化)感兴趣,请查看python-constraint。
我希望这有帮助!
更多的求解器和python接口陷入了我的视野:
MIPCL似乎是最快的最快的非商业MIP求解器之一,它具有python界面,该界面具有相当好的文档。但是请注意,Python API不包括本机MIPCLShell附带的高级功能。我特别喜欢MIPCL-PY手册,该手册在一些小规模实现的基础上演示了运维管理中使用的一系列模型。它本身就是一本非常有趣的入门手册,无论您可能想使用哪种求解器/ API。
Google Optimization Tools,其中包括多种功能,例如
它具有有关多个传统OR问题和简单实现的大量文档。我找不到一个完整的Python API文档,尽管存在一些例子在这里。对我来说,还不清楚其他求解器如何与接口连接以及这些求解器的方法是否可用。
CVXOPT,一个用于凸优化的开源软件包,与GLPK(开源)和MOSEK (商业)接口。它具有通用性,因为它可以解决许多问题类别(尤其是线性,二阶,半定,凸非线性)。唯一的缺点是,由于用户需要以“ Matlab-y”方式传递数据(即,指定矩阵,rhs矢量等),因此对复杂问题进行建模可能很麻烦。但是,可以从建模接口PICOS和...调用它。
CVXPY是用于凸优化问题的python嵌入式优化语言,包含CVXOPT
默认的求解器,但它可以连接到常用的MIP求解器。
感谢RedPanda指出它也CVXOPT/CVXPY
支持MIP求解器。
有关软件包和面向对象语言(不限于Python)的优化建模功能的非常全面的文章,请查看本文。
cvxopt
并且cvxpy
还支持混合整数编程。这是一篇基准测试的文章cvxopt
,其发布速度比以下文章还要快pulp
:scaron.info/blog/linear-programming-in-python-with-cvxopt.html