最短路问题的实际应用论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
金华双龙洞旅游路线中最短路问题
摘要:
金华双龙洞景点分布较多,通过对其旅游路线的设置,转化为图论内容中的最短路情景进行讨论,建立模型,并通过搜索资料,利用几种方法解决路线最小的问题。
关键字:
数学建模最短路问题 lingo Dijkstra法 flod算法
一、研究背景:
在旅游过程中,我们常常感觉到自己一天下来走了很多路,回到宾
馆脚痛的不行。但其实我们可以利用运筹学的知识,通过建立数学
模型,转化为图论的内容。从而较为合理的制定出选择的路线(即
最短路问题)。
因而这次的小论文,我主要探究一下几个问题:
1.从景点进口到出口的最短路程。(最短路问题)
2.从景点到出口的最长路线。
3.建立的模型是否满足能回到起点(古典图论问题)
二、研究内容:
根据从互联网中搜索的资料,金华双龙洞的主要景点:景区进口双
龙洞,冰壶洞,朝真洞,桃源洞,黄大仙祖宫五个,其余为小景点
(若要加入,同样可以按照以下问题的研究方法进行讨论)现在忽
略。
问题总假设:分别设置双龙洞,冰壶洞,朝真洞,桃源洞,黄大仙
祖宫五个景点为A,B,C,D,E五点,根据现实及假设,可以得到如图
所示的路线图:
再利用用Dijkstra算法求解无负权网络的最短路。同时也可以利用此法算出最长路程。
问题一的解决:以A为景点出口,E为出口。
故A点标号为P(a)=0 给其余所有的T标号T(i)=+∞
考虑与A相邻的两个顶点BC,两个顶点为T标号,故修改这两个点的标号为:T(b)=min[T(b),P(a)+l12]=min[+∞,0+3]=3
T(c)=min[T(c),P(a)+l13]=min[+∞,0+2]=2
比较所有T标号,T(c)最小,所以令P(c)=2
再考察(C,B)(C,D)(C,E)的端点:同理可得
T(b)=6 T(d)=6.8 T(e)=10.2(显然已经到终点但还需要看看其余路线长短)
故又令P(b)=6.综合分析只有一条线路即A→C→B→D→E 此时总路程为2+4+3+8.4=16.4>10.2
所以,最短路程为A→C→E。即当游客不想再看双龙洞时或者因为脚伤等因素需以最小路程离开时,可以路线A→C→E离开景区。
特殊情况的处理:游客一定要去B景点则在一开始就应该先选择
B,而非C。才能使路线最短。因此,对于特殊问题,我们应当具体
问题,具体分析。
总结Dijkstra法:
实施步骤大体分为三步:标号→比较T标号→修改标号
设图的顶点数为n,则最多经过n-1步得到起点到终点的最短路。
问题二的解决:同样以A为景点出口,E为出口。但由于是最长的
路线.可以利用似Dijkstra算法进行计算。故A点标号为P(a)=0 给其余所有的T标号T(i)=-∞。
考虑与A相邻的两个顶点BC,两个顶点为T标号,故修改这两个点
的标号为:T(b)=max[T(b),P(a)+l12]=max [-∞,0+3]=3
T(c)=max[T(c),P(a)+l13]=max[-∞,0+2]=2
比较所有T标号,T(b)最大,所以令P(b)=3
再考察(B,C)(B,D)的端点:同理可得
T(c)=7 > T(d)=6 故令P(c)=7 再继续考察(C,D)(C,E)显然经过D,再经过E路程最长。
所以最长路程为A→B→C→D→E。即一些游客喜欢自然风光,喜欢
走走看看,可以采用这条最长路程进行游玩。同样也是观看所有景
点的路线之一。
对于最短路程的解法,我们还可以通过Floyd算法,1962年
(矩阵算法)进行运算:
得到邻接矩阵:
由于自己对编程语言不太了解,参考资料后,给出一段关键部分:
for k:=1 to n do
for i:=1 to n do for j:=1 to n do
if a[i,k]+a[j,k]>a[i,j] then a[i,j]:=a[i,k]+a[k,j]; end;
以此可利用编程语言进行求解,运行程序得到弗洛伊德矩阵。从而找到最短路的路线。
【其方法为:从起点开始:找出弗洛伊德矩阵中以该点为行坐标的最小的列坐标的指向的目标点
再找出指向点行坐标最小的列坐标的再次指向点(注意:每次找指向点过程中应先去掉已到过的点和自己本身。)如此循环直到找到终点为止就找到了最短路】
现在,我们还可利用lingo 对最短路问题进行求解,其程序如下:
model : sets : c/1..5/:u; l(c,c):d,x; endsets data :
d=0 3 2 100000 10000 3 0 4 3 100000 2 4 0 4.8 8.2 100000 3 4.8 0 8.4 100000 100000 8.2 8.4 0; enddata n=@size (c); min =@sum (l:d*x); @for (c(k)|k#gt#1:
@sum (c(i)|j#ne#k:x(i,k))>=1;
@for (c(j)|j#gt#1#and#j#ne#k:u(j)>=+u(k)+x(k,j)-(n-2)*(1-x(k,j))+
(n-3)*x(j,k)));
@sum
(c(j)|j#gt#1:x(1,j))>=1; @for (l:@bin (x));
@for(c(k)|k#ge#1:@bnd(1,u(k),9999);u(k)<=n-1-(n-2)*x(1,k));
end
通过利用lingo的计算,同样我们可以解出原最短路线的解。
问题三的探究:建立的模型是否满足一次性不重复地经过所有路线回到起点(古典图论问题)
我们需要以下几个规律:
❶如果一个图一次性可以走完各个点,它必须有偶数个奇点。
❷如果还要回到起点,并且不重复地走完所有的路,则所有顶点必须都是偶点。
因此,我们可以看见:
景点中:
存在着奇点B,D。故还是不可能一次性不重复地走过所有路线回到原起点。
但奇点的个数是偶数,故所有景点可以一次性游完,而不需要再考虑反复地问题。
总结:对于一个图(简单图)来说满足上面规律2,即可一次性不重复地走完全部路线;但如果只要走完一次性所有点,则只要满足