当前位置:文档之家› 图与网络模型_最大流问题

图与网络模型_最大流问题

最大流问题在许多实际的网络系统中都存在着流量和最大流问题。

例如铁路运输系统中的车辆流,城市给排水系统的水流问题等等。

网络系统流最大流问题是图与网络流理论中十分重要的最优化问题,它对于解决生产实际问题起着十分重要的作用。

基本概念设一个赋权有向图D=(V , A),在V 中指定一个发点(源)vs 和一个收点(汇)vt ,且只能有一个发点vs 和一个收点vt 。

(即D 中与vs 相关联的弧只能以 vs 为起点,与vt 相关联的弧只能以 vt 为终点),其他的点叫做中间点。

对于D 中的每一个弧(vi, vj)A ∈,都有一个权cij 叫做弧的容量。

我们把这样的图 D 叫做一个网络系统,简称网络,记做D =(V , A, C)。

VsVt 图1图1是一个网络。

每一个弧旁边的权就是对应的容量。

网络D 上的流,是指定义在弧集合A 上的一个函数f={f(vi, vj)}={fij},f(vi,vj)=fij 叫做弧在(vi,vj)上的流量。

VsVt 图2图2中,每条弧上都有流量fij ,例如fs1=5,fs2=3,f13=2等。

容量是最大通过能力,流量是单位时间的实际通过量。

显然,0≤fij≤cij 。

网络系统上流的特点:(1)发点的总流出量和收点的总流入量必相等;(2)每一个中间点的流入量与流出量的代数和等于零;(3)每一个弧上的流量不能超过它的最大通过能力(即容量)。

网络上的一个流f={fij}叫做可行流,如果f 满足以下条件: (1)容量条件:对于每一个弧(vi,vj)A ∈,有0≤fij≤cij 。

(2)平衡条件:对于发点vs ,有∑f sj −∑f js =v (f ) 对于收点vt ,有∑f tj −∑f jt =−v (f )对于中间点,有∑f ij −∑f ji =0其中发点的总流量(或收点的总流量)v(f)叫做这个可行流的流量。

网络系统中最大流问题就是,在给定的网络上寻求一个可行流f={fij},其流量v(f)达到最大值,即从vs 到vt 的通过量最大。

最大流问题可以通过线性规划数学模型来求解。

图1的最大流问题的线性规划数学模型为max v =f s 1+f s 2s.t.{∑jf ij −∑if ij =0i ≠s,t 0≤f ij ≤c ij所有弧(v i ,v j )fs1和fs2是与起点相连的两条弧上的流量。

满足上式的约束条件的解{fij}称为可行解,在最大流问题中称为可行流。

对有多个发点和多个收点的网络,可以另外虚设一个总发点和一个总收点,并将其分别与各发点、收点连起来,就可以转换为只含一个发点和一个收点的网络。

ST所以一般只研究具有一个发点和一个收点的网络。

我们把fij=cij 的弧叫做饱和弧,fij<cij 的弧叫做非饱和弧,fij>0的弧为非零流弧,fij=0的弧叫做零流弧。

在图3(图1与2合并图)中,(v4,v3)是饱和弧,其他的弧是非饱和弧,并且都是非零流弧。

VsVt,fij )图3网络D 中,从发点νs 和收点vt 的一条路线称为链(记为μ)。

从发点νs 到收点vt 的方向规定为链的方向。

链μ上的弧被分为两类:一,弧的方向与链的方向相同,叫做前向弧,前向弧的集合记做μ+。

二,弧的方向与链的方向相反,叫做后向弧,后向弧的集合记做μ-。

在图3中,假设链μ=(vs,v1,v2,v3,v4,vt)中,则μ+={(vs,v1),(v1,v2),(v2,v3),(v4,vt)},μ-={(v4,v3)}。

设f={fij}是一个可行流,如果存在一条从发点vs到收点vt到的链μ满足:1.前向弧集μ+中的每一条弧是非饱和弧,即 fij<cij。

2.后向弧集μ-中的每一条弧是非零流弧,即0<fij。

则称链μ为增广链。

例如在图3中,链μ=(vs,v1,v2,v3,v4,vt)就是一条增广链。

定理 网络中的一个可行流f是最大流的充分必要条件是,不存在关于f的增广链。

定理实际上提供了一个寻求最大流的方法:如果网络D中有一个可行流f,只要判断网络是否存在关于可行流f的增广链。

如果没有增广链,那么f一定是最大流。

如有增广链,那么通过不断改进和增大可行流f的流量,最终可以得到网络中的一个最大流。

标号法(Ford-Fulkerson 算法)标号法是一种图上迭代计算方法,该算法首先从发点开始,通过标号找出一条增广链,然后增加增广链上的流量,得到更大的流量。

再通过标号找出一条新的增广链,再增加流量,…,重复这个过程,直到收点不能标号为止,这时就得到网络中的一个最大流。

在标号过程中,一个点仅有下列三种状态之一:●标号已检查(有标号且所有相邻点都标号了)●标号未检查(有标号,但某些相邻点未标号)●未标号每个标号点的标号包含两部分:第一个标号表示这个标号是从那一点得到的。

以便找出增广链。

第二个标号是为了用来确定增广链上的调整量I(vi)。

1,标号过程标号过程开始,先给发点vs标号(0,+∞)。

这时,vs是标号未检查的点,其他都是未标号点。

一般地,选一端已标号未检查且另一端未标号的弧,然后向收点方向依次标号。

选择一个已标号未检查的点vi,1)对每一个弧(vi, vj),如果vj未标号,且fij<cij,即流出未饱和弧,那么给vj标号(vi,l(vj))。

其中I(v)=min[I(v i),c ij−f ij]j这时,vj成为标号未检查点。

2)对每一个弧(vj, vi),如果vj未标号,且fij>0,即即流入非零流弧,那么给vj标号(-vi, l(vj))。

其中I(v)=min[I(v i),f ij]j这时,vj成为标号未检查点。

然后vi就成为标号已检查的点。

重复以上步骤,如果所有的标号都已经检查过,而标号过程无法进行下去,则标号法结束。

这时的可行流就是最大流。

但是,如果vt 被标上号,表示得到一条增广链μ,转入下一步调整过程。

2,调整过程首先按照vt 和其他的点的第一个标号,反向追踪,找出增广链μ。

例如,令vt 的第一个标号是vk ,则弧(vk,vt)在μ上。

再看vk 的第一个标号,若是vi ,则弧(vi,vk)都在μ上。

依次类推,直到vs 为止。

这时,所找出的弧就成为网络D 的一条增广链μ。

取收点调整量θ=l(vt),即vt 的第二个标号,对增广链上的弧流量进行调整,令f ij ′={f ij +θ当(v i ,v j )∈μ+f ij −θ当(v i ,v j )∈μ-其他不变去掉所有的标号,得到新的可行流f '={fij'},再从发点开始,重新进行标号过程,直到收点不能标号为止。

例1,求图4的网络最大流,弧旁的权数表示(cij, fij)。

VsVt,fij )图4解:用标号法。

1,标号过程。

(1)首先给vs 标号(0, +∞)(2)看vs :在弧(vs,v2)上,fs2=cs2=3,不具备标号条件。

在弧(vs,v1)上,fs1=1<cs1=5,故给v1标号(vs,l(v1)),其中l(v1)=min[l(vs), (cs1-fs1)]=min[+∞,5-1]=4。

(3)看v1:在弧(v1,v3)上,f13=c13=2,不具备标号条件。

在弧(v2,v1)上,f21=1>0,故给v2标号(-v1,l(v2)),其中l(v2)=min[l(v1), f21]=min[4,1]=1。

(4)看v2:在弧(v2,v4)上,f24=3<c24=4,故给v4标号(v2,l(v4)),其中l(v4)=min[l(v2), (c24-f24)]=min[1,1]=1。

在弧(v3,v2)上,f32=1>0,故给v3标号(-v2, l(v3)),其中l(v3)=min[l(v2),f32]=min[1,1]=1。

(5)在v3,v4中任意选一个,比如v3。

在弧(v3,vt)上,f3t=1<c3t=2,故给vt 标号(v3,l(vt)),其中l(vt)=min[l(v3),(c3t-f3t)]=min[1,1]=1。

因为vt 被标上号,根据标号法,转入调整过程。

标号过程,v1v2vsv3v4vtVs Vt,fij )(0,+∞(vs,4)(-v1,1)(-v2,1)(v2,1)图52,调整过程从vt 开始,按照标号点的第一个标号,用反向追踪的方法,找出一条从vs 到vt 的增广链μ,如图5中粉红线所示。

不难看出,μ+={(vs,v1),(v3,vt)},μ-={(v2,v1),(v3,v2)}。

取θ=1,在μ上调整f ,得到f ′={f s 1+θ=1+1=2在μ+上f 3t +θ=1+1=2在μ+上f 21−θ=1−1=0在μ-上f 32−θ=1−1=0在μ-上其他的不变调整后的可行流f ',如图6所示,去掉原有标号,再对这个可行流从新进行标号过程,寻找增广链。

首先给vs 标号(0, +∞),看vs ,给v1标号(vs,3)。

看v1,在弧(v1,v3)上,f13=c13,弧(v2,v1)上,f21=0,均不符合条件。

因此标号过程无法进行下去,不存在从vs 到vt 的增广链,算法结束。

Vt ,fij')图6设一个网络D=(V , A, C)。

如果点集V 被剖分为两个非空集合V 1和¯V1,发点vs V ∈1,收点vt ∈¯V1,那么将弧集(V 1,¯V 1)叫做是分离vs 和vt 的截集。

(V 1,¯V1)={(v i ,v j )∣v i ∈V 1,v j ∈¯V 1}将截集(V 1,¯V1)中所有的弧的容量的和叫做截集的截量,记做c(V 1,¯V 1),c (V 1,¯V 1)=∑(v i ,v j )∈(V 1,¯V1)c ij下面的事实是显然的:一个网络D 中,任何一个可行流f 的流量v(f)都小于或等于这个网络中任何一个截集(V 1,¯V1)的截量。

并且,如果网络上的一个可行流f '和网络中的一个截集(V 1*,¯V 1*),满足条件v(f ')=c(V 1*,¯V 1*),那么f '一定是D 上的最大流,而(V 1*,¯V 1*)一定是D 的所有的截集中截量最小的一个(即最小截集)。

定理2 在一个网络D 中,最大流的流量等于分离vs 和vt 的最小截集的截量。

例如在图6中,V 1*={vs, v1},¯V1*={v2, v3, v4, vt}。

虚线框中的点集即为V 1*。

(V 1*,¯V 1*)={(vs, v2),(v2, v1),(v1, v3)}c(V 1*,¯V 1*)=fs2+f21+f13=5采用Ford-Fulkerson 标号算法求解最大流问题,同时得到一个最小割集。

相关主题