实验一_线性规划求解、运输问题、整数规划求解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
1、掌握线性规划求解的基本方法,熟悉灵敏度分析的步骤和内容;
2、掌握运输问题的模型,概念,求解方法;
3、掌握整数规划的算法。
4、熟悉lingo软件基本功能,并能熟练操作,正确完成模型求解过程及分析过程。
二、实验内容或设计思想
1、lingo软件和运筹学实验软件的安装及菜单熟悉了解。
2、lingo软件和运筹学实验软件应用:任选几种不同类型的LP输入计算程序,运行求解;完成产销平衡的运输问题求解;求解任一整数规划。
三、实验环境与工具
计算机,lingo软件,运筹学软件
四、实验过程或实验数据
1、用lingo软件求解线性规划
【例题1】某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。
生产数据如下表所示:
解:(1)用DESKS、TABLES和CHAIRS分别表示三种产品的生产量,建立LP模型。
max=60*desks+30*tables+20*chairs;
8*desks+6*tables+chairs<=48;
4*desks+2*tables+1.5*chairs<=20;
2*desks+1.5*tables+.5*chairs<=8;
tables<=5;
(2)求解这个模型,得如下结果:
Global optimal solution found.
Objective value: 280.0000
Infeasibilities: 0.000000
Total solver iterations: 2
Variable Value Reduced Cost
DESKS 2.000000 0.000000
TABLES 0.000000 5.000000
CHAIRS 8.000000 0.000000
Row Slack or Surplus Dual Price
1 280.0000 1.000000
2 24.00000 0.000000
3 0.000000 10.00000
4 0.000000 10.00000
5 5.000000 0.000000
(3)结论:
2、用LINGO软件求解运输问题
【例题1】6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
解:(
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=60 55 51 43 41 52;
demand=35 37 22 32 41 32 43 38;
cost=6 2 6 7 4 2 9 5
4 9
5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
enddata
end
(2)求解模型得如下结果:
Global optimal solution found at iteration: 20
Objective value: 664.0000
Variable Value Reduced Cost CAPACITY( WH1) 60.00000 0.000000 CAPACITY( WH2) 55.00000 0.000000 CAPACITY( WH3) 51.00000 0.000000 CAPACITY( WH4) 43.00000 0.000000 CAPACITY( WH5) 41.00000 0.000000 CAPACITY( WH6) 52.00000 0.000000 DEMAND( V1) 35.00000 0.000000 DEMAND( V2) 37.00000 0.000000
DEMAND( V5) 41.00000 0.000000 DEMAND( V6) 32.00000 0.000000 DEMAND( V7) 43.00000 0.000000 DEMAND( V8) 38.00000 0.000000 COST( WH1, V1) 6.000000 0.000000 COST( WH1, V2) 2.000000 0.000000 COST( WH1, V3) 6.000000 0.000000 COST( WH1, V4) 7.000000 0.000000 COST( WH1, V5) 4.000000 0.000000 COST( WH1, V6) 2.000000 0.000000 COST( WH1, V7) 9.000000 0.000000 COST( WH1, V8) 5.000000 0.000000 COST( WH2, V1) 4.000000 0.000000 COST( WH2, V2) 9.000000 0.000000 COST( WH2, V3) 5.000000 0.000000 COST( WH2, V4) 3.000000 0.000000 COST( WH2, V5) 8.000000 0.000000 COST( WH2, V6) 5.000000 0.000000 COST( WH2, V7) 8.000000 0.000000 COST( WH2, V8) 2.000000 0.000000 COST( WH3, V1) 5.000000 0.000000 COST( WH3, V2) 2.000000 0.000000 COST( WH3, V3) 1.000000 0.000000 COST( WH3, V4) 9.000000 0.000000 COST( WH3, V5) 7.000000 0.000000 COST( WH3, V6) 4.000000 0.000000 COST( WH3, V7) 3.000000 0.000000 COST( WH3, V8) 3.000000 0.000000 COST( WH4, V1) 7.000000 0.000000 COST( WH4, V2) 6.000000 0.000000 COST( WH4, V3) 7.000000 0.000000 COST( WH4, V4) 3.000000 0.000000 COST( WH4, V5) 9.000000 0.000000 COST( WH4, V6) 2.000000 0.000000 COST( WH4, V7) 7.000000 0.000000 COST( WH4, V8) 1.000000 0.000000 COST( WH5, V1) 2.000000 0.000000 COST( WH5, V2) 3.000000 0.000000 COST( WH5, V3) 9.000000 0.000000 COST( WH5, V4) 5.000000 0.000000 COST( WH5, V5) 7.000000 0.000000 COST( WH5, V6) 2.000000 0.000000 COST( WH5, V7) 6.000000 0.000000 COST( WH5, V8) 5.000000 0.000000 COST( WH6, V1) 5.000000 0.000000 COST( WH6, V2) 5.000000 0.000000 COST( WH6, V3) 2.000000 0.000000 COST( WH6, V4) 2.000000 0.000000 COST( WH6, V5) 8.000000 0.000000 COST( WH6, V6) 1.000000 0.000000 COST( WH6, V7) 4.000000 0.000000 COST( WH6, V8) 3.000000 0.000000 VOLUME( WH1, V1) 0.000000 5.000000 VOLUME( WH1, V2) 19.00000 0.000000 VOLUME( WH1, V3) 0.000000 5.000000 VOLUME( WH1, V4) 0.000000 7.000000 VOLUME( WH1, V5) 41.00000 0.000000 VOLUME( WH1, V6) 0.000000 2.000000 VOLUME( WH1, V7) 0.000000 6.000000
VOLUME( WH2, V2) 0.000000 4.000000 VOLUME( WH2, V3) 0.000000 1.000000 VOLUME( WH2, V4) 32.00000 0.000000 VOLUME( WH2, V5) 0.000000 1.000000 VOLUME( WH2, V6) 0.000000 2.000000 VOLUME( WH2, V7) 0.000000 2.000000 VOLUME( WH2, V8) 0.000000 0.000000 VOLUME( WH3, V1) 0.000000 4.000000 VOLUME( WH3, V2) 11.00000 0.000000 VOLUME( WH3, V3) 0.000000 0.000000 VOLUME( WH3, V4) 0.000000 9.000000 VOLUME( WH3, V5) 0.000000 3.000000 VOLUME( WH3, V6) 0.000000 4.000000 VOLUME( WH3, V7) 40.00000 0.000000 VOLUME( WH3, V8) 0.000000 4.000000 VOLUME( WH4, V1) 0.000000 4.000000 VOLUME( WH4, V2) 0.000000 2.000000 VOLUME( WH4, V3) 0.000000 4.000000 VOLUME( WH4, V4) 0.000000 1.000000 VOLUME( WH4, V5) 0.000000 3.000000 VOLUME( WH4, V6) 5.000000 0.000000 VOLUME( WH4, V7) 0.000000 2.000000 VOLUME( WH4, V8) 38.00000 0.000000 VOLUME( WH5, V1) 34.00000 0.000000 VOLUME( WH5, V2) 7.000000 0.000000 VOLUME( WH5, V3) 0.000000 7.000000 VOLUME( WH5, V4) 0.000000 4.000000 VOLUME( WH5, V5) 0.000000 2.000000 VOLUME( WH5, V6) 0.000000 1.000000 VOLUME( WH5, V7) 0.000000 2.000000 VOLUME( WH5, V8) 0.000000 5.000000 VOLUME( WH6, V1) 0.000000 3.000000 VOLUME( WH6, V2) 0.000000 2.000000 VOLUME( WH6, V3) 22.00000 0.000000 VOLUME( WH6, V4) 0.000000 1.000000 VOLUME( WH6, V5) 0.000000 3.000000 VOLUME( WH6, V6) 27.00000 0.000000 VOLUME( WH6, V7) 3.000000 0.000000 VOLUME( WH6, V8) 0.000000 3.000000 Row Slack or Surplus Dual Price
1 664.0000 -1.000000
2 0.000000 -4.000000
3 0.000000 -5.000000
4 0.000000 -4.000000
5 0.000000 -3.000000
6 0.000000 -7.000000
7 0.000000 -3.000000
8 0.000000 -6.000000
9 0.000000 -2.000000
10 0.000000 3.000000
11 22.00000 0.000000
12 0.000000 3.000000
13 0.000000 1.000000
14 0.000000 2.000000
15 0.000000 2.000000
(3)结论:
【例2】使用LINGO
解:(1)使用LINGO
model:
!3发点4收点运输问题;
sets:
warehouses/wh1..wh3/: capacity;
vendors/v1..v4/: 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=60 55 51 ;
demand=35 37 22 72 ;
cost=6 2 6 7
4 9
5 3
5 2 1 9;
enddata
end
(2)求解结果如下:
Global optimal solution found at iteration: 5
Objective value: 561.0000
Variable Value Reduced Cost CAPACITY( WH1) 60.00000 0.000000 CAPACITY( WH2) 55.00000 0.000000 CAPACITY( WH3) 51.00000 0.000000 DEMAND( V1) 35.00000 0.000000 DEMAND( V2) 37.00000 0.000000 DEMAND( V3) 22.00000 0.000000 DEMAND( V4) 72.00000 0.000000 COST( WH1, V1) 6.000000 0.000000 COST( WH1, V2) 2.000000 0.000000 COST( WH1, V3) 6.000000 0.000000 COST( WH1, V4) 7.000000 0.000000 COST( WH2, V1) 4.000000 0.000000 COST( WH2, V2) 9.000000 0.000000 COST( WH2, V3) 5.000000 0.000000 COST( WH2, V4) 3.000000 0.000000 COST( WH3, V1) 5.000000 0.000000 COST( WH3, V2) 2.000000 0.000000
VOLUME( WH1, V1) 6.000000 0.000000 VOLUME( WH1, V2) 37.00000 0.000000 VOLUME( WH1, V3) 0.000000 4.000000 VOLUME( WH1, V4) 17.00000 0.000000 VOLUME( WH2, V1) 0.000000 2.000000 VOLUME( WH2, V2) 0.000000 11.00000 VOLUME( WH2, V3) 0.000000 7.000000 VOLUME( WH2, V4) 55.00000 0.000000 VOLUME( WH3, V1) 29.00000 0.000000 VOLUME( WH3, V2) 0.000000 1.000000 VOLUME( WH3, V3) 22.00000 0.000000 VOLUME( WH3, V4) 0.000000 3.000000 Row Slack or Surplus Dual Price
1 561.0000 -1.000000
2 0.000000 -6.000000
3 0.000000 -2.000000
4 0.000000 -2.000000
5 0.000000 -7.000000
6 0.000000 0.000000
7 0.000000 4.000000
8 0.000000 1.000000 (3)结论:
3、用LINGO软件求解整数规划问题
【例题1】分配问题
解:(1)编制lingo程序:
model:
!4个工人,4个工作的分配问题;
sets:
workers/w1..w4/;
jobs/j1..j4/;
links(workers,jobs): cost,volume;
endsets
!目标函数;
min=@sum(links: cost*volume);
!每个工人只能有一份工作;
@for(workers(I):
@sum(jobs(J): volume(I,J))=1;
);
!每份工作只能有一个工人;
@for(jobs(J):
@sum(workers(I): volume(I,J))=1;
);
data:
cost= 6 2 6 7
4 9
5 3
5 2 1 9
7 6 7 3 ;
enddata
end
(2)求解结果:
Global optimal solution found at iteration: 0
Objective value: 10.00000
Variable Value Reduced Cost COST( W1, J1) 6.000000 0.000000 COST( W1, J2) 2.000000 0.000000
COST( W2, J1) 4.000000 0.000000 COST( W2, J2) 9.000000 0.000000 COST( W2, J3) 5.000000 0.000000 COST( W2, J4) 3.000000 0.000000 COST( W3, J1) 5.000000 0.000000 COST( W3, J2) 2.000000 0.000000 COST( W3, J3) 1.000000 0.000000 COST( W3, J4) 9.000000 0.000000 COST( W4, J1) 7.000000 0.000000 COST( W4, J2) 6.000000 0.000000 COST( W4, J3) 7.000000 0.000000 COST( W4, J4) 3.000000 0.000000 VOLUME( W1, J1) 0.000000 1.000000 VOLUME( W1, J2) 1.000000 0.000000 VOLUME( W1, J3) 0.000000 0.000000 VOLUME( W1, J4) 0.000000 3.000000 VOLUME( W2, J1) 1.000000 0.000000 VOLUME( W2, J2) 0.000000 8.000000 VOLUME( W2, J3) 0.000000 0.000000 VOLUME( W2, J4) 0.000000 0.000000 VOLUME( W3, J1) 0.000000 5.000000 VOLUME( W3, J2) 0.000000 5.000000 VOLUME( W3, J3) 1.000000 0.000000 VOLUME( W3, J4) 0.000000 10.00000 VOLUME( W4, J1) 0.000000 3.000000 VOLUME( W4, J2) 0.000000 5.000000 VOLUME( W4, J3) 0.000000 2.000000 VOLUME( W4, J4) 1.000000 0.000000 Row Slack or Surplus Dual Price
1 10.00000 -1.000000
2 0.000000 -1.000000
3 0.000000 0.000000
4 0.000000 4.000000
5 0.000000 0.000000
6 0.000000 -4.000000
7 0.000000 -1.000000
8 0.000000 -5.000000
9 0.000000 -3.000000 (3)结论:
【例2】解整数规划。
解:(1)在lingo窗口输入以下代码,
min=3*x1+x2+3*x3+3*x4+x5+x6+3*x7;
4*x1+3*x2+2*x3+x4+x5>=50;
x2+2*x4+x5+3*x6>=20;
x3+x5+2*x7>=15;
@gin(x1);@gin(x2);@gin(x3);
@gin(x4);@gin(x3);@gin(x6);@gin(x7);
END
(2)求解结果:
Global optimal solution found.
Objective value: 27.00000
Extended solver steps: 0
Total solver iterations: 5
Variable Value Reduced Cost X1 0.000000 3.000000
X4 0.000000 3.000000 X5 15.00000 0.000000 X6 0.000000 1.000000 X7 0.000000 1.000000 Row Slack or Surplus Dual Price
1 27.00000 -1.000000
2 1.000000 0.000000
3 7.000000 0.000000
4 0.000000 -1.000000 (3)结论:
五、总结
对上机实践结果进行分析,问题回答,上机的心得体会及改进意见。