实验三整数规划
(一) 实验目的:运用Excel和LINGO软件求解整数规划(纯整数、混合整数)、0-1规划 (二) 内容及要求:求解习题3-1、3-5 (三) 实验报告:
3-1. 某厂拟在A,B,C,D,E五个城市建立若干配送中心数据如下表,求解何种选址方案能让总利润最大? 资源 城市 应投资金/ 百万元 4 6 12 0 1 20 应投人力/ 人次 5 4 12 3 0 15 应投设备/套 1 1 1 0 0 2 利润/ 10万元 4.5 3.8 9.5 -2 -1.5 A B C D E 资源限制 解:数学模型为:
maxz = 4.5X1 + 3.8X2 + 9.5X3 – 2X4 - 1.5X5
4X1 + 6X2 + 12X3 + 0X4 + 1X5 <= 20 5X1 + 4X2 + 12X3 + 3X4 + 0X5 <= 15 1X1 + 1X2 + 1X3 + 0X4 + 0X5 <= 2 X1 , X2 , X3, X4 ,X5 = 0或1
LINGO模型为:
!习题3-1;
max=4.5*x1+3.8*x2+9.5*x3-2*x4-1.5*x5; 4*x1+6*x2+12*x3+0*x4+1*x5<=20; 5*x1+4*x2+12*x3+3*x4+0*x5<=15; 1*x1+1*x2+1*x3<=2; @bin(x1); @bin(x2); @bin(x3); @bin(x4); @bin(x5);
单击求解按钮,得到规划求解报告如下:
结果分析:
厂方在城市C选址建立配送中心能使总利润最大,最大总利润为9.5万元。
3-5.安排4个人做4项不同的工,每个人完成工作所需要的时间如表3-14所示。
表3-14 习题3-5数据
时 间 人 甲 乙 丙 丁 工 作 /d A 20 18 26 17 B 19 24 16 20 C 20 27 15 24 D 28 20 18 19 (1) 应如何指派,可使总的时间最少?
(2) 如果表中的数据为创造的效益,应如何指派,使总效益最大? (3) 如果表中增加一个人(一行),完成A,B,C,D工作的时间分别为16d,17d,20d,21d,
这时应如何指派,使总时间最少?
解:
(1) 用LINGO求解,模型代码如下:
model:
!4个工人,4个工作的指派问题; sets:
person/1..4/; job/1..4/;
assign(person,job):c,x; endsets
!目标函数;
min=@sum(assign:c*x); !需求约束;
@for(person(i):
@sum(job(j):x(i,j))=1); @for(job(j):
@sum(person(i):x(i,j))=1); !这里是数据; data:
c=20 19 20 28 18 24 27 20 26 16 15 18 17 20 24 19; enddata end
单击求解按钮,得到规划求解报告如下:(只截取了能用到的一部分)
X( 1, 1) 0.000000 2.000000
X( 1, 2) 1.000000 0.000000 X( 1, 3) 0.000000 2.000000 X( 1, 4) 0.000000 8.000000 X( 2, 1) 0.000000 0.000000 X( 2, 2) 0.000000 5.000000 X( 2, 3) 0.000000 9.000000 X( 2, 4) 1.000000 0.000000 X( 3, 1) 0.000000 11.00000 X( 3, 2) 0.000000 0.000000 X( 3, 3) 1.000000 0.000000 X( 3, 4) 0.000000 1.000000 X( 4, 1) 1.000000 0.000000 X( 4, 2) 0.000000 2.000000 X( 4, 3) 0.000000 7.000000 X( 4, 4) 0.000000 0.000000
从上述求解报告可知,最优指派方案应为:甲→B,乙→A,丙→C,丁→D,最少总时间为19+18+15+19=71;
(2) 要使总效益最大,即求最大化问题,此时LINGO模型的代码变为:
model:
!4个工人,4个工作的指派问题; sets:
person/1..4/; job/1..4/;
assign(person,job):c,x; endsets
!目标函数;
max=@sum(assign:c*x); !需求约束;
@for(person(i):
@sum(job(j):x(i,j))=1); @for(job(j):
@sum(person(i):x(i,j))=1); !这里是数据; data:
c=20 19 20 28 18 24 27 20 26 16 15 18 17 20 24 19; enddata end
同样单击求解按钮,得到规划求解报告如下:(只截取了能用到的一部分)
X( 1, 1) 0.000000 8.000000 X( 1, 2) 0.000000 6.000000
X( 1, 3) 0.000000 8.000000 X( 1, 4) 1.000000 0.000000 X( 2, 1) 0.000000 9.000000 X( 2, 2) 1.000000 0.000000 X( 2, 3) 0.000000 0.000000 X( 2, 4) 0.000000 7.000000 X( 3, 1) 1.000000 0.000000 X( 3, 2) 0.000000 7.000000 X( 3, 3) 0.000000 11.00000 X( 3, 4) 0.000000 8.000000 X( 4, 1) 0.000000 7.000000 X( 4, 2) 0.000000 1.000000 X( 4, 3) 1.000000 0.000000 X( 4, 4) 0.000000 5.000000
从上述求解报告可知,最优指派方案应为:甲→D,乙→B,丙→A,丁→C,最大总效益为28+24+26+24=102;
(3) 如果表中增加一个人,那么指派问题变为5个工人4个工作的指派问题,可以增
加一列虚拟工作使得模型可解,此时LINGO模型的代码变为:
model:
!5个工人,4个工作的指派问题; sets:
person/1..5/; job/1..5/;
assign(person,job):c,x; endsets
!目标函数;
min=@sum(assign:c*x); !需求约束;
@for(person(i):
@sum(job(j):x(i,j))=1); @for(job(j):
@sum(person(i):x(i,j))=1); !这里是数据; data:
c=20 19 20 28 28 18 24 27 20 28 26 16 15 18 28 17 20 24 19 28 16 17 20 21 28; enddata
end
单击求解按钮后,得到规划求解报告如下:(只截取了能用到的一部分)
X( 1, 1) 0.000000 2.000000
X( 1, 2) 0.000000 0.000000 X( 1, 3) 0.000000 2.000000 X( 1, 4) 0.000000 8.000000 X( 1, 5) 1.000000 0.000000 X( 2, 1) 0.000000 0.000000 X( 2, 2) 0.000000 5.000000 X( 2, 3) 0.000000 9.000000 X( 2, 4) 1.000000 0.000000 X( 2, 5) 0.000000 0.000000 X( 3, 1) 0.000000 11.00000 X( 3, 2) 0.000000 0.000000 X( 3, 3) 1.000000 0.000000 X( 3, 4) 0.000000 1.000000 X( 3, 5) 0.000000 3.000000 X( 4, 1) 1.000000 0.000000 X( 4, 2) 0.000000 2.000000 X( 4, 3) 0.000000 7.000000 X( 4, 4) 0.000000 0.000000 X( 4, 5) 0.000000 1.000000 X( 5, 1) 0.000000 0.000000 X( 5, 2) 1.000000 0.000000 X( 5, 3) 0.000000 4.000000 X( 5, 4) 0.000000 3.000000 X( 5, 5) 0.000000 2.000000
由上述报告可知,最优指派方案为:甲不分配,乙→D,丙→C,丁→A,戊→B,此时最少总时间为20+15+17+17=69。