LINGO软件及其应用.docx
《LINGO软件及其应用.docx》由会员分享,可在线阅读,更多相关《LINGO软件及其应用.docx(13页珍藏版)》请在冰点文库上搜索。
LINGO软件及其应用
LINGO软件及其应用
LINGO软件及其应用
一、求解线性规划
例题1:
目标函数:
maxz=2x1+3x2
约束条件:
x1+2x2<=8
4x1<=17
4x2<=13
x1,x2>=0
输入语句:
model:
max=2*x1+3*x2;
x1+2*x2<8;
4*x1<17;
4*x2<13;
end
说明:
1)问题模型由MODEL:
命令开始,END结束,对简单模型可以省略。
2)目标函数必须由“min=”或“max=”开头。
3)分号是LINGO的分隔符。
LINGO中的每一行都以分号结束,如果缺少,模型将无法求解。
若一个命令或语句一行写不下,可以分多行写,但是,最后结束命令时,一定别忘了打个分号“;”,一行内也可写多个命令,只要每个用分号分开即可。
4)语句中乘号(*)不能省略,支持()的输入。
5)LINGO中<与<=均代表<=,>与>=也均代表>=。
6)LINGO中的注解必须用感叹号“!
”开始,用分号结束。
在感叹号和分号之间的所有内容都将被LINGO忽略。
注释可以占据多行,也可以插入LINGO表达式之中。
7)LINGO的命令从来不区分大小写,当你在LINGO中定义变量时,每个变量都要以26个字母开始,后面可跟数字或者下划线,最多可以是32个字符。
8)软件默认决策变量是非负的。
如果需要一个变量取负数、整数或一定范
间用12小时加工成3公斤A1,或者在乙车间用8小时加工成4公斤A2。
根据市场需求,生产的A1,A2全部能售出,且每公斤A1获利24元,每公斤A2获利16元。
现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤A1,乙车间的加工能力没有限制。
试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:
1)若用35元可以买到1桶牛奶,应否作这项投资?
若投资,每天最多购买多少桶牛奶?
2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?
3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?
模型代码如下:
max=72*x1+64*x2;
x1+x2<=50;
12*x1+8*x2<=480;
3*x1<=100;
求解这个模型并做灵敏性分析,结果如下。
Globaloptimalsolutionfoundatiteration:
0
Objectivevalue:
3360.000
VariableValueReducedCost
X120.000000.000000
X230.000000.000000
RowSlackorSurplusDualPrice
13360.0001.000000
20.00000048.00000
30.0000002.000000
440.000000.000000
Rangesinwhichthebasisisunchanged:
ObjectiveCoefficientRanges
CurrentAllowableAllowable
VariableCoefficientIncreaseDecrease
X172.0000024.000008.000000
X264.000008.00000016.00000
RighthandSideRanges
RowCurrentAllowableAllowable
RHSIncreaseDecrease
250.0000010.000006.666667
3480.000053.3333380.00000
4100.0000INFINITY40.00000
结果告诉我们:
这个线性规划的最优解为x1=20,x2=30,最优值为z=3360,即用20桶牛奶生产A1,30桶牛奶生产A2,可获最大利润3360元。
输出中除了告诉我们问题的最优解和最优值以外,还有许多对分析结果有用的信息,下面结合题目中提出的3个附加问题给予说明。
3个约束条件的右端不妨看作3种“资源”:
原料、劳动时间、车间甲的加工能力。
输出中SlackorSurplus给出这3种资源在最优解下是否有剩余:
原料、劳动时间的剩余均为零,车间甲尚余40(公斤)加工能力。
目标函数可以看作“效益”,成为紧约束的“资源”一旦增加,“效益”必然跟着增长。
输出中DUALPRICES给出这3种资源在最优解下“资源”增加1个单位时“效益”的增量:
原料增加1个单位(1桶牛奶)时利润增长48(元),劳动时间增加1个单位(1小时)时利润增长2(元),而增加非紧约束车间甲的能力显然不会使利润增长。
这里,“效益”的增量可以看作“资源”的潜在价值,经济学上称为影子价格,即1桶牛奶的影子价格为48元,1小时劳动的影子价格为2元,车间甲的影子价格为零。
读者可以用直接求解的办法验证上面的结论,即将输入文件中原料约束milk)右端的50改为51,看看得到的最优值(利润)是否恰好增长48(元)。
用影子价格的概念很容易回答附加问题1):
用35元可以买到1桶牛奶,低于1桶牛奶的影子价格48,当然应该作这项投资。
回答附加问题2):
聘用临时工人以增加劳动时间,付给的工资低于劳动时间的影子价格才可以增加利润,所以工资最多是每小时2元。
目标函数的系数发生变化时(假定约束条件不变),最优解和最优值会改变吗?
这个问题不能简单地回答。
上面输出给出了最优基不变条件下目标函数系数的允许变化范围:
x1的系数为(72-8,72+24)=(64,96);x2的系数为(64-16,64+8)=(48,72)。
注意:
x1系数的允许范围需要x2系数64不变,反之亦然。
由于目标函数的费用系数变化并不影响约束条件,因此此时最优基不变可以保证最优解也不变,但最优值变化。
用这个结果很容易回答附加问题3):
若每公斤A1的获利增加到30元,则x1系数变为30×3=90,在允许范围内,所以不应改变生产计划,但最优值变为90×20+64×30=3720。
下面对“资源”的影子价格作进一步的分析。
影子价格的作用(即在最优解下“资源”增加1个单位时“效益”的增量)是有限制的。
每增加1桶牛奶利润增长48元(影子价格),但是,上9
面输出的CURRENTRHS的ALLOWABLEINCREASE和ALLOWABLEDECREASE给出了影子价格有意义条件下约束右端的限制范围:
milk)原料最多增加10(桶牛奶),time)劳动时间最多增加53(小时)。
现在可以回答附加问题1)的第2问:
虽然应该批准用35元买1桶牛奶的投资,但每天最多购买10桶牛奶。
顺便地说,可以用低于每小时2元的工资聘用临时工人以增加劳动时间,但最多增加53.3333小时。
需要注意的是:
灵敏性分析给出的只是最优基保持不变的充分条件,而不一定是必要条件。
比如对于上面的问题,“原料最多增加10(桶牛奶)”的含义只能是“原料增加10(桶牛奶)”时最优基保持不变,所以影子价格有意义,即利润的增加大于牛奶的投资。
反过来,原料增加超过10(桶牛奶),影子价格是否一定没有意义?
最优基是否一定改变?
一般来说,这是不能从灵敏性分析报告中直接得到的。
此时,应该重新用新数据求解规划模型,才能做出判断。
所以,从正常理解的角度来看,我们上面回答“原料最多增加10(桶牛奶)”并不是完全科学的。
例3使用LINGO软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
单
位销地
运
价
产地
B1
B2
B3
B4
B5
B6
B7
B8
产量
A1
6
2
6
7
4
2
5
9
60
A2
4
9
5
3
8
5
8
2
55
A3
5
2
1
9
7
4
3
3
51
A4
7
6
7
3
9
2
7
1
43
A5
2
3
9
5
7
2
6
5
41
A6
5
5
2
2
8
1
4
3
52
销量
35
37
22
32
41
32
43
38
使用LINGO软件,编制程序如下:
model:
!
6发点8收点运输问题;
sets:
warehouses/wh1..wh6/:
capacity;
vendors/v1..v8/:
demand;
links(warehouses,vendors):
cost,volume;
endsets
!
目标函数;
min=@sum(links:
cost*volume);
!
需求约束;
@for(vendors(J):
@sum(warehouses(I):
volume(I,J))=demand(J));
!
产量约束;
@for(warehouses(I):
@sum(vendors(J):
volume(I,J))<=capacity(I));
!
这里是数据;
data:
capacity=605551434152;
demand=3537223241324338;
cost=62674295
49538582
52197433
76739271
23957265
55228143;
enddata
end
Globaloptimalsolutionfound.
Objectivevalue:
664.0000
Totalsolveriterations:
15
VariableValueReducedCost
CAPACITY(WH1)60.000000.000000
CAPACITY(WH2)55.000000.000000
CAPACITY(WH3)51.000000.000000
CAPACITY(WH4)43.000000.000000
CAPACITY(WH5)41.000000.000000
CAPACITY(WH6)52.000000.000000
DEMAND(V1)35.000000.000000
DEMAND(V2)37.000000.000000
DEMAND(V3)22.000000.000000
DEMAND(V4)32.000000.000000
DEMAND(V5)41.000000.000000
DEMAND(V6)32.000000.000000
DEMAND(V7)43.000000.000000
DEMAND(V8)38.000000.000000
COST(WH1,V1)6.0000000.000000
COST(WH1,V2)2.0000000.000000
COST(WH1,V3)6.0000000.000000
COST(WH1,V4)7.0000000.000000
COST(WH1,V5)4.0000000.000000
COST(WH1,V6)2.0000000.000000
COST(WH1,V7)9.0000000.000000
COST(WH1,V8)5.0000000.000000
COST(WH2,V1)4.0000000.000000
COST(WH2,V2)9.0000000.000000
COST(WH2,V3)5.0000000.000000
COST(WH2,V4)3.0000000.000000
COST(WH2,V5)8.0000000.000000
COST(WH2,V6)5.0000000.000000
COST(WH2,V7)8.0000000.000000
COST(WH2,V8)2.0000000.000000
COST(WH3,V1)5.0000000.000000
COST(WH3,V2)2.0000000.000000
COST(WH3,V3)1.0000000.000000
COST(WH3,V4)9.0000000.000000
COST(WH3,V5)7.0000000.000000
COST(WH3,V6)4.0000000.000000
COST(WH3,V7)3.0000000.000000
COST(WH3,V8)3.0000000.000000
COST(WH4,V1)7.0000000.000000
COST(WH4,V2)6.0000000.000000
COST(WH4,V3)7.0000000.000000
COST(WH4,V4)3.0000000.000000
COST(WH4,V5)9.0000000.000000
COST(WH4,V6)2.0000000.000000
COST(WH4,V7)7.0000000.000000
COST(WH4,V8)1.0000000.000000
COST(WH5,V1)2.0000000.000000
COST(WH5,V2)3.0000000.000000
COST(WH5,V3)9.0000000.000000
COST(WH5,V4)5.0000000.000000
COST(WH5,V5)7.0000000.000000
COST(WH5,V6)2.0000000.000000
COST(WH5,V7)6.0000000.000000
COST(WH5,V8)5.0000000.000000
COST(WH6,V1)5.0000000.000000
COST(WH6,V2)5.0000000.000000
COST(WH6,V3)2.0000000.000000
COST(WH6,V4)2.0000000.000000
COST(WH6,V5)8.0000000.000000
COST(WH6,V6)1.0000000.000000
COST(WH6,V7)4.0000000.000000
COST(WH6,V8)3.0000000.000000
VOLUME(WH1,V1)0.0000005.000000
VOLUME(WH1,V2)19.000000.000000
VOLUME(WH1,V3)0.0000005.000000
VOLUME(WH1,V4)0.0000007.000000
VOLUME(WH1,V5)41.000000.000000
VOLUME(WH1,V6)0.0000002.000000
VOLUME(WH1,V7)0.0000006.000000
VOLUME(WH1,V8)0.0000006.000000
VOLUME(WH2,V1)1.0000000.000000
VOLUME(WH2,V2)0.0000004.000000
VOLUME(WH2,V3)0.0000001.000000
VOLUME(WH2,V4)32.000000.000000
VOLUME(WH2,V5)0.0000001.000000
VOLUME(WH2,V6)0.0000002.000000
VOLUME(WH2,V7)0.0000002.000000
VOLUME(WH2,V8)0.0000000.000000
VOLUME(WH3,V1)0.0000004.000000
VOLUME(WH3,V2)11.000000.000000
VOLUME(WH3,V3)0.0000000.000000
VOLUME(WH3,V4)0.0000009.000000
VOLUME(WH3,V5)0.0000003.000000
VOLUME(WH3,V6)0.0000004.000000
VOLUME(WH3,V7)40.000000.000000
VOLUME(WH3,V8)0.0000004.000000
VOLUME(WH4,V1)0.0000004.000000
VOLUME(WH4,V2)0.0000002.000000
VOLUME(WH4,V3)0.0000004.000000
VOLUME(WH4,V4)0.0000001.000000
VOLUME(WH4,V5)0.0000003.000000
VOLUME(WH4,V6)5.0000000.000000
VOLUME(WH4,V7)0.0000002.000000
VOLUME(WH4,V8)38.000000.000000
VOLUME(WH5,V1)34.000000.000000
VOLUME(WH5,V2)7.0000000.000000
VOLUME(WH5,V3)0.0000007.000000
VOLUME(WH5,V4)0.0000004.000000
VOLUME(WH5,V5)0.0000002.000000
VOLUME(WH5,V6)0.0000001.000000
VOLUME(WH5,V7)0.0000002.000000
VOLUME(WH5,V8)0.0000005.000000
VOLUME(WH6,V1)0.0000003.000000
VOLUME(WH6,V2)0.0000002.000000
VOLUME(WH6,V3)22.000000.000000
VOLUME(WH6,V4)0.0000001.000000
VOLUME(WH6,V5)0.0000003.000000
VOLUME(WH6,V6)27.000000.000000
VOLUME(WH6,V7)3.0000000.000000
VOLUME(WH6,V8)0.0000003.000000
RowSlackorSurplusDualPrice
1664.0000-1.000000
20.000000-4.000000
30.000000-5.000000
40.000000-4.000000
50.000000-3.000000
60.000000-7.000000
70.000000-3.000000
80.000000-6.000000
90.000000-2.000000
100.0000003.000000
1122.000000.000000
120.0000003.000000
130.0000001.000000
140.0000002.000000
150.0000002.000000
二、求解非线性规划
举例1
目标函数:
minf(x)=(x1-1)^2+(x2-2)^2
约束条件:
x2-x1=1
x1+x2<=2
x1>=0,x2>=0
输入语句:
model:
min=(x1-1)^2+(x2-2)^2;
x2-x1=1;
x1+x2<=2;
end
输出结果:
Localoptimalsolutionfound.
Objectivevalue:
0.5000000
Extendedsolversteps:
5
Totalsolveriterations:
20
VariableValueReducedCost
X10.50000000.000000
X21.5000000.000000
RowSlackorSurplusDualPrice
10.5000000-1.000000
20.0000000.000000
30.0000001.000000
即可得到最优值0.5。
最优决策变量取值X1=0.5,X2=1.5,及灵敏度分析。
举例2规划问题
目标函数:
minz=2(0.05(x1*x2+x1*x3)+0.01x2*x3)
约束条件:
2(x1*x3+x2*x3+x1*x2)>=888
x1*x2*x3>=1512
x3/x2<=0.718
x3/x2>=0.518
x1*x2<=252
1.5输入语句:
model:
min=2*(0.05*(x1*x2+x1*x3)+0.01*x2*x3);
@bnd(1.5,x1,10.5);@free(x2);@gin(x3);
2(x1*x3+x2*x3+x1*x2)>=888;
x1*x2*x3>=1512;
x3/x2<=0.718;
x3/x2>=0.518;
x1*x2<=252;
end
输出结果:
Localoptimalsolutionfound.
Objectivevalue:
23.33023
Extendedsolversteps:
3
Totalsolveriterations:
73
VariableValueReducedCost
X13.7564580.000000
X223.676870.000000
X317.000000.4824598E-01
RowSlackorSurplusDualPrice
123.33023-1.000000
2222.61560.000000
30.000000-0.1010588E-01
4-0.2493336E-062.317774
50.20000020.000000
6163.05880.000000
最优目标值为23.33023,具体分析略。