是否有适用于Python的混合整数线性规划(MILP)求解器?
GLPK Python是否能够解决MILP问题?我读到它可以解决混合整数问题。
我对线性规划问题非常陌生,所以我很困惑,无法真正区分混合整数编程与混合整数线性编程(MILP)是否不同。
是否有适用于Python的混合整数线性规划(MILP)求解器?
GLPK Python是否能够解决MILP问题?我读到它可以解决混合整数问题。
我对线性规划问题非常陌生,所以我很困惑,无法真正区分混合整数编程与混合整数线性编程(MILP)是否不同。
Pulp是一个Python建模接口,可连接到求解器如CBC(开源),CPLEX(商业),Gurobi(商业),XPRESS-MP(商业)和YALMIP(开源)。
您还可以使用Pyomo来建立优化问题模型,然后调用外部求解器,即CPLEX、Gurobi GLPK和AMPL求解器库。
你可以通过GLPK/Python、PyGLPK或PyMathProg调用GLPK。另外,请查看这个SO问题。
最后,如果您对简单的约束求解器(而不是优化)感兴趣,请查看python-constraint。
我发现了更多的求解器和Python接口:
更新:MIPCL链接似乎已经失效。
MIPCL,看起来是最快的非商业MIP求解器,有一个Python接口,并且有相当好的文档。但是请注意,Python API不包括与本地MIPCLShell一起提供的高级功能。我特别喜欢MIPCL-PY手册,其中演示了在运营管理中使用的一系列模型,以及一些小规模实现。这是一个非常有趣的入门手册,无论想要使用哪个求解器/API都可以参考。
Google Optimization Tools是一款包含多种功能的工具,例如:
它有关于几个传统OR问题和简单实现的广泛文档。我找不到完整的Python API文档,虽然这里有一些示例here。我不太清楚其他求解器如何连接到接口上,以及这些求解器的方法是否可用。
CVXOPT,一个用于凸优化的开源软件包,它与GLPK(开源)和MOSEK接口。它非常灵活,可以解决许多问题类别(尤其是线性、二阶、半定、凸非线性)。唯一的缺点是建模复杂问题可能很繁琐,因为用户需要以“Matlab-y”方式传递数据(即指定矩阵、rhs向量等)。但是,它可以从建模接口PICOS调用...
CVXPY,一种嵌入Python语言的凸优化语言,它默认包含CVXOPT
作为求解器,但它也可以连接到通常的MIP求解器中。
感谢RedPanda指出CVXOPT/CVXPY
也支持MIP求解器。
关于软件包和面向对象语言(不仅限于Python)的优化建模能力的非常全面的文章,请查看this article。
cvxopt
和cvxpy
也支持混合整数规划。这里有一篇文章对cvxopt
进行了基准测试,结果比pulp
快得多:https://scaron.info/blog/linear-programming-in-python-with-cvxopt.html - RedPanda很快就会有另一种选择:从版本1.9.0开始,SciPy将支持MILP。请参阅开发文档中的scipy.optimize.milp。SciPy的milp
实现是HiGHS线性优化软件的包装器。它是在2022年2月16日的这个PR上添加的。
编辑:SciPy 1.9.0已于2022年7月29日发布,其中包含scipy.optimize.milp。
我已经使用Gekko Python包来解决MILP问题。您可以在本地解决模型,也可以在其远程服务器上进行求解。安装后,您可以通过pip install gekko
来使用它。下面是一个例子:
from gekko import GEKKO
m = GEKKO()
x,y = m.Array(m.Var,2,integer=True,lb=0)
m.Maximize(y)
m.Equations([-x+y<=1,
3*x+2*y<=12,
2*x+3*y<=12])
m.options.SOLVER = 1
m.solve()
print('Objective: ', -m.options.OBJFCNVAL)
print('x: ', x.value[0])
print('y: ', y.value[0])
GEKKO 是一款用于机器学习和混合整数微分代数方程优化的Python软件包。它与大规模求解器(线性、二次、非线性和混合整数规划LP、QP、NLP、MILP、MINLP)结合使用。其操作模式包括参数回归、数据协调、实时优化、动态仿真和非线性预测控制。GEKKO是一个面向对象的Python库,以促进APMonitor的本地执行。
gekko
代码示例:https://apmonitor.com/wiki/index.php/Main/IntegerProgramming - John Hedengren