数学建模实验报告Word格式.docx
《数学建模实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数学建模实验报告Word格式.docx(40页珍藏版)》请在冰点文库上搜索。
17.06
46
36.24
4
9
16.28
30
12.86
31
21.04
8
16.48
49
11.4
17
19.79
6
22
3.36
5.38
25
4.61
22.05
29.93
50
11.85
7.76
33
11.7
22.68
14.33
47
9.89
11
19
10.08
12
38
3.11
35
8.19
13
6.77
27
3.91
22.76
14
10.86
32
6.1
16
7.98
41
13.48
42
10.22
18
36
8.79
10.91
21
8.86
39
8.5
40
16.15
13.35
3.68
11.33
24
4.88
8.67
28
20.87
29
4.55
8.98
8.94
27.78
15.22
17.32
12.21
11.02
21.41
16.23
11.84
15.32
44
16.42
26
17.96
15
13.33
各乡镇的物资需求量如下表:
人数
760
1281
456
1155
944
676
490
728
782
420
889
526
684
882
551
590
917
565
1124
1282
1030
643
884
407
1206
1179
1117
560
894
322
725
612
461
478
722
394
898
770
995
999
938
333
368
619
830
954
707
1119
1018
1268
数据处理:
2、问题分析
本问题中为了得到最优解,需要求出最短加权(双权)路径,以三个火车站为终点求出最短路根-点图和路径权矩阵,在此基础上结合各点比重求权,得出能使花费最小而效益最大的路径。
综上分析,本问题中的最短加权路径选择所受的限制有:
a.火车站总数有限且位置固定;
b.各个乡镇存在邻接最短路径;
C.各根点权重(与乡镇人数正相关)及各路径权重可求。
3、变量定义
本问题过程中所涉及的变量有:
a.各乡镇需求量;
b.火车站货物运往的乡镇及途径路径;
C.总路径长度;
4、问题假设
在建模前假设:
①不考虑运输车在不同路段的损耗情况;
②外界潜在因素,如仓储,转运成本等不予考虑;
③相邻乡镇间的需求量增减不存在相互作用;
④不考虑运输量对火车的磨损情况。
5、建模求解
首先调用trans函数(自编,功能为将已有的根-点图转化为点-点图),调用my_min2函数(已给,功能为将点-点图改写为最短情况下的根-点-路径权值图),寻找到三个火车站所代表的点分别以这三个点为根点调用my_min1函数(已给,功能为导出以当前点为目的地的最短路根-点图以及路径权),调用comp函数(自编,功能为将my_min1得出的三个路径权数组分别乘以其各自的点的比重*,并进行比较,最终导出各点的双权路径最小时的根点选择方案),即可获得解。
以下是各函数:
①trans函数
function[M]=trans(W,m)
%trans函数功能为将原有的点-点图转化为根-点图
%形参实参转化
n=length(W);
%初始化接受矩阵
M=zeros(m,m);
fori=1:
m
forj=1:
ifi~=j
M(i,j)=inf;
end
end
forj=1:
n
ifW(j,1)<
W(j,2)
M(W(j,1),W(j,2))=W(j,3);
M(W(j,2),W(j,1))=W(j,3);
else
②my_min2函数
function[L,z]=my_min2(W)
%函数my_min2(W)返回图中任意两个节点的最短路径L和关联的路径z
%=====初始化=====
L=W;
z(:
j)=ones(n,1)*j;
%=====计算最短路=====
while1
fori=1:
u=L(i,:
)+L(:
j)'
;
[m,k]=min(u);
L1(i,j)=m;
ifm<
L(i,j)%说明节点i到节点j之间过节点k
z(i,j)=k;
ifL==L1,break,end
L=L1;
③my_min1函数
function[L,z]=my_min1(W,a)
%函数my_min1(W,a)返回从点a出发到其它各点的最短路的长度L和对应的父节点标记z
%W为图的权,z(i)=k表示节点i的父节点为k
z=ones(1,n)*a;
k=1;
S(k)=a;
u=a;
flg=ones(1,n);
flg(a)=inf;
%flg标记哪些节点已在集合S中,flg(k)=inf表示节点k在S中
%====优化计算=====
L=W(a,:
);
whilek<
forv=1:
ifL(v)>
L(u)+W(u,v)&
flg(v)<
inf%flg(v)<
inf表示节点v不在S中
L(v)=L(u)+W(u,v);
z(v)=u;
[m,u]=min(L.*flg);
%在S之外的节点求最小值,得到新析切点u
k=k+1;
S(k)=u;
flg(u)=inf;
%将新的节点放入S中,并作标记
④comp函数
function[Ans]=comp(Z1,Z2,Z3,H)
%函数功能为将各点到三个根点的最短路径值乘以各点自身的比重,即加第二重权,之后比较将最小值所对应的方案号存入一维数组Ans中
%基本数据导入
z(1,:
)=Z1;
z(2,:
)=Z2;
z(3,:
)=Z3;
g(i)=z(1,i)*H(i);
Ans(i)=1;
%比较并做出结论
forj=2:
ifg(i)>
z(j,i)*H(i)
g(i)=z(j,i)*H(i);
Ans(i)=j;
6、结论
本小组所用的编程环境为MATLAB2012A,可能在数据导入等方面与MATLAB7.0有微小差异,敬请谅解!
MATLAB实际操作过程的步骤和各结果如下:
①导入基本数据表:
路径权.mat和比重权.mat,分别进入矩阵W和矩阵H中。
②将程序trans.m,my_min2.m,my_min1.m,comp.m导入MATLAB库中。
③将数据my_min1(my_min2(trans(W,50)),1)导入矩阵L1中,my_min1(my_min2(trans(W,50)),2)导入矩阵L2中,my_min1(my_min2(trans(W,50)),3)导入矩阵L3中。
④执行程序comp(L1,L2,L3,H),得到的数组命名为Ans,Ans所示即为最优解。
(具体过程见附录)
结论总结:
最终结论为ANS数组所示,1-50乡镇的最近火车站安排为12322332312212322222232231122222332222222212331122
七.附录
附一:
执行过程中用到的数据表(均以mat格式保存):
①路径权(根-点图)
1106.24000000000000
14317.4400000000000
14825.8900000000000
23710.8300000000000
256.43000000000000
2237.37000000000000
22018.3500000000000
33410.8500000000000
34512.1400000000000
3717.0600000000000
34636.2400000000000
4916.2800000000000
43012.8600000000000
43121.0400000000000
4816.4800000000000
54911.4000000000000
51719.7900000000000
6223.36000000000000
7225.38000000000000
7254.61000000000000
74322.0500000000000
74829.9300000000000
85011.8500000000000
897.76000000000000
83311.7000000000000
94622.6800000000000
93414.3300000000000
10479.89000000000000
111910.0800000000000
12383.11000000000000
12358.19000000000000
13476.77000000000000
13273.91000000000000
134822.7600000000000
143810.8600000000000
14326.10000000000000
16177.98000000000000
164113.4800000000000
174210.2200000000000
18368.79000000000000
194210.9100000000000
19218.86000000000000
20398.50000000000000
204016.150********00
213013.3500000000000
23503.68000000000000
234011.3300000000000
24144.88000000000000
27398.67000000000000
284920.8700000000000
29324.55000000000000
29378.98000000000000
29188.94000000000000
305027.7800000000000
304215.2200000000000
323917.3200000000000
334012.2100000000000
3334.020*********
334821.4100000000000
364916.2300000000000
383911.8400000000000
404815.3200000000000
414416.4200000000000
432617.9600000000000
461513.3300000000000
②比重权
附二:
①执行trans(W,50)的结果
ans=
Columns1through13
0InfInfInfInfInfInfInfInf6.2400InfInfInf
Inf0InfInf6.4300InfInfInfInfInfInfInfInf
InfInf0InfInfInf17.0600InfInfInfInfInfInf
InfInfInf0InfInfInf16.480016.2800InfInfInfInf
InfInfInfInf0InfInfInfInfInfInfInfInf
InfInfInfInfInf0InfInfInfInfInfInfInf
InfInfInfInfInfInf0InfInfInfInfInfInf
InfInfInfInfInfInfInf07.7600InfInfInfInf
InfInfInfInfInfInfInfInf0InfInfInfInf
InfInfInfInfInfInfInfInfInf0InfInfInf
InfInfInfInfInfInfInfInfInfInf0InfInf
InfInfInfInfInfInfInfInfInfInfInf0Inf
InfInfInfInfInfInfInfInfInfInfInfInf0
InfInfInfInfInfInfInfInfInfInfInfInfInf
Columns14through26
InfInfInfInfInfInf18.3500InfInf7.3700InfInfInf
InfInfInf19.7900InfInfInfInfInfInfInfInfInf
InfInfInfInfInfInfInfInf3.3600InfInfInfInf
InfInfInfInfInfInfInfInf5.3800InfInf4.6100Inf
InfInfInfInfInf10.0800InfInfInfInfInfInfInf
0InfInfInfInfInfInfInfInfInf4.8800InfInf
Inf0InfInfInfInfInfInfInfInfInfInfInf
InfInf07.9800InfInfInfInfInfInfInfInfInf
InfInfInf0InfInfInfInfInfInfInfInfInf
InfInfInfInfInf0Inf8.8600InfInfInfInfInf
InfInfInfInfInfInfInf0InfInfInfInfInf
In