信息技术--网络分析与网络计划
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章网络分析与网络计划
网络分析是图论的一个应用分支.它主要是应用图论的理论与方法来解决具有网络性质的管理决策问题.在现实生活和生产实践中,网络分析方法有很广泛的应用.如在企业管理中,如何制订管理计划或设备购置计划,使收益最大或费用最小;在组织生产中,如何使各工序衔接好,使生产任务完成得既快又好;在交通网络中,如何使调运的物资数量多且费用最小等.由于网络分析具有图形直观,方法简便,容易掌握的特点,因此得到迅速的发展,且广泛地应用在各个领域,成为经济活动中许多管理决策的优化问题的重要手段.
网络计划方法是上世纪50年代发展起来的计划控制技术,主要包括计划评审技术(programme evaluation and review technique,简称PERT)和关键路径方法(critical path method或critical path analysis,简称CPM、CPA).网络计划方法特别适用于现代管理中的多因素多环节的复杂计划的优化控制,成为管理运筹学的重要应用分支.
本章在引入有关图的一些基本概念的基础上,介绍最小生成树、网络最短路、最大流、最小费用最大流等网络分析模型及其解法;并对网络计划图(统筹图)的制作、作业时间参数计算、关键线路方法和计划评审技术等网络计划基本技术和方法进行初步介绍.
第一节图的基本概念
一、图
现实世界中有许多具体事物及关系可以用图形来抽象表示.例如,路线关系、工序安排、区位规划等都可以用图来表达.
我们先通过几个直观的例子,来认识什么是图.
例6-1 歌尼斯堡七桥问题
哥尼斯堡(Konigsbergs)城域有一个普雷格尔河系,由新河、旧河及其交汇
而成的大河组成,它把该城分成了一岛三岸共四块陆地,陆地之间有七座桥连通,如图6-1(a)所示.当时城内居民在散步时热衷于这样一个问题:从某陆
地出发,能否走遍七桥且每桥只过一次而最终回到原出发地.
图6-1(a)
图6-1(b)
欧拉在1736年解决了这一问题.他用四个点表示四块陆地,用相应两点间的边表示桥,从而建立了该问题的图的模型,见图6-1(b).于是问题归结为:在这个连通多重图中,能否找出一条回路,过每边一次且仅仅一次.欧拉在求解该问题时,把图6-1(a)所示的实际问题抽象为图6-1(b)所示图形.例6-2 比赛安排问题
5个球队之间安排赛事.其中a球队分别与b,c,d球队有赛事;b球队
还与c球队,d球队还与e球队有赛事.综上,这5个球队之间的比赛关系可
用图6-2(a)来表示,也可用图6-2(b)来反映.
图6-2(a)
图6-2(b)
以上两例都忽略了问题的具体细节,而把问题的关键性质或关系抽象为图的形式.例6-1中两岸和岛的形状及桥的曲直都被忽略,但陆地间的关联情况却得到保持.例6-2中把比赛关系抽象为连接关系.简单些说,一个图代表了某些对象集合之间的关系,而图论是主要研究这些对象在上述表示法中的许多可能的性质中的某些性质.详细些说,一个图指的是一些点以及连接这些点的一些线的总体.这种连接方式可以具有许多特征,而图论本质上就是研究这种特征的.注意,这里所讲的图并不是解析几何与微积分书中常见的图,在那里,点的位置,线的长度和斜率是它的重要部分.而在图论中,这些都是不重要的,而重要的只是哪些点之间有线相连.有时,连接的先后次序也是重要的.
二、几个基本概念
一个图G 定义为一个有序二元组(V ,E ),记为:
G =(V ,E )
其中,V 是一个有限非空的集合,其元素称为G 的结点或顶点,简称点,而V 称为G 的结点集或顶点集,简称点集,一般表示为:
V ={1v ,2v ,…,n v }
而E 称为G 的边集,表示为:
E ={1e ,2e ,…,n e }
其中e 由V 中元素对(i v ,j v )所构成.如果(i v ,j v )是无序对,则G 称为无向图.E 中元素e 称为G 的无向边,一般表示为
e =(i v ,j v )
对于给定的图可以作出其几何图.
例6-3 无向图G =(V ,E ),其中点集V ={1v ,2v ,3v ,4v ,5v },
E ={1e ,2e ,3e ,4e ,5e ,6e ,7e ,8e },边与顶点的关联情况由表6-1给出.
表6-1 边与顶点的关联情况
根据表6-1,可作其几何图,如图6-3所示.在作几何图时,仅要求表示
出顶点、边以及它们间的关联关系,而对顶点的位置以及边的曲直、长短都没有任何规定.
图6-3
基于无向图G 的结构特点,我们给出下列一些术语:
平行边——若两条不同的边e 与'e 具有相同的端点,则称e 与'e 为G 的平行边.图6-3中2e 与7e 是平行边,因为它们的端点均为1v 、3v .
简单图——若G 无平行边,则称图G 为简单图.
完备图——图G 中任两个顶点间恰有一条边相关联,G 为完备图.
设顶点的非空集合V =(1v ,2v ,…,n v ),边的集合A =(1a ,2a ,…,n a ).如果A 中任一条边ij a 是V 的一个有序元素对(i v ,j v )(这里,i v ≠j v ),则称A 为有向边集,A 中元素ij a 称为有向边或弧,记为
ij a =(i v ,j v )
其中i v 为ij a 的起点,j v 为ij a 的终点.V 和A 组成了一个有向图,记作
D =(V ,A )
例6-4 给有向图D =(V ,A ),其中V =(1v ,2v ,3v ,4v ),A =
(1a ,2a ,…,7a ),边与顶点的关联情况如表6-2所给.
表6-2 边与顶点的关联情况
根据表6-2也可作出有向图,如图6-4(a )
图6-4(a)
图6-4(b)
图6-4(c )
有向图区别于无向图的关键,在于它的边(或弧)是有方向的,图6-4(a )中边上的箭头所指即边的方向.在有向图中(i v ,j v )≠(j v ,i v ).
类似于无向图,有向图G 也有下列术语:
平行边——不同的弧a 与'a (i v ,j v )的起点与终点都相同.图6-4(a )中3a 、4a 是平行边,而1a 、2a 却不是,1a =(2v ,1v );而2a =(1v ,2v ).
简单图——无平行边的有向图称为简单图.
完备图——图中任两个顶点i v 与j v 间,恰有两条有向边(i v ,
j v )及(j v ,i v ),则称该有向图D 为完备图.
基本图——把有向图D 的每条边除去方向就得到一个相应的无向图G ,称G 为D 的基本图.例如图6-4(b )是图6-4(a )的基本图.
3.同构
对于无向图和有向图,如果图G =(V ,E )和G '=(V ',E ')的顶点集合V 和V ',以及边集E 和E '之间在保持关联性质的条件下一 一对应,则图G 和G '同构.
例如图6-2(a)、(b)所示的两个图看似不同,其实是同构图.
由于同构的图被认为是相同的,这就给我们在网络规划中建立网络模型带来许多方便,当我们用几何图来反映和分析实际问题的内在关系而构建网络模型时,点的位置可以任意布置,边的长短曲直也可任意,故而我们尽量设计那种反映问题清晰、简练的几何图.
4.链、路和连通性
给定一个无向图G =(V ,E ),其中的一个点与边的交错序列1i v ,1i e ,2i v ,2i e ,…,1-ik v ,1-ik e ,ik v ,如果序列中所有it e 都满足it e =(it v ,1+it v ),(t =1,2,…,k -1),则称交错序列为联结1i v 和ik v 的链,记为
μ=(1i v ,1i e ,2i v ,2i e ,…,1-ik v ,1-ik e ,ik v )
或简记为
(1i v ,2i v ,…,1-ik v ,ik v )和(1i e ,2i e ,…,2-ik e ,1-ik e )
当k >0,且1i v =ik v ,则链的起点等于终点,称为闭链.闭链中除起点和终点外没有相同的结点和边,则该闭链称为圈.
当1i v ≠ik v ,时称为开链.若开链中所有结点均不相同,称为初等链.
例如图6-5中:
图6-5
μ1=(1v ,2v ,4v ,3v ,2v ,1v )是闭链,但不是圈;
μ2=(1v ,2v ,3v ,1v )是闭链,同时也是圈;
μ3=(1v ,2v ,4v ,3v ,2v )是开链;
μ4=(1v ,2v ,4v ,3v )是初等链.
对于有向图D =(V ,A ),可以通过其相应的基本图来定义它的链.但由于有向图中弧是有方向的,可能出现链中的弧的方向与链的方向不一致的情况.如果链中所有弧的方向与链的方向一致,则称该链为单向路,简称路.显然,在有向图中链和路的概念并不一致,而在无向图中两者没有区别.
如果路的起点和终点相同,则称为回路.对于无向图而言闭链和回路概念一致.在图6-4(a )中:
μ1=(1a ,3a ,8a )是链,但不是路;
μ2=(8a ,3a ,1a )是链,同时也是路和回路.
在D 中任意两个结点v i1和v ik ,从v i1到v ik 存在路,则称v i1可达v ik .若D 中任意两结点间存在链,则称D 为连通图.若D 中任意两结点间相互可达,则称D 为强连通图.对于无向图而言连通图等价于强连通图.
例如图6-4(a )所示的是强连通图,因为1v 、2v 、3v 、4v 都是相互可达的.如果我们将图中弧8a 删去,如图6-4(c )所示,则成为一般的连通图.因为这时1v 、3v 不能相互可达.
5.网络
一个图连同定义在其边集上的实函数一起称为一个网络.网络一般是连通图.定义在边集上的实函数称为边的权数记为
ij w =w (i v ,j v )
它与边(i v ,j v )具有一一对应关系,可以用以表达网络上的各种有关性质,如路长、流量、费用等等.网络的图解即在每条边旁标上相应的权数.
若一网络的每条边都是无向边,则称为无向网络,记为
N =(G ,w )或N =(V ,E )
若一网络的每条边都是有向边,则称为有向网络,记为
N=(D,w)或N=(V,A)
若一网络中既有无向边,也有有向边,则称为混合网络.
所谓网络分析,简单地说,即对网络进行定性和定量分析,以便为实现某种优化目标而寻求最优方案.这方面的典型问题有:最小树问题,最短路问题,中心问题,重心问题,最大流问题,最小费用最大流问题,最短回路问题,网络计划问题,等等.
第二节最小树问题
一、树的基本概念
1.子图、真子图、生成子图
设有图G=(V,E)和图G'=(V',E'),如果V'⊆V,E'⊆E,则称G'为G的子图,并记为G'⊆G,而G则为G'的原图.当子图的边集或点集不同于原图时,即G'≠G时,称子图G'为G的真子图,记为G'⊂G.当子图的点集等于原图的点集时,则称子图G'为原图G的生成子图或支撑子图.在图6-6中,(a),(b),(c),(d)均是(a)的子图;(a),(b),(c)是(a)的真子图;(a),(b),(c)均是(a)的生成子图.由于(d)比(a)少一个点,所以(d)不是(a)的生成子图.
2.树
无圈且连通的无向图称为树.树一般记为T.作为树定义还可以有以下几种表述:
(1)T连通且无圈或回路;
(2)T无圈且有n-1条边(如果有n个结点);
(3)T连通有n-1条边;
(4)T无回路,但不相邻的两个结点之间联以一边,恰得一个圈;
(5)T连通,但去掉T的任意一条边,T就不连通了;
(6)T 的任意两个结点之间恰有一条初等链.
二、最小生成树及其算法
1.最小生成树
如果T 是无向图G 的生成子图,同时T 又是树,则称T 是G 的生成树或支撑树.
例如图6-7(b ),(c )是(a )的生成树.
一个网络图可以有多个生成树.记N 的所有生成树的集合为:
T ={k T | k =1,2,…,L }
设i T =(V ,k E )是网络图N =(G ,w )的一棵生成树,则边集k E 中所有边的权数之和称为树k T 的权数,记为
w (k T )=∑∈Ek
e e w )(
若*T ∈T ,使
w (*T )=T
T k ∈min {w (k T )} 则称*T 为网络N 的一棵最小生成树,简称最小树.
2.最小树的求法
定理8-1 如果把网络N 的点集V 分割成两个不相交的非空集合S 和_S ,则联结S 和_
S 的最小边必包含于N 的最小树内.
根据定理8-1,可以给出求最小树的两种方法,这就是避圈法与破圈法,分述如下:
(1)避圈法
其计算步骤如下:
①从网络N 中任选一点i v ,令S ={i v },_S =V \{i v };
②从联结S 与_S 的边中选取最小边,不妨设为(i v ,j v ),则它必包含于最小树内;
③令S ∪{j v }⇒S ,_S \{j v }⇒_S ;
④若_S =∅,则停止,已选出的诸边即给出最小树;否则返②.
例6-5 试求图6-8所示网络的最小树,各边旁边的数字为各边的权.
解 由题意可知这是一个最小树问题.先按原图画出7个点,令S ={1},_S ={2,3,4,5,6,7}.由于联结S 与_
S 的边共有三条,其中最短边为(1,
2)故用线把点1和2连结起来,令S ={1,2},_S ={3,4,5,6,7},如图6-8(a)所示,重复上述步骤,直到7个点全都连通为止.具体求解过程如图6-8(a )到图6-8(f )所示,其中图6-8(f ))即给出本例的最小树*T ,w (*T )=13.
图6-8(a )(b )
(2)破圈法
用破圈法求最小树时,先从图中任取一圈,去掉该圈的一条最大边,然后重复这一步骤,直到无圈为止.
例6-6 图6-9所示的一赋权连通图是某一具有9个居民点的交通网络图,其中边权表示该段道路的长,现欲沿小区道路架设一联络各个居民点的闭路电视系统,求可使闭路电视系统所架线路总长最短的方案.
图6-9
解 这是一个求网络最小树的问题.可利用破圈法求解.过程如图6-9(a —i )所示.
图6-9(a ——i )
图6-9(i )所示的是网络最小树*T .按图安排闭路电视系统可使所架线路总长最短,w (*T )=19.
第三节 最短路径问题
在生产实践,运输管理和工程建设的很多活动中,诸如各种工艺路线的安排、厂区及货场的布局、管道线网的铺设及设备的更新等等问题,都与寻找一个“图的最短路径”问题(shortest-path problem )密切相关,它是网络规划中的一个最基本的问题.
一、基本概念
给定一个赋权有向图D =(V ,A ),对每一条弧ij a =(i v ,j v ),相应地有权w (ij a )=ij w ,又有两点s v 、t v ∈V ,设p 是D 中从s v 到t v 的一条路,路p 的权是p 中所有弧的权之和,记为w (p ).最短路问题就是求从s v 到t v 的路中一条权最小的路*p :
w (*p )=p
min w (p ) 二、最短路问题的算法
1.Dijkstra 算法(Dijkstra algorithm )
该算法是由Dijkstra 于1959年提出来,用于求解指定两点之间的最短路,或从指定点到其余各点的最短路,目前被认为是求解最短路问题的最好方法.算法的基本思路基于以下原理.
定理6-2 若p 是从s v 到t v 的最短路,i v 是p 中的一个点,那么从s v 沿p 到i v 的路必定是从s v 到i v 的最短路.
引理 若p 是从s v 到t v 的最短路,i v 是p 中的一个点,则从s v 到i v 的最短路必定包含于p 之内.
根据定理6-2及引理,我们可以从v s 出发试探所有可能到达v t 的下一个结点v i ,取距离最短的一个弧(s v ,i v ),则必然包含于从s v 到t v 的最短路中;从i v 开始对没有试探过的结点进行进一步的试探、推进,直至t v ,最终可以找出从s
v
到t v 的最短路.Dijstra 算法采用(双标号法)T 标号与P 标号,来实现这一试探、推进过程.T 标号为试探性标号;P 为永久性标号.给i v 点一个P 标号时,表示从s v 到i v 点的最短路权,一旦i v 点得到P 标号则意味着从s v 到i v 点的最短距离已经确定,标号不再改变.给i v 点一个T 标号时,表示从s v 到i v 点的估计最短路权的上界,这是一种临时标号.凡没有得到P 标号的点都有T 标号.算法每一步都把某一点的T 标号改为P 标号,当终点t v 得到P 标号时,全部计算结束.
Dijstra 算法基本步骤:
(1)给s v 以P 标号,P(s v )=0,其余各点均给T 号,T(i v )=+∞. (2)若i v 点为刚得到P 标号的点,考虑j v ,(i v ,j v )∈A 且j v 为T 标号.对j
v 的T 标号进行如下的更改:
T(j v )=min[T(j v ),P(i v )+ij w ] (6-1)
(3)比较所有具有T 标号的点,把最小者'i v 改为P 标号,即:
P('i v )=min[ T(i v ) ] (6-2)
当存在两个以上最小者时,可同时改为P 标号.
(4)若全部点均为P 标号,则停止计算.否则用'i v 代替i v 并转至步骤(2). 例6-7 用Dijkstra 算法求图6-10中从1v 到7v 的最短距离,以及相应的路线.
解 (1)首先给1v 以P 标号,P (1v )= 0,给其余所有点T 标号,T (v i )=+∞(i = 2,3,… 7).
(2)考察1v ,由于(1v ,2v ),(1v ,3v ),(1v ,4v )∈A ,且2v 、3v 、
4v 是T 标号,所以修改T 标号为:
T (2v )=min [ T (2v ),P (1v )+12w ]=min [∞,0+2]=2 T (3v )=min [ T (3v ),P (1v )+13w ]=min [∞,0+5]=5
T (4v )=min [ T (4v ),P (1v )+14w ]=min [∞,0+3]=3
在所有T 标号中,T(2v )=2最小,于是令P(2v )=2.将结果记在图6-10(a )上:P 标号以()形式标在结点旁边,T 标号以不带()的数字标在结点旁边,图中没有标号的结点均代表T (i v )=+∞
(3)考察2v .因为(2v ,3v ),(2v ,6v )∈A ,且3v 、6v 是T 标号,故3v 、
6v 新的T 标号为:
T (3v )=min [ T (3v ),P (2v )+23w ]=min [∞,2+2]=4 T (6v )=min [ T (6v ),P (2v )+26w ]=min [∞,2+7]=9
在所有T 标号中,T(4v )=3最小,故令P(4v )=3.图上标号如图6-10(b ).
(4)考察4v ,因(4v ,5v )∈A ,
T (5v )=min [ T (5v ),P (4v )+45w ]=min [∞,3+5]=8
在所有T 标号中,T(3v )=4最小,令P(3v )=4.图上标号如图6-10(c ).
(5)考察3v ,(3v ,5v ),(3v ,6v )∈A ,
T (5v )=min [ T (5v ),P (3v )+35w ]=min [∞,4+3]=7 T (6v )=min [ T (6v ),P (3v )+36w ]=min [∞,4+5]=9
在所有T 标号中,T(5v )=7最小,令P(5v )=7.图上标号如图6-10(d ).
(6)考察5v ,(5v ,6v ),(5v ,7v )∈A ,
T (6v )=min [ T (6v ),P (5v )+56w ]=min [∞,7+1]=8 T (7v )=min [ T (7v ),P (6v )+57w ]=min [∞,7+7]=14 在所有T 标号中,T(6v )=8最小,故令P(6v )=8.图上标号如图6-10(e ).
(7)考察6v ,(6v ,7v )∈A ,
T (7v )=min [ T (7v ),P (6v )+67w ]=min [14,8+5]=13
令P(7v )=13,图上标号如图6-10(f ).所有点都标上P 标号,计算结束.
从1v 到7v 的最短路径,可从7v 开始根据永久性标号数值回溯得到.最短路径是:1v →2v →3v →4v →5v →6v →7v ,路长13.同时得到1v 到其余各点的最短路,即各点的永久性标号P (v i ).
Dijkstra 算法只适用于所有ij w ≥0的情形,当赋权有向图中存在负权时,则算法失效.
图6-10(a )(b )(c )(d )(e )(f )
2.逐次逼近算法
为方便起见,不妨设从任一点i v 到任一点j v 都有一条弧,如果在D 中,不存在弧(i v ,j v ),则添加虚设弧(i v ,j v ),令ij w =+∞.从起点s v 到任意点j v 的最短路可以视为一个两阶段过程,如图6-11所示:
(1)从s v 出发,沿着一条路走k -1步到某点i v ,其最短距离表示为
)1(-k d (s v ,i v )
(2)再从i v 沿(i v ,j v )到j v ,其最短距离就是弧(i v ,j v )上的权ij w . 所以,从s v 到j v 的最短距离必满足如下递推公式:
)(1d (s v ,j v )=sj w (j =1,2,…,n ) (6-3)
)(k d (s v ,j v )=i
min {)1(-k d (s v ,i v )+ij w } (6-4)
式(6-3)是任意两点间的一步距离,由前面假设可知其存在,这可以作为初始条件.式(6-4)是任意两点间的k 步距离,这是一个递推公式.利用初始条件和递推公式通过逐步迭代就可以确定网络D 中任意点之间经k 步到达的最
短距离并得到与之相应的路线.下面以实例来说明迭代过程.
例6-8 用逐次逼近算法求例6-6图6-10中从1v 到各点的最短距离. 解 根据初始条件可知
)(1d (1v ,1v )=0 )(1d (1v ,2v )=2 )(1d (1v ,3v )=5
)(1d (1v ,4v )=3 )(1d (1v ,5v )=+∞ )(1d (1v ,6v )=+∞ )(1d (1v ,7v )=+∞;
初始条件仅仅表达了1v 从出发到j v 的一步到达的距离,在有向简单网络中即为从1v 到各点的最短距离.
1v 到各点的k 步距离由公式(6-4)递推得出.为方便、直观可列表计算如表6-3:
表6-3 1v 到各点的k 步距离
表的左半部是一个n ×n 的关于结点两两之间的一步距离矩阵,由式(6-3)可知,i v 到j v 的一步距离就是弧(i v ,j v )上的权ij w .一步距离矩阵中0元素表示原地踏一步,没有填写数字的空格是∞的省略.表右半部是公式(6-4)的计算结果.k =h 时,第h +n 列数据表示1v 到各点的h 步最短距离.譬如k =3为第 ⑽ 列,表示1v 经3步到达各点的最短距离.计算过程如下:
(1)当k =1时
)(1d (1v ,j v )=j
w 1
这是初始条件,表示从1v 出发到各点的一步距离,将其依次列于第 ⑻列.由此推算)(2d (1v ,j v ).
(2)k =2时
)(2d (1v ,j v )=i
min {)(1d (1v ,i v )+ij w }
即用表中第 ⑻ 列数字与表左边一步距离矩阵中第j 列相应数字相加取小,得到从1v 出发到各点的二步距离:
(0 + 0) (∞ + 2) (∞ + 5)
)(2d (1v ,1v )=min (∞ + 3) =0
(∞ + ∞) (∞ + ∞) (∞ + ∞)
(2 + 0) (0 + 2) (∞ + 5)
)(2d (1v ,2v )=min (∞ + 3) =2
(∞ + ∞) (∞ + ∞) (∞ + ∞)
同理: )(2d (1v ,3v )=4 )(2d (1v ,4v )=3 )(2d (1v ,5v )=8
)(2d (1v ,6v )=∞ )(2d (1v ,7v )=∞
得:
2 4
)(2d (1v ,j v )= 3
8 ∞ ∞
将其填入表6-3第 ⑼ 列
(3)重复上述步骤得到)(3d (1v ,j v )、)4(d (1v ,j v )、)5(d (1v ,j v )、)6(d (1v ,j v );分别填入表6-3第 ⑽、⑾、⑿、⒀ 列
(4)当k=6时,发现)6(d (1v ,j v )=)5(d (1v ,j v ),说明对于整个有向图D 而言,继续增加步数已不起作用,即已得到从1v 到各点的最短距离,即表中 ⑿ 或 ⒀ 列数字:
1v →1v =0;原地一步 1v →2v =2;一步到达 1v →3v =4;二步到达 1v →4v =3;一步到达 1v →5v =7;三步到达 1v →6v =8;四步到达
1v →7v =13;五步到达
从表6-3中还可以用回溯方法推知1v 到各点最短距离的相应最短路线,以1v 到7v 为例:
由第⑿列7v 行可知,1v 到7v 经5步到达,最短距离13.回溯13的来源:
d (1v ,7v )=13
因d (1v ,7v )=[ ⑿ 列6v 行 ]+[ ⑺ 列6v 行 ]
=d (1v ,6v )+67w =8+5=13
故记下(6v ,7v ).
因d (1v ,6v )= [ ⑽ 列5v 行 ]+[ ⑹ 列5v 行 ]
=d (1v ,5v )+56w =7+1=8
故记下(5v ,6v ).
因d (1v ,5v )= [ ⑼ 列3v 行 ]+[ ⑸ 列3v 行 ]
=d (1v ,3v )+35w =4+3=7
故记下(3v ,5v ).
因d (1v ,3v )= [ ⑻ 列2v 行 ]+[ ⑶ 列2v 行 ]
=d (1v ,2v )+23w =2+2=4
故记下(2v ,3v ).
因d (1v ,2v )=12w =0+2=2,记下(1v ,2v ). 得到最短路径:1v →2v →3v →5v →6v →7v .
当网络图存在负权时,Dijkstra 算法失效,必须采取逐次逼近算法来求解最短路.
例6-9 试求网络图6-12中1v 到各点的距离.
图6-12
解 初始条件:)(1d (1v ,1v )=0 )(1d (1v ,2v )=1
)(1d (1v ,3v )=+∞ )(1d (1v ,4v )=2 )(1d (1v ,5v )=+∞ )(1d (1v ,6v )=+∞
计算结果如表6-4所示:
表6-4 1v 到各点的距离
求得1v 到各点的最短距离:
)(1d (1v ,1v )=0;原地一步
)4(d (1v ,2v )=-1;四步到达1v →4v →5v →3v →2v )(3d (1v ,3v )=1;三步到达1v →4v →5v →3
v
)(1d (1v ,4v )=2;一步到达
)(2d (1v ,3v )=-1;二步到达1v →4v →5
v
)(k d (1v ,6v )=∞;无法到达
逐次逼近算法,因其类似于矩阵乘法,在有些书籍表述为距离矩阵摹乘法,
它们的实质一致.这种算法在n 个结点的网络图中,至多经过n -1次迭代必然收敛.但前提条件是图中不含有总权小于0的回路,否则最短路权没有下界.
第四节 最大流问题
网络流(network flow )是一类普遍存在的现象.例如在交通运输网络中有人流、车流、货物流;供水网络中有水流;金融系统中有现金流;通讯系统中有信息流;等等.在20世纪50年代Ford 和Fulkerson 建立的“网络流理论”是网络应用的重要组成部分.
网络最大流问题(max-flow problem )尤为重要.这是因为绝大部分网络流研究,旨在寻求在一定条件下使网络流达到最大的方法.如图6-13是输油管道网,
s v 为起点,t v 是终点,1v ,2v ,3v ,4v 为中转站,弧上的数表示该管道的最大输油能力,问应如何安排各管道输油量,才能使从s v 到t v 的总输油量最大?
一、基本概念和基本定理
1.网络流.
所谓网络流,是指在一定的条件下流过一个网络的某种流在各边上的流量的集合.表达为
F ={f (i v ,j v )| (i v ,j v )∈A }
所谓一定条件,一般是指如下规定:
(1)网络有一个始点s v 和一个终点t v ,始点是流的源,终点是流的汇; (2)流具有一定的方向,流经各弧的流,其方向就是相应弧的方向; (3)对每一弧(i v ,j v )∈A ,都赋予一个容量r (i v ,j v ) 0,简记为ij r ,
表示容许通过该弧的最大流量.并称f (i v ,j v )为通过弧(i v ,j v )流,简记为ij f .
凡做出上述规定的网络都可称为容量网络,记为
N =(V ,A ,r )
图6-13所示的就是一个容量网络.图中每条弧上的数对为(ij r ,ij f ),标明了弧的容量以及流经该弧的流量.
2.可行流和最大流
可行流是指满足容量限制条件和平衡条件的流.
(1)容量限制条件:对于任一弧(i v ,j v )∈A ,都有0≤ij f ≤ij r ,即任何弧上的流量不能超过弧的容量.
(2)平衡条件:对于任一中间点i v ,都有
∑
∈A
vj vi ),(ij f =
∑
∈A
vi vk ),(ki f
即每个中间点的流出量必须等于流入量,其净流量为0.
对于始点和终点,有
∑
∈A
vi vs ),(si f =
∑
∈A
vt vi ),(it f
即始点流出量等于终点的流入量,这个流量即是可行流F 的流量,记为v (f ).
所谓最大流问题,就是在可行流恒存在的前提下,满足
max v (f )
f i =s
s .t .
∑
∈A
vj vi ),(ij f -
∑
∈A
vi vk ),(ki f = 0 i ≠s 、t
0≤ij f ≤ij r ; -f i =t
这是一个特殊的线性规划问题,可用单纯形法求解.但用图形方法求解更为直观和简单.
3.增广链
如果μ是网络中联结始点和终点的一条链,且链的方向从s v 到t v ,则与链方向一致的弧称为前向弧,用μ+来表示前向弧集合;与链方向相反的弧称为后向弧,用μ-来表示后向弧集合.
如图6-13中 μ+={(s v ,2v ),(1v ,4v ),(3v ,t v )}
μ-={(1v ,2v ),(3v ,4v )}
设f 是一个可行流,μ是一条从s v 到t v 的链,若μ满足下列条件,则μ是可行流的一条增广链:
(1)在弧(i v ,j v )∈μ+上, 0≤ij f <ij r ;
(2)在弧(i v ,j v )∈μ-上, 0<ij f ≤ij r .
这就意味着在增广链上每一个前向弧的流量都没有达到最大容量(即不饱和前向弧),而每一个后向弧的流量均不为0(即非零后向弧).
如图6-13中链μ=s v 2v 1v 4v 3v t v 、'μ= s v 1v 4v 3v t v 、''μ= s v 1v 4v t v 都是增广链.可以指出,沿增广链调整各弧的流量可以使网络流量v (f )增大,而寻求网络最大流的方法正是以增广链为基础的.
4.截集与截量
在一个网络N =(V ,A )中,若把点集V 剖分成不相交的两个非空集合S 和S ,使s v ∈S ,t v ∈S ,且S 中各点不须经由S 中的点而均连通,S 中各点也不须经由S 中的点而均连通,则把始点在S 中而终点在S 中的一切弧所构成的集合,称为一个分离s v 和t v 的截集,记为(S ,S ).截集实质上是网络N 从s v 到t v 通路的横截面表达,它反映了网络从s v 到t v 的必经之路.一个网络可以有多个截集,表6-5反映了图6-13网络的截集集合.
表6-5 图6-13网络的截集集合
给定一截集(S,S),其中所有弧的容量之和称为这个截集的截量,记为r(S,S)= [ij r|(i v,j v)∈(S,S)]
一个网络可以有多个截集和截量,其中截量最小的截集称为最小截集,记为(*S,*S),其截量称为最小截量(min-cut),记为r(*S,*S).图6-13的最小截量由表6-5看出为11,最小截集为(*S,*S)={(1,3), (4,t)}.
二、基本原理
为了介绍一种寻求网络最大流的标号法,这里将阐述其原理.
定理6-3(流量截量定理) 在网络N =(V ,A ,r )中,设f 为
一可行流,(S ,S )是任一截集,则
v (f )≤r (S ,S )
定理6-3表明,网络的任一可行流的流量恒不超过任一截集的
截量.因此,网络的最大流量也不会超过最小截量.
定理6-4(最大流量最小截量定理) 网络中从v s 到v t 的最大流的流
量等于分离v s 和v t 的最小截集的截量.即,
v (*f )=r (*S ,*
S ) 定理6-4实际上是定理6-3的推论.
定理6-5(最大流的充要条件) 设*f 是网络N =(V ,A ,r )的一
个可行流,则*f 为最大流的充要条件是:网络N 中不存在关于*f 的增广链μ(*f ).
定理6-6(增广链调整法) 设f ={ij f }是N =(V ,A ,r )的一个可
行流,μ是关于f 的一条增广链.令
ij r -ij f 当μ+
≠∅ 1θ=+
μmin ∞ 当μ+=∅
ij r -ij f 当θ+
≠∅ (6-5) 2θ=-
μmin ∞ 当μ+=∅
θ=min (1θ,2θ)
构造一个新的可行流,令
ij f +θ 当(i v ,j v )∈μ+
'ij f = ij f -θ 当(i v ,j v )∈μ- (6-6) ij f 当(i v ,j v )∉μ
则'f =('ij f )也是N 的一个可行流,其流量为
v (ij f )=v (ij f )+θ (6-7)
定理6-4表明:只要网络中还存在关于可行流f 的增广链μ,则f 就非最大流,起码其流量还能增大θ.这样就给出了一种沿着增广链上的各弧去调整流量,从而得到一个流量增大θ的新可行流f '的方法,故称之为增广链调整法.
三、寻求网络最大流的标号法
这种标号法由福特(Ford )和富尔克逊(Fulkerson )于1956年提出,故称为福特一富尔克逊标号法(Ford- Fulkerson algorithm ).
1.基本算法思想:该法从某一可行流f 出发,按一定规则找出一条增广链μ(f ),并按定理8-6的方法调整f ,得到一个流量增大θ的新可行流'f .对'f 重复上述做法直到找不出增广链为止,这时就得到一个最大流,同时还得到一个最小截集.
2.算法步骤
(1)给出一个初始可行流f .初始可行流可以是零流或非零流;
(2)标号、检查过程:
给顶点标号,标号用[i v ,L (j v )]表示,其中第一个分量表示该标号是从哪个点得到的,用以反向追踪找出增广链μ,第二个分量是为确定μ的调整量θ用的.
①点s v 标号(0,∞),则s v 已标号待检查;
②取一个已标号待检查的点i v ,所谓检查是对所有与i v 相邻而未标号的点j v 依次执行下述a )、b )两种考察:
a )若联结i v 与j v 的弧(i v ,j v )为前向弧,则当该弧上的流量小于容量,即ij f <ij r 时给j v 标号[i v ,L (j v )],其中L (j v )=m i n (L (i v ),ij r 一ij f ).这里
L (j v )表示弧(i v ,j v )上流量的最大可调整量.而当弧(i v ,j v )上的ij f =ij r 时,弧(i v ,j v )是饱和前向弧,则不给j v 标号.
b )若关联i v 与j v 弧(j v ,i v )为后向弧,则当该弧上的流量大于零,即ji f >0 时给j v 标号[-i v ,L (j v )],其中L (j v )=m i n[L (i v ),ji f ].而当ji f =0时不给j v 标号.
当所有i v 与相邻而未标号的点j v 都完成了a )、b )两种考察后,给i v 打√,表示对它的检查完毕.
③重复②,如果终点t v 得到标号,则可以从t v 沿标号点回溯到第一个标号,从而找出一条从s v 到t v 的增广链,转至④;如果所有标号点均已打√,而v t 又未得标号.这说明不存在关于当前可行流的增广链,由定理6-3可知当前可行流即最大流,算出流量,计算停止.
④取增广链的流量调整量θ=L (t v ),对增广链上的流量进行调整,对增广链上的前向弧,令
'ij f =ij f +θ
对增广链上的后向弧,令
'ji
f =ji f -θ 非增广链上的弧流量不变.。