3.2 第二次迭代
得到新的RMP:
dvar int+ y1; dvar int+ y2; dvar int+ y3; dvar int+ y4; minimize y1 + y2 + y3 + y4; subject to{ 5*y1 + 0*y2 + 0*y3 + 1*y4 >= 25; 0*y1 + 2*y2 + 0*y3 + 2*y4>= 20; 0*y1 + 0*y2 + 2*y3 + 0*y4>= 18; }
得到结果为:Y = [3,0,9,10];
对偶变量为:
现在我们要加一列到RMP中,记为,计算其检验数:
得到子问题:
得到,ruduce cost的取值为负数,因此加入
3.3 第三次迭代
dvar int+ y1; dvar int+ y2; dvar int+ y3; dvar int+ y4;dvar int+ y5; minimize y1 + y2 + y3 + y4 + y5; subject to{ 5*y1 + 0*y2 + 0*y3 + 1*y4 + 1*y5>= 25; 0*y1 + 2*y2 + 0*y3 + 2*y4 + 1*y5 >= 20; 0*y1 + 0*y2 + 2*y3 + 0*y4 + 1*y5>= 18; }
得到结果为:Y = [2,0,0,1,18];
对偶变量为:
现在我们要加一列到RMP中,记为,计算其检验数:
得到子问题:
得到,ruduce cost的取值为0,因此不加入
3.4 最终RMP
令上述模型中的决策变量都取整数,得到的Cplex的最优方案组合为[2,0,0,1,18],最优值为21
对应到实际问题就是,2个卷切5个3米的;1个卷1个3米和2个6米;18个卷切1个3米、1个6米和1个7米
最终我们得到了29个3米的,20个6米的,18个7米的;总共切了21个卷,浪费21*16 - (25*3 + 6*20 + 7*18)=15米
4 多种长度木材的例子
4.1 问题说明
有三种长度为9,14,16的木材,成本价分别为5,9,10,需要切割长度为4的成品 30个;长度为5的成品20个;长度为7的成品40个,求解切割方案,使得总体成本价最低。
构建的模型:
模型:
找初始方案:
4.2 Cplex OPL求解
4.2.1 初始RMP
Cplex求解:
dvar int+ x1; dvar int+ x2; dvar int+ x3; minimize 5*x1 + 5*x2 + 5*x3; subject to{ 2*x1 + 0*x2 + 0*x3 >= 30; 0*x1 + 1*x2 + 0*x3 >= 20; 0*x1 + 0*x2 + 1*x3 >= 40; }
决策变量X = [15,20,40]; 对偶变量:[2.5,5,5];最优值375
构建新的列:
构建subproblem时,我们再求时,发现 有三个,那么我们就需要构建三个子问题,然后得到其中的最大的
检验数相同,我们选择成本更低的方案,因此我们新增加的列是[0,3,0]
4.2.2 第一次进基离基
Cplex求解:
dvar int+ x1; dvar int+ x2; dvar int+ x3; dvar int+ x4; minimize 5*x1 + 5*x2 + 5*x3 + 10*x4; subject to{ 2*x1 + 0*x2 + 0*x3 + 0*x4 >= 30; 0*x1 + 1*x2 + 0*x3 + 3*x4 >= 20; 0*x1 + 0*x2 + 1*x3 + 0*x4 >= 40; }
X = [15, 0, 40, 6.7]; 目标值341.67;对偶变量:[2.5, 3.3, 5]
对应最优整数解, X = [15, 0, 40, 7]; 目标345
可知,变量 应该离基,构建新的列:
添加列[0,0,2],离基列[0,1,0]