求解路网最短路的快速算法

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

求解路网最短路的快速算法
况爱武 ,易 波
(长沙理工大学 交通运 输学院 ,湖南 长沙 410076) 摘要 : 探讨了最短路算法在交通分配中的重要地位 。在此基础上 ,比较了现有最短路算法的 优缺点 ,同时提出了 一种改进的矩阵迭代算法 ,并利用该算法对一简单路网进行了验证 。 关键词 : 最短路 ; 矩阵迭代 ; 交通分配 ; 算法 中图分类号 : U 491. 13 文献标识码 : A
收稿日期 : 2003-0526 作者简介 : 况爱武 ( 1979-) ,男 ,江西高安人 ,长沙理 工大学助教 ,从事交通运输规划与管理的教学与科研 研究 。
42
佛山科学技术学院学报 (自然科学版 ) 第 22 卷
2 现有最短路算法介绍与评价
2. 1 Di jkst ra 算法 [1, 3 ] Di jkst ra 算法又称为标号法 , 该算法由 E W Dijkst ra 首先提出 ,该法常用于网络中某一指定节点 Vs 到另一指定节点 Vt 之间的最短路权计算和最短路径辨识。 Di jkst ra 最短路算法的缺点是该算法主要用于网络中给定起点和给定终点间的最短路权及最短路 径计算 , 在此过程中还可能获得网络中其他某些节点与给定起点间的最短路权 (径 ) , 但具体是哪些节 点 , 事先并不知道 。 利用该算法来求解交通分配问题 , 在同一轮分配过程中要重复使用多次该算法。 2. 2 矩阵迭代算法 矩阵迭代算法是一种借助于权矩阵迭代运算来求解最短路权和最短路径的算法 , 其基本思想是记 初始的权矩阵为 D , 该矩阵经过 n ( n 为网络的节点总数 )次迭代后满足终止条件 , 那么 D ( n ) 中的每个元 ) 素 di( n j 则表示节点 i 到节点 j 的最短路权。 该算法不直接考虑节点 i 到节点 j 的最短路 , 而是考虑经过中
(k ) 0 0 0 0 0 0 0 0 0
di Fra Baidu bibliotek d
( k - 1)
, 如果 dij + d
( k - 1) kj
( k - 1) ( k - 1) ij
≤ dik > d
( k - 1) ( k - 1) ik
+ dkj + d
( k - 1) ( k - 1) kj
, 。
( k - 1) ik
( i≠ k , j≠k ) ) di( k j - 1) ( k - 1) ( k - 1) di( k j , 如果 d(ijk - 1) ≤ dik + dkj , ( k - 1) dik + dk( kj - 1) ,如果 d (ijk - 1) > d(ikk - 1) + d(kjk - 1) 。
[2 ]
∞ , 节点 i 与节点 j 之间没有边直接相连 , 给定权 , 节点 i 与节点 j 之间有边直接相连 。
, 矩阵 V 是 n× m 阶的 , m 表示网络中单个节
点邻接的最大边数 ,其元素 Vi j表示第 i 个节点邻接的第 j 条边的另一节点号 ,不足的用虚拟节点 0来表 示。 邻接目录表中有效元素所占的比例高 , 网络信息占用的计算机内存空间小 , 计算效率高 , 同时也给计 算机录入工作带来了很大的方便 。
1 交通网络的计算机表示
为了方便对交通网络进行处理 , 首先必须把网络抽象化 , 即把网络抽象为点 (交叉口 )与边 (路段 )的 集合。 在交通规划中常用的网络处理手段有 5 种 ,本文仅介绍其中的 2 种 [ 1] 。 1. 1 权矩阵法 对于具体的道路交通网络 , 都是赋权图 , 因此不仅要知道节点与节点之间的邻接关系 , 还很有必要 让计算机知道各边的路权信息 , 这种信息可通过权矩阵来反应 。 权矩阵的定义为 0, i = j , di j = 1. 2 邻接目录法 邻接目录表有两种表示方法 , 第一种方法是采用两组数组来表示网络的邻接关系 , 一组为一维数组 N ADJ( i ) , 表示与节点 i 相连的边的条数 ; 另一组为二维数组 N EAR( i , j ) , 表示与节点 i 相连的第 j 条 边的另一节点号。 第二种方法是采用一个矩阵 V 来表示
第 22卷第 1期 佛山科学技术学院学报 (自然科学版 ) 2004年 3月 Journa l of Foshan Universi ty ( Na tural Science Edi tio n)
V ol. 22 No . 1 M ar. 2004
文章编号 : 1008-0171( 2004) 01-004104
= =
( i≠k , j≠ k )
) vi( k j
v (ijk - 1) , 如果 d (ijk - 1) ≤ d (ikk - 1) + d (kjk - 1) , v (kjk - 1) , 如果 d (ijk - 1) > d (ikk - 1) + d (kjk - 1) 。
当所有的元素都被检查过时 , 转入第 ( 3)步中。 ( 3)判定 k 是否等于 n。若 k = n 则迭代停止 ,此时即获得了最短路权矩阵 D 和倒数第二个节点矩阵 V。 否则转入第 ( 2)步中继续迭代。
4 最短路算法的应用与比较
本文将通过图 1所示的交通网络来对上述算法进行 比较。 假定要计算网络中任意两个节点之间的最短路权和 1 最短路径 , 如果采用标号法则要调用 PT 算法 C1 7· C7= 49次 ; 采用矩阵迭代法 , 则要进行 7 次迭代才能获得最 短路权矩阵 , 但同时还要进行任意两个节点之间的最短 路径搜索 ; 而采用改进的矩阵迭代算法 ,则经过 7次迭代 后可同时获得最短路权矩阵和顺数 (倒数 )第二个节点矩 阵 。 采用改进的矩阵迭代算法其计算结果如下。 其中 D 0 是权矩阵 , D 是最短路权矩阵 , V1 是顺数第二个节点矩 阵 , V2 是倒数第二个节点矩阵。 0 6 D=
0
图 1 交通网 络赋权图
≤ d ik > d
( k - 1) ( k - 1) ik
+ d kj + d
, 。
当所有的元素都被检查过时 , 转入第 ( 3)步中。 ( 3)判定 k 是否等于 n。若 k = n 则迭代停止 ,此时即获得了最短路权矩阵 D 和顺数第二个节点矩阵 V。 否则转入第 ( 2)步中继续迭代。 3. 2 后向搜索路径的矩阵迭代算法 0 此处也要重新定义一个路径矩阵 V0 = ( v 0 ij ) , 可称之为 “倒数第二个节点矩阵” , 其元素 v ij 表示从节 点 Vi 到节点 V j 的最短路径上倒数第二个节点的节点号。同时根据最终的路径矩阵 V , 通过对 V 的同一 行进行搜索也可方便地获得网络中任意两个节点之间的最短路径 。 后向搜索路径的矩阵迭代算法其计 算步骤可归纳如下 。 ( 1)初始化 。令 k = 0, 定义最短路权矩阵 D 0 和倒数第二个节点矩阵 V0。 D 0 可取交通网络的权矩阵 , 0 0 0 V = ( v ij ) ,且 vi j = i。 ( 2) k = k+ 1时进行第 k 次迭代 。 对不在第 k 行和第 k 列的任一元素进行路权和路径的修正 , 即
最短路算法是交通分配中最基本的算法。 绝大部分的交通分配模型都以最短路交通分配为基础 , 并 将其作为一个基本子过程反复调用。因此最短路算法的设计合理与否 ,将直接影响到整个交通规划软件 系统的运算容量及运行时间 。 长期以来 ,图论、 运筹学和交通规划等领域的学者们对最短路算法进行了 深入的研究 , 并设计出多种算法 。 其实 , 这个问题包含着两个子问题 : 一是网络中任意两个节点之间的最 短路权计算 , 另一是网络中任意两个节点之间的最短路径辨识 。 许多方法都将这两个子问题分开考虑 , 设计出来的算法是分别单独求出最短路权或最短路径。 因而设计一种能快速计算最短路权并快速搜索 出最短路径的实用算法对于交通分配具有重要的意义。
3 改进的矩阵迭代算法
由于路径搜索是交通分配中的关键步骤 ,路径搜索的效率不高 , 那么交通分配的效率也就会大大降 低。 但是矩阵迭代法在进行路径搜索时却不能按照一定的顺序逐步搜索以获得最短路径 ,因此必须对矩 阵迭代算法进行改进 , 通过对矩阵迭代算法进行适当的改进就可以实现逐步搜索这一目标 [4 ]。本文通过 两种改进 ,获得了两种顺序搜索路径的新算法。 3. 1 前向搜索路径的矩阵迭代算法 首先定义一个路径矩阵 V = ( vi j ) , 可称之为 “顺数第二个节点矩阵” , 其元素 vi j表示从节点 V i 到节 点 V j 的最短路径上顺数第二个节点的节点号。 根据最终求得的 “顺数第二个节点矩阵 ” V, 并通过对 V 的同一列进行搜索便可以方便地找出任意两个节点之间的最短路径。 若 v ij = m , 则表示节点 Vi 到节点 V j 的最短路径上顺数第二个节点是节点 Vm ; 若 v m j = l , 则表明节点 Vi 到节点 V j 的最短路径上顺数第 三个节点是节点 Vl ; 依此类推 ,逐步向前搜索直到节点 V j ,即获得了节点 V i 到节点 V j 的最短路径上的 各个节点。 因此关键的问题仍然在于计算 D 和 V。 ( 1)初始化。 令 k = 0, 定义最短路权矩阵 D 和顺数第二个节点矩阵 V 。 D 取交通网络的权矩阵 , V = ( v ij ) ,且 vi j = j。 ( 2) k = k+ 1时进行第 k 次迭代 。 对不在第 k 行和第 k 列的任一元素进行路权和路径的修正 , 即 di j = ( i≠ k , j≠k )
,如果 d
第 1期 况爱武等 : 求解路网最短路的快速算法
) vi( k j = ( i≠k , j≠ k )
43
( k - 1) ( k - 1) kj
v ij v
( k - 1) ( k - 1) ik
, 如果 d ij , 如果 d
( k - 1) ( k - 1) ij
) ( m - 1) 间某个节点 k 后 , 距离是否有所减少 , 第 m 次的迭代公式为 di( m j = mi n { dik + d(kjm - 1) } k = 1, 2, 3, … , n。 迭代终止的条件是当且仅当 D( m ) = D ( m - 1) 时迭代停止 。
采用矩阵迭代法来计算最短路权 ,可一次性地获得 n× n 阶最短路权矩阵 , 与 Di jkst ra 算法相比该 算法更节省内存 , 计算速度更快 。 而且既可以获得最短路权矩阵 , 还可以获得网络中任意 2个节点之间 的最短路径。 但最短路径的搜索很复杂 , 迭代次数也较多。 通常矩阵迭代算法最短路径的搜索可按如下 步骤来进行。 假定要搜索的最短路径起点为 Vs , 终点为 Vt , 那么从 Vs 开始 , 搜索与 Vs 相邻的某一节点 Vi , 且满 足 dsi + Lm in ( V i , V t ) = Lm in ( Vs , V t ) , 其中 Lmin ( Vs , V t )为最短路权矩阵中节点 Vs 到节点 Vt 的最短路权 ; Lm in ( Vi , Vt )为最短路权矩阵中节点 V i 到节点 V t 的最短路权 ; d si为权矩阵中节点 Vs 到节点 Vi 的路权 。 显然 , [V s , Vi ]便 是 V s 到 V t 的最短路径上的一条路段 , 再寻找与 Vi 相邻的某一节点 V j , 且满足 di j + Lm in ( V j , V t )= L min ( V i , V t ) ,则路段 [Vi , V j ]又为最短路径上的一段。 如此反复进行下去便可获得从起点 Vs 到终点 V t 的最短路径。 由此看来 ,采用矩阵迭代算法来求解交通分配问题 , 只要使用该算法一次就可以完成一轮分配。 该 算法较 Di jkst ra 算法有很大的改进 , 但由于其路径搜索能力还是较差 , 因此还有必要改进 。
相关文档
最新文档