扩展功能
文章信息
- 段明义, 张文
- DUAN Ming-yi, ZHANG Wen
- 一种改进的交通网络路径选择算法
- An Improved Path Selecting Algorithm for Traffic Network
- 公路交通科技, 2016, 33(11): 120-125
- Journal of Highway and Transportation Research and Denelopment, 2016, 33(11): 120-125
- 10.3969/j.issn.1002-0268.2016.11.018
-
文章历史
- 收稿日期: 2016-02-16
实现城市的繁荣、有序和快速发展,一个基本条件是良好的城市交通系统。但随着各城市机动车保有量的不断增加,导致对交通需求的急剧增加,紧接而来的一系列如交通拥堵、交通事故频发、环境污染严重及能源短缺等问题,给人们生产、生活等带来了诸多不便,这些都制约着一个城市的进一步、可持续的发展。出行者在交通出行中,一个经常关心的问题是如何迅速选择一条最优的路径。因此,出行最优路径选择算法问题的研究已迫在眉睫。
求解两点间的最短路径问题,已经有很多学者做了研究,给出了很多的算法,其中以Dijkstra算法[1]最为经典。该算法可以在O(n2)(n为节点数)时间复杂度情况下,求出某初始点到其他与其有路径相通的点之间的最短路径。当节点个数较少时,O(n2)级别的时间复杂度是可以接受的,实际系统中,节点个数往往较多,该级别的复杂度就显得效率低下,因此,直接使用Dijkstra算法的情况不多。
文献[2-3]针对堆排序算法做了分析;文献[2]给出了一种基于左倾树的堆排序改进算法,在输入数据排列任意的情况下,该算法实现排序的时间复杂性为O(nlogn);通过只对最短路径上节点的临界点处理,在不涉及其他节点的情况下,文献[4]对Dijkstra算法进行优化,使得计算的节点数大幅减少,从而提高了算法的速度;文献[5]讨论了启发式算法在路径规划问题中的一些改进策略,该方法考虑到了一些计算机硬件因素;文献[6]采用预先计算存储的方法,程序运行时,根据初始节点和目标节点,直接调用数据库查询语句,查询出事先计算好的两点间的距离,如果图中节点数目较多,额外存储空间开销就较大。
因此,路径搜索在交通网络中是一个比较复杂的问题,设计算法时,需要考虑多种方面的因素,然后给出最终解决方案。本文将启发式的思想引入Dijkstra算法中,并对搜索区域加以限制,提出限制搜索区域的启发式最短路径算法(Restricted Searching Area Heuristic Shortest Path Algorithm, RSAHSPA),该算法能够有效缩短路径搜索时间,为使用者提供出行依据。
1 路径搜索算法描述 1.1 寻径问题网络模型寻径问题是在图论中研究的热点之一,目标是设计一个算法,寻找图中从初始节点到目标节点的一条通路。城市路网除具有一般路网的特点之外,还有其特殊之处:数据量大和结构复杂。这都使得城市路网的结构变得非常复杂,现实中的城市路网实体只有抽象化为图论中的网络图后,才能做最佳路径分析,一般的方法是采用GIS技术生成其对应的电子地图。本文的研究在已生成的电子地图上进行,以此讨论最短路径算法的实现过程。
1.2 Dijkstra寻径算法定义1 图是由1个顶点集V和1个弧集VR构成的数据结构,Graph=(V, VR),其中,VR={ < v, w>|v, w∈V
Dijkstra算法采用贪婪策略,描述如下。
算法1:
(1) 初始,从节点集合V′={vs|vs∈V}出发,vs为路径初始节点。
(2) 在V′关于V的补集V′中,选择与V′中某节点vi直接相连的节点vj,令其组成节点集合M。
(3) 在所有满足vi∈V′∧vj∈M的弧 < vi, vj>中,选择权重最小的边,设该边在M中依附的节点为vj,若vj=ve(ve为路径目标节点),则算法结束。
(4) 将节点vj从M中删除,添加到集合V′中,并根据该节点来更新V′中节点的相关信息。
(5) 返回(2)。
理论上Dijkstra算法能够保证得到最优解,但其时间复杂度较高,为O(n2)。主要在于对每个V中的节点,扩大V′的过程采用的是同等的对待策略。对于离最终路径P=(vs, …, ve)较远或与该路径方向相背离的节点,应该考虑不选择,或最后再选择。
当图中节点个数很多的时候,Dijkstra算法的性能就显得有些低。此时,为了提高搜索的效率,可以在牺牲一定精确性的情况下达到提高查找速度的目的。启发式算法就是这样一种策略。在每次扩展过程中,尽量选择离最终路径近的那些节点。
1.3 启发式方法定义2 设评价函数f(vj)=g(vs, vj)+h(vj, ve)[8],式中,g (vs, vj)为从初始节点vs经过寻径算法到达节点vj的权值之和,且g(vs, vs)=0;h(vj, ve)为节点vj的代价函数,h(ve, ve)=0,它预测从vj到终点ve的代价。一个点是否能被优先选用进行搜索,主要由评价函数f(vj)的值来决定。
引入代价函数h(vj, ve)后,每次对节点的扩散不再是盲目的,而是有方向性的。其值越大,算法的解也就越偏离最优解,但同时时间耗费也越小;其值越小,搜索所花费的时间越大,算法的解也就越逼近最佳解。基于启发式的路径搜索算法如下。
集合V*={v*|vi*∈V, ∀vi*≠vj*(i≠j)},V*为V*关于V的补集,初始时,V*中只有1个初始节点vs;Vc*={vci*|vci*∈V, ∀vci*≠v*cj(i≠j)}表示V*中所有与V*中的节点直接连接的节点集合。算法步骤如下。
算法2:
(1) 在Vc*中查找v*cj,使
(2) 将v*cj从Vc*中删除,并添加到V*中。
(3) 在集合
(4) 返回(1)。
定理1 设有序序列V′={vs, v1, v2, …, vj, …, vn, ve},j=1, …, n,为使用启发式方法求出的从初始点vs到目标点ve的路径上的点,该路径P′=(vs, v1, v2, …, vj, …, vn, ve),j=1, …, n,distmin(vk, vl)用来记录节点vk到节点vl最小权值之和,若满足(∀vj)[h(vj, ve)≤distmin(vj, ve)∧(vj∈V′)],则P′为最短路径。
证明 设V″={vs, v′1, v′2, …, v′i-1}为求得的最短路径上前i个节点的集合,v′i为该路径上下一个节点。从v′i-1到目标点ve可有m条路径,不失一般性,设其中1条为Pq=(v′i-1, v′q1, v′q2, …, v′qr, ve),1≤q≤m。
令v′pi≠v′i,Pq中的节点满足∀v′pi[f(v′pi) < f(v′i)∧(v′pi∈V″)],则按照启发式算法,必然会优先顺着Pq方向按深度优先搜索下去。当到达终点ve时,
|
引入记号d(vk, vl)来表示边 < vk, vl>的权,则:
|
而
|
又因为最短路径上的下一节点为v′i,则有:
|
即:
|
根据该不等式,此时启发式算法会放弃路径Pq,从而最终会将节点v′i添加到集合V″中,证毕。
由算法1和算法2的相似性,容易看出,Dijkstra算法为该启发式算法的特例[h(vci*, ve)=0],即不需要任何启发信息。引入h(vci*, ve)可以使得原来向四周漫无目的搜索,变为有方向性的,这样也就提高了寻径效率。
由于在交通网络图中,对每个节点v*cj,在集合
评价函数f(vj)的任务主要是用来估计搜索路径上某节点vj的重要性。理论上讲,它可以是任意的函数,具体应用中采用什么样的形式,主要由应用而定。一个节点的价值一般从两方面考虑:搜索到该节点时算法已经付出的代价g(vs, vj); 如果选择从该节点出发到达目标节点ve,算法将要付出的代价h(vj, ve)。一般来说,已经付出的代价g(vs, vj)的值是一定的,而最关键的就是根据具体应用来选择合适的h(vj, ve)。
在网络地图中,设两点vj和ve的坐标分别为(xj,yj)与(xe,ye),常用的启发式函数主要有:
曼哈顿距离:h(vj, ve)=(|xj-xe|+|yj-ye|);
欧氏距离:
切比雪夫距离:h(vj, ve)=max{|xj-xe|, |yj-ye|}。
其他形式的代价函数也可以选择,只要满足最优解条件即可。欧氏距离代表了两点间的直线距离,是一般情况的首选。在此,考虑到计算机做乘方和开方运算,耗时比加减大很多,故选择曼哈顿距离作为启发函数。
2.2 搜索区域Dijkstra算法的搜索区域,可近似地看成以初始节点Vs为圆心所构成的一系列同心圆,各个节点依离初始节点的距离远近而先后被搜索到。整个过程没有涉及终点Ve所在的方向或位置,因此,其被搜索到的概率与其他节点Vj是相同的。若图中顶点数目较多,或初始节点Vs与终点Ve间距离较大,算法实际运行效率将大大降低[10-11]。
启发式的搜索方法能够改变这种状况。文献[12]提出了一种矩形限制搜索区域,缩小了搜索的范围,提高了效率。在此基础上,本文将搜索区域进一步缩小,限制在一个条状范围内,如图 1所示。以初始节点Vs和终点Ve分别画半径为r(r为搜索半径,该值可调整)的圆,与两圆相切的直线分别为L1和L2,则两直线与两圆围成的条状区域即为搜索区域。
|
| 图 1 搜索区域示意图 Fig. 1 Schematic diagram of searching area |
| |
已知Vs和Ve的坐标分别为(xs, ys),(xe, ye),由解析几何知识可得平行线L1,L2的方程为:(ye-ys)x+(xs-xe)y+(ysxe-yexs)±r·
实际算法实现时,为了进一步简化计算,可以将搜索区域的横坐标值进一步简化为(xs-r, xe+r),而纵坐标轴限定在两平行线L1,L2间不变。
初始时,根据经验,设置r值,运行算法,进行搜索,如果搜索到终点,则算法结束,否则,按预设增量增大r值,在一个更大的搜索区域上进行搜索,直至搜索到终点。最坏的情况即是搜索扩展到了整个区域。实际算法中,搜索半径r值设定为一个递增序列ri,形如ri={1, 1.5, 2, 2.5, 3, …},如果根据前一个半径序列的值没有在搜索区域内找到终点,则选择半径序列中的下一个值来进行搜索。
由于程序首先考虑的是位于条状区域内的点,而不是所有的点,这样就减少了对无用节点的考察,加速了程序的运行。
2.3 排序方法对算法2的分析可知,相对于算法1,无目的的宽度搜索改进成了有方向的启发搜索,加上对搜索区域的限制,被搜索的节点数目大大减少。在节点数目不大的情况下,算法2是可以接受的。但如果节点个数很多,在Vc*中找到具有最小f(v*cj)值的节点vci*(vci*∈Vc*)的时间耗费也不容忽视。该问题实质上是在一个动态集合中寻找最小值,为了缩短算法2的搜索时间,本文将使用二叉堆来对集合Vc*进行查找。
定义3 堆是满足下列性质的数列{k1, k2, …, kn}:
|
前者称为小顶堆,后者称为大顶堆[7]。在此主要关注前者,并且采用一种改进的堆结构来进行排序。
如果集合F={f|fi=f(vci*, ve)∧∀vci*(vci*∈Vc*)}满足定义3,则
左倾树排序方法是众多排序方法中较快的一种。在原始输入数据任意排列的情况下,该算法的时间复杂度可以达到O(nlog2n)[2]。左倾树实际上就是经典堆结构的一个改进。
定义4 左倾树T是1棵具有特殊性质的二叉树, 其中每个结点满足下列性质。
(1) 给树中每个节点k赋予1个Ek值:如果该节点具有不多于1个孩子,则Ek=1;如果该节点有两个孩子k1和k2,则Ek=min{Ek1, Ek2}+1。
(2) 根节点的值小于(仅考虑小顶堆)以该节点为根的子树上所有节点的值;如果节点k无左孩子,则它必然无右孩子;如果k同时具有两个孩子(分别为k1和k2),则左孩子节点的Ek值Ek1大于等于右孩子节点的Ek值Ek2。
用左倾树实现排序的过程和普通的堆排序相似,也分为构造和排序两个阶段:第1阶段执行构造过程,输入含有n个节点的待排序序列,经过n-1次左倾树的合并过程,构造1棵新的左倾树;第2阶段执行排序过程,再经过n-1次左倾树的合并过程,从而最终实现排序。
合并过程描述如下(仅考虑两棵树的情况):
(1) 如果有一棵左倾树为空树,合并后的结果为另一棵左倾树。
(2) 将根节点值小的左倾树的右子树与另一棵左倾树进行合并,使用合并后的结果代替该右子树。
(3) 如果合并后的结果不满足左倾树的条件,则可以通过交换该左倾树的左右子树,使之成为一棵左倾树。
假设一棵左倾树含有n个节点,由于“左倾”的性质,从该树根结点出发,一路沿着右子树向前走,最多走log2(n+1)步(等于树的高度)。又因为左倾树的合并过程总是从右子树方向进行的,这样至多只需要O(log2n)步就可以访问该树右边的子树,同时完成合并工作,这是最坏的情况。显然,左倾树树型最坏的情况是当它的左右子树较为平衡时;最佳树型是当它的所有节点的右指针为空时。
据此,对于含有n个节点的集合Vc*,用左倾树实现对其节点排序的时间复杂性为O(nlog2n)。显然,它是一种较快的排序方法。当集合Vc*中元素较多时,使用上述改进的堆排序算法能够加快在其中查找具有最小f值元素的过程。
3 结果与分析试验目的是为了证明改进算法在某市电子地图不同图层上寻径的有效性,并分析搜索半径r和两点间直线距离k对有效性的影响。仿真试验在处理器为Intel酷睿i5 4570(3.2 GHz)、内存4 GB、硬盘1 TB、操作系统为Microsoft Windows 7的微机环境下进行。
3.1 寻径时间该市电子地图有多个不同的图层,分别含有508,1 033,2 013,3 998条边。选定固定的两个地理位置作为起点和终点,两点间直线距离为k=10 km,同时,搜索半径r设定为2 km,以寻径时间作为衡量算法效率的指标参数,分别从地理距离和拥堵时间两方面来设定边的权值,以对Dijkstra算法、RRSA算法和RSAHSPA算法的效率进行测试,其中RRSA指矩形限制搜索区域算法[12]。
图 2描述了在地理距离最短权值下3种算法的寻径时间,在开始边数为508的条件下,Dijkstra、RRSA和RSAHSPA所花费的寻径时间分别为2 110,1 143,632 ms。随着边数的逐渐增加,3种算法花费的寻径时间都逐渐增加,但Dijkstra比RRSA和RSAHSPA增加得更快,同时,RRSA和RSAHSPA所花费的寻径时间增加变化缓慢,并且RSAHSPA算法一直低于RRSA算法。当图层边数增加为3 998条时,3种算法的寻径时间分别为34 412,6 617,3 216 ms。图 3描述了在拥堵时间最短权值下3种算法的寻径时间,因此,本文所提方法优于其他两种方法。
|
| 图 2 寻路访问时间对比(按地理距离最短) Fig. 2 Comparison of path finding access time (by geographical distance shortest) |
| |
|
| 图 3 寻路访问时间对比(按拥堵时间最短) Fig. 3 Comparison of path finding access time (by congestion time shortest) |
| |
3.2 初始半径r的选择
保持上述试验运行环境不变,针对RSAHSPA算法修改k数值,以地理距离最短作为路径权重的情况为例,测试搜索半径r值对算法所花费寻径时间的影响。取k=10 km,初始半径r分别选择r=1, 1.5, 2, 2.5, 3 km,运行结果图 4所示。
|
| 图 4 不同初始r值对算法访问时间的影响(k=10 km) Fig. 4 Influence of different initial r values on access time of algorithm (k=10 km) |
| |
另外,取k=5 km,初始半径r分别选择r=0.5, 0.7,1, 1.5, 2 km,运行结果图 5所示。
|
| 图 5 不同初始r值对算法访问时间的影响(k=5 km) Fig. 5 Influence of different initial r values on access time of algorithm (k=5 km) |
| |
为了对照,再取k=20 km,初始半径r分别选择r=1, 2, 4, 6, 8 km,运行结果图 6所示。
|
| 图 6 不同初始r值对算法访问时间的影响(k=20 km) Fig. 6 Influence of different initial r values on access time of algorithm (k=20 km) |
| |
试验结果表明,在不同数值k的条件下,随着图层中边数的增加,相同r值下,RSAHSPA算法的寻径时间都会逐渐增大;在同一个数值k的条件下,不同的初始r值对RSAHSPA算法的寻径时间影响显著。例如,在图 4的k=10 km条件下,初始r=2, 2.5, 3 km的运行曲线几乎在一起,说明在设置r=2 km的搜索区域内,已经能够找到一条起点到终点的最短路径,此时,增加r值,对寻径时间影响不大;r=1, 1.5 km需要更多的运行时间,说明在这样的搜索范围内没有找到最短路径,需要增加r值在一个更大的范围内进行搜索,因此时间花费更多。图 5和图 6中,当r分别增加至1 km和4 km后,再增大搜索半径,对寻径时间影响不大。根据图 4~图 6结果分析,r=k/5时算法运行效果最好,继续增加r值,效率提高不明显。
4 结论本文将启发式方法应用到经典的最短路径算法之中,给出了网络地图中的一个新的路径搜索算法。同时,在启发式函数搜索范围和排序方法方面,讨论了算法的改进之处,并将其应用到实现的算法中。仿真试验结果证明了新的路径搜索算法的优越之处,与已有路径选择改进算法相比,能够有效缩短路径查找时间,从而更好地满足出行需要。
| [1] | DIJKSTRA E W. A Note on Two Problems in Connexion with Graphs[J]. Numerische Mathematics , 1959, 1 (1) : 269-271 |
| [2] | 汤彬. 一个用左倾树实现O (nlog2n)排序的算法[J]. 微型电脑应用 , 1996 (1) : 79-83 TANG Bin. A Sorting Algorithm Taking O (nlog2n) Time Using Leftist Tree[J]. Microcomputer Applications , 1996 (1) : 79-83 |
| [3] | WEISS M A, CHEN Yue. Data Structures and Algorithm Analysis in C Language[M].2nd ed. Beijing: Posts & Telecom Press, 2005 . |
| [4] | 章永龙. Dijkstra最短路径算法优化[J]. 南昌工程学院学报 , 2006, 25 (3) : 31-32 ZHANG Yong-long. Optimization of Dijkstra Algorithm[J]. Journal of Nanchang Institute of Technology , 2006, 25 (3) : 31-32 |
| [5] | 张本群. 基于启发式算法的路径规划[J]. 计算机仿真 , 2012, 29 (10) : 341-343 ZHANG Ben-qun. Path Planning Based on Heuristic Algorithm[J]. Computer Simulation , 2012, 29 (10) : 341-343 |
| [6] | AGRAWAL R, JAGADISH H V. Materialization and Incremental Update of Path Information[C]//Proceedings of the 5th International Conference on Data Engineering. Los Angeles:IEEE, 1989:374. |
| [7] | 严蔚敏, 吴伟民. 数据结构(C语言版)[M]. 北京: 清华大学出版社, 1997 . YAN Wei-min, WU Wei-min. Data Structure (in C Language)[M]. Beijing: Tsinghua University Press, 1997 . |
| [8] | 马少平. 人工智能[M]. 北京: 清华大学出版社, 2004 : 32 -34. MA Shao-ping. Artificial Intelligence[M]. Beijing: Tsinghua University Press, 2004 : 32 -34. |
| [9] | 尼尔松NJ. 人工智能[M]. 北京: 机械工业出版社, 1999 : 145 -150. NILSSON N J. Artificial Intelligence:A New Synthesis[M]. Beijing: China Machine Press, 1999 : 145 -150. |
| [10] | 张锦明, 洪刚, 文锐, 等. Dijkstra最短路径算法优化策略[J]. 测绘科学 , 2009, 34 (5) : 105-106 ZHANG Jin-ming, HONG Gang, WEN Rui, et al. Optimization Strategies of the Dijkstra's Shortest Route Algorithm[J]. Science of Surveying and Mapping , 2009, 34 (5) : 105-106 |
| [11] | 邓方安, 雍龙泉, 周涛, 等. 基于"矩阵乘法"的网络最短路径算法[J]. 电子学报 , 2009, 37 (7) : 951-956 DENG Fang-an, YONG Long-quan, ZHOU Tao, et al. Shortest Path Problem Algorithm in Network Based on Matrix Multiplication[J]. Acta Electronica Sinica , 2009, 37 (7) : 951-956 |
| [12] | 王海梅, 周献中. 一种限制搜索区域的最短路径改进算法[J]. 南京理工大学学报:自然科学版 , 2009, 33 (5) : 638-642 WANG Hai-mei, ZHOU Xian-zhong. Improved Shortest Path Algorithm for Restricted Searching Area[J]. Journal of Nanjing University of Science and Technology:Natural Science Edition , 2009, 33 (5) : 638-642 |
2016, Vol. 33
