是否有适用于Python的混合整数线性规划(MILP)求解器?
GLPK python可以解决MILP问题吗?我读到它可以解决混合整数问题 我对线性编程问题很新。所以我很困惑,如果混合整数规划与混合整数线性规划(MILP)不同,则无法区分。
答案 0 :(得分:109)
Pulp是一个python建模界面,可以连接到CBC(开源),CPLEX(商业),Gurobi(商业),{{3}等解算器(商业)和XPRESS-MP(开源)。
您还可以使用YALMIP对优化问题进行建模,然后调用外部求解器,即CPLEX,Gurobim GLPK和AMPL求解器库。
您也可以通过Pyomo,GLPK/Python或PyGLPK致电GLPK。
另一种建模语言是PyMathProg,它有一个用于MIP求解器的python接口(仅适用于线性程序)。
所有上述解算器都解决CMPL,而其中一些解决方案(CPLEX,GUROBI和XRESS-MP肯定)可以解决Mixed Integer Linear Programs和Mixed Integer Quadratic Programs(以及圆锥程序,但这可能是超出了这个问题的范围)。
MIP是指混合整数程序,但它通常仅用于指代线性程序。为了使术语更精确,应始终参考MILP或MINLP(混合整数非线性编程)。
请注意,CPLEX和GUROBI也有自己的python API,但它们(以及)XPRESS-MP都是商业产品,但可以免费用于学术研究。 Quadratically constrained quadratic programs与上面的Pulp类似,但与COIN-OR解算器CBC和CGL以及CLP接口。
请注意CyLP:后者大幅落后于前者。 SCIP 是 可能是最好的非商业解决方案 (请参阅下面的更新)。它的python接口PySCIPOpt是there is a big difference in the performance of commercial and free solvers。
另外,请查看here。
最后,如果您对简单的约束求解器(非优化)感兴趣,那么请查看this SO question。
我希望这有帮助!
更多解决方案和python接口落入了我的视线:
python-constraint似乎是最快的最快的非商业MIP解算器之一,其MIPCL的python interface非常good documentation。但请注意,Python API不包含与本机MIPCLShell一起提供的高级功能。我特别喜欢MIPCL-PY manual,它在一些小规模实现之上演示了运营管理中使用的一系列模型。它本身就是一本非常有趣的入门手册,无论使用哪种求解器/ API。
Google Optimization Tools,其中包含众多功能,例如
它包含几个传统OR问题和简单实现的大量文档。虽然存在一些示例here,但我找不到完整的Python API文档。我有点不清楚其他求解器如何连接接口以及这些求解器的方法是否可用。
CVXOPT,一个用于凸优化的开源软件包,它与GLPK(开源)和MOSEK接口 (商业)。它是多功能的,因为它可以解决许多问题类别(特别是线性,二阶,半定,凸非线性)。唯一的缺点是它对复杂问题建模可能很麻烦,因为用户需要在" Matlab-y"中传递数据。时尚(即指定矩阵,rhs向量等)。但是,可以从建模接口PICOS和...
调用它 CVXPY,一种用于凸优化问题的python嵌入式优化语言,其中包含CVXOPT
作为默认解算器,但它可以连接到the usual MIP solvers。
感谢RedPanda指出CVXOPT/CVXPY
也支持MIP求解器。
有关包和面向对象语言(不限于Python)的优化建模功能的非常全面的文章,请检查this article。
答案 1 :(得分:4)
我使用了Gekko Python软件包来解决MILP问题。您可以在本地或在其远程服务器上求解模型。
GEKKO是一个Python软件包,用于机器学习以及混合整数和微分代数方程的优化。它与用于线性,二次,非线性和混合整数编程的大型求解器结合在一起(LP,QP,NLP,MILP,MINLP)。操作模式包括参数回归,数据协调,实时优化,动态仿真和非线性预测控制。 GEKKO是一个面向对象的Python库,用于促进APMonitor的本地执行。