最短路问题在旅游线路优化中的应用_曹旭
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最
短
路
问
最短路问题在旅游线路优化中的应用
题 在
旅
Using Shortest Path Problem to Optimizated the Tourist Route
游
线
路
曹 旭 张吉吉 马少仙
优
Cao Xu Zhang Zhe Ma Shaoxian
化 中
(西北民族大学数学与计算机科学学院,甘肃 兰州 730030)
纳起来,最短路问题一般归为两类:一类是求从某个 顶点到其他顶点的最短路径;另一类是求图中每一 对顶点间的最短路径。关于最短路的研究,目前已 经有很多算法,但是基本上是以 Dijkstra 和 Floyd 两 种算法为基础,本文利用 Floyd 算法研究了最短路 问题在旅游线路优化中的应用。 1 求两个旅游景点间的最短路的 Floyd 算法及其 Matlab 实现
图一 甘肃省及周边地区旅游地图 在给定的赋权图 G 中,求两个互异顶点间的最 短路径称之为最短路问题。最短路问题是重要的最 优化问题之一,也是图论研究中的一个经典算法问 题。最短路问题的应用背景十分广泛,本文将最短路 问题应用到旅游线路设计中具有很大实用价值。归
115
科技广场 2012.2
表一 各个旅游景点间的距离表(单位:公里)
作者简介 曹旭(1987—),男,汉族,宁夏石嘴山人,研究
生,主要研究方向:系统建模与分析; 张吉吉(1986—),男,汉族,河南漯河人,研究生,
主要研究方向:系统建模与分析; 马少仙(1964—),女,回族,甘肃兰州人,硕士生
1.1 最短路的 Floyd 算法 设图 G=(V,E),顶点集记作{v1,v2,…,vn},G 的 每条边赋有一个权值,ωij 表示边 vivj 上的权,若 vi、 vj 不相邻,则令 ωij=+∞。Floyd 算法利用了动态规 划的基本思想,即若 dik 是顶点 vi 到 vk 的最短距离, dkj 是顶点 vk 到顶点 vj 的最短距离,则 dij=dik+dkj 是 顶点 vi 到顶点 vj 的最短距离。对于任何一个顶点 vk∈V,顶点 vi 到顶点 vj 的最短距离经过 vk 或者不 经过 vk。比较 dij 和 dik+dkj 的值,若 dij>dik+dkj,则令 dij=dik+dkj,保持 dij 是当前搜索的顶点 vi 到顶点 vj 的 最短距离。重复这一过程,最后搜索完所有的顶点 时,就是顶点到顶点的最短距离。Floyd 算法的基本 步骤如下: 步骤 1:输入加权图,存储在矩阵 W。对于所有 的 i、j,有 dij=ωij,k=1。
参考文献 [1]王海英,黄强,李传涛,褚宝增.图论算法及其
Matlab 实现[M].北京:北京航空航天大学出版社, 2010.
[2]徐俊明.图论及其应用[M].北京:中国科学技 术大学出版社,1998.
[3]孙祥,徐流美,吴清.Matlab7.0 基础教程[M]. 北京:清华大学出版社,2005.
[4]吴凯.旅游线路设计与优化中的运筹学问题 [J].旅游科学,2004,18(01).
兰州火车站出发,前往敦煌鸣沙山月牙泉旅游,如何 选择旅游线路的问题。再比如游客在旅行途中必须 去拉卜楞寺和嘉峪关观光,即选定两个旅游景点后 到达目的地的旅行线路设计。将旅游景点看成图中 的顶点,各个景点的交通路线可看成图上的边,边上
★基金项目:西北民族大学研究生科研创新项目,项 目编号:YCX10112
步骤 2:更新 dij,对所有的 i、j,若 dij>dik+dkj,则令 dij=dik+dkj。
步骤 3:若 dij<0,则存在一条含有顶点 vi 的负回 路,停止;或者 k=n 停止;否则跳转到步骤 2。
1.2 最短路的 Floyd 算法的 Matlab 实现 function [P u]=f_path(W) % W 表示权值矩阵 % P 表示最短路 % u 表示最短路的权和 % 初始化,步骤 1 n=length(W); U=W; m=1; % 步骤 2 while m<=n for i=1:n for j=1:n if U(i,j)> U(i,m)+ U(m,j); U(i,j)= U(i,m)+ U(m,j); end end end m=m+1; end u=U(1,n); %输出最短路的顶点 P1=zeros(1,n); k=1; P1(k)=n; V=ones(1,n)*inf; kk=n; while kk~=1 for i=1:n V(1,i)=U(1,kk)-W(i,kk) if V(1,i)==U(1,i) P1(k+1)=i; kk=i;
end
线
路
k=k+1;
u=U(k1,k2);
优
end
%求任意给定的两个顶点间的最短路所包含的
化 中
P;
顶点
的
1.3 实例分析
P1=zeros(1,n);
应 用
求兰州火车站到麦积山的旅游最短距离和最短
k=1;
路。运行 Matlab 程序:
P1(k)=k2;
P=
V=ones(1,n)*inf;
1 2 14
wrow=find(P1~=0);
function[P u]=n2shorf(W,k1,k2)
for j=length(wrow):(-1):1
%P 为两个顶点 k1、k2 之间的最短路,顶点以经
P(k)=P1(wrow(j));
过次序进行排序
k=k+1;
%u 为最短路的长度
end
%初始化
P;
n=length(W);
在旅游过程中经常会遇到这样的问题:倘若在
kk=i;
任意旅游景点,想知道下一任意旅游景点的最短路。
k=k+1;
这就是图中任意两顶点最短路的求法。求任意两顶
end
点最短路的算法思想是利用 Floyd 算法思想,首先
end
求得最短距离矩阵,然后求任意给定两个顶点间的
end
最短路包含的顶点。
k=1;
2.1 算法的 Matlab 实现
else d=dt2; P=[p4 p5(2:length(p5)) p6(2:length(p6))]; end P; d; 3.3 实例分析 假设游客从兰州火车站出发前往敦煌鸣沙山月 牙泉旅行,途中必须经过拉卜楞寺和嘉峪关文物景 区,怎么设计旅游线路使旅行线路最短。运行上述 Matlab 程序得到最短路为:兰州火车站→拉卜楞 寺→塔尔寺大佛寺→嘉峪关文物景区→敦煌鸣沙山 月牙泉;最短距离是 1576 公里。 本文利用 Floyd 算法将最短路问题应用到旅游 线路设计中,有一定的现实意义,对旅行社和旅游者 设计旅游线路帮助很大。但是此模型只考虑了单目 标距离最优,而没有同时考虑时间、费用,设计出多 目标最优的旅游线路。
选取了甘肃及周边地区 13 个旅游景点,求得从任意景点出发到任意目的景点的最短路,以及途中必须给定
两个景点的最短路问题。
关键词:最短路;旅游线路优化
中图分类号:F590
文献标识码:A
文章编号:1671-4792-(2012)2-0115-04
Abstract:This paper using the Floyd algorithm to explore the shortest path problem,through Matlab after its
如图一所示,通过上网收集到各个旅游景点之间的
距离如表一所示。在表一中,0 表示兰州火车站,1— 13 分别表示甘肃省及周边旅游景点兴隆山、嘉峪关
文物景区、拉卜楞寺、崆峒山、雷台、大佛寺、敦煌、黄
河石林、贵清山、青海湖鸟岛景区、塔尔寺、沙坡头、 麦积山。∞ 表示这两个旅游景点之间没有直接到达 的交通线路。如何求出任意两点之间的最短距离以 及最短路对旅客来说显得尤为重要,比如游客想从
116
k=k+1;
for j=1:n
end
if U(i,j)>U(i,m)+U(m,j)
end
U(i,j)=U(i,m)+U(m,j)
最 短
end
end
路
k=1;
end
问 题
wrow=find(P1~=0);
end
在
旅
for j=length(wrow): (-1):1
m=m+1
游
P(k)=P1(wrow(j));
kk=k2;
u=
while kk~=k1
350
for i=1:n
即从兰州火车站到麦积山的旅游最短路是兰州
V(1,i)=U(k1,kk)-W(i,kk);
火车站到兴隆山到麦积山,最短距离是 350 公里
if V(1,i)==U(k1,i)
2 求任意两景点间最短路的算法及其 Matlab 实现
P1(k+1)=i;
当旅行者在旅游过程中务必经过指定的两个旅 游景点时,旅游最短路设计等价于指定图两顶点的 最短路求法。
3.1 算法思想 由起始点 k1 到终点 k2,经过指定的顶点 t1、t2 的 最短路经过四个顶点的顺序只能有两种情况 k1→ t1→t2→k2 或者 k2→t2→t1→k1。若要满足所求得的路 是从始点 k1 到达终点 k2 的最短路,则在四个顶点中 经过相邻顶点之间的路一定是最短路,故只需分别 计算顶点 k1→t1,t1→t2,t2→k2 和 k1→t2,t2→t,t1→k2 之 间的最短路;然后把前面三者的距离加起来得到 d1, 把后三个加起来得到 d2;比较 d1 和 d2 的值,谁小则 能作为始点 k1 到终点 k2 经过指定的顶点 t1、t2 的最 短路。 3.2 算法的 Matlab 实现 function[P d]=cn2shorf(W,k1,k2,t1,t2) % k1 始点,k2 终点,t1、t2 必须经过的两点 % P 程序最终获得的路,d 表示路的长度 [p1 d1]=n2shorf(W,k1,t1); [p2 d2]=n2shorf(W,t1,t2); [p3 d3]=n2shorf(W,t2,k2); dt1=d1+d2+d3; [p4 d4]=n2shorf(W,k1,t2); [p5 d5]=n2shorf(W,t2,t1); [p6 d6]=n2shorf(W,t1,k2); dt2=d4+d5+d6; if dt1<dt2 d=dt1; P=[p1 p2(2:length(p2)) p3(2:length(p3))];
2.2 实例分析
U=W;
分别求出敦煌鸣沙山月牙泉风景区到麦积山,
m=1;
拉卜楞寺到沙坡头的最短距离和最短路。运行
%利用求最短路的 Floyd 算法的思想求最短距 Matlab 程序得到敦煌鸣沙山月牙泉到麦积山的最
离矩阵
短路为:敦煌鸣沙山月牙泉→青海湖→塔尔寺→(兰
while m<=n
州火车站)→兴隆山→麦积山,最短距离为 1042 公
application to designed tourist route. Select 13 attractions in the surrounding area in gansu province, get from any
attractions to any purpHale Waihona Puke Baiduse of scenic spots the shortest path and given two spots on the most Shortest path problem.
Keywords: Shortest Path; Optimizated the Tourist Route
给定旅游地图,游客在旅行过程中总想从出发 的权重代表从一个景点到另一个景点的距离或者时
地到目的地的距离最短,以节省费用和时间。例如游 间或者费用。上面的问题都可以利用图论中最短路
客选取甘肃省及周边地区 13 个旅游景点,旅游地图 问题解决。
for i=1:n
里;
117
科技广场 2012.2
拉卜楞寺到沙坡头的最短路为:拉卜楞寺→(兰 州火车站)→黄河石林→沙坡头,最短距离是 556 公 里。
假设外地游客来兰州,他在兰州火车站看到兰 州旅游地图,想知道从兰州火车站到其他 13 个旅游 景点的最短距离和最短路,同样可以由上面叙述的 方法获得。 3 求必须通过指定点的最短路的算法及其 Matlab 实现
的
(School of Mathematics and Computer,Northwest University for Nationalities,Gansu Lanzhou 730030)
应 用
摘 要:本文利用 Floyd 算法探究了最短路问题,经过 Matlab 实现后将其应用到旅游线路优化设计中。
短
路
问
最短路问题在旅游线路优化中的应用
题 在
旅
Using Shortest Path Problem to Optimizated the Tourist Route
游
线
路
曹 旭 张吉吉 马少仙
优
Cao Xu Zhang Zhe Ma Shaoxian
化 中
(西北民族大学数学与计算机科学学院,甘肃 兰州 730030)
纳起来,最短路问题一般归为两类:一类是求从某个 顶点到其他顶点的最短路径;另一类是求图中每一 对顶点间的最短路径。关于最短路的研究,目前已 经有很多算法,但是基本上是以 Dijkstra 和 Floyd 两 种算法为基础,本文利用 Floyd 算法研究了最短路 问题在旅游线路优化中的应用。 1 求两个旅游景点间的最短路的 Floyd 算法及其 Matlab 实现
图一 甘肃省及周边地区旅游地图 在给定的赋权图 G 中,求两个互异顶点间的最 短路径称之为最短路问题。最短路问题是重要的最 优化问题之一,也是图论研究中的一个经典算法问 题。最短路问题的应用背景十分广泛,本文将最短路 问题应用到旅游线路设计中具有很大实用价值。归
115
科技广场 2012.2
表一 各个旅游景点间的距离表(单位:公里)
作者简介 曹旭(1987—),男,汉族,宁夏石嘴山人,研究
生,主要研究方向:系统建模与分析; 张吉吉(1986—),男,汉族,河南漯河人,研究生,
主要研究方向:系统建模与分析; 马少仙(1964—),女,回族,甘肃兰州人,硕士生
1.1 最短路的 Floyd 算法 设图 G=(V,E),顶点集记作{v1,v2,…,vn},G 的 每条边赋有一个权值,ωij 表示边 vivj 上的权,若 vi、 vj 不相邻,则令 ωij=+∞。Floyd 算法利用了动态规 划的基本思想,即若 dik 是顶点 vi 到 vk 的最短距离, dkj 是顶点 vk 到顶点 vj 的最短距离,则 dij=dik+dkj 是 顶点 vi 到顶点 vj 的最短距离。对于任何一个顶点 vk∈V,顶点 vi 到顶点 vj 的最短距离经过 vk 或者不 经过 vk。比较 dij 和 dik+dkj 的值,若 dij>dik+dkj,则令 dij=dik+dkj,保持 dij 是当前搜索的顶点 vi 到顶点 vj 的 最短距离。重复这一过程,最后搜索完所有的顶点 时,就是顶点到顶点的最短距离。Floyd 算法的基本 步骤如下: 步骤 1:输入加权图,存储在矩阵 W。对于所有 的 i、j,有 dij=ωij,k=1。
参考文献 [1]王海英,黄强,李传涛,褚宝增.图论算法及其
Matlab 实现[M].北京:北京航空航天大学出版社, 2010.
[2]徐俊明.图论及其应用[M].北京:中国科学技 术大学出版社,1998.
[3]孙祥,徐流美,吴清.Matlab7.0 基础教程[M]. 北京:清华大学出版社,2005.
[4]吴凯.旅游线路设计与优化中的运筹学问题 [J].旅游科学,2004,18(01).
兰州火车站出发,前往敦煌鸣沙山月牙泉旅游,如何 选择旅游线路的问题。再比如游客在旅行途中必须 去拉卜楞寺和嘉峪关观光,即选定两个旅游景点后 到达目的地的旅行线路设计。将旅游景点看成图中 的顶点,各个景点的交通路线可看成图上的边,边上
★基金项目:西北民族大学研究生科研创新项目,项 目编号:YCX10112
步骤 2:更新 dij,对所有的 i、j,若 dij>dik+dkj,则令 dij=dik+dkj。
步骤 3:若 dij<0,则存在一条含有顶点 vi 的负回 路,停止;或者 k=n 停止;否则跳转到步骤 2。
1.2 最短路的 Floyd 算法的 Matlab 实现 function [P u]=f_path(W) % W 表示权值矩阵 % P 表示最短路 % u 表示最短路的权和 % 初始化,步骤 1 n=length(W); U=W; m=1; % 步骤 2 while m<=n for i=1:n for j=1:n if U(i,j)> U(i,m)+ U(m,j); U(i,j)= U(i,m)+ U(m,j); end end end m=m+1; end u=U(1,n); %输出最短路的顶点 P1=zeros(1,n); k=1; P1(k)=n; V=ones(1,n)*inf; kk=n; while kk~=1 for i=1:n V(1,i)=U(1,kk)-W(i,kk) if V(1,i)==U(1,i) P1(k+1)=i; kk=i;
end
线
路
k=k+1;
u=U(k1,k2);
优
end
%求任意给定的两个顶点间的最短路所包含的
化 中
P;
顶点
的
1.3 实例分析
P1=zeros(1,n);
应 用
求兰州火车站到麦积山的旅游最短距离和最短
k=1;
路。运行 Matlab 程序:
P1(k)=k2;
P=
V=ones(1,n)*inf;
1 2 14
wrow=find(P1~=0);
function[P u]=n2shorf(W,k1,k2)
for j=length(wrow):(-1):1
%P 为两个顶点 k1、k2 之间的最短路,顶点以经
P(k)=P1(wrow(j));
过次序进行排序
k=k+1;
%u 为最短路的长度
end
%初始化
P;
n=length(W);
在旅游过程中经常会遇到这样的问题:倘若在
kk=i;
任意旅游景点,想知道下一任意旅游景点的最短路。
k=k+1;
这就是图中任意两顶点最短路的求法。求任意两顶
end
点最短路的算法思想是利用 Floyd 算法思想,首先
end
求得最短距离矩阵,然后求任意给定两个顶点间的
end
最短路包含的顶点。
k=1;
2.1 算法的 Matlab 实现
else d=dt2; P=[p4 p5(2:length(p5)) p6(2:length(p6))]; end P; d; 3.3 实例分析 假设游客从兰州火车站出发前往敦煌鸣沙山月 牙泉旅行,途中必须经过拉卜楞寺和嘉峪关文物景 区,怎么设计旅游线路使旅行线路最短。运行上述 Matlab 程序得到最短路为:兰州火车站→拉卜楞 寺→塔尔寺大佛寺→嘉峪关文物景区→敦煌鸣沙山 月牙泉;最短距离是 1576 公里。 本文利用 Floyd 算法将最短路问题应用到旅游 线路设计中,有一定的现实意义,对旅行社和旅游者 设计旅游线路帮助很大。但是此模型只考虑了单目 标距离最优,而没有同时考虑时间、费用,设计出多 目标最优的旅游线路。
选取了甘肃及周边地区 13 个旅游景点,求得从任意景点出发到任意目的景点的最短路,以及途中必须给定
两个景点的最短路问题。
关键词:最短路;旅游线路优化
中图分类号:F590
文献标识码:A
文章编号:1671-4792-(2012)2-0115-04
Abstract:This paper using the Floyd algorithm to explore the shortest path problem,through Matlab after its
如图一所示,通过上网收集到各个旅游景点之间的
距离如表一所示。在表一中,0 表示兰州火车站,1— 13 分别表示甘肃省及周边旅游景点兴隆山、嘉峪关
文物景区、拉卜楞寺、崆峒山、雷台、大佛寺、敦煌、黄
河石林、贵清山、青海湖鸟岛景区、塔尔寺、沙坡头、 麦积山。∞ 表示这两个旅游景点之间没有直接到达 的交通线路。如何求出任意两点之间的最短距离以 及最短路对旅客来说显得尤为重要,比如游客想从
116
k=k+1;
for j=1:n
end
if U(i,j)>U(i,m)+U(m,j)
end
U(i,j)=U(i,m)+U(m,j)
最 短
end
end
路
k=1;
end
问 题
wrow=find(P1~=0);
end
在
旅
for j=length(wrow): (-1):1
m=m+1
游
P(k)=P1(wrow(j));
kk=k2;
u=
while kk~=k1
350
for i=1:n
即从兰州火车站到麦积山的旅游最短路是兰州
V(1,i)=U(k1,kk)-W(i,kk);
火车站到兴隆山到麦积山,最短距离是 350 公里
if V(1,i)==U(k1,i)
2 求任意两景点间最短路的算法及其 Matlab 实现
P1(k+1)=i;
当旅行者在旅游过程中务必经过指定的两个旅 游景点时,旅游最短路设计等价于指定图两顶点的 最短路求法。
3.1 算法思想 由起始点 k1 到终点 k2,经过指定的顶点 t1、t2 的 最短路经过四个顶点的顺序只能有两种情况 k1→ t1→t2→k2 或者 k2→t2→t1→k1。若要满足所求得的路 是从始点 k1 到达终点 k2 的最短路,则在四个顶点中 经过相邻顶点之间的路一定是最短路,故只需分别 计算顶点 k1→t1,t1→t2,t2→k2 和 k1→t2,t2→t,t1→k2 之 间的最短路;然后把前面三者的距离加起来得到 d1, 把后三个加起来得到 d2;比较 d1 和 d2 的值,谁小则 能作为始点 k1 到终点 k2 经过指定的顶点 t1、t2 的最 短路。 3.2 算法的 Matlab 实现 function[P d]=cn2shorf(W,k1,k2,t1,t2) % k1 始点,k2 终点,t1、t2 必须经过的两点 % P 程序最终获得的路,d 表示路的长度 [p1 d1]=n2shorf(W,k1,t1); [p2 d2]=n2shorf(W,t1,t2); [p3 d3]=n2shorf(W,t2,k2); dt1=d1+d2+d3; [p4 d4]=n2shorf(W,k1,t2); [p5 d5]=n2shorf(W,t2,t1); [p6 d6]=n2shorf(W,t1,k2); dt2=d4+d5+d6; if dt1<dt2 d=dt1; P=[p1 p2(2:length(p2)) p3(2:length(p3))];
2.2 实例分析
U=W;
分别求出敦煌鸣沙山月牙泉风景区到麦积山,
m=1;
拉卜楞寺到沙坡头的最短距离和最短路。运行
%利用求最短路的 Floyd 算法的思想求最短距 Matlab 程序得到敦煌鸣沙山月牙泉到麦积山的最
离矩阵
短路为:敦煌鸣沙山月牙泉→青海湖→塔尔寺→(兰
while m<=n
州火车站)→兴隆山→麦积山,最短距离为 1042 公
application to designed tourist route. Select 13 attractions in the surrounding area in gansu province, get from any
attractions to any purpHale Waihona Puke Baiduse of scenic spots the shortest path and given two spots on the most Shortest path problem.
Keywords: Shortest Path; Optimizated the Tourist Route
给定旅游地图,游客在旅行过程中总想从出发 的权重代表从一个景点到另一个景点的距离或者时
地到目的地的距离最短,以节省费用和时间。例如游 间或者费用。上面的问题都可以利用图论中最短路
客选取甘肃省及周边地区 13 个旅游景点,旅游地图 问题解决。
for i=1:n
里;
117
科技广场 2012.2
拉卜楞寺到沙坡头的最短路为:拉卜楞寺→(兰 州火车站)→黄河石林→沙坡头,最短距离是 556 公 里。
假设外地游客来兰州,他在兰州火车站看到兰 州旅游地图,想知道从兰州火车站到其他 13 个旅游 景点的最短距离和最短路,同样可以由上面叙述的 方法获得。 3 求必须通过指定点的最短路的算法及其 Matlab 实现
的
(School of Mathematics and Computer,Northwest University for Nationalities,Gansu Lanzhou 730030)
应 用
摘 要:本文利用 Floyd 算法探究了最短路问题,经过 Matlab 实现后将其应用到旅游线路优化设计中。