CN114093188B - 一种基于spfa算法的城市k则最短路径获取方法 - Google Patents

一种基于spfa算法的城市k则最短路径获取方法 Download PDF

Info

Publication number
CN114093188B
CN114093188B CN202111392913.9A CN202111392913A CN114093188B CN 114093188 B CN114093188 B CN 114093188B CN 202111392913 A CN202111392913 A CN 202111392913A CN 114093188 B CN114093188 B CN 114093188B
Authority
CN
China
Prior art keywords
intersection
node
sub
label
nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111392913.9A
Other languages
English (en)
Other versions
CN114093188A (zh
Inventor
丁建勋
樊哲延
颜江楠
曾嘉涵
殷慧娟
黄林煊
樊银超
徐小明
龙建成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hefei University of Technology
Original Assignee
Hefei University of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hefei University of Technology filed Critical Hefei University of Technology
Priority to CN202111392913.9A priority Critical patent/CN114093188B/zh
Publication of CN114093188A publication Critical patent/CN114093188A/zh
Application granted granted Critical
Publication of CN114093188B publication Critical patent/CN114093188B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G08SIGNALLING
    • G08GTRAFFIC CONTROL SYSTEMS
    • G08G1/00Traffic control systems for road vehicles
    • G08G1/09Arrangements for giving variable traffic instructions
    • G08G1/0962Arrangements for giving variable traffic instructions having an indicator mounted inside the vehicle, e.g. giving voice messages
    • G08G1/0968Systems involving transmission of navigation instructions to the vehicle
    • G08G1/096805Systems involving transmission of navigation instructions to the vehicle where the transmitted instructions are used to compute a route
    • GPHYSICS
    • G08SIGNALLING
    • G08GTRAFFIC CONTROL SYSTEMS
    • G08G1/00Traffic control systems for road vehicles
    • G08G1/09Arrangements for giving variable traffic instructions
    • G08G1/0962Arrangements for giving variable traffic instructions having an indicator mounted inside the vehicle, e.g. giving voice messages
    • G08G1/0968Systems involving transmission of navigation instructions to the vehicle
    • G08G1/096833Systems involving transmission of navigation instructions to the vehicle where different aspects are considered when computing the route
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02TCLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO TRANSPORTATION
    • Y02T10/00Road transport of goods or passengers
    • Y02T10/10Internal combustion engine [ICE] based vehicles
    • Y02T10/40Engine management systems

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Radar, Positioning & Navigation (AREA)
  • Remote Sensing (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Navigation (AREA)

Abstract

本发明公开了一种基于SPFA算法的城市K则最短路径获取方法,包括:1.获取实时城市道路路网图;2.为每个交叉口节点初始化可变列表标签;3.通过Qk t中的交叉口节点完成第k短路径的前向更新,并进行可变列表标签中的***排序;4.对无后续作用的交叉口节点进行适当剪枝;5.找到从起点交叉口节点vs至终点交叉口节点ve的若干条距离值及最短路径,并回溯和输出。本发明能根据当前时刻终点交叉口节点ve的距离值对其余交叉口节点进行剪枝操作来缩小有效更新范围,避免冗余计算,并充分利用最短路算法松弛过程中的信息求解K则最短路径,从而满足多路径导航选择的现实需求。

Description

一种基于SPFA算法的城市K则最短路径获取方法
技术领域
本发明属于车载导航路径优化领域,具体的说是一种基于SPFA算法的城市K则最短路径的获取方法。
背景技术
随着城市道路网规模的不断扩大,一对起讫点之间的旅程选择可以有多条不同路径,并且随着当前导航用户的使用量增大,以及导航效果与实时路况的信息时效性息息相关,人们对于算法的要求越来越高。
常见的导航中为获取最短路径所使用的算法,其计算过程在大规模城市道路网中所涉及的范围非常大,耗时和资源占用随之增大,因此,用资源数量换取效率质量的方法是普遍的应对方案;在进一步解决K则最短路问题上,不同学者设计了如“重构网络”、“删边法”等不同算法来应对,然而这些方法应用在计算机处理器上无疑使得工作负荷量庞大,不适用于对效率有较高要求的实时性导航的理念。
当今导航用户的现实需求越来越高,在保证求解效率和最优路径质量的基础上,不予遗漏地提供K条最短路选择是城市导航设备发展的趋势之一。
发明内容
本发明是为了解决上述现有技术存在的不足之处,提出一种基于SPFA算法的城市K则最短路径的获取方法,以期能在有效提升大规模路网导航规划的计算效率的同时,满足用户的多路径导航需求。
本发明为达到上述发明目的,采用如下技术方案:
本发明一种基于SPFA算法的城市K则最短路径获取方法的特点是按如下步骤进行:
步骤1:定义参数并初始化;
获取实时道路网络数据并得到城市路网图G=(V,A),V表示交叉口节点集合,且V={v1,v2,v3,...,vn,...,vN},vn表示第n个交叉口节点,n=1,2,3...N,N表示交叉口节点的总数;令vs表示起点交叉口节点,ve表示终点交叉口节点;任意第n个交叉口节点vn具有可变列表标签D(vn),其中,第k个子标签为(dk(vn),pk(vn)),dk(vn)表示从起点交叉口节点vs到达城市路网图G中第n个交叉口节点vn的当前第k短路径距离值,pk(vn)表示到达第n个交叉口节点vn所需路径距离值dk(vn)所对应的vn的前驱交叉口节点子标签信息;A表示交叉口节点之间的有向路段集合,且A={aij=(vi,vj)|i,j=1,2,...Q},(vi,vj)表示第i个交叉口vi到第j个交叉口vj之间的路段,令ωi,j为路段(vi,vj)的权值,若交叉口节点vi和vj之间没有路段相连,则令ωi,j=+∞;
定义所需最短路径条数为K;
定义列表R,用于任意交叉口节点在路径回溯过程中,存储其所在路径的每一个前驱交叉口节点;
定义列表
Figure BDA0003369388280000021
用于存储当前第t次迭代时,更新终点交叉口节点ve的第k条最短路径的交叉口节点所对应的可变列表标签中的子标签;
定义集合
Figure BDA0003369388280000022
用于暂存备用交叉口节点所对应的可变列表标签中的子标签;
初始化可变列表标签D(vn),n∈N,vn≠vs,其中第一个子标签(d1(vn),p1(vn))为
Figure BDA0003369388280000023
即最短路径距离值d1(vn)初始化为+∞,并记其前驱交叉口点p1(vn)初始化为
Figure BDA0003369388280000024
其余所有子标签均为空;初始化起点交叉口节点vs的可变列表标签D(vs)的第一个子标签为
Figure BDA0003369388280000025
初始化k=1,t=1;
初始化列表
Figure BDA0003369388280000026
即加入起点交叉口节点vs的第一个子标签;
步骤2:计算第k短路径;
Figure BDA0003369388280000027
时,转步骤2.6;否则,从
Figure BDA0003369388280000028
中取得第一个子标签
Figure BDA0003369388280000029
1≤k'≤k;然后创建集合N(vfirst),并加入当前交叉口节点vfirst的所有邻接交叉口节点;
步骤2.1:前向搜索:
取出N(vfirst)中第一个邻接交叉口节点,记作vfirst,next,然后转步骤2.1.1;
步骤2.1.1:环路检测;
步骤2.1.1.1:清空R后,通过vfirst,next的前驱交叉口节点vfirst的第k'个子标签
Figure BDA00033693882800000210
取出前驱交叉口节点子标签信息
Figure BDA00033693882800000211
其对应的节点作为vfirst的前驱交叉口节点vfirst,pre,并将vfirst,pre存入列表R中;
步骤2.1.1.2:再根据步骤2.1.1.1中取出的vfirst,pre的子标签
Figure BDA0003369388280000031
1≤k”≤k';取出前驱交叉口节点子标签信息
Figure BDA0003369388280000032
其对应的节点作为vfirst,pre的前驱交叉口节点并存入列表R中。同理继续回溯寻找前驱交叉口节点,直到所取出的前驱交叉口节点子标签信息为
Figure BDA0003369388280000033
即回溯至起点交叉口vs时为止;
步骤2.1.1.3:若
Figure BDA0003369388280000034
即完成vfirst的所有邻接交叉口节点的更新,转步骤2.5;若
Figure BDA0003369388280000035
且列表R内包含通过前向更新得到的邻接交叉口节点vfirst,next,则表明vfirst,next的引入使得环路存在,并返回步骤2.1;否则,转步骤2.1.2继续执行;
步骤2.1.2:更新邻接交叉口节点的距离值;
根据子标签
Figure BDA0003369388280000036
中的
Figure BDA0003369388280000037
计算从起点交叉口节点vs经过vfirst到达vfirst,next的临时距离值
Figure BDA0003369388280000038
其中,ωfirst,next表示从vfirst到达vfirst,next的相连路径的路段权值;
步骤2.2:***排序;
将临时距离值dt(vfirst,next)与vfirst,next的可变列表标签D(vfirst,next)中的所有子标签的路径距离值进行升序排序,得到dt(vfirst,next)在D(vfirst,next)中的排序序号为
Figure BDA0003369388280000039
从而将(dt(vfirst,next),vfirst)***D(vfirst,next)中的第
Figure BDA00033693882800000310
位置上,并记为
Figure BDA00033693882800000311
其中,
Figure BDA00033693882800000312
步骤2.3:更新集合
Figure BDA00033693882800000313
将序号
Figure BDA00033693882800000314
Figure BDA00033693882800000315
的子标签
Figure BDA00033693882800000316
作为备用子标签,存入集合
Figure BDA00033693882800000317
中;
将当前
Figure BDA00033693882800000318
中满足
Figure BDA00033693882800000319
的距离值的子标签从
Figure BDA00033693882800000320
移入
Figure BDA00033693882800000321
中,其中1≤k'≤k;
同时将当前
Figure BDA00033693882800000322
中满足
Figure BDA00033693882800000323
Figure BDA00033693882800000324
的子标签从
Figure BDA00033693882800000325
中移入
Figure BDA00033693882800000326
步骤2.4:第一层循环:遍历当前点vfirst的所有邻接节点;
Figure BDA00033693882800000327
则表明仍存在未完成更新的邻接交叉口节点,并返回步骤2.1;直至
Figure BDA0003369388280000041
即完成vfirst的所有邻接交叉口节点的更新,转步骤2.5;
步骤2.5:更新列表
Figure BDA0003369388280000042
先将vfirst的子标签
Figure BDA0003369388280000043
Figure BDA0003369388280000044
中删除;
然后,将步骤2.1至步骤2.4中更新出的所有邻接交叉口节点的子标签中的距离值
Figure BDA0003369388280000045
满足以下三个条件的对应子标签加入
Figure BDA0003369388280000046
中;
(1)子标签的下标序号
Figure BDA0003369388280000047
(2)子标签不属于集合
Figure BDA0003369388280000048
(3)邻接交叉口节点vfirst,next≠ve
步骤2.6:第二层循环:遍历
Figure BDA0003369388280000049
中的所有节点;
Figure BDA00033693882800000410
则表明终点交叉口节点vt的第k短路径确定,并执行步骤3;否则,将t+1赋值给t,返回步骤2.1;
步骤3:第三层循环:依次获得K条最短路;
当k=K时或者终点交叉口节点ve的可变列表标签D(ve)中的第k位子标签的距离值dk(ve)=+∞,且k≠1时,则执行步骤4;否则,将k+1赋值给k,并将满足以下两个条件的交叉口节点的所有子标签加入
Figure BDA00033693882800000411
(1)子标签所对应的交叉口节点非起点交叉口节点vs和终点交叉口节点ve
(2)可变列表标签D(vn)中第k位子标签的距离值dk(vn)非空且非无穷大;
然后取出集合
Figure BDA00033693882800000412
中距离值小于dk(ve)的备用子标签加入
Figure BDA00033693882800000413
最后令t=1,重复步骤2;
步骤4:输出从起点vs到终点ve之间的所有最短路径及其距离值;
根据终点交叉口节点ve的可变标签D(ve)中前K个子标签,将其中非无穷大且非空的所有路径距离值dk(ve)输出;
通过可变列表标签D(ve)中的非无穷大且非空的所有路径距离值dk(ve)所对应的前驱交叉口节点回溯其前驱节点直至达到起点交叉口节点vs为止,从而获得若干最短路径。
与现有技术相比,本发明的有益效果在于:
1、本发明是基于效率较高的SPFA算法队列实现的基础上做进一步改进,将全源最短路的求解转变成城市路网中Origin-Destination之间的K则最短路的求解,并且没有进行使效率急剧降低的“网络重构”过程,而是充分有效地使用了最短路算法的松弛过程中舍弃的部分数据信息。从而能够使得在准确获取所需的K则最短路径的基本需求的同时,还能保证计算机以较高的计算效率工作。
2、本发明在求解K则最短路时,选择性地将对于求解城市路网中一对OD点之间的路径暂时不起作用的交叉口节点存入备用集合
Figure BDA0003369388280000053
中,避免了多余的向外扩展更新,有效节省了空间和时间资源,能够缓解求解k最短路时计算机的负荷量。
3、K则最短路的计算经常出现含环路径的情况,这是导航规划中较为不符合实际的结果,本发明在计算过程中,遇到将会引入环路的路径时会对其进行截断,避免了后续使其继续延伸时带来的重复环路检测。从而减少部分冗余判断,节省不必要的时间开销。
4、本发明将算法队列实现以及冗余剪枝操作结合,为大型路网在获取K条最短路的计算繁杂难题上提供了一种优化方法,切实做到不予遗漏地获取前K条最短路的同时,提高了计算效率,减小导航规划的计算负担,给予导航使用者更多元的选择,满足了用户现实需求。
附图说明
图1为本发明的流程图;
图2为本发明简单城市路网图;
图3为本发明初始化的可变列表标签;
图4为本发明k=1,t=1时通过第一层循环获得的结果;
图5为本发明k=1,t=2之初的列表
Figure BDA0003369388280000051
和备用集合
Figure BDA0003369388280000052
图6为本发明路径回溯过程;
图7为本发明得到K条从vs至ve的路径时的可变列表标签表。
具体实施方式
本实施例中,一种基于SPFA算法的城市K则最短路径获取方法是根据以SPFA算法为基础计算一对Origin-Destination之间的最短路径,同时充分利用松弛过程中的信息求解K最短路问题,并通过类似剪枝操作将某些子标签作为备用,以减少冗余的计算量,能够满足城市路网中单OD点的导航规划并有一定提速。具体流程如图1所示,该方法是按如下步骤进行:
步骤1:定义参数并初始化;
获取实时道路网络数据并得到城市路网图G=(V,A),本实施例中,以图2为简易城市路网图,V表示交叉口节点集合,且V={v1,v2,v3,...,vn,...,vN},vn表示第n个交叉口节点,n=1,2,3...N,N表示交叉口节点的总数;令vs表示起点交叉口节点,ve表示终点交叉口节点;任意第n个交叉口节点vn具有可变列表标签D(vn),其中,第k个子标签为(dk(vn),pk(vn)),dk(vn)表示从起点交叉口节点vs到达城市路网图G中第n个交叉口节点vn的当前第k短路径距离值,pk(vn)表示到达第n个交叉口节点vn所需路径距离值dk(vn)所对应的vn的前驱交叉口节点子标签信息;A表示交叉口节点之间的有向路段集合,且A={aij=(vi,vj)|i,j=1,2,...Q},(vi,vj)表示第i个交叉口vi到第j个交叉口vj之间的路段,令ωi,j为路段(vi,vj)的权值,若交叉口节点vi和vj之间没有路段相连,则令ωi,j=+∞;
定义所需最短路径条数为K;
定义列表R,用于任意交叉口节点在路径回溯过程中,存储其所在路径的每一个前驱交叉口节点;
定义列表
Figure BDA0003369388280000061
用于存储当前第t次迭代时,更新终点交叉口节点ve的第k条最短路径的交叉口节点所对应的可变列表标签中的子标签;
定义集合
Figure BDA0003369388280000062
用于暂存备用交叉口节点所对应的可变列表标签中的子标签;
初始化可变列表标签D(vn),n∈N,vn≠vs,其中第一个子标签(d1(vn),p1(vn))为
Figure BDA0003369388280000063
即最短路径距离值d1(vn)初始化为+∞,并记其前驱交叉口点p1(vn)初始化为
Figure BDA0003369388280000064
其余所有子标签均为空;初始化起点交叉口节点vs的可变列表标签D(vs)的第一个子标签为
Figure BDA0003369388280000065
初始化k=1,t=1;
初始化列表
Figure BDA0003369388280000066
即加入起点交叉口节点vs的第一个子标签;
初始化结果如图3所示;
步骤2:计算第k短路径;
Figure BDA0003369388280000067
时,转步骤2.6;否则,从
Figure BDA0003369388280000068
中取得第一个子标签
Figure BDA0003369388280000069
1≤k'≤k;然后创建集合N(vfirst),并加入当前交叉口节点vfirst的所有邻接交叉口节点;
步骤2.1:前向搜索:
取出N(vfirst)中第一个邻接交叉口节点,记作vfirst,next,然后转步骤2.1.1;
步骤2.1.1:环路检测;
步骤2.1.1.1:清空R后,通过vfirst,next的前驱交叉口节点vfirst的第k'个子标签
Figure BDA0003369388280000071
取出前驱交叉口节点子标签信息
Figure BDA0003369388280000072
其对应的节点作为vfirst的前驱交叉口节点vfirst,pre,并将vfirst,pre存入列表R中;
步骤2.1.1.2:再根据步骤2.1.1.1中取出的vfirst,pre的子标签
Figure BDA0003369388280000073
1≤k”≤k';取出前驱交叉口节点子标签信息
Figure BDA0003369388280000074
其对应的节点作为vfirst,pre的前驱交叉口节点并存入列表R中。同理继续回溯寻找前驱交叉口节点,直到所取出的前驱交叉口节点子标签信息为
Figure BDA0003369388280000075
即回溯至起点交叉口vs时为止;
步骤2.1.1.3:若
Figure BDA0003369388280000076
即完成vfirst的所有邻接交叉口节点的更新,转步骤2.5;若
Figure BDA0003369388280000077
且列表R内包含通过前向更新得到的邻接交叉口节点vfirst,next,则表明vfirst,next的引入使得环路存在,并返回步骤2.1;否则,转步骤2.1.2继续执行;
步骤2.1.2:更新邻接交叉口节点的距离值;
根据子标签
Figure BDA0003369388280000078
中的
Figure BDA0003369388280000079
计算从起点交叉口节点vs经过vfirst到达vfirst,next的临时距离值
Figure BDA00033693882800000710
其中,ωfirst,next表示从vfirst到达vfirst,next的相连路径的路段权值;
步骤2.2:***排序;
将临时距离值dt(vfirst,next)与vfirst,next的可变列表标签D(vfirst,next)中的所有子标签的路径距离值进行升序排序,得到dt(vfirst,next)在D(vfirst,next)中的排序序号为
Figure BDA00033693882800000711
从而将(dt(vfirst,next),vfirst)***D(vfirst,next)中的第
Figure BDA00033693882800000712
位置上,并记为
Figure BDA00033693882800000713
其中,
Figure BDA00033693882800000714
步骤2.3:更新集合
Figure BDA00033693882800000715
将序号
Figure BDA0003369388280000081
Figure BDA0003369388280000082
的子标签
Figure BDA0003369388280000083
作为备用子标签,存入集合
Figure BDA0003369388280000084
中;
当k=1,t=1时,vfirst=vs,此时更新邻接交叉口节点v1得到的子标签为
Figure BDA0003369388280000085
由于由vfirst=vs更新出的另一个邻接交叉口节点ve的子标签
Figure BDA0003369388280000086
为(45,vs),使得
Figure BDA0003369388280000087
那么
Figure BDA0003369388280000088
将作为备用子标签并置于
Figure BDA0003369388280000089
中;
将当前
Figure BDA00033693882800000810
中满足
Figure BDA00033693882800000811
的距离值的子标签从
Figure BDA00033693882800000812
移入
Figure BDA00033693882800000813
中,其中1≤k'≤k;
同时将当前
Figure BDA00033693882800000814
中满足
Figure BDA00033693882800000815
Figure BDA00033693882800000816
的子标签从
Figure BDA00033693882800000817
中移入
Figure BDA00033693882800000818
步骤2.4:第一层循环:遍历当前点vfirst的所有邻接交叉口节点;
Figure BDA00033693882800000819
则表明仍存在未完成更新的邻接交叉口节点,并返回步骤2.1;直至
Figure BDA00033693882800000820
即完成vfirst的所有邻接交叉口节点的更新,转步骤2.5;
如图4所示,为第t=1次迭代时,遍历当前点的所有邻接交叉口节点并更新邻接交叉口节点的子标签信息;
步骤2.5:更新列表
Figure BDA00033693882800000821
先将vfirst的子标签
Figure BDA00033693882800000822
Figure BDA00033693882800000823
中删除;
然后,将步骤2.1至步骤2.4中更新出的所有邻接交叉口节点的子标签中的距离值
Figure BDA00033693882800000824
满足以下三个条件的对应子标签加入
Figure BDA00033693882800000825
中;
(1)子标签的下标序号
Figure BDA00033693882800000826
(2)子标签不属于集合
Figure BDA00033693882800000827
(3)邻接交叉口节点vfirst,next≠ve
步骤2.6:第二层循环:遍历
Figure BDA00033693882800000828
中的所有子标签;
Figure BDA00033693882800000829
则表明终点交叉口节点vt的第k短路径确定,并执行步骤3;否则,将t+1赋值给t,返回步骤2.1;
如图5所示,为第t=1次迭代结束后,t=2次迭代开始时,所得
Figure BDA0003369388280000091
Figure BDA0003369388280000092
的结果,可见此时
Figure BDA0003369388280000093
作为备用子标签被置于
Figure BDA0003369388280000094
中;
步骤3:第三层循环:依次获得K条最短路;
当k=K时或者终点交叉口节点ve的可变列表标签D(ve)中的第k位子标签的距离值dk(ve)=+∞,且k≠1时,则执行步骤4;否则,将k+1赋值给k,并将满足以下两个条件的交叉口节点的所有子标签加入
Figure BDA0003369388280000095
(1)子标签所对应的交叉口节点非起点交叉口节点vs和终点交叉口节点ve
(2)可变列表标签D(vn)中第k位子标签的距离值dk(vn)非空且非无穷大;
然后取出集合
Figure BDA0003369388280000096
中距离值小于dk(ve)的备用子标签加入
Figure BDA0003369388280000097
最后令t=1,重复步骤2;
步骤4:输出从起点vs到终点ve之间的所有最短路径及其距离值;
根据终点交叉口节点ve的可变标签D(ve)中前K个子标签,将其中非无穷大且非空的所有路径距离值dk(ve)输出;
若需要K=5条路径,则最终结果见图7;
通过可变列表标签D(ve)中的非无穷大且非空的所有路径距离值dk(ve)所对应的前驱交叉口节点回溯其前驱节点直至达到起点交叉口节点vs为止,从而获得若干最短路径。
以回溯vs→ve的第2短路径为例,其回溯过程如图6所示。回溯过程只需根据交叉口节点子标签中的前驱节点子标签信息pk(vn)的下标k来寻找前驱节点k位置上的子标签,并循环至pk(vn)为
Figure BDA0003369388280000098
即此时前驱节点为vs为止即可获得完整路径信息。因此第2短路径为vs→v2→v3→v1→ve

Claims (1)

1.一种基于SPFA算法的城市K则最短路径获取方法,其特征是按如下步骤进行:
步骤1:定义参数并初始化;
获取实时道路网络数据并得到城市路网图G=(V,A),V表示交叉口节点集合,且V={v1,v2,v3,...,vn,...,vN},vn表示第n个交叉口节点,n=1,2,3...N,N表示交叉口节点的总数;令vs表示起点交叉口节点,ve表示终点交叉口节点;任意第n个交叉口节点vn具有可变列表标签D(vn),其中,第k个子标签为(dk(vn),pk(vn)),dk(vn)表示从起点交叉口节点vs到达城市路网图G中第n个交叉口节点vn的当前第k短路径距离值,pk(vn)表示到达第n个交叉口节点vn所需路径距离值dk(vn)所对应的vn的前驱交叉口节点子标签信息;A表示交叉口节点之间的有向路段集合,且A={aij=(vi,vj)|i,j=1,2,...Q},(vi,vj)表示第i个交叉口vi到第j个交叉口vj之间的路段,令ωi,j为路段(vi,vj)的权值,若交叉口节点vi和vj之间没有路段相连,则令ωi,j=+∞;
定义所需最短路径条数为K;
定义列表R,用于任意交叉口节点在路径回溯过程中,存储其所在路径的每一个前驱交叉口节点;
定义列表
Figure FDA0003369388270000011
用于存储当前第t次迭代时,更新终点交叉口节点ve的第k条最短路径的交叉口节点所对应的可变列表标签中的子标签;
定义集合
Figure FDA0003369388270000012
用于暂存备用交叉口节点所对应的可变列表标签中的子标签;
初始化可变列表标签D(vn),n∈N,vn≠vs,其中第一个子标签(d1(vn),p1(vn))为
Figure FDA0003369388270000013
即最短路径距离值d1(vn)初始化为+∞,并记其前驱交叉口点p1(vn)初始化为
Figure FDA0003369388270000014
其余所有子标签均为空;初始化起点交叉口节点vs的可变列表标签D(vs)的第一个子标签为
Figure FDA0003369388270000015
初始化k=1,t=1;
初始化列表
Figure FDA0003369388270000016
即加入起点交叉口节点vs的第一个子标签;
步骤2:计算第k短路径;
Figure FDA0003369388270000021
时,转步骤2.6;否则,从
Figure FDA0003369388270000022
中取得第一个子标签
Figure FDA0003369388270000023
Figure FDA0003369388270000024
然后创建集合N(vfirst),并加入当前交叉口节点vfirst的所有邻接交叉口节点;
步骤2.1:前向搜索:
取出N(vfirst)中第一个邻接交叉口节点,记作vfirst,next,然后转步骤2.1.1;
步骤2.1.1:环路检测;
步骤2.1.1.1:清空R后,通过vfirst,next的前驱交叉口节点vfirst的第k'个子标签
Figure FDA0003369388270000025
取出前驱交叉口节点子标签信息
Figure FDA0003369388270000026
其对应的节点作为vfirst的前驱交叉口节点vfirst,pre,并将vfirst,pre存入列表R中;
步骤2.1.1.2:再根据步骤2.1.1.1中取出的vfirst,pre的子标签
Figure FDA0003369388270000027
Figure FDA0003369388270000028
取出前驱交叉口节点子标签信息
Figure FDA0003369388270000029
其对应的节点作为vfirst,pre的前驱交叉口节点并存入列表R中;同理继续回溯寻找前驱交叉口节点,直到所取出的前驱交叉口节点子标签信息为
Figure FDA00033693882700000210
即回溯至起点交叉口vs时为止;
步骤2.1.1.3:若
Figure FDA00033693882700000211
即完成vfirst的所有邻接交叉口节点的更新,转步骤2.5;若
Figure FDA00033693882700000212
且列表R内包含通过前向更新得到的邻接交叉口节点vfirst,next,则表明vfirst,next的引入使得环路存在,并返回步骤2.1;否则,转步骤2.1.2继续执行;
步骤2.1.2:更新邻接交叉口节点的距离值;
根据子标签
Figure FDA00033693882700000213
中的
Figure FDA00033693882700000214
计算从起点交叉口节点vs经过vfirst到达vfirst,next的临时距离值
Figure FDA00033693882700000215
其中,ωfirst,next表示从vfirst到达vfirst,next的相连路径的路段权值;
步骤2.2:***排序;
将临时距离值dt(vfirst,next)与vfirst,next的可变列表标签D(vfirst,next)中的所有子标签的路径距离值进行升序排序,得到dt(vfirst,next)在D(vfirst,next)中的排序序号为
Figure FDA00033693882700000216
从而将(dt(vfirst,next),vfirst)***D(vfirst,next)中的第
Figure FDA00033693882700000217
位置上,并记为
Figure FDA00033693882700000218
其中,
Figure FDA00033693882700000219
步骤2.3:更新集合
Figure FDA0003369388270000031
将序号
Figure FDA0003369388270000032
Figure FDA0003369388270000033
的子标签
Figure FDA0003369388270000034
作为备用子标签,存入集合
Figure FDA0003369388270000035
中;
将当前
Figure FDA0003369388270000036
中满足
Figure FDA0003369388270000037
的距离值的子标签从
Figure FDA0003369388270000038
移入
Figure FDA0003369388270000039
中,其中1≤k'≤k;
同时将当前
Figure FDA00033693882700000310
中满足
Figure FDA00033693882700000311
Figure FDA00033693882700000312
的子标签从
Figure FDA00033693882700000313
中移入
Figure FDA00033693882700000314
步骤2.4:第一层循环:遍历当前点vfirst的所有邻接节点;
Figure FDA00033693882700000315
则表明仍存在未完成更新的邻接交叉口节点,并返回步骤2.1;直至
Figure FDA00033693882700000316
即完成vfirst的所有邻接交叉口节点的更新,转步骤2.5;
步骤2.5:更新列表
Figure FDA00033693882700000317
先将vfirst的子标签
Figure FDA00033693882700000318
Figure FDA00033693882700000319
中删除;
然后,将步骤2.1至步骤2.4中更新出的所有邻接交叉口节点的子标签中的距离值
Figure FDA00033693882700000320
满足以下三个条件的对应子标签加入
Figure FDA00033693882700000321
中;
(1)子标签的下标序号
Figure FDA00033693882700000322
(2)子标签不属于集合
Figure FDA00033693882700000323
(3)邻接交叉口节点vfirst,next≠ve
步骤2.6:第二层循环:遍历
Figure FDA00033693882700000324
中的所有节点;
Figure FDA00033693882700000325
则表明终点交叉口节点vt的第k短路径确定,并执行步骤3;否则,将t+1赋值给t,返回步骤2.1;
步骤3:第三层循环:依次获得K条最短路;
当k=K时或者终点交叉口节点ve的可变列表标签D(ve)中的第k位子标签的距离值dk(ve)=+∞,且k≠1时,则执行步骤4;否则,将k+1赋值给k,并将满足以下两个条件的交叉口节点的所有子标签加入
Figure FDA00033693882700000326
(1)子标签所对应的交叉口节点非起点交叉口节点vs和终点交叉口节点ve
(2)可变列表标签D(vn)中第k位子标签的距离值dk(vn)非空且非无穷大;
然后取出集合
Figure FDA0003369388270000041
中距离值小于dk(ve)的备用子标签加入
Figure FDA0003369388270000042
最后令t=1,重复步骤2;
步骤4:输出从起点vs到终点ve之间的所有最短路径及其距离值;
根据终点交叉口节点ve的可变标签D(ve)中前K个子标签,将其中非无穷大且非空的所有路径距离值dk(ve)输出;
通过可变列表标签D(ve)中的非无穷大且非空的所有路径距离值dk(ve)所对应的前驱交叉口节点回溯其前驱节点直至达到起点交叉口节点vs为止,从而获得若干最短路径。
CN202111392913.9A 2021-11-23 2021-11-23 一种基于spfa算法的城市k则最短路径获取方法 Active CN114093188B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111392913.9A CN114093188B (zh) 2021-11-23 2021-11-23 一种基于spfa算法的城市k则最短路径获取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111392913.9A CN114093188B (zh) 2021-11-23 2021-11-23 一种基于spfa算法的城市k则最短路径获取方法

Publications (2)

Publication Number Publication Date
CN114093188A CN114093188A (zh) 2022-02-25
CN114093188B true CN114093188B (zh) 2022-08-19

Family

ID=80303094

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111392913.9A Active CN114093188B (zh) 2021-11-23 2021-11-23 一种基于spfa算法的城市k则最短路径获取方法

Country Status (1)

Country Link
CN (1) CN114093188B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08240437A (ja) * 1995-03-03 1996-09-17 Mitsubishi Electric Corp 車両経路案内装置
CN103278168A (zh) * 2013-04-28 2013-09-04 北京航空航天大学 一种面向交通热点规避的路径规划方法
DE102019134487A1 (de) * 2019-01-28 2020-07-30 GM Global Technology Operations LLC System und verfahren einer algorithmischen lösung zum erzeugen einer glatten fahrzeuggeschwindigkeitstrajektorie für ein autonomes fahrzeug mit räumlichen geschwindigkeitsbegrenzungen
CN112991801A (zh) * 2021-03-05 2021-06-18 合肥工业大学 一种基于时变路况的最优安全路径获取方法
CN113570864A (zh) * 2021-09-22 2021-10-29 深圳市城市交通规划设计研究中心股份有限公司 一种电动自行车行驶路径匹配方法、设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08240437A (ja) * 1995-03-03 1996-09-17 Mitsubishi Electric Corp 車両経路案内装置
CN103278168A (zh) * 2013-04-28 2013-09-04 北京航空航天大学 一种面向交通热点规避的路径规划方法
DE102019134487A1 (de) * 2019-01-28 2020-07-30 GM Global Technology Operations LLC System und verfahren einer algorithmischen lösung zum erzeugen einer glatten fahrzeuggeschwindigkeitstrajektorie für ein autonomes fahrzeug mit räumlichen geschwindigkeitsbegrenzungen
CN112991801A (zh) * 2021-03-05 2021-06-18 合肥工业大学 一种基于时变路况的最优安全路径获取方法
CN113570864A (zh) * 2021-09-22 2021-10-29 深圳市城市交通规划设计研究中心股份有限公司 一种电动自行车行驶路径匹配方法、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Improved SPFA Algorithm Based on Cell-Like P System;Hui Zhang 等;《2019 10th International Conference on Information Technology in Medicine and Education (ITME)》;20200123;全文 *
单源点最短路径动态优化算法;李洪波 等;《计算机工程与应用》;20060413(第3期);全文 *
基于Dijkstra拓展算法路线优化;杨丽娟 等;《长春工业大学学报》;20150228;第36卷(第1期);全文 *

Also Published As

Publication number Publication date
CN114093188A (zh) 2022-02-25

Similar Documents

Publication Publication Date Title
CN104102745B (zh) 基于局部最小边的复杂网络社团挖掘方法
CN106205126B (zh) 基于卷积神经网络的大规模交通网络拥堵预测方法及装置
Ortega-Arranz et al. The shortest-path problem: Analysis and comparison of methods
CN107220731A (zh) 一种物流配送路径规划方法
CN104391907B (zh) 一种可变解析度的快速路径搜寻方法
CN106022531A (zh) 经过必经顶点的最短路径搜索方法
CN105978711B (zh) 一种基于最小生成树的最佳交换边查找方法
CN113808424B (zh) 基于双向Dijkstra的城市路网K条最短路径的获取方法
CN116151324A (zh) 基于图神经网络的rc互连延时预测方法
CN115563927A (zh) 一种gpu加速构建最小直角斯坦纳树的芯片布线方法
CN113781817B (zh) 一种基于共用计算的城市路网多源最短路径获取方法
CN113935275A (zh) 时序松弛约束下绕障X结构Steiner最小树构造方法
CN112328877A (zh) 时间依赖路网上多用户的skyline查询的方法
CN114093188B (zh) 一种基于spfa算法的城市k则最短路径获取方法
CN111623790A (zh) 一种面向动态城市交通路网的快速路径规划方法
CN110245271B (zh) 基于属性图的大规模关联数据划分方法及***
CN115547087B (zh) 基于两阶段法与方向诱导的城市路网最短路径获取方法及应用
WO2023088288A1 (zh) 二部图构建方法、显示方法和装置
CN114001747B (zh) 基于共用计算和dijkstra算法的城市路网多源最短路径获取方法
CN105005627A (zh) 基于Spark分布式***的最短路径关键点查询方法
CN108804582A (zh) 基于大数据间复杂关系的图数据库优化的方法
CN115001978A (zh) 一种基于强化学习模型的云租户虚拟网络智能映射方法
CN111931913B (zh) 基于Caffe的卷积神经网络在FPGA上的部署方法
CN111369052B (zh) 简化路网ksp优化算法
CN115394109B (zh) 基于共用计算的k对单源点单汇点最短路搜索方法及应用

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant