b=360 2000 300; A=20 30 30 25 30 35; enddata
执行后得到结果:
Global optimal solution found at iteration: 1 Objective value: 128.5714
Variable Value Reduced Cost LIRUN( 1) 11.00000 0.000000 LIRUN( 2) 15.00000 0.000000 X( 1) 0.000000 1.857143 X( 2) 8.571429 0.000000 B( 1) 360.0000 0.000000 B( 2) 2000.000 0.000000 B( 3) 300.0000 0.000000 A( 1, 1) 20.00000 0.000000 A( 1, 2) 30.00000 0.000000 A( 2, 1) 30.00000 0.000000 A( 2, 2) 25.00000 0.000000 A( 3, 1) 30.00000 0.000000 A( 3, 2) 35.00000 0.000000
Row Slack or Surplus Dual Price 1 128.5714 1.000000 SUPPLY( 1) 102.8571 0.000000 SUPPLY( 2) 1785.714 0.000000 SUPPLY( 3) 0.000000 0.4285714
可见,Lingo软件包不光求出了最优解,而且还给出了剩余变量(slack)的值,以及对偶问题(Dual)的解。尤其是,当系数矩阵A很大时,用Lingo软件包编写简单的程序,就可调用外部A的数据,十分方便。
例10-11 长500Cm的条材,截长分别为98Cm、78Cm的毛坯,要98Cm的1万根,78Cm的2万根。怎样截,材料最省?
解:截法 C1:截98Cm的0根、78Cm的6根、废料32Cm;
C2:98Cm的 1根、78Cm的5根、废料12Cm; C3:98Cm 的2根、78Cm的3根、废料70Cm; C4:98Cm 的3根、78Cm的2根、废料50Cm; C5:98Cm 的4根、78Cm的1根、废料30Cm; C6:98Cm的5根、78Cm的0根、废料10Cm;
假设xj根条材按Cj法截,则,数学模型为:
13
minf?x1?x2?x3?x4?x5?x6?0*x1?x2?2x3?3x4?4x5?5x6?10000, ?S.T.?6x1?5x2?3x3?2x4?x5?0*x6?20000,?x?0,Integers?j此模型中有一个2维向量b?(10000,20000),一个6维向量x,以及一个2×6的系数矩阵A。首先将系数矩阵A的数据作为Excel数据存盘,目录为: C:\\Lingo8\\gangguan.xls
注意:数据范围是A1到F2。
然后,在Lingo软件包中,输入下列程序: model: sets:
set1/1..2/:b; set2/1..6/:x;
link(set1,set2):A; endsets
min=@sum(set2(i):x(i));
@for(set1(i):@sum(link(i,j):A(i,j)*x(j))>b(i)); @for(set2(i):@gin(x(i))); data:
b=10000 20000;
A=@ole('c:\\lingo8\\gangguan.xls','A1:F2'); enddata
其中@for(set2(i):@gin(x(i)));表示限定变量x(i)都是整数变量;
14
A=@ole('c:\\lingo8\\gangguan.xls','A1:F2');表示调用外部数据A,并且指明了数据的取值范围,从A1到F2。
执行后得到下列结果:
Global optimal solution found at iteration: 4 Objective value: 5200.000
Variable Value Reduced Cost B( 1) 10000.00 0.000000 B( 2) 20000.00 0.000000 X( 1) 0.000000 1.000000 X( 2) 4000.000 1.000000 X( 3) 0.000000 1.000000 X( 4) 0.000000 1.000000 X( 5) 0.000000 1.000000 X( 6) 1200.000 1.000000 A( 1, 1) 0.000000 0.000000 A( 1, 2) 1.000000 0.000000 A( 1, 3) 2.000000 0.000000 A( 1, 4) 3.000000 0.000000 A( 1, 5) 4.000000 0.000000 A( 1, 6) 5.000000 0.000000 A( 2, 1) 6.000000 0.000000 A( 2, 2) 5.000000 0.000000 A( 2, 3) 3.000000 0.000000 A( 2, 4) 2.000000 0.000000 A( 2, 5) 1.000000 0.000000 A( 2, 6) 0.000000 0.000000 Row Slack or Surplus Dual Price 1 5200.000 -1.000000 2 0.000000 0.000000 3 0.000000 0.000000 即,最优解为:fmin = 5200根,,x1 =0,x2=4000根,x3 =0, x4 =0, x5 = 0,x6=1200根。
例10-12 有两个农场A和B,上级规定它们每月分别向三个大学食堂送米65吨、110吨,这三个大学食堂每月需米分别为50吨、80吨、45吨。A农场离大学分别为15Km、10Km、11Km,B农场离大学分别为14Km、18Km、25Km。问如何调度两个农场的大米,使总运输量(吨公里)最小? 大学1:D1 大学2:D2 大学3:D3 农场生产量 农场A 15Km 10Km 11Km 65吨 农场B 14Km 18Km 25Km 110吨 大学需要量 50吨 80吨 45吨 合计:175吨
15
解:求最优调度方案
设A农场为D1、D2、D3分别送米x11、x12、x13吨;B农场为D1、D2、D3分别送米x21、x22、x23吨;得到模型如下:
minf?15x11?10x12?11x13?14x21?18x22?25x23?x11?x12?x13?65?x21?x22?x23?110??x11?x21?50?s.t.?x12?x22?80??x13?x23?45??xij?0?
在这个模型中,有一个2维向量a=(65,110),一个3维向量b=(50,80,45),有2
个2×3的矩阵:距离矩阵D和调度矩阵X。 在Lingo软件包中输入如下程序: model: sets:
set1/1..2/:a; set2/1..3/:b;
link(set1,set2):D,X; endsets
min=@sum(link(i,j):D(i,j)*x(i,j));
@for(set1(i):[supply_con]@sum(link(i,j):x(i,j))b(j)); data:
a=65 110; b=50 80 45; D=15 10 11 14 18 25; enddata
执行后得到结果为:
Global optimal solution found at iteration: 5 Objective value: 2475.000
Variable Value Reduced Cost A( 1) 65.00000 0.000000 A( 2) 110.0000 0.000000 B( 1) 50.00000 0.000000 B( 2) 80.00000 0.000000 B( 3) 45.00000 0.000000
16
相关推荐: