北京工业大学数学建模6图论组合优化实验11.docx
- 文档编号:10215472
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:40
- 大小:1.05MB
北京工业大学数学建模6图论组合优化实验11.docx
《北京工业大学数学建模6图论组合优化实验11.docx》由会员分享,可在线阅读,更多相关《北京工业大学数学建模6图论组合优化实验11.docx(40页珍藏版)》请在冰豆网上搜索。
北京工业大学数学建模6图论组合优化实验11
图论(组合优化)实验作业
一、基本实验
1.设备更新问题
某公司需要对一台已经使用了2年的机器确定今后4年(n=4)的最优更新策略。
公司要求,用了6年的机器必须更新,购买一台新机器的价格是100万元,表6.1给出了该问题的数据,请给出设备的更新策略。
表6.1每年设备运行收入、运行成本以及折旧现值(单位:
万元)
使用年数
收入
运行成本
折旧现值
0
20.0
0.2
—
1
19.0
0.6
80.0
2
18.5
1.2
60.0
3
17.2
1.5
50.0
4
15.5
1.7
30.0
5
14.0
1.8
10.0
6
12.2
2.2
5.0
解:
设rk,ck和sk表示某台k龄机器的年收入,运行费用和折旧现值(如图6.1),购买一台新机器的费用每年都是I,则每项决策所产生的价值是:
图6.1设备更新问题网络表示图:
编写Lingo程序,用图的方法求解设备更新问题,本质上就是求解图中从
起始点到终点的最长路,因此模型的数学表达式与最短路模型的表达式基本相同,
只需将求极小值改为求极大值,其他不变。
Lingo程序为:
sets:
nodes/A2,B3,B1,C4,C2,C1,D5,D3,D2,D1,E6,E4,E3,E2,E1,F5,F4,F3,F2,F1,G/;
arcs(nodes,nodes)/
A2,B3A2,B1
B3,C4B3,C1B1,C2B1,C1
C4,D5C4,D1C2,D3C2,D1C1,D2C1,D1
D5,E6D5,E1D3,E4D3,E1D2,E3D2,E1D1,E2D1,E1
E6,F1E4,F5E4,F1E3,F4E3,F1E2,F3E2,F1E1,F2E1,F1
F5,GF4,GF3,GF2,GF1,G
/:
c,x;
endsets
data:
c=17.3-20.2
15.7-30.218.4-0.2
13.8-50.217.3-20.218.4-0.2
12.2-70.215.7-30.217.3-20.218.4-0.2
-75.213.8-50.215.7-30.217.3-20.218.4-0.2
1030506080;
enddata
n=@size(nodes);
max=@sum(arcs:
c*x);
@sum(arcs(i,j)丨i#eq#1:
x(i,j)=1;
@for(nodes(i))丨i#ne#1#and#i#ne#n:
@sum(arcs(i,j):
x(i,j))-@sum(arcs(j,i):
x(j,i))=0
);
@sum(arcs(j,i)丨i#eq#n:
x(j,i))=1;
@for(arcs:
@bin(x));
运行结果见xueyunqiang-chapter6-1
从运行结果xueyunqiang-chapter6-1可知最优方案为:
A2→B3→C1→D2→E3→F1→G,即为(K,R,K,K,R),使用-更新-使用-使用-更新,使用2年的机器在第1决策年继续使用,第2决策年开始更新,第3决策年继续使用,第4决策年继续使用,第5决策年更新。
2.运输问题
有甲、乙和丙三个城市,每年分别需要煤炭320万吨、250万吨和350万吨,由A、B两个煤矿负责供应。
已知煤矿年产量A为400万吨,B为450万吨,从两煤矿至各城市煤炭运价如表6.2所示。
由于需求大于供应,经协商平衡,甲城市在必要时可少供应0-30万吨,乙城市需求量必须全部满足,丙城市需求量不少于270万吨。
试求甲、乙两煤炭全部分配出去,满足上述条件又使总运费最低的调运方案。
表6.2煤矿与各城市之间的煤炭运价表(单位:
万元/万吨)
甲
乙
丙
A
15
18
22
B
21
25
16
解:
设cij,i=1,2,j=1,2,3分别为煤矿A,B向甲乙丙运送煤炭的运价。
xij,i=1,2,j=1,2,3分别为煤矿A,B向甲乙丙三个城市运送的煤炭量。
所要解决的问题是总运费最低,即目标函数为:
由于要求A,B煤炭全部分配出去,bj为甲乙丙城市的最低需求量:
数学规划问题为:
按照数学规划模型,编写Lingo程序如下:
sets:
from/A,B/:
Capacity;
to/jia,yi,bing/:
Demand;
routes(from,to):
c,x;
endsets
[obj]min=@sum(routes:
c*x);
@for(from(i):
[SUP]
@sum(to(j):
x(i,j))=Capacity(i));
@for(to(j):
[DEM]
@sum(from(i):
x(i,j))>=Demand(j));
data:
Capacity=400,450;
Demand=290,250,270;
c=15,18,22,
21,25,16;
enddata
从xueyunqiang-chapter6-2运行结果可知,最优方案为:
A向甲运送150万吨,向乙运送250万吨,不向丙运送;
B向甲运送140万吨,向丙运送310万吨,不向乙运送;
此时的最优方案的总费用为14650万元。
其中甲得到的煤为290万吨,乙得到的煤为250万吨,丙得到煤310万吨,比最低限额多40万吨。
3.生产计划与库存管理
(1)某公司生产一种除臭剂,它在1至4季度的生产成本、生产量及订货量表6.3所示。
如果除臭剂在生产当季没有交货,保管在仓库里除臭剂每盒每季度还需1元钱的存储费用。
如果某个季度的货物供应量不足,则允许延期交货,延期交货的罚金是每盒每季度3元。
请公司希望制定一个成本最低(包括储存费用和罚金)的除臭剂的生产计划,问各季度应生产多少?
表6.3公司的生产成本、生产量及订货量
季度
生产成本(盒/元)
订货量(万盒)
生产量(万盒)
I
5
10
13
II
5
14
15
III
6
20
15
IV
6
8
13
(2)如果产品不允许延期交货,则公司考虑工人加班,已知加班生产出产品的成本要比原成本高出20%,且每季度加班最多生产2万盒。
问:
在这种情况下,将如何安排生产,使总成本最少?
解:
由于可以允许延期交货,故每个季度生产的除臭剂可以向任意季度供货,但是往前期供货的费用在生产成本的基础上再增加惩罚费用,调运方案如图:
设每个季度的生产量为ai,i=1,2,3,4.
订货量为bi,i=1,2,3,4.
成本为cij,i=1,2,3,4,j=1,2,3,4;同期供应的成本为生产成本,后期供应的成本为生产成本+存储成本,前期供应的成本为生产成本+罚金。
设xij为第i(1,2,3,4)阶段生产在第j(i,2,3,4)阶段交货的交货量。
则得到数学规划模型为:
s.t.
编写Lingo程序如下:
sets:
season/1..4/:
a,b;
routes(season,season):
c,x;
endsets
[obj]min=@sum(routes:
c*x);
@for(season(i):
[sup]
@sum(season(j):
x(i,j))<=a(i));
@for(season(j):
[dem]
@sum(season(i):
x(i,j))=b(j));
data:
a=13,15,15,13;
b=10,14,20,8;
c=5,6,7,8,
8,5,6,7,
12,9,6,7,
15,12,9,6;
enddata
只列出相关部分,分析结果见xueyunqiang-chapter6-3
(1):
从分析结果可知:
I季度生产13万盒,其中10万盒本季度使用,3万盒II季度使用;
II季度生产15万盒,其中11万盒本季度使用,4万盒III季度使用;
III季度生产15万盒,全部本季度使用;
IV季度生产9万盒,其中1万盒III季度使用,8万盒本季度使用;
最终的总成本为294万元。
(2)设每个季度的生产量为ai,i=1,2,3,4.
订货量为bi,i=1,2,3,4.
成本为cij,i=1,2,3,4,j=1,2,3,4;同期供应的成本为生产成本,后期供应的成本为生产成本+存储成本,不进行前期供应。
fij,i=1,2,3,4,j=1,2,3,4为加班生产的成本;同期供应为生产成本的120%,后期供应为120%生产成本+存储成本,不进行前期供应。
设xij为第i(1,2,3,4)阶段生产在第j(>=i)阶段交货的交货量。
设yij为第i(1,2,3,4)阶段加班生产在第j(>=i)阶段交货的交货量
则得到数学规划模型为:
s.t.
编写Lingo程序如下:
sets:
season/1..4/:
a,b;
Routes(season,season)|&1#le#&2:
c,x,s,y;
endsets
[obj]min=@sum(Routes:
c*x+s*y);
@for(season(i):
[SUP]
@sum(season(j)|i#le#j:
x(i,j))<=a(i));
@for(season(j):
[DEM]
@sum(season(i)|i#le#j:
x(i,j)+y(i,j))=b(j));
@for(season(i):
@sum(season(j)|i#le#j:
y(i,j))<=2);
data:
a=13,15,15,13;
b=10,14,20,8;
c=5,6,7,8,
5,6,7,
6,7,
6;
s=6,7,8,9,
6,7,8,
7.2,8.2,
7.2;
enddata
只列出相关的运行结果:
从分析结果xueyunqiang-chapter6-3
(2)可知,在允许加班的情况下,最优方案是:
一季度生产13万盒,其中10万盒一季度供应,3万盒二季度供应;
二季度生产15万盒,其中10万盒二季度供应,5万盒三季度供应;
三季度生产15万盒,都供应三季度;
四季度生产8万盒,都供应四季度;
二季度加班生产1万盒,供应二季度;
总费用为292万元。
4.指派问题
某公司需要把4项工作派给4名工人,每名工人完成每项工作的费用如表6.4所示,其中工人甲不能完成工作C,工人丙不能完成工作D.
(1)确定每名工人完成工作的最优方案;
(2)假设有另外一名工人(戊)能完成这4项工作,完成每项工作相应费用分别为60、45、30和80元。
是否用这名新工人(戊)替换原来的某位工人?
(3)假设公司有了第5项工作(E),4名工人(甲、乙、丙、丁)完成工作E的费用分别为20、10、20和80元。
这项新工作E比原有的四项工作(A,B,C,D)的某一项优先么?
表6.4每名工人完成每项工作的费用(单位:
元)
工人
工作
A
B
C
D
甲
50
50
-
20
乙
70
40
20
30
丙
90
30
50
-
丁
70
20
60
70
解:
(1)
设决策变量为xij,当第i个人做第j项工作时,决策变量xij=1,否则,决策变量为0.最优该题目的最优指派问题模型为:
编写相应的Lingo模型:
sets:
Flight/1..4/;
Assign(Flight,Flight):
c,x;
endsets
data:
c=50509920
70402030
90305099
70206070;
enddata
min=@sum(Assign:
c*x);
@for(Flight(i):
@sum(Flight(j):
x(i,j))=1;
@sum(Flight(j):
x(j,i))=1;
);
只列出相关的分析结果:
由分析结果可知,每名工人完成工作的最优方案为:
甲做工作D;
乙做工作C;
丙做工作B;
丁做工作A;
总费用为140元。
(2)设决策变量为xij,当第i个人做第j项工作时,决策变量xij=1,否则,决策变量为0.最优该题目的最优指派问题模型为:
要想判断是不是替换原工作人员,只许看看最优安排方案,如果最优方案含有戊,则替换原工作人员,如果最优方案没有戊,则不替换原工作人员。
编写相应的Lingo模型:
sets:
person/jia,yi,bing,ding,wu/;
work/A,B,C,D/;
assign(person,work):
c,x;
endsets
data:
c=50,50,99,20,
70,40,20,30,
90,30,50,99,
70,20,60,70,
60,45,30,80;
enddata
[OBJ]min=@sum(assign:
c*x);
@for(person(i):
[P]
@sum(work(j):
x(i,j))<=1);
@for(work(j):
[S]
@sum(person(i):
x(i,j))=1);
只列出相关的运行结果:
由分析结果可知,最优安排方案为:
甲做工作D;
乙做工作C;
丙做工作B;
戊做工作A;
最终费用为120元;
可见,用戊替换丁,并做工作A比原安排方案更优。
(3)设决策变量为xij,当第i个人做第j项工作时,决策变量xij=1,否则,决策变量为0.最优该题目的最优指派问题模型为:
要想判断是不是新工作E比原有四项工作优先,需要看看最优方案中是不是安排工作E,如果安排工作E则比原工作某项优先,如果没有安排E,则不优先。
编写相应的Lingo模型:
sets:
person/jia,yi,bing,ding/;
work/A,B,C,D,E/;
assign(person,work):
c,x;
endsets
data:
c=50,50,99,20,20,
70,40,20,30,10,
90,30,50,99,20,
70,20,60,70,80;
enddata
[OBJ]min=@sum(assign:
c*x);
@for(person(i):
[P]
@sum(work(j):
x(i,j))=1);
@for(work(j):
[S]
@sum(person(i):
x(i,j))<=1);
只列出相关的分析结果:
五项工作,四个工作人员的最优方案为:
甲做工作D;
乙做工作C;
丙做工作E;
丁做工作B;
总费用为80元。
可见,在最优方案中,工作E替换掉了工作A,因此新工作E比原有工作A优先。
5.旅行商问题
张三住在A市,他在A,B,C,D,E和F市都有保险代理业务。
由于业务关系,他每个月都需要访问这些城市作一次。
表6.5给出了每个城市之间的距离,试分析他按照什么的顺序访问这些城市使得总旅行的距离最短?
表6.56城市之间的距离(单位:
公里)
城市A
城市B
城市C
城市D
城市E
城市F
城市A
0
588
542
334
1096
825
城市B
588
0
129
448
1675
1410
城市C
542
129
0
483
1638
1346
城市D
334
448
483
0
1288
1100
城市E
1096
1675
1638
1288
0
440
城市F
825
1410
1346
1100
440
0
(1)用启发式算法求解;
(2)用Lingo软件求解。
解:
(1)构造初始Hamilton圈:
F→B→D→E→C→A→F,
全长w(C1)=825+1410+448+1288+1638+542=6151.
初始图C1如:
图5-1
图5-1圈C1
修改C1,有图5-1得到:
w(FE)+w(BC)=440+129=569 F→E→D→B→C→A→F, 全长w(C2)=3672. 如图5-2: 图5-2圈C2 对于圈C2,使用上述方法已经不能再改进了,停止计算。 事实上,C2就是交通网络的最优Hamilton圈。 虽然按照上述方法并不能保证所得到的的最终圈就是最优的,通过下一问的Lingo求解,可知该圈是Hamilton最优圈。 (2)设1,2,3,4,5,6分别代表A,B,C,D,E,F城市,wij表示城市i到城市j的决策变量, 其线性(整数)规划模型为: 编写相应的Lingo程序: sets: city/ABCDEF/: u; link(city,city): w,x; endsets data: w=05885423341096825 588012944816751410 542129048316381346 334448483012881100 10961675163812880440 8251410134611004400; enddata n=@size(city); min=@sum(link: w*x); @for(city(k): @sum(city(i)|i#ne#k: x(i,k))=1; @sum(city(j)|j#ne#k: x(k,j))=1; ); @for(link(i,j)|i#gt#1#and#j#gt#1#and#i#ne#j: u(i)-u(j)+n*x(i,j)<=n-1; ); @for(link: @bin(x)); 选取部分相关的运行结果: 根据运行结果可知,最优方案是A—C-B—D—E—F—A,即从城市A到城市C到城市B到城市,再到城市D,再到城市E,再到城市F,最后回城市A. 最短总里程距离为3672公里。 6.最优连线问题 求5题中6个城市(A,B,C,D,E,F)的最优连线,城市之间的距离如表6.5所示。 解: 设1,2,3,4,5,6分别代表A,B,C,D,E,F城市,wij表示城市i到城市j的决策变量, 其线性(整数)规划模型为: 编写相应的Lingo程序: sets: city/ABCDEF/: u; link(city,city): w,x; endsets data: w=05885423341096825 588012944816751410 542129048316381346 334448483012881100 10961675163812880440 8251410134611004400; enddata [obj]min=@sum(link: w*x); @sum(city(j)|j#gt#1: x(1,j))>=1; @for(city(j)|j#gt#1: @sum(city(i)|i#ne#j: x(i,j))=1; ); n=@size(city); @for(link(i,j)|i#ne#j: u(i)-u(j)+n*x(i,j)<=n-1); @for(link: @bin(x)); 将相关运行结果拷贝如下xueyunqiang-chapter6-6: 根据计算结果,可知6个城市(A,B,C,D,E,F)的最优连线为: A→D A→F B→C D→B F→E。 最优距离为2176公里。 即: A城市与D城市和F城市相连,D城市与B城市相连,F城市与E城市相连,B城市与C城市相连。 最优距离为2176公里。 7.最大流问题 三个炼油厂通过管道网络为两个分散的终端运送汽油。 这个管道网络中有三个泵站,如图6.1所示。 汽油的流向如图中箭头所示,图中标出了每一段管道的运送容量,单位是百万桶/天。 求解下面的问题: (1)要满足这个网络的最大流量,每一个炼油厂每天的产量应该是多少; (2)要满足这个网络的最大流量,每一个终端每天的需求量应该是多少; (3)要满足这个网络的最大流量,每个泵站每天的容量应该是多少; (4)如果进一步假定在图6.1所示的网络中泵站6每天的最大容量限制为50百万桶,求出相应的网络的最大容量。 1000 1000 1000 1000 1000 解: (1)、 (2)、(3): 虚设一个源与汇构造单源单汇问题: 有题意显然知道,每条边上的流量f不会超过给边上的容量c。 对于所有中间顶点u,流入的总量应等于流出的总量,即: 一个网络G的流量值f定义为从源X流出的总流量,即: 。 由上两式可以看出,f的流量值也为流入汇y的总流量。 由于已经构造成为单源单汇的问题,可知该题目的数学规划表达式为: 其中,V为顶点集,E为边集(或弧集),x为源,y为汇。 编写相应的Lingo程序: sets: nodes/x,1,2,3,4,5,6,7,8,y/; arcs(nodes,nodes)/ x,1x,2x,31,42,42,62,53,54,54,74,65,65,86,76,87,y8,y/: c,f; endsets data: c=10001000100020105020152010103030502010001000; enddata max=flow; @sum(arcs(i,j)|i#eq#1: f(i,j))=flow; @for(nodes(i)|i#ne#1#and#i#ne#@size(nodes): @sum(arcs(i,j): f(i,j))-@sum(arcs(j,i): f(j,i))=0); @for(arcs: @bnd(0,f,c)); 选取部分相关结果: 有分析结果可知,最大流为110百万桶/天: (1)满足该网络最大流,炼油厂1的产量为F(1,4)=20百万桶/天; 炼油厂2的产量为F(2,4)+F(2,6)+F(2,4)=5+50+20=75百万桶/天; 炼油厂3的产量为F(3,5)=15百万桶/天。 (2)满足该网络最大流,终端7的需求量为F(4,7)+F(6,7)=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京工业大学 数学 建模 组合 优化 实验 11