混合整数规划MIP/线性规划LP+python(cplex库)实现 附代码

相关知识点

LP线性规划问题

  • Linear Problem
  • [百度百科]:研究线性约束条件下线性目标函数的极值问题的数学理论和方法。
    学过运筹学的小伙伴,可以看这个LP问题的标准型来回顾一下:
    在这里插入图片描述
    不太熟悉的朋友可以看这个例题,再结合上面的标准型,来感受一下:
    在这里插入图片描述

MIP混合整数规划

  • Mixed Integar Planing
  • 混合整数规划是LP的一种,决策变量部分是整数,不要求全部都是整数的规划问题。

MIP的Python实现(docplex库)

我们来解一个这样得简单得题目
在这里插入图片描述

from docplex.mp.model import Model  #导出库,只用这一个就够了
model = Model('LP') #可命名model为 'LP'
var_list = [i for i in range(0, 4)] #创建列表
X = model.continuous_var_list(var_list, lb=0, name='X') #创建变量列表
model.maximize(3 * X[0] + 5 * X[1] + 4 * X[2])  #设定目标函数
#添加约束条件
model.add_constraint(2 * X[0] + 3 * X[1] <= 1500)
model.add_constraint(2 * X[1] + 4 * X[2] <= 800)
model.add_constraint(3 * X[0] + 2 * X[1] + 5 * X[2] <= 2000)
sol = model.solve() #求解模型
print(sol)  #打印结果

但是这样抛出一个错误,目前还不知道怎么解决

在这里插入图片描述
这里给出一个cplex库得解决方法,跟docplex是同一个原理

# 先安装cplex
!pip install cplex

在这里插入图片描述

import cplex
from cplex.exceptions import CplexError
my_obj = [1.0, 2.0, 3.0, 1.0]
my_ub = [40.0, cplex.infinity, cplex.infinity, 3.0]
my_lb = [0.0, 0.0, 0.0, 2.0]
my_ctype = "CCCI"
my_colnames = ["x1", "x2", "x3", "x4"]
my_rhs = [20.0, 30.0, 0.0]
my_rownames = ["r1", "r2", "r3"]
my_sense = "LLE"

try:
    mlp = cplex.Cplex()
    mlp.objective.set_sense(prob.objective.sense.maximize)
    mlp.variables.add(obj=my_obj,
		    lb=my_lb,
		    ub=my_ub,
		    types=my_ctype,
		    names=my_colnames)
    rows = [[["x1","x2","x3","x4"],[-1,1,1,10]],
    	    [["x1","x2","x3"],[1,-3,1]],
    	    [["x2","x4"],[1.0,-3.5]]]
    mlp.linear_constraints.add(lin_expr=rows,
    				senses=my_sense,
    				rhs=my_rhs,
    				names=my_rownames)
    mlp.solve()
 except CplexError as exc:
     print(exc)
print()

输出打印结果

print("Solution status = ",mlp.solution.get_status(),":",end=' ')
print(mlp.solution.status[mlp.solution.get_status()])
print("Solution value = ",mlp.solution.get_objective_value())

numcols = mlp.variables.get_num()
numrows = mlp.linear_constraints.get_num()

slack = mlp.solution.get_linear_slacks()
x = mlp.solution.get_values()
print('x:')
print(x)

在这里插入图片描述

MIP的Python实现(ortool库)

个人而言,还是比较喜欢用ortool来解决MIP问题
混合整数规划MIP/线性规划LP+python(ortool库)实现 附代码

发布了47 篇原创文章 · 获赞 4 · 访问量 2280

猜你喜欢

转载自blog.csdn.net/qq_34107425/article/details/104046037
今日推荐