一种基于最短路径树的城市K最短路径获取方法

文档序号:36723254发布日期:2024-01-16 12:27阅读:21来源:国知局
一种基于最短路径树的城市K最短路径获取方法

本发明属于城市路网的导航优化领域,具体的说是一种基于最短路径树的城市k最短路径获取方法。


背景技术:

1、随着社会的发展,基于互联网的交通导航给用户带来了越来越大的便利,用户可以在导航开始阶段输入自己的出发地和目的地,就可以获取导航产品自动规划的多个出行路径方案。但随着城市汽车保有量逐步攀升,路网建设相对滞后,交通资源浪费,出行效率低的现象时有发生,不仅给城市居民出行带来不便,也大大降低城市运转效率,给经济发展造成一定的损失。因而,需要研究一种提高规划效率的路径导航方法。

2、然而,现有的k短路规划算法在计算偏移路径时没有利用之前计算的结果,存在大量的重复计算,造成了计算资源的浪费,进而降低了城市交通的运行效率。


技术实现思路

1、本发明是为了解决上述现有技术存在的不足之处,提出一基于最短路径树的城市k最短路径获取方法,以期能利用最短路径树来提高搜索偏移路径的效率,从而能减少重复计算,更快速地得到起终点间的k条最短路径。

2、本发明为达到上述发明目的,采用如下技术方案:

3、本发明一种基于最短路径树的城市k最短路径获取方法的特点在于,是按如下步骤进行:

4、步骤1:构建城市路网;

5、获取实时道路网络数据并得到城市路网g=(v,a,w),v表示交叉口节点集合,且v={v1,v2,v3,…,vi,…,vn},vi表示第i个交叉口节点,i=1,2,3,…,n,n为所述城市路网g中的交叉口节点总数,a表示交叉口节点之间的路段集合,且a={(vi,vj)|i,j=1,2,3,…,n},(vi,vj)表示第i个交叉口节点vi到第j个交叉口节点vj之间的有向路段,w表示交叉口节点之间路段的行车时间集合,w={wij|i,j=1,2,3,…,n},wij为有向路段(vi,vj)的行车时间,若第i个交叉口节点vi到第j个交叉口节点vj之间存在有向路段(vi,vj),则第j个交叉口节点vj为第i个交叉口节点vi的后继交叉口节点,第i个交叉口节点vi为第j个交叉口节点vj的前驱交叉口节点,且ωij>0;若第i个交叉口节点vi到第j个交叉口节点vj之间不存在有向路段(vi,vj),则令ωij=+∞;

6、步骤2:定义参数及初始化;

7、令vstart为起点交叉口节点,vend为终点交叉口节点,且vstart,vend∈v;k为从起点交叉口节点vstart到终点交叉口节点vend的最短路径数量;

8、定义第i个交叉口节点vi的标签集合为d(vi);令d(vi)中第n个子标签为dn(vi)=(λn(vi),in(vi),tn(vi)),其中,λn(vi)表示从起点交叉口节点vstart到第i个交叉口节点vi的第n条路径上vi的前驱交叉口节点;in(vi)表示从起点交叉口节点vstart到前驱交叉口节点λn(vi)的路径序号;tn(vi)表示从起点交叉口节点vstart到第i个交叉口节点vi的第n条路径的行车时间;

9、依据d(vi)中的行车时间,对d(vi)中前k个行车时间最小的子标签构成第i个交叉口+节点vi的排序标签集合记为d′(vi),d′(vi)中第m子标签为d′m(vi)=(λ′m(vi),i′m(vi),t′m(vi));其中,λ′m(vi)表示从起点交叉口节点vstart到第i个交叉口节点vi的第m短路径上vi的前驱交叉口节点;i′m(vi)表示从起点交叉口节点vstart到前驱交叉口节点λ′m(vi)的路径序号;t′m(vi)表示从起点交叉口节点vstart到第i个交叉口节点vi的第m短路径的行车时间;

10、定义回溯标签集合为r,用于任意交叉口节点在路径回溯过程中,存储其所在路径的每一个交叉口节点的标签;

11、定义根路径为从起点交叉口节点vstart到某一交叉口节点的路径,支路径为从某一交叉口节点到终点交叉口节点vend的路径;

12、定义偏移路径信息列表为p,用于存储从起点交叉口节点vstart到终点交叉口节点vend的偏移路径及其行车时间,令p中第u条偏移路径信息为pu=(pathu,ptu),其中,pathu表示第u条偏移路径所经过的各个交叉口节点的集合,ptu表示路径pathu的总行车时间;

13、定义最短路径信息列表为用于存储从起点交叉口节点vstart到终点交叉口节点vend的k条最短路径及其行车时间,令中第k条最短路径信息为其中,表示第k条最短路径所经过的各个交叉口节点的集合;表示路径的总行车时间;

14、定义qt为待搜索标签集合;

15、定义vt是待搜索交叉口节点集合;

16、定义为路程搜索行车时间上界;

17、初始化k=1,

18、初始化起点交叉口节点vstart的标签集合d(vstart)为有序标签集合d′(vstart)的k个子标签均初始化其所有交叉口节点的标签集合均初始化为有序标签集合的k个子标签均初始化将起点交叉口节点vstart的有序标签集合中第一个有序子标签d′1(vstart)加入待搜索标签集合qt,即qt={d′1(vstart)};初始化待搜索交叉口节点集合vt={vstart};初始化偏移路径信息列表p与最短路径信息列表为空列表;

19、步骤3:最短路径树的拓展;

20、步骤3.1:若待搜索标签集合qt为空,转向步骤4;否则,比较待搜索标签集合qt中各个交叉口节点分别与起点交叉口节点vstart之间最短行车时间,并从中选取最小值所对应的交叉口节点记为第c个交叉口节点vc;

21、从待搜索标签集合qt中取出第c个交叉口节点vc的子标签d′1(vc),从待搜索交叉口节点集合vt中删去第c个交叉口节点vc;

22、若vc=vend,将终点交叉口节点vend加入临时偏移路径交叉口节点集合pathtemp,回溯得到从起点交叉口节点vstart到终点交叉口节点vend的最短路径上vend的前驱交叉口节点λ′1(vend),并将λ′1(vend)加入临时偏移路径交叉口节点集合pathtemp,不断回溯直至起点交叉口节点vstart加入临时偏移路径交叉口节点集合pathtemp为止;令pathtemp的行车时间pttemp=t′k(vend),更新临时路径信息ptemp=(pathtemp,pttemp),将ptemp加入到偏移路径信息列表p的尾部;转向步骤4;

23、若则转向步骤4;否则,转向步骤3.2;

24、步骤3.2:更新交叉口节点的标签集合;

25、步骤3.2.1:回溯标签;

26、步骤3.2.1a:令回溯标签集合r={d′1(vc)};

27、步骤3.2.1b:获取从起点交叉口节点vstart到第c个交叉口节点vc的最短路径上vc的前驱交叉口节点λ′1(vc),并将其排序标签集合d′(λ′1(vc))中的第1个子标签d′1(λ′1(vc))加入回溯标签集合r,不断通过前驱交叉口节点信息进行回溯,直至d′1(vstart)加入r为止,转向步骤3.2.2;

28、步骤3.2.2:环路检测;

29、步骤3.2.2a:将第c个交叉口节点vc的所有后继交叉口节点加入临时邻接交叉口节点集合n(vc);

30、步骤3.2.2b:判断临时邻接交叉口节点集合n(vc)是否为空,若为空,转向步骤3.3;否则,取出n(vc)中第一个邻接交叉口节点,记作vsucc,判断vsucc的排序标签集合d′(vsucc)中的第1个子标签d′1(vsucc)∈r,即是否存在环路,若存在,转向步骤3.2.2b;否则,转向步骤3.2.3;

31、步骤3.2.3:更新标签;

32、步骤3.2.3a:计算从起点交叉口节点vstart经过第c个交叉口节点vc到达邻接交叉口节点vsucc的临时行车时间ttemp=t′1(vc)+ωc,succ;其中,t′1(vc)表示从起点交叉口节点vstart到第c个交叉口节点vc的最短路径的行车时间,ωc,succ表示有向路段(vc,vsucc)的行车时间;

33、步骤3.2.3b:若存在1≤a<b≤k使得t′a(vsucc)<ttemp<t′b(vsucc)成立,则遍历第c个交叉口vc的标签集合d(vc),获取使成立的序号n*,令邻接交叉口节点vsucc的第|d(vsucc)|+1个子标签将加入邻接交叉口节点vsucc的标签集合d(vsucc);否则,直接转向步骤3.2.2b;其中,t′a(vsucc)表示从起点交叉口节点vstart到邻接交叉口节点vsucc的第a短路径的行车时间,t′b(vsucc)表示从起点交叉口节点vstart到邻接交叉口节点vsucc的第b短路径的行车时间;

34、步骤3.2.3c:对于任意满足b<r≤k的邻接交叉口节点vsucc的排序标签集合d′(vsucc)中的第r子标签d′r(vsucc),更新d′n(vsucc)=d′n-1(v′succ),并更新d′(vsucc)中第b个子标签

35、步骤3.2.3d:若b=1且将邻接交叉口节点vsucc加入待搜索交叉口节点集合vt;转向步骤3.2.2b;否则,直接转向步骤3.2.2b;

36、步骤3.3:更新待搜索标签集合qt;

37、令待搜索标签集合并将待搜索交叉口节点集合vt中所有交叉口节点的排序标签集合的第1个子标签加入qt;转向步骤3.1;

38、步骤4:获取第k短路径;

39、从偏移路径信息列表p中取行车时间最短的最短偏移路径信息p*=(path*,pt*),其中,path*表示p中最短偏移路径所经过的各个交叉口节点的集合,pt*表示路径path*的总行车时间;

40、令将加入到最短路径信息列表的尾部,将k+1赋值给k,若k>k,则表示已找到从起点交叉口节点vstart到终点交叉口节点vend的前k条最短路径,转向步骤6,否则,转向步骤5;

41、步骤5:获取偏移路径,更新路程搜索行车时间上界;

42、取终点交叉口节点vend的排序标签集合d′(vend)中第k-1个子标签d′k-1(vend)记作当前标签dci(vc),令临时支路径的交叉口节点集合pathtemp1={vend},转向步骤5.2;

43、步骤5.1:回溯路径;

44、将赋值给当前标签dci(vc),若dci(vc)=d1(vstart),转至步骤5.3;否则,将第c个交叉口节点vc加入到临时支路径交叉口节点集合pathtemp1的首部,转至步骤5.2;

45、步骤5.2:获取偏移路径;

46、将第c个交叉口节点vc的所有前驱交叉口节点加入临时邻接交叉口节点集合n(vc),转向步骤5.2.1;

47、步骤5.2.1:判断临时邻接交叉口节点集合n(vc)是否为空,若为空,转向步骤5.1;否则,取出n(vc)中的第一个邻接交叉口节点,记作vpred,令临时根路径的交叉口节点集合pathtemp2={vpred},并将t′k-1(vend)-t′ci(vc)+wpred,c+t′1(vpred)赋值给临时路径行车时间ttemp,转向步骤4.2.2;其中,t′k-1(vend)表示从起点交叉口节点vstart到终点交叉口节点vend的第k-1短路径的行车时间,t′ci(vc)表示从起点交叉口节点vstart到第c个交叉口节点vc的第ci短路径的行车时间,wpred,c表示有向路段(vpred,vc)的行车时间,t′1(vpred)表示从起点交叉口节点vstart到邻接交叉口节点vpred的最短路径的行车时间;

48、步骤5.2.2:若vpred=vstart,更新临时路径信息ptemp=(pathtemp∪pathtem1,ttemp),否则,转至步骤5.2.3;

49、若且将ptemp加入到偏移路径信息列表p的尾部,转至步骤5.1;否则,直接转至步骤5.1;

50、步骤5.2.3:更新vpred为起点交叉口节点vstart到vpred的最短路径上vpred的前驱交叉口节点λ′1(vpred),将更新后的vpred加入临时根路径交叉口节点集合pathtemp2的首部;转向步骤5.2.2;

51、步骤5.3:获取第k短路径的行车时间上界;

52、从偏移路径信息列表p中获取最短偏移路径行程时间pt*,并将pt*赋值给路程搜索行车时间上界若待搜索标签集合qt为空,则转向步骤4;否则,转向步骤3;

53、步骤6:输出前k条最短路径信息;

54、从最短路径信息列表中获取得到从起点交叉口节点vstart到终点交叉口节点vend的k条最短路径及其行车时间并输出。

55、本发明一种电子设备,包括存储器以及处理器的特点在于,所述存储器用于存储支持处理器执行所述城市k最短路径获取方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。

56、本发明一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序的特点在于,所述计算机程序被处理器运行时执行所述城市k最短路径获取方法的步骤。

57、与现有技术相比,本发明的有益效果在于:

58、1、本发明提出的k最短路径方法应用了“树”与“偏移路径”的概念,以起点交叉口节点为根节点,向外拓展最短路径树,在搜索得到第k短路径后依据最短路径树拼接得到周围的偏移路径,对之前迭代计算的结果进行了重复利用,使得在搜索k+1条短路径时,不再需要从新搜索,省去了许多不必要的迭代步骤,提高了路径搜索的效率。

59、2、本发明引入了多层标签的概念,每个交叉口节点记录多个由起点交叉口节点到该节点的不同路径及其对应的行车时间。这与传统方法中每个交叉口节点仅记录单一最短路径行车时间不同,可以减少大量无效遍历和重复计算。本发明通过更全面地记录前轮迭代结果,使后续迭代时可以直接复用这些结果,从而加速了起终点交叉口节点间k条最短路径的搜索速度。

60、3、本发明所提出的方法在应用于大规模路网时具有更加出色的搜索效率,现有导航算法在面对大规模路网时会产生许多不必要的计算资源浪费,而本发明提出的算法借用最短路径树的概念,节省了计算资源的同时,保证了运算效率,可以提高导航软件的响应速度,缩小响应时间,为人们提供更好的导航服务。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1