多条最短路算法的优化

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*硕士研究生,北方交通大学系统所,100024;**工程师,北京重型电机厂设计所,100039北京收稿日期:1998-01-05

多条最短路算法的优化

王丽星*

 郜 巍

**

摘 要 先进的运输管理系统与先进的交通导行系统是智能交通系统(I T S )的关键组成部分,而最佳出行路线又是交通导行系统的关键技术之一,本文正是针对这一问题进行研究,并对现有多条最短路算法中存在的自回路现象及在大型网络中运行效率低等不适于实际网络的问题进行了优化。关键词 算法 多条最短路 自回路 优化 智能交通系统中图资料分类号 U 12

城市交通设施的建设远远落后于汽车的增长,由此造成的城市交通道路的堵塞和拥挤已成为世界各大城市面临的共同难题,其解决办法就是大力发展智能交通系统(I T S ),改变现有的交通管理模式。IT S 研究中的一项基础的研究工作就是如何确定最佳出行路线,也就是要确定任意两点间最短路问题。由于实际交通网络系统中存在着路段堵塞现象,所以仅仅给出任意两点间的一条最短路显然是不够的,应给出多条最短路供给IT S 系统判别并选出最佳出行路线。

1 算法的优选

总结现有的算法就不难发现当今算法可分为两大类。一是枚举法,它通过依赖函数在与局部梯度相关的方向上移动来寻找局部最优,即先找到局部最优,再沿最佳允许方向处理函数。枚举法现在很多情况和规模上被认可,但效率很低,由于很多实际问题的网络都很大,以至于搜索一次需要的计算量很大,运算速度缓慢,但它能一次算出多条最短路,而这恰恰是我们所需要的;二是随机算法,它是利用随机技术来实现的。根据随机技术的不同又可分为遗传算法和模拟退火算法。就目前较为热门的遗传算法而言,它是一种基于自然选择原理和自然遗传机制的搜索(寻优)算法,将达尔文进化论中的“适者生存”与利用随机信息进行变化相结合。说到随机性,遗传算法不是简单的随机走动,而是有效地利用、开发原有信息,并带着期望改善的性能去推测新的搜索点。因此在处理大型网络时比较有效,但它无法一次算出多条最短路〔4〕。比较上述两类算法的优、劣之后,决定选取枚举法来进行优化后使用。因为找到多条最短路是最终的目标,随机算法虽能有效地处理大型网络,但却无法搜索到多条最短路,进行优化也比较困难;枚举法虽在处理大型网络时效率较低,但却能搜索到多条最短路,且优化也较容易些。

枚举法中的算法又可分为求解一条最短路算法和求解多条最短路算法。文献〔2〕、〔3〕中均给出了在稀疏网络中一条最

短路的优化,但都不适于求解多条最短路问题。在求解多条最短路算法中又包含两个算法,既二重扫除法(Shie r)和推广的福劳德算法(Floy d )。其中用二重扫除算法求任意两点间K 条最短路需用O (K N 3)时间,(其中N 为节点数,K N 3为运算次数,O (K N 3)表示进行K N 3次运算所用的时间);而推广的福劳德算法需用O (2N 3)。因此当K 大于1时,推广的福劳德算法优于二重扫除算法,所以选择推广的福劳德算法作为进一步优化的算法。但推广的福劳德最短路算法存在着自回路现象;同时由于运输网络一般为大型网络,运算次数极为庞大,致使运算速度极为缓慢,使得在实际应用中难以操作,因此需要对现有的算法进行优化。

2 问题的描述

一个运输网络可以用一个有向图G =(V ,E ,W )来表示。

其中V 为顶点集,V ={V i |i =1,2,…n };E 为边集E ={e (V i ,V j )|V i ,V j ∈V i },W 为权集,W ={W (V i ,V j )|V i ,V j ∈V j }。假设要求出K 条最短路,则从点V i 到点V j 的K 条最短路的距离定义为一向量d i j ,d ij ={d ij 1,d ij 2,…d ijk },其中的元素d ijk 表示第k 条最短路的距离,而距离d ijk 对应的路径为向量R ijk ,R ijk 中的元素排列顺序为i 到j 依次经过的点的顺序。

此种算法包括了一个特殊的代数运算,称为广义和运算,在这类运算中把向量看成单个数值,参加运算的向量要求维数相同,其元素值允许含∞,取两个同维向量进行交叉和运算,结果经排序以后得第三向量,其维数相同,而元素取自排序后的最前部分,设广义和的运算符号为×,则广义和的运算为A ×B 。

3 优化后的多条最短路算法的思想

在推广的福劳德算法中存在着自回路现象,但这种自回路现象不会出现在最短路上,只会出现在K 大于1的短路

科技情报开发与经济 1999年 第2期

上。又因当自回路现象出现时,必定在该条最短路路径中重复出现M (M ≥2)次其一个或多个点,因此在改进算法中,搜索任意两点第K 条最短路径所经过的点,然后再进行判断。如果一个点重复出现两次或两次以上,即为自回路现象,则不对最短路距离和最短路路径进行更新,这样就避免了自回路现象。同时在对运算次数较大的优化中,采用分解算法,把网络分为两个互相叠和的子网络(也可分为多个子网络,多个子网络的算法同两个子网络的算法类似,由于多个子网络的算法叙述较为复杂,这里就不再赘述)。如把网络分为两个子网络N A 、N B ,其中N A 、N B 网络分别为如图1所示

:

图1 分解算法示意图

图中,子网络间相邻的点集V X 为最小点割集,即网络中删除V X 及其相邻的边以后,网络就分解为两个子网络,且不存在V X 的子集能使网络不连通。即:

V =V A ∪V X ∪V B ,

N =(V ,E ,W ),N A =(V A ,E A ,W A ),N B =(V B ,E B ,W B ),其相应的距离距阵D ,可以分块如下形式:

D =

D AA

D AX D

AB D X A

D X X

D X B

D B A D B X D B B

式中:D AA =[d ij ] Vi ∈V A ,其余类推。

这样分解后,在计算最短路的路径和最短路的距离时,首先计算第一个子网N A 内部的最短路的路径和最短路的距离(其中最短路径中包含的点只有N A 网络中的点),然后再计算第2个子网N B 内任意两个点间的最短路的路径和最短路的距离(其中最短路径中包含的点为整个网络中的点);再计算第一个子网N A 内部的最短路的路径和最短路的距离(其中最短路径中包含的点为整个网络中的点);最后计算两个子网N A 、N B 间的最短路的路径和最短路的距离。至此得到最后结果。

以上分解算法在计算第二步以后的各点间的最短路的距离和最短路的路径时,用到了前一步已算出的最短路的距离和最短路的路径,大大减少了运算次数,加快了运算速度。

4 优化后的多条最短路算法的步骤

第一步,把网络分为两个(或以上)互相叠和的子网络。第二步,初始化每一个子网络的K 条最短路的距离及K 条最短路的路径。若两点间没有通路,则设置为一个无穷大的

数M 。

第三步,确定第一个子网的K 条最短路的路径及其距离。既在

N A 中就下列距阵元素执行三角运算(三角运算即进行加法和比较大小的运算,也即下述运算):

D A A D AX D X A

D X X

其具体步骤又可分为下列几步:

(1)在一个子网中,求出从顶点i 到顶点m 的K 条最短路,其中只允许前m -1个顶点即顶点 1.2.3.……m -1作为中间点(初始值i =1,m =1);

(2)从顶点m 到顶点j 的K 条最短路,其中只容许前m -1个顶点即顶点1.2.3.…m -1作为中间点(初始值j =1);

(3)分别判断从i 到m 的k 条和从m 到j 的K 条最短路的路径中有无重复点,即R imk 和R mjk 二向量中的元素有无重复元素,若有,则最短路经中不包含m 点,也不对d imk +d m jk 进行计算,并转向(1),若无重复点,则进行下一步;

(4)计算S (X )=d imk +d m jk ;

(5)比较S (X )、d ijk 中的元素,并求出最短的K 个距离;(6)根据(5)步所选出的最短的K 个距离,确定K 条最短路的路径;本步运算终止后可得D A A (N A )、D AX (N A )、

D A X (N A )、D X X (N A )。

第四步,在第二个子网N B 中

就下列距阵元素执行三角

运算:

D X X (N A )D X B D B X

D BB

即重复第三步中的6步,本步运算终止后可得D X X (N )、D X B

(N )、D B X (N )、D BB (N )。

第五步,在第一个子网N A 中就下列距阵元素再执行三角运算:

D A A (N A

)D A X (N A )D X A (N A )

D X X (N )

本步运算终止后可得D A A (N )、D AX (N )、D X A (N )、D X X (N )。

第六步,计算二个子网N A 、N B 间任意二点间的K 条最短路的距离及K 条最短路的路径,根据如下公式:

d AB (N )=min {d A X (N )+d X B (N )}

d B A (N )=min{d BX (n )+d X A (N )}

其中:d AB (N )、d AX (N )、d X B (N )…为向量,运算符+为广义和运算。至此,距阵中所有元素均得最短路距离:

D =

D AA (N )D A X (N )D AB (N

)D X A (N )D X X (N )D X B (N )D BA (N )

D B X (N )

D BB (N )

5 结语

本文首先对各种最短路算法进行了优选,在选出了推广的福劳德算法后,又对它进行了优化。其优化后的算法已在计算机中实现,并取得了较满意的结果。但由于选取的网络节点较少,所以对节点较多的网络还应进一步加以调试。

参考文献

1 杜端莆.运筹图论.北京:北京航空航天大学出版社

2 徐李华.求最短路问题的一个计算机算法.系统工程,(9):46~513 冯成仅.稀疏网络的最短路算法.运筹学杂志,1991(12):77~784 刘钢,寇纪凇.基因算法理论及其在优化领域中的应用.决策与决策支持系统,1993(3):50~58

(下转第39页)

王丽星 郜 巍 多条最短路算法的优化 科技研讨

相关文档
最新文档