灾情Word文档下载推荐.docx
《灾情Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《灾情Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
26->
N->
24->
23->
21->
K->
17->
16->
I->
15->
18->
J->
19->
L->
20->
25->
M->
204.5
此种情况下的均衡度为17.8%,三组走的路程和为580.2km。
对于问题二:
我们先计算在乡、村的总停留时间为:
17*2+35=69,若不考虑行走时间,要求在24小时内到达则有
,可得i至少为4,由此可知至少分为四组,分为四组时
,行走所用的时间为24-17.25=6.75,可以经过的路程为236.25,由第一问可知分四组可能满足要求,经计算得出了分四组巡视时的最优解(见模型的建立与求解中问题二)。
对于问题三:
考虑到巡视人员足够多,每一个乡、村分一组人员都是可能的。
我们先计算出从O点出发访问距O点最远的H点得出其所需时间为6.43小时,访问其他点的时间都可以小于此时间,由此可知完成巡视的最短时间为6.43小时。
然后我们利用图论软件求出O点到其与各点的最短距离,设计巡视路线时我们从距O点较远的点开始考虑因为若时间允许中途可以访问其他点,从而能够保证巡视组尽量少。
经计算得出最佳巡视路线(建模型的建立与求解中问题三)。
对于问题四,我们以分四组的情况来考虑,由于第三问中求得最佳巡视路线的时间均衡度为7.75%,我们就假设当T,t,V改变时只要时间均衡度小于7.75%就近似认为最佳巡视路线不会改变,在此基础上我们求出了当T和t保持不变时V可以减小到8.82公里/小时,当T和V不变时,t可以减小到0.69小时,当V和t不变时,T可以增加到2.67小时,这三种情况下,最佳巡视路线都不会改变,当T,V和t变化不上上述范围时最佳巡视路线会发生改变。
关键词:
TSP,破圈法,最小生成树,哈密顿圈
一、问题重述
已知某县的乡(镇)、村公路网示意图(见附录一),公路边的数字为该路段的公里数。
今年夏天该县遭受水灾。
为考察灾情、组织自救,县领导决定,带领有关部门负责人到全县各乡(镇)、村巡视。
巡视路线指从县政府所在地出发,走遍各乡(镇)、村,又回到县政府所在地的路线。
需要解决的问题:
1.若分三组(路)巡视,试设计总路程最短且各组尽可能均衡的巡视路线。
2.假定巡视人员在各乡(镇)停留时间T=2小时,在各村停留时间t=1小时,汽车行驶速度V=35公里/小时。
要在24小时内完成巡视,至少应分几组;
给出这种分组下你认为最佳的巡视路线。
3.在上述关于T,t和V的假定下,如果巡视人员足够多,完成巡视的最短时间是多少;
给出在这种最短时间完成巡视的要求下,你认为最佳的巡视路线。
4.若巡视组数已定(如三组),要求尽快完成巡视,讨论T,t和V改变对最佳巡视路线的影响。
二、问题分析
此题研究的问题是要求设计出合理的灾情巡视路线,保证从O点出发经过该县的各个村镇后又回到O点。
此问题可以转化为多旅行商销售(M—TSP)问题,我们先将其转化为单旅行商问题,再利用算法求解。
对于问题一要求分三组巡视设计总路程最短且尽可能均衡的巡视路线,我们首先考虑到分组时某些点必须在同一组中,同一组中的某些点必须相邻,我们利用破圈法画出最小生成树,然后再以树干为基础将图分为三组,由于此时分组有不同情况我们先选择一种然后再进行优化从而确定分组情况最后我们在从每一组出发建立模型求得各组的最短路径。
对于问题二在要考虑在各乡镇停留时间的情况下要求我们选择合理的分组方式使得24小时内能访问完所有乡镇并回到县城。
由于图中的乡镇分布比较均匀有可能找出停留时间尽量均匀的分组,我们先计算问题一中分三组巡视时的时间发现不能满足要求,然后我们继续计算分四组巡视时的分组情况及最短路线从而可以计算出巡视时间,可以满足要求从而确定了分组情况及最佳巡视路线。
对于问题三要求我们设计出合理的分组方案和最佳巡视路线使巡视的时间最少,此问中假设巡视人员足够多也就是说不管分多少组只要是能满足巡视时间最短的路线即可。
我们从据O点最远点H考虑,因为O点到H点(仅仅只巡视H一个点)的时间是所有其他时间中最长的。
再考虑O点到其他点的巡视路线小于这个最小值即可,在计算过程中我们先从距O点远的点开始考虑,因为若巡视时间与最小时间相差较远可以考虑顺便访问途径的乡、村。
对于问题四在分三组去巡视的前提下,要求尽快完成巡视,分析村、乡镇停留时间及汽车行驶速度对巡视路线的影响,我们分别考虑了T和t之间有约束关系和T和t之间没约束关系两种情况讨论,当一个量变化其他两个量不变对结果的影响从而得出结论。
三、问题假设
1、巡视过程中经过邻县村时不会停留。
2、在巡视过程中不会出现其它意外故障,影响总的巡视时间或者路径。
3、巡视图中考虑行走时间只与巡视路径及速度有关。
4、巡视时可以经过一条路多次。
5、汽车在巡视图中的速度是固定的。
6、各组的路面状况一样,汽车的行驶速度相等。
7、村镇被巡视一次后,再次经过时不会停留。
四、符号说明
T:
巡视人员在乡镇停留时间;
t:
巡视人员在各村停留时间;
V:
汽车行驶速度;
:
表示分组后第k组的TSP回路路径长度;
第k组完成巡视的时间
定义为均衡度(
为各组路径长度中的最大值,
为各组路径长度中的最小值)
分组后第k组中的第m个乡镇,m=1,2,3……,k=1,2,……;
分组后第k组中的第n个村,n=1,2,3……,k=1,2,……;
M:
巡视所需要的最长时间;
五、模型的建立与求解
5.1对数据的分析与处理:
利用图论软件可以求得任意两点间的最短距离:
如下图
图中绿线显示的即为O点到H点的最短路线
5.2问题一:
5.2.1、模型一的建立
首先我们利用krustal算法求得最小生成树如下:
利用模拟退火法求得整个图的TSP回路路径长度为508.6,然后依据下列原则进行组的划分:
1、尽量保证距离较近的点分在一组;
2、保证所分得的三组的均衡度尽量小
3、尽量依据最小生成树的枝干划分
目标函数:
1巡视路线最短:
,k=1,2,3
2、均衡度最小:
(
5.2.2、模型一的求解:
求得以下几种划分方法:
表一:
127.4
Z->
237.6
22->
191.1
由表中可知此种情况下的均衡度为
巡视经过的总长度为:
556.1
考虑到此时的均衡度较大,我们将第二组中的C点分到第一组得到以下第二种情况:
表二:
由上表可知此种情况下的均衡度为:
598.3
考虑到此种情况的均衡度变得更大而且巡视所经过的总长度变长了,为进一步优化决定将第二组中的不分点分到第三组,求得改进后的数据如下表。
表三:
由上表可知此种情况下的均衡度为
巡视经过的总路径长度为:
580.2,此种情况下的均衡度和总的路径长度还比较满意。
综合考虑以上三种情况我们发现这三种情况的总巡视路线长度比较接近但均衡度变化很大故我们选择第三种情况为最优巡视路线。
巡视路线图如下图所示:
5.3问题二:
5.3.1、模型的建立:
,k=1,2,3,4
约束条件:
此问中要求考虑到乡、村停留时间,满足24小时内能够返回县城:
k=1,2,3,4;
m=1,2……;
n=1,2……
5.3.2、模型的求解:
经统计图中乡镇17个、村35个,在乡镇的总停留时间为:
<
24,可得i至少为4,即至少分为四组,分为四组时
=17.25,行走所用的时间为24-17.25=6.75,可以经过的路程为236.25,由第一问可知分为三组时的路径长度已经小于236.25,故分为四组时有可能满足要求,在巡视时我们应该保证尽量少走重复路线和经过重复点
求得结果为:
行走时间
等待时间
总时间
4.84
18
22.84
16-.>
184.5
5.27
17
22.27
18-.J->
168.8
4.8
21.8
4
3->
D->
E->
E-.8->
204.2
5.58
23.58
此种情况下的时间均衡度为:
路径均衡度为:
经检验四组巡视的时间都小于24小时满足条件。
巡视路线如下图所示:
5.4问题三:
5.4.1、模型的建立:
第k组完成巡视的时间,N:
巡视总共需分N组
保证各组巡视所需时间的最大值最小:
min(N)
5.4.2、模型的求解:
此问在上题T、t、V的假定下并且巡视人员足够多,也就是说我们可以每个巡视点派一组人去。
故我们先考虑据O点最远的H点,从O点出发到H点巡视所用时间是到所有其它时间最长的,我们先利用dijkstra求出O点到H点的最短路径长度为77.5,则从O点出发到H点巡视所需时间为行走时间
加上等待时间2小时,总的时间为6.43小时,即为题目中所需的巡视的完成巡视的最短时间。
再分别求O点到各点的最短路径,在满足时间小于6.43小时和巡视组应该尽量少的情况下设计合理的巡视路线
在计算过程中我们尽量考虑先寻求O点到其比较远的最短路线,因为O点到较远点的巡视时间若小于6.43则可以考虑多巡视几个图中会经过的村、乡。
在上述条件下求得共需要22组,最佳巡视路线如下表:
巡视路径
停留地点
所需时间
1
H
6.43
12,7
5.85
2-O
14,13
6.15
1518
5.99
5
1617
5.45
6
I21
6.39
7
222326
5.80
8
O-2->
109
5.71
9
F6
6.09
10
G
5.53
11
J19
6.05
12
852
5.78
13
E11
6.14
14
K25
5.50
15
24N
16
M27
5.74
20L
5.34
3D4
5.93
19
R->
28Q30
6.1
20
A3329
5.97
21
31323435
6.34
22
1BC
5.65
23
PR
5.314
经检验以上22组的巡视时间都小于等于6.43,满足巡视最短时间为6.43的要求,故以上23组即为此问的最佳巡视路线
5.5问题四:
5.5.1、模型的建立:
分组后第k组中的乡镇数
分组后第k组中村的个数
巡视所需要的最短时间
,k=1,2,3,4
时间均衡度:
,
假设时间均衡度
时,最佳巡视路线不会改变,假设第i组巡视时间最短,第j组巡视时间最长则有:
当
时巡视路线不变,分三种情况讨论:
1、当T和t不变时,
时巡视路线不变
2、当t和V不变时,
时巡视路线不变。
3、当T和V不变时,
5.5.2、模型的求解
在问题三中分四组情况时求得时间均衡度为7.55%,我们假定时间
10%
求得结果如下表
T和t不变时
T和V不变时
t和V不变时
0.69<
t<
2<
T<
2.67
由上表可知:
当T和t不变时,V只能变小,可以减小到8.82公里/小时,此时的最佳巡视路径不变。
当T和V不变时,t只能减小,可以减小到0.69小时,此时的最佳巡视路线不变。
当t和V不变时,T只能增大,可以增大到2.67小时,此时的最佳巡视路线不变。
六、模型的优缺点
缺点:
1、模型中的计算都只是近似计算,不能够保证所求的解为最优解。
2、缺乏严格的理论基础
3、模型求解过程中存在经过一个点多次的情况
4、在分组时凭借经验划分可能存在不合理现象
优点:
1、模型解决的是MTSP问题具有普适性
2、求解结果比较满意
七、模型的改进与推广
模型的改进:
1、先利用计算机仿真巡视过程后再进行求解可使结果更准确。
2、所建立的模型没有考虑到意外情况,我们可以先调查统计对意外情况发生的概率及所产生的影响进行综合考虑后再优化模型。
模型的推广:
我们建立的模型不仅可用于灾情巡视路线进过改进后还可以用于其它路线的设计如最短路旅游路线设计,邮递员问题等。
八、参考文献
1、宋来忠、王志明主编,数学建模与实验,北京,科学出版社2005
2、彭主赠主编,数学模型与及建模方法,大连海事大学出版社
3、飞思科技产品研发中心编著MATLAB7基础与提高,电子工业出版社
九、附录
附录一:
灾情巡视图:
附录二:
最小生成树源代码:
b=data(1:
3,1:
89);
[B,index]=sortrows(b,3);
%按边权由小到大重新排列矩阵b的列
B=B'
;
m=89;
n=53;
%m:
边数,n:
顶点数
t=1:
n;
k=0;
T=[];
c=0;
fori=1:
m
ift(B(1,i))~=t(B(2,i))
k=k+1;
T(1:
2,k)=B(1:
2,i);
c=c+B(3,i);
tmin=min(t(B(1,i))~=t(B(2,i)));
tmax=max(t(B(1,i))~=t(B(2,i)));
forj=1:
n
ift(j)==tmax
t(j)=tmin;
end
ifk==n-1
break;
end
T,c
整个图的的最小圈生成代码(模拟退火法实现):
#include<
stdio.h>
#include<
math.h>
#defineTFACTR0.9
#defineMAX10000.0
#defineMBIG1000000000
#defineMSEED161803398
#defineMZ0
#defineFAC(1.0/MBIG)
floatweight[54][54];
intiorder[54];
voidanneal(intncity)
{intirbit(unsignedlong*iseed);
intmetrop(floatde,floatt);
floatran(long*idum);
floatreverse_len(intncity,intn[]);
voidreverse(intncity,intn[]);
floattranse_len(intncity,intn[]);
voidtranse(intncity,intn[]);
intans,nover,nlimit,i1,i2;
inti,j,nsucc,nn,idec;
unsignedlongk;
staticintn[7];
longidum;
unsignedlongiseed;
floatpath,de,t,T;
nlimit=100*ncity;
/*maxsucctrynumbers*/
path=0.0;
for(i=1;
i<
ncity;
i++){/*primitivepathlength*/
i1=iorder[i];
i2=iorder[i+1];
path+=weight[i1][i2];
}
i1=iorder[ncity];
i2=iorder[1];
idum=-1;
iseed=111;
T=2.8;
for(j=1;
j<
=30;
j++){
nsucc=0;
for(k=1;
k<
=20000;
k++){
do{n[1]=1+(int)(ncity*ran(&
idum));
n[2]=1+(int)((ncity-1)*ran(&
if(n[2]>
=n[1])++n[2];
nn=1+((n[1]-n[2]+ncity-1)%ncity);
}while(nn<
3);
idec=irbit(&
iseed);
if(idec==0){
n[3]=n[2]+(int)(abs(nn-2)*ran(&
idum))+1;
n[3]=1+((n[3]-1)%ncity);
de=transe_len(ncity,n);
ans=metrop(de,T);
if(ans){++nsucc;
path+=de;
transe(ncity,n);
else{
de=reverse_len(ncity,n);
if(ans){++nsucc;
reverse(ncity,n);
if(nsucc>
=nlimit)break;
printf("
\n%s%10.6f%s%10.6fj=%d"
"
T="
T,"
pathlen="
path,j);
successfulmoves:
%6d\n"
nsucc);
=53;
i++)printf("
\%5d"
iorder[i]);
T*=TFACTR;
if(nsucc==0)return;
floatreverse_len(intncity,intn[])
{
floatde;
intxx[5],yy[5];
intj,ii;
n[3]=1+((n[1]+