目录
题目
问题分析
这是一个典型的整数规划问题,一共两辆铁路平板车,每辆铁路平板车需要装载不同种类的不同数量的包装箱,不同类别的包装有不同的厚度和重量,在一定的约束条件下,求出装载完包装箱后最小的浪费空间。需要引入整数决策变量来表示每辆车的承载情况。
变量说明
符号 | 说明 | 单位 |
---|---|---|
两辆铁路平板车剩余空间的总和 | m | |
代表Ci类包装箱 | 无 | |
第一辆铁路平板车装载xi件包装箱Ci | 件 | |
第二辆铁路平板车装载yi件包装箱Ci | 件 | |
包装箱Ci的厚度 | m | |
包装箱Ci的重量 | t | |
包装箱Ci的总数量 | 件 |
模型建立
该问题的整数规划模型为
用python代码实现模型求解
import cvxpy as cp
from numpy import array
import warnings
warnings.filterwarnings("ignore")
c = array(
[-0.487, -0.52, -0.613, -0.72, -0.487, -0.52, -0.64,
-0.487, -0.52, -0.613, -0.72, -0.487, -0.52, -0.64]) # 定义目标向量
a = array([[0.487, 0.52, 0.613, 0.72, 0.487, 0.52, 0.64, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0.487, 0.52, 0.613, 0.72, 0.487, 0.52, 0.64],
[0, 0, 0, 0, 0.487, 0.52, 0.64, 0, 0, 0, 0, 0.487, 0.52, 0.64],
[2, 3, 1, 0.5, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0.5, 4, 2, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1]]) # 定义约束矩阵
b = array([10.2, 10.2, 3.027, 40, 40, 8, 7, 9, 6, 6, 4, 8]) # 定义约束条件的右边向量
x = cp.Variable(14, integer=True) # 定义两个整数决策变量
obj = cp.Minimize(c * x) # 构造目标函数
cons = [a * x <= b, x >= 0] # 构造约束条件
prob = cp.Problem(obj, cons) # 构建问题模型
prob.solve(solver='GLPK_MI', verbose=True) # 求解问题
print("最优值为:", prob.value + 20.4)
print("最优解为:\n", x.value)