1 / 33

第 5 章 最短路问题 (Shortest Path Problem)

第 5 章 最短路问题 (Shortest Path Problem). 网 络 优 化. Network Optimization http://www.csiam.edu.cn/netopt. 清华大学课号: 70420133. 清华大学数学科学系 谢金星 办公室:理科楼 2206# (电话:62787812) Email:jxie@math.tsinghua.edu.cn http://faculty.math.tsinghua.edu.cn/~jxie/courses/netopt. 最短路问题 的例子和意义. S. T.

kerryn
Download Presentation

第 5 章 最短路问题 (Shortest Path Problem)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 最短路问题(Shortest Path Problem) 网络优化 Network Optimization http://www.csiam.edu.cn/netopt 清华大学课号:70420133 清华大学数学科学系谢金星 办公室:理科楼2206# (电话:62787812) Email:jxie@math.tsinghua.edu.cn http://faculty.math.tsinghua.edu.cn/~jxie/courses/netopt

  2. 最短路问题的例子和意义 S T • 许多实际问题都可以转化为最短路问题 • 其有效算法经常在其它网络优化问题中作为子算法调用

  3. 假设费用均非负,则在最优解中 ,即 可以证明:一定存在满足条件 的最优解. 可以只考虑 最短路问题的例子 - 单产品、无能力限制的批量问题 例5.1 (Single-level Uncapacitated Lotsizing) 某工厂生产某种产品用以满足市场需求,且已知在时段t中的市场需求为dt . 在某时段t, 如果开工生产, 则生产开工所需的生产准备费为st , 单件产品的生产费为ct .在某时段t期末, 如果有产品库存, 单件产品的库存费为ht . 假设初始库存为0, 不考虑能力限制, 工厂应如何安排生产, 可以保证按时满足生产, 且使总费用最小? (Wagner – Whitin,1958) 假设在时段t, 产品的生产量为xt , 期末产品的库存为It (I0 =0); 用二进制变量yt表示在时段t工厂是否进行生产准备.

  4. w12 w23 w34 w11 w22 w33 w44 1 3 2 4 5 w24 w13 w14 单产品、无能力限制的批量问题 记wij为第i时段生产量为 时所导致的费用(包括生产准备费、生产费和库存费), 即 其中 网络:从所有节点i到j (> i)连一条弧, 弧上的权为wi,j-1 , 如T=4时:

  5. 6 B D 6 5 4 (开始) A 4 F (结束) 7 5 1 C E 3 例5.3 计划评审技术, 即PERT(Project Evaluation & Review Technique), 又称网络计划技术或统筹法) 大型复杂工程项目(Project)往往被分成许多子项目,子项目之间有一定的先后顺序(偏序)要求, 每一子项目需要一定的时间完成. PERT网络的每条弧表示一个子项目,如果以弧长表示每一子项目需要的时间,则最早完工时间对应于网络中的最长路 (关键路线). 工程上所谓的关键路线法(CPM: Critical Path Method)基本上也是计划评审技术的一部分. 项目网络不含圈, 其最长路问题和最短路问题都是可解的.

  6. 最短路问题 s t 给定有向网络N,弧(i,j)对应的权又称为弧长(或费用). 对于其中的两个顶点s,t,以s为起点和t为终点的有向路称为s-t有向路,其所经过的所有弧上的权(或弧长、费用)之和称为该有向路的权(或弧长、费用). 所有s-t有向路中权(或弧长、费用)最小的一条称为s-t最短路. 对于有向网络中的一个圈,定义它的权为圈上所有前向弧上的权的和, 减去圈上所有反向弧上的权. 权为正的圈称为正圈; 权为负的圈称为负圈; 权为0的圈称为零圈. 对一个有向圈,它的权就是圈上所有弧上的权的和. 本章的圈一般都是指有向圈, 我们直接将正有向圈简称为“正圈”,负有向圈简称为“负圈”,零有向圈简称为“零圈”, 而“无圈”指的是不存在有向圈.

  7. 最短路问题 –两点说明 • 最长路问题可以转化为最短路问题,把弧上的费用反号即可. • 必须指出:目前为止,一切最短路算法都只对不含负有向圈的网络有效. 对于含负有向圈的网络,最短路问题是NP困难的. • 因此,本章中除非特别说明,一律假定网络不包含负有向圈. 无向网络上的最短路问题一般可以转化为有向网络上的问题. • 如果所有弧上的权全为非负(或非正)数,只需将无向图的一条边代之以两条对称的有向弧即可. • 如果弧上的权有负有正,一般来说问题要复杂得多。

  8. 最短路问题的数学描述 xij表示弧(i,j)是否位于s-t路上:当xij =1时,表示弧(i,j)位于s-t路上,当xij =0时,表示弧(i,j)不在s-t路上. 思考:为什么xij 可以不限定为{0,1}? 关联矩阵是全么模矩阵,因此0-1变量可以松弛为区间[0,1]中的实数 不含负圈,变量直接松弛为所有非负实数

  9. 5.2.1 Bellman方程 对偶问题为 根据互补松弛条件, 当x和u分别为原问题和对偶问题的最优解时:

  10. Bellman方程 当某弧(i,j)位于最短路上时,即变量xij>0时, 一定有 如果u为对偶问题最优解,易知u+c (c为任意实数)仍为最优解. 不妨令 us=0,则u的具体数值就可以唯一确定了. 相当于对节点j赋予的一个实数值uj(通常称为 “标号”),在us=0时表示的正好是节点s到节点j的最短路的长度. Bellman方程(最短路方程、动态规划基本方程 ) 一般情况下直接求解最短路方程是相当困难的.

  11. 最短路树(树形图) 6 B D 6 5 4 A 4 F 7 5 1 C E 3 定理5.1 对于只含正有向圈的连通有向网络,从起点s到任一顶点j都存在最短路,它们构成以起点s为根的树形图(称为最短路树(Tree of Shortest Paths)或最短路树形图(Shortest Path Arborescence)),最短路的长度可以由Bellman方程唯一确定. 前一部分实际上是Bellman最优化原理的直接结果; 后一部分中Bellman方程解的唯一性可以用反证法证明(略)

  12. 10 1 s 1 2 3 -1 最短路树(树形图) • 如果将定理中的条件“只含正有向圈”改为“不含负有向圈”: • 上述最短路仍然存在; • Bellman方程的解的唯一性可能不成立. 起点s到顶点的最短路长度分别是us=u1=0, u2=10, u3=11 但此时只要u3 =u2+1  11 (us=u1=0)就可以满足Bellman方程. 如 us=u1=0, u2=8, u3=9 等 对于一般的网络,Bellman方程只是最短路长度必须满足的必要条件,而不是充分条件; 对于只含正有向圈(或无圈)的连通有向网络,它才是充要条件.

  13. 5.2.2 无圈网络 引理5.1 (拓扑排序, Topological Ordering) 设有向图D不含有向圈,则D的顶点总可以重新编号,使得 . 最短路算法 - 如果采用邻接矩阵表示法,可首先计算各节点的入度; 然后找入度为零者编号; 去掉已编号节点及相关弧,同时修改相邻节点入度(只需扫描该去掉的节点的对应行) ; 依次类推。 如果采用邻接表表示法,可首先计算各节点的入度; 然后找入度为零者编号; 去掉已编号节点及相关弧,同时修改相邻节点入度(只需扫描该去掉的节点的出弧); 依次类推。 该算法自然可以用来判断有向图是否无圈图.

  14. 最短路算法 - 5.2.2 无圈网络 当采用递推计算求解上述方程时, 每个顶点和每条弧均被考虑一次 . 当网络是无圈时,这一最短路算法的复杂度为 这是求解最短路问题可能达到的最小的复杂度, 因为任何算法都至少必须对每条弧考虑一次

  15. E 2 E -2 -2 1 1 5 5 A D 1 4 -1 3 3 -1 4 -1 4 1 1 B C 3 5 计算过程: =0, =min{0+1}=1, =min{0+(-1)}=-1, =min{0+5,1+(-2),-1+3}=-1, =min{-1+1, -1+4}=0. E -2 1 A D -1 1 B C 最短路算法 –例 例5.4 计算如下网络(图5.4 (a))中从节点A到所有其它节点的最短路.

  16. 5.2.3 正费用网络(Dijkstra,1959) 最短路算法 - 基本思想:对于V 中每一个顶点j,赋予两个数值(通常称为“标号”): 一个是距离标号uj,记录的是从起点到该顶点的最短路长度的上界; 另一个是前趋标号pred(j),记录的是当起点s到该顶点j 的一条路长取到该上界时,该条路中顶点j 前面的那个直接前趋(节点). 算法通过不断修改这些标号,进行迭代计算. 当算法结束时,距离标号表示的是从起点到该顶点的最短路长度. 迭代进行计算的过程中,所有顶点实际上被分成了两类: 一类是离起点 s 较近的顶点,它们的距离标号表示的是从点s到该顶点的最短路长度,因此其标号不会在以后的迭代中再被改变(称为永久标号); 一类是离起点 s 较远的顶点,它们的距离标号表示的只是从点到该顶点的最短路长度的上界,因此其标号还可能会在以后的迭代中再被改变(称为临时标号).

  17. STEP0. (初始化) 令S= ,=V, ;对V 中的顶点j(j s)令初始距离标号 . STEP2. 从 中找到距离标号最小的节点i,把它从 删除,加入S. 对于所有从i出发的弧 , 若 ,则令 . 转STEP1. 正费用网络(Dijkstra算法) STEP1. 如果S=V, 则uj为节点s到节点j的最短路路长(最短路可以通过数组pred所记录的信息反向追踪获得), 结束. 否则继续STEP2.

  18. 引理5.2 在上述Dijkstra 算法中, (1)对于S中的任一顶点j,其距离标号uj是从起点s到该顶点j 的最短路路长; (2)对于 中的任一顶点j,其距离标号uj是从起点s出发,只经过S中的顶点到达顶点j 的最短路路长. 中具有最小标号的顶点 i 可以移入S中,这不会破坏结论(1). S pred(i) i s pred(j) P2 j P1 对于 中的其它顶点k, 修改标号,不会破坏结论(2). 正费用网络(Dijkstra算法) 归纳法. 算法开始时结论成立. 设直到迭代的第k步,上述结论(1)(2)成立.

  19. 该算法的主要计算量在于STEP2循环(最多执行n次),它包括两个过程:节点寻找过程(从 中找到距离标号最小的节点i)和距离修改过程(修改与节点i相邻的节点的距离标号). 对于距离修改过程,注意到一个顶点只有当它与顶点i相邻时,其标号才可能变更,才需要修改标号. 每次循环所需要修改标号的顶点个数最多为 这一过程的整体效应相当于对每条弧进行一次检查,所以该过程的总计算复杂度为O(m). 对于稠密网络,这是求解最短路问题可能达到的最小的复杂度,因为任何算法都至少必须对每条弧考虑一次. 对于稀疏网络,利用各种形式的堆(Heap),其复杂度可以降为 或 等 Dijkstra算法 - 计算复杂性分析 对于节点寻找过程,第一次循环时需要n次比较操作,第二次循环时需要n-1次比较操作,…,依次类推. 因此,节点寻找过程的复杂度为 综上所述,该算法的复杂度为

  20. 标号算法(Labeling Algorithm) 标号算法:目的就是在算法结束时将所有临时标号转变为永久标号. 无圈网络的最短路算法,也可以看成是一种标号算法. 标号设定算法(Label-Setting Algorithm) :在通过迭代过程对标号进行逐步修正的过程中,每次迭代将一个顶点从临时标号集合中移入永久标号集合中. 一般只能用来求解无圈网络和正费用网络的最短路问题. 标号修正算法(Label-Correcting Algorithm):每次迭代时并不一定将任何顶点标号从临时标号转变为永久标号,只是对临时标号进行一次修正,所有顶点标号仍然都是临时标号; 只有在所有迭代终止时,所有顶点标号同时转变为永久标号. 标号设定算法可以看成是标号修正算法的特例,因为在算法终止之前,任何永久标号都可以看成是一种特殊的临时标号. 对于一般费用网络的最短路问题采用.

  21. 5.3.1 Bellman - Ford算法(Ford,1956) 引理5.3 在(5.11)~(5.13)中, 临时标号 是从起点 s =1到顶点 j 且所经过的弧数不超过 k 条时的最短路路长. 一般费用网络:标号修正算法(逐次逼近法,Successive Approximation) 计算从起点到所有其它顶点的最短路: 相当于迭代法解Bellman方程 归纳法 k=1显然成立. 假设对k成立,下面考虑k+1的情况. • 从起点 s =1到顶点j 且所经过的弧数不超过k+1条时的最短路有两种可能: • 只含有不超过k条弧; • 含有k+1条弧。

  22. 如果迭代不收敛,即存在某个节点 j 使得 < ,则说明网络本来就含有负有向圈. • 因此本算法也可以用于判断网络是否含有负有向圈,复杂度为O(mn). Bellman - Ford算法的复杂度 • 对于不含负有向圈的网络,最短路中弧的条数不超过n-1条. • 算法一定在n-1步迭代后收敛 算法的主要工作量是(5.13)式的循环迭代,对给定的 k 和 j ,只需检查节点 j 的所有入弧即可. 所以,对给定的k,正好需要对网络中的每条弧检查一次. 因此,算法的总复杂度为O(mn).

  23. 2 2 2 3 2 2 3 5 -4 4 -4 4 1 1 3 3 3 1 5 1 5 Bellman-Ford算法 (例)

  24. 5.3.2 一般的标号修正算法 基本思想:逐步逼近,迭代求解最短路方程 STEP0: 令距离标号us=0, 前趋标号pred(s)=0;对所有其它节点j令uj为无穷大. STEP1: 如果对所有的弧(i,j)有uj ui+ wij,则结束, uj就是从起点s到节点j的最短路长,最短路可以通过前趋标号(pred)获得. 否则进行下一步. • 整数权,每次迭代使得一个节点的距离标号至少减少1 • 对每个节点的距离标号的修正次数不超过2nC次 • 总迭代次数不会超过2n2C 次 • 每次迭代都对所有弧进行检查和判断,需要m次操作(不指明具体寻找弧的方法时) 算法的总复杂度为O( mn2C).

  25. Bellman-Ford算法是(一般)标号修正算法的特例 在一般标号修正算法中,可以首先对所有弧给定一个顺序,然后依次检查每条弧(i,j)并且在必要时对uj进行修正(减少);当所有弧均被检查一遍以后,再从第一条弧开始下一遍检查. 经过k遍检查以后,节点j所获得的距离标号uj表示从起点s=1到顶点j 且所经过的弧数不超过k条时的最短路路长. 这正是Bellman-Ford算法

  26. 改进的(一般)标号修正算法 基本思想:用链表记录可能满足uj> ui + wij的弧的起点 STEP0: 令LIST={s},距离标号us=0, 前趋标号pred(s)=0;对所有其它节点j令uj为无穷大。 STEP1. 如果LIST= ,则结束, uj 就是从起点s到节点j的最短路长,最短路可以通过前趋标号(pred)回溯获得. 否则进行下一步. STEP2:从LIST中删去一个节点i, 对从i出发的每条弧(i,j)判断是否满足 uj> ui + wij.如果是,则令uj= ui + wij, pred(j)=i, 并令LIST=LIST{j}. 当从i出发的所有弧都检查完以后,转STEP1. 这一算法的总复杂度为

  27. 5.3.3 Floyd-Warshall算法(1962) 引理5.4 在(5.14)~(5.16)中, 临时标号 是不通过k,k+1,…,n 节点(i,j 除外)时从节点i到节点j的最短路路长. 计算网络中所有节点之间的最短路: • Bellman-Ford:O(nmn) = O(mn2) • Floyd-Warshall算法基本思想:逐步逼近,迭代求解最短路方程: O(n3) 归纳法 k=1显然成立. 假设对k成立,下面考虑k+1的情况. 从起点i到j 且不通过k+1,…, n 节点的最短路有两种可能: (1)不经过k节点 ; (2)经过k节点 。

  28. 如果迭代不收敛,即存在节点 i,j 使得 < ,则说明网络本来就含有负有向圈. • 在某次迭代k发现某个节点i使得 <0, 则说明网络本来就含有负有向圈. Floyd-Warshall算法的复杂度 • 对于不含负有向圈的网络,最短路中弧的条数不超过n-1条. • 算法一定在n步迭代后收敛 算法的主要工作量是(5.16)式的循环迭代(三重循环),算法的总复杂度为O(n3). • 因此本算法也可以用于判断网络是否含有负有向圈,复杂度为O(n3).

  29. STEP0: k=0. 对于所有节点i和j: 令 , , ( ,若节点i和j之间没有弧, 认为 ) . STEP1: k=k+1. 对于所有节点i和j: 若 , 令 , ; 否则令 , . Floyd-Warshall算法的具体实现 由于要记录所有节点之间最短路的信息, 所以这里我们要用一个二维数组P; 可以依据二维数组P, 采用“正向追踪”的方式得到最短路. STEP2:如果k=n, 结束; 否则转STEP1.

  30. 4 1 2 -3 -3 6 5 -7 3 10 4 3 6 Floyd-Warshall算法的例

  31. Floyd-Warshall算法的例

  32. 终点 1 2 3 4 Floyd-Warshall算法的例 起点 1 (1,2) (1,3) (1,3), (3,4) 2 (2,1) (2,3) (2,3), (3,4) 3 (3,4),(4,2),(2,1) (3,4),(4,2) (3,4) 4 (4,2),(2,1) (4,2) (4,2)(2,3)

  33. 布 置 作 业 目的 掌握最短路的基本算法及复杂性分析 思考 1 ; (不交) 《网络优化》第140-143页 2;13;14;16 内容 内容

More Related