现在,已经把所有的顶点都试了一遍,算法结束。
每两个顶点之间的路径如表4所示。
表1
a
b
c
a
0
4
11
b
6
0
2
c
3
∞
0
表2
a
b
c
a
0
4
11
B
6
0
2
c
3
7
0
a
b
c
a
0
4
6
b
6
0
2
c
3
7
0
表3
表4
a
b
c
a
0
4
6
b
5
0
2
c
3
7
0
A0即为我们要得到的任意两点之间的最小距离的矩阵,见算法2:
b=a+a';path=zeros(length(b));
fork=1:
50
fori=1:
50
forj=1:
50
ifb(i,j)>b(i,k)+b(k,j)
b(i,j)=b(i,k)+b(k,j);
path(i,j)=k;
end
end
end
end
b,path
算法2
算法2即为Floyd算法的核心程序
3.得到n个乘车站点到各个小区的最短距离的行矩阵:
在2中得到的b矩阵中提取出这n个小区对应的行的行向量,例如,选取第一个小区作为乘车站点,则将b矩阵中的第一行取出,作为行向量A1,其他的依此类推即可,由此可以得到各个乘车站点最短距离的行矩阵A1,A2,…Ak,…An。
4.1.4求得各个小区到这n个乘车站点的最短距离S:
因为得到的行矩阵A1,A2,…Ak,…An的阶数是相同的,因此,我们按位求最小值,得出另一个行矩阵A,将A中各个元素相加就可以得到各小区到达这n个乘车站点的最小距离S,算法见算法3:
fora=1:
50
t=[b(i,a)b(j,a)b(k,a)];
d(a,1)=min(t);
end;
f(u,1)=sum(d);
f(u,2)=i;
f(u,3)=j;
f(u,4)=k;
u=u+1;
算法3
4.1.5得出最终结果S0:
遍历所有可能情况后,通过比较每种情况得出的S,得出其最小值,得到的S0即为最小距离,取得最小距离时随机选取的i,j,k即为乘车站点的设置地点。
具体的程序实现见程序1。
4.1.6求解结果:
n=2时应该在第18区和31区设立乘车点,其最短总距离为24492米。
n=3时应该在第15区、21区和31区建立乘车站,最短距离为19660米。
4.2满意度评价模型:
4.2.1问题分析:
对距离以及人数两个指标进行无量纲化处理,得到两个指标的量化数据。
将已经无量纲化后的指标参数相乘得到定义的不满意度指标。
将得到后的综合指标当作第一问中的距离指标,建立满意度评价函数,求解第二问中的变化后的距离的最小值。
图3
如图3,对于满意度模型:
①我们对人数以及距离两个指标进行无量纲化处理,使其量化;②对两组无量纲化后的数据相乘,得到满意度评价函数,即相乘的结果越小,其满意度越大,我们将其定义为不满意度;③再对所有小区进行历遍,选取n个小区作为乘车站点,对其不满意度进行比较;④最后得出最小的不满意度即为本问的解
4.2.2对指标进行无量纲化:
1.对人数进行无量纲化:
我们采用每个小区人数除以总人数的方法来实现其无量纲化,
Qj=Pj/P0(公式1)
得到表5:
表5
区域
人数
区域
人数
1
0.0259792
26
0.0063949
2
0.0267786
27
0.0375699
3
0.0167866
28
0.0071942
4
0.0135891
29
0.0115907
5
0.0151878
30
0.029976
6
0.0115907
31
0.0039968
7
0.0067946
32
0.0343725
8
0.0255795
33
0.0279776
9
0.0155875
34
0.0223821
10
0.0079936
35
0.0259792
11
0.0243805
36
0.0103917
12
0.018785
37
0.0319744
13
0.0263789
38
0.0359712
14
0.0083933
39
0.018785
15
0.0279776
40
0.0159872
16
0.0339728
41
0.0227818
17
0.0047962
42
0.0159872
18
0.0139888
43
0.0275779
19
0.0191847
44
0.0267786
20
0.0215827
45
0.0079936
21
0.0195843
46
0.0071942
22
0.0047962
47
0.0271783
23
0.0215827
48
0.028777
24
0.0183853
49
0.0303757
25
0.0303757
50
0.0247802
表5表示出每个小区人数所占总人数的比例,反映出每个小区人数对于不满意度的权重值Qj(j=0~50)。
2.对距离进行极值差方法处理:
对附录中的数值进行极值差方法处理,得到无量纲的量化结果,
(公式2)
其中:
Bij表示B矩阵中的第i行第j列的元素
(Bi)min=min{Bij}(1
50),(Bi)max=max{Bij}(1
)
3.得出满意度评价函数:
Y=(Bij-(Bi)min)/((Bi)max-(Bi)min)*(Pj/P0)(公式3)
4.2.3求解结果:
n=2时最优解为16区和36区不满意度为0.4980。
当n=3时最优解为15区、22区和32区不满意度为0.3720。
4.3问题三:
4.3.1问题分析:
通过总人数与校车的载人数算出最少需要的车辆数为54辆
尽量少的车辆数作为一个限制满意度的条件建立求解函数
结合问题一的算法求出最终结果
图3
如图3:
由于要求使用尽可能少的车辆让教师和工作人员的满意度尽量高,所以我们把车辆数作为一个限制满意度的条件。
通过在问题二的基础上把车辆数考虑进去运用问题一的算法即可求得答案。
4.3.2问题求解:
当n=3时最优解为至少需要54辆车对应的区域分别为15、22、32。
对应的车辆数为20、16、18。
不满意度为0.3720
4.4问题的合理化建议与考虑:
1.可于上下班高峰期增开几次校车,在不是高峰期,减少几次校车运行;
2.可以运行不同型号的校车,在乘车人数较多的车站运行大校车,人数较少的车站运行较小的校车。
3.可以增加几个收费的乘车站点,因为增加站点会提高满意度,但同时会增加运行成本,因此进行收费来降低成本。
4.可以将乘车站点不设定在小区内,设定在几个小区比较靠中央的位置,在相同情况下回事满意度提高。
5.有一些应该使乘车站尽量靠近老年人数较多的小区,这样满意度提高。
五、模型的评价
首先,在解决问题一的时候,我们建立了最小距离模型后,直接用Floyd算法进行运算,得到了每一个小区到其他各个小区的最小距离的矩阵,然后随机抽取n个小区作为车站,对最小距离矩阵的这n行进行求和,比较求和值得到最终结论。
当n比较小时,用这种方法可以较好的计算出所求的n个点。
但是,这种方法的运算量与n的大小是成指数关系的,所以,当n很大时运算量会迅速增大。
在解决问题二的时候,我们在问题一的基础上用小区和最近车站的距离和小区人数无量纲化后的乘积来表示教师和工作人员的满意程度,之后用和问题一相同的思路得出结论。
所以,第二问中也存在着第一问中,当n很大的时候运算量过大的问题。
而此无量纲化的过程中我们考虑了任意两个小区最短距离的极大值和极小值,发现极小值都是0,极大值之间相差不大,因此可以使用极值无量纲化的方法。
但是极值无量纲化是通过利用变量取值的最大值和最小值将原始数据转换为介于某一特定范围的数据,从而消除量纲和数量级影响,改变变量在分析中的权重来解决不同度量的问题,所以此权重没有对距离和人数进行差异化对待,而事实上人数和距离的权重肯定是不同的。
解决第三个问题时,我们用到了逼近理想值排序法,假设理想的情况是共用53辆车(因为总人数为2502,至少需要54辆车才可以),且教师和工作人员的满意度最大。
我们延用解决问题二的方法,只是在距离与人数无量纲化后再乘以因式(A—53),然后对所有的情况进行排序,找到最接近理想值D的一组数据。
六、参考文献
[1]郑洲顺科学计算与数学建模复旦大学出版社。
[2]姜启源谢金星叶俊数学模型高等教育出版社。
[3]孙祥徐流美吴清Matlab7.0基础教程清华大学出版社。
附件1:
50个区之间任意两点的最短通路值
附件2:
问题一的算法
clear;
clc;
M=10000;
a(1,:
)=[0,400,450,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(2,:
)=[zeros(1,2),M,300,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,230,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,140,M,M,M];
a(3,:
)=[zeros(1,3),600,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(4,:
)=[zeros(1,4),210,M,M,M,M,M,M,M,M,M,M,M,M,M,310,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(5,:
)=[zeros(1,5),230,200,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(6,:
)=[zeros(1,6),320,340,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(7,:
)=[zeros(1,7),170,M,M,M,M,M,M,M,M,M,160,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(8,:
)=[zeros(1,8),200,M,M,M,M,M,285,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(9,:
)=[zeros(1,9),180,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(10,:
)=[zeros(1,10),150,M,M,M,160,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(11,:
)=[zeros(1,11),140,M,130,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(12,:
)=[zeros(1,12),200,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(13,:
)=[zeros(1,13),M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,400,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(14,:
)=[zeros(1,14),190,M,M,M,M,M,M,M,M,M,M,190,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(15,:
)=[zeros(1,15),170,250,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(16,:
)=[zeros(1,16),140,130,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(17,:
)=[zeros(1,17),M,M,M,M,M,M,M,M,M,240,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(18,:
)=[zeros(1,18),204,M,M,M,M,M,180,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(19,:
)=[zeros(1,19),140,M,M,M,175,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(20,:
)=[zeros(1,20),180,M,M,190,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(21,:
)=[zeros(1,21),300,270,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,350,M,M,M];
a(22,:
)=[zeros(1,22),M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,160,270,M,M,180,M,M];
a(23,:
)=[zeros(1,23),240,M,M,M,M,210,290,M,M,M,M,M,M,M,M,M,M,M,M,M,150,M,M,M,M,M,M];
a(24,:
)=[zeros(1,24),170,M,M,130,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(25,:
)=[zeros(1,25),M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(26,:
)=[zeros(1,26),140,M,M,M,M,M,M,320,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(27,:
)=[zeros(1,27),190,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(28,:
)=[zeros(1,28),260,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(29,:
)=[zeros(1,29),M,190,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M];
a(30,:
)=[zeros(1,30),240,M,M,M,M,M,M,M,M,M,M,130,210,M,M,M,M,M,M,M];
a(31,:
)=[zeros(1,31),230,M,M,M,260,M,M,M,M,M,M,M,M,M,M,M,M,M,210];
a(32,:
)=[zeros(1,32),190,M,140,240,M,M,M,M,M,M,M