您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 清华大学网络优化-第5章_最短路问题
1网络优化NetworkOptimization清华大学数学科学系谢金星办公室:理科楼2206#(电话:62787812)Email:jxie@math.tsinghua.edu.cn~jxie/courses/netopt清华大学课号:70420133第5章最短路问题(ShortestPathProblem)2许多实际问题都可以转化为最短路问题其有效算法经常在其它网络优化问题中作为子算法调用ST最短路问题的例子和意义3例5.1(Single-levelUncapacitatedLotsizing)某工厂生产某种产品用以满足市场需求,且已知在时段t中的市场需求为dt.在某时段t,如果开工生产,则生产开工所需的生产准备费为st,单件产品的生产费为ct.在某时段t期末,如果有产品库存,单件产品的库存费为ht.假设初始库存为0,不考虑能力限制,工厂应如何安排生产,可以保证按时满足生产,且使总费用最小?(Wagner–Whitin,1958)最短路问题的例子-单产品、无能力限制的批量问题假设在时段t,产品的生产量为xt,期末产品的库存为It(I0=0);用二进制变量yt表示在时段t工厂是否进行生产准备.假设费用均非负,则在最优解中,即00TIITttTttdx11可以证明:一定存在满足条件的最优解.)1(01TtxItt可以只考虑txTtttttdddddd11,,,,04单产品、无能力限制的批量问题记wij为第i时段生产量为时所导致的费用(包括生产准备费、生产费和库存费),即其中网络:从所有节点i到j(i)连一条弧,弧上的权为wi,j-1,如T=4时:1jitttiiiijIhxcswjiiidddx1jittdddI21)1(jti12345w11w33w22w44w34w23w12w13w24w145例5.3计划评审技术,即PERT(ProjectEvaluation&ReviewTechnique),又称网络计划技术或统筹法)大型复杂工程项目(Project)往往被分成许多子项目,子项目之间有一定的先后顺序(偏序)要求,每一子项目需要一定的时间完成.PERT网络的每条弧表示一个子项目,如果以弧长表示每一子项目需要的时间,则最早完工时间对应于网络中的最长路(关键路线).工程上所谓的关键路线法(CPM:CriticalPathMethod)基本上也是计划评审技术的一部分.项目网络不含圈,其最长路问题和最短路问题都是可解的.(开始)AF(结束)566744513BEDC6最短路问题给定有向网络N,弧(i,j)对应的权又称为弧长(或费用).对于其中的两个顶点s,t,以s为起点和t为终点的有向路称为s-t有向路,其所经过的所有弧上的权(或弧长、费用)之和称为该有向路的权(或弧长、费用).所有s-t有向路中权(或弧长、费用)最小的一条称为s-t最短路.对于有向网络中的一个圈,定义它的权为圈上所有前向弧上的权的和,减去圈上所有反向弧上的权.权为正的圈称为正圈;权为负的圈称为负圈;权为0的圈称为零圈.对一个有向圈,它的权就是圈上所有弧上的权的和.本章的圈一般都是指有向圈,我们直接将正有向圈简称为“正圈”,负有向圈简称为“负圈”,零有向圈简称为“零圈”,而“无圈”指的是不存在有向圈.st7无向网络上的最短路问题一般可以转化为有向网络上的问题.如果所有弧上的权全为非负(或非正)数,只需将无向图的一条边代之以两条对称的有向弧即可.如果弧上的权有负有正,一般来说问题要复杂得多。最短路问题–两点说明最长路问题可以转化为最短路问题,把弧上的费用反号即可.必须指出:目前为止,一切最短路算法都只对不含负有向圈的网络有效.对于含负有向圈的网络,最短路问题是NP困难的.因此,本章中除非特别说明,一律假定网络不包含负有向圈.8xij表示弧(i,j)是否位于s-t路上:当xij=1时,表示弧(i,j)位于s-t路上,当xij=0时,表示弧(i,j)不在s-t路上.关联矩阵是全么模矩阵,因此0-1变量可以松弛为区间[0,1]中的实数不含负圈,变量直接松弛为所有非负实数)3.5(.0)2.5(,,,0,,1,,1..)1.5(min),(:),(:),(ijAijjjiAjijijAjiijijxtsitisixxtsxw思考:为什么xij可以不限定为{0,1}?最短路问题的数学描述95.2.1Bellman方程对偶问题为)3.5(.0)'2.5(,,,0,,1,,1..)1.5(min),(:),(:),(ijAijjjiAjijijAjiijijxtsitisixxtsxw)5.5(.),(,..)4.5()max(Ajiwuutsuuijijst根据互补松弛条件,当x和u分别为原问题和对偶问题的最优解时:)6.5(.),(,0)(Ajiwuuxijijij10Bellman方程当某弧(i,j)位于最短路上时,即变量xij0时,一定有如果u为对偶问题最优解,易知u+c(c为任意实数)仍为最优解.不妨令us=0,则u的具体数值就可以唯一确定了.Bellman方程(最短路方程、动态规划基本方程)相当于对节点j赋予的一个实数值uj(通常称为“标号”),在us=0时表示的正好是节点s到节点j的最短路的长度.ijijwuu)8.5(}.{min)7.5(,0ijijijswuuu一般情况下直接求解最短路方程是相当困难的.11定理5.1对于只含正有向圈的连通有向网络,从起点s到任一顶点j都存在最短路,它们构成以起点s为根的树形图(称为最短路树(TreeofShortestPaths)或最短路树形图(ShortestPathArborescence)),最短路的长度可以由Bellman方程唯一确定.前一部分实际上是Bellman最优化原理的直接结果;后一部分中Bellman方程解的唯一性可以用反证法证明(略)最短路树(树形图)AF566744513BEDC12如果将定理中的条件“只含正有向圈”改为“不含负有向圈”:上述最短路仍然存在;Bellman方程的解的唯一性可能不成立.起点s到顶点的最短路长度分别是us=u1=0,u2=10,u3=11但此时只要u3=u2+111(us=u1=0)就可以满足Bellman方程.如us=u1=0,u2=8,u3=9等最短路树(树形图)123101-1s对于一般的网络,Bellman方程只是最短路长度必须满足的必要条件,而不是充分条件;对于只含正有向圈(或无圈)的连通有向网络,它才是充要条件.13最短路算法-如果采用邻接表表示法,可首先计算各节点的入度;然后找入度为零者编号;去掉已编号节点及相关弧,同时修改相邻节点入度(只需扫描该去掉的节点的出弧);依次类推。如果采用邻接矩阵表示法,可首先计算各节点的入度;然后找入度为零者编号;去掉已编号节点及相关弧,同时修改相邻节点入度(只需扫描该去掉的节点的对应行);依次类推。5.2.2无圈网络引理5.1(拓扑排序,TopologicalOrdering)设有向图D不含有向圈,则D的顶点总可以重新编号,使得.Ajiji),(,)(2nO)(2nO)(nO)(nO)(mO)(nmO)()(2nOnnO该算法自然可以用来判断有向图是否无圈图.)(mO14最短路算法-当网络是无圈时,这一最短路算法的复杂度为5.2.2无圈网络当采用递推计算求解上述方程时,每个顶点和每条弧均被考虑一次.)(nmO这是求解最短路问题可能达到的最小的复杂度,因为任何算法都至少必须对每条弧考虑一次)10.5(}.{min)9.5(,01ijijijswuuuu)()(mOnmO15最短路算法–例例5.4计算如下网络(图5.4(a))中从节点A到所有其它节点的最短路.EABCD1-25-1-1341ABCD1-11E-2E-2135415-13412计算过程:=0,=min{0+1}=1,=min{0+(-1)}=-1,=min{0+5,1+(-2),-1+3}=-1,=min{-1+1,-1+4}=0.1u}{min222iiiwuu}{min333iiiwuu}{min444iiiwuu}{min555iiiwuu16最短路算法-算法通过不断修改这些标号,进行迭代计算.当算法结束时,距离标号表示的是从起点到该顶点的最短路长度.基本思想:对于V中每一个顶点j,赋予两个数值(通常称为“标号”):一个是距离标号uj,记录的是从起点到该顶点的最短路长度的上界;另一个是前趋标号pred(j),记录的是当起点s到该顶点j的一条路长取到该上界时,该条路中顶点j前面的那个直接前趋(节点).迭代进行计算的过程中,所有顶点实际上被分成了两类:一类是离起点s较近的顶点,它们的距离标号表示的是从点s到该顶点的最短路长度,因此其标号不会在以后的迭代中再被改变(称为永久标号);一类是离起点s较远的顶点,它们的距离标号表示的只是从点到该顶点的最短路长度的上界,因此其标号还可能会在以后的迭代中再被改变(称为临时标号).5.2.3正费用网络(Dijkstra,1959)17正费用网络(Dijkstra算法)STEP1.如果S=V,则uj为节点s到节点j的最短路路长(最短路可以通过数组pred所记录的信息反向追踪获得),结束.否则继续STEP2.STEP0.(初始化)令S=,=V,;对V中的顶点j(js)令初始距离标号.S0)(,01spreduusjuSTEP2.从中找到距离标号最小的节点i,把它从删除,加入S.对于所有从i出发的弧,若,则令.转STEP1.SSAji),(ijijwuuijpredwuuijij)(,18正费用网络(Dijkstra算法)归纳法.算法开始时结论成立.设直到迭代的第k步,上述结论(1)(2)成立.pred(j)pred(i)ijsP1P2SS中具有最小标号的顶点i可以移入S中,这不会破坏结论(1).S引理5.2在上述Dijkstra算法中,(1)对于S中的任一顶点j,其距离标号uj是从起点s到该顶点j的最短路路长;(2)对于中的任一顶点j,其距离标号uj是从起点s出发,只经过S中的顶点到达顶点j的最短路路长.S对于中的其它顶点k,修改标号,不会破坏结论(2).S19Dijkstra算法-计算复杂性分析对于节点寻找过程,第一次循环时需要n次比较操作,第二次循环时需要n-1次比较操作,…,依次类推.因此,节点寻找过程的复杂度为综上所述,该算法的复杂度为该算法的主要计算量在于STEP2循环(最多执行n次),它包括两个过程:节点寻找过程(从中找到距离标号最小的节点i)和距离修改过程(修改与节点i相邻的节点的距离标号).S)(1)1(2nOnn对于距离修改过程,注意到一个顶点只有当它与顶点i相邻时,其标号才可能变更,才需要修改标号.每次循环所需要修改标号的顶点个数最多为这一过程的整体效应相当于对每条弧进行一次检查,所以该过程的总计算复杂度为O(m).)(id)()(22nOmnO对于稠密网络,这是求解最短路问题可能达到的最小的复杂度,因为任何算法都至少必须对每条弧考虑一次.对于稀疏网络,利用各种形式的堆(Heap),其复杂度可以降为或等)log(),log(nnmOnmO))log((CnmO20标号算法(LabelingAlgorithm)标号算法:目的就是在算法结束时将所有临时标号转变为永久标号.无圈网络的最短路算法,也可以看成是一种标号算法.标号设定算法(Label-SettingAlgorithm):在通过迭代过程对标号进行逐步修正的过程中,每次迭代将一个顶点从临
本文标题:清华大学网络优化-第5章_最短路问题
链接地址:https://www.777doc.com/doc-2243166 .html