当前位置:文档之家› 网络最大流问题

网络最大流问题

给定一个有向图D=(V,A),在V中指定一点称为发点(记为),该点只有出发去的弧,指定另一点称为收点(记为),该点只有指向它的弧,其余的点叫做中间点。

对于A中的每一条弧,对应一个数(简记),称之为弧的容量。

通常我们把这样的D叫做网络,记为D=(V,A,C)。

(2)网络流:在弧集A上定义一个非负函数。

就是通过弧的实际流量,简记,称就是网络上的流函数,简称网络流或流,称为网络流的流量。

§4 网络最大流问题网络最大流问题就是网络的另一个基本问题。

许多系统包含了流量问题。

例如交通系统有车流量,金融系统有现金流,控制系统有信息流等。

许多流问题主要就是确定这类系统网络所能承受的最大流量以及如何达到这个最大流量。

4、1 基本概念与定理1.1.网络与流定义14 (1)网络:例1如图7-20就是连结某产品产地与销地的交通图。

弧表示从到的运输线,弧旁的数字表示这条运输线的最大通过能力,括号内的数字表示该弧上的实际流。

现要求制定一个运输方案,使从运到的产品数量最多。

可行流与最大流在运输网络的实际问题中,我们可以瞧出,对于流有两个基本要求:一就是每条弧上的流量必须就是非负的且不能超过该弧的最大通过能力(即该弧的容量);二就是起点发出的流的总与(称为流量),必须等于终点接收的流的总与,且各中间点流入的流量之与必须等于从该点流出的流量之与,即流入的流量之与与流出的流量之与的差为零,也就就是说各中间点只起转运作用,它既不产出新的物资,也不得截留过境的物资。

因此有下面所谓的可行流的定义。

定义14对于给定的网络D=(V,A,C)与给定的流,若满足下列条件:(1)容量限制条件:对每一条弧,有(7、9)(2)平衡条件:对于中间点:流出量=流入量,即对于每一个i (i≠s,t),有(7、10)对于出发带点,有(7、11)对于收点,有(7、12)则称为一个可行流,称为这个可行流的流量。

注意,我们这里所说的出发点就是指只有从发出去的弧,而没有指向的弧;收点就是指只有弧指向,而没有从它的发出去的弧。

可行流总就是存在的。

例如令所有弧上的流,就得到一个可行流,(称为零流),其流量。

如图7-20中,每条弧上括号内的数字给出的就就是一个可行流,它显然满足定义中的条件(1)与(2)。

其流量。

所谓网络最大流问题就就是求一个流,使得总流量达到最大,并且满足定义15中的条件(1)与(2),即max(7、13)网络最大流问题就是一个特殊的线性规划问题。

我们将会瞧到利用图的特点,解决这个问题的方法较直线性规划的一般方法要简便与直观的多。

例2写出图7-20所表示的网络最大流问题的线性规划模型。

解设,则其线性规划模型为max3、增广链在网络D=(V,A,C)中,若给定一个可行流,我们把网络中使的弧称为饱与弧,使的弧称为非饱与弧。

把的弧称为零流弧,把的称为非零流弧。

如图7-20中的弧都就是非饱与弧,而弧为零流弧。

若就是网络中联结发点与收点的一条链,我定义链的方向就是从到,S 则链上的弧被分为两:一类就是:弧的方向与链的方向一致,我们称此类与为前向弧,所有前向弧的集合记为。

另一类就是:弧的方向与链的方向一致,我们称此类弧为后向弧,所有后向弧的集合记为。

如图7-20中,设就是一条从到的链,则,定义15设就是网络D=(V,A,C)上的一个可行流,就是从到的一条链,若满足下列条件:(1)在弧(v i,v j)∈μ+上,即中的每一条弧都就是非饱与弧;(2)在弧上,即中的每一条弧都就是非零流弧。

则称就是关于的一条增广链。

如前面所说的链就就是一条增广链。

因为其中μ+上的弧均非饱与,如(v s,v2)∈μ+,f s2=5<c s2=13;而μ-上的弧为非零流弧,如(v3,v2)∈μ-,f32=1>0,。

显然这样的增广链不止一条。

4、截集与截量定义16给定网络D=(V,A,C),若点集V被分割成两个非空集合V1与V2,使得V=V1+V2,V1∩V2=φ(空集),且v s∈V1,v t∈V2,则把始点在V1,终点在V2的弧的集合称为分离v s与v t的一个截集,记为(V1,V2)。

如图9、26中,设V1={v s,v2,v5},V2={v3,v4,v6,v t}则截集为,而弧(v3,v2)与(v4,v5)不就是该集中的弧。

因为这两条弧的起点在V2中,与定义17不符。

显然,一个网络的截集就是很多的(但只有有限个),例如在图7-20中,还可以取,,则截集为另外,若把网络D=(V,A,C)中某截集的弧从网络D中去掉,则从v s到v t便不存在路,所以直观上说,截集就是从v s到v t的必经之路。

定义17在网络D=(V,A,C)中,给定一个截集(V1,V2),则把该截集中所有弧的容量之与,称为这个截集的容量,简称为截量,记为c(V1,V2),即C(V1,V2)=(7、16) 例如在上面我们所举的两个截集中,有而显然,截集不同,其截量也不同。

由于截集的个数就是有限的,故其中必有一个截集的容量就是最小的,称为最小截集,也就就是通常所说的“瓶颈”。

不难证明,网络D=(V,A,C)中,任何一个可行流f={f ij}的流量V(f),都不会超过任一截集的容量,即v( f ) ≤ c(V1,V2) (7、17) 如果存在一个可行流f*={f*ij},网络D=(V,A,C)中有一个截集,使得(7、18) 则必就是最大流,而必就是D中的最小截集。

为了求网络最大流f*,我们也说明下面的重要定理。

定理4在网络D=(V,A,C)中,可行流就是最大流的充要条件就是D中不存在关于f*的增广链。

证先证必要性。

用反证法。

若f*就是最大流,假设D中存在着关于f*的增广链μ,令(7、19) 由增广链的定义可知θ>0,令(7、20) 不难验证就是一个可行流,且有这与f*就是最大流的假定矛盾。

再证充分性:即证明设D中不存在关于f*的增广链,f*就是最大流。

用下面的方法定义:令若,且有,则令;若,且有,则令。

因为不存在着关于的增广链,故记,于就是得到一个截集(V*,)。

显然有所以V(f*)=c,于就是f*必就是最大流。

定理得证。

由上述证明中可见,若就是最大流,则网络必定存在一个截集,使得(7、18)式成立。

定理5(最大流——最小截集定理)对于任意给定的网络D=(V,A,C),从出发点v s到收点v t的最大流的流量必等于分割与的最小截集的容量,即由定理4可知,若给定一个可行流,只要判断网络D有无关于的增广链。

如果有增广链,则可以按定理4前半部分证明中的办法,由公式(7、19)求出调整量Q,再按式(7、20)的方法求出新的可行流。

如果流有增广链,则得到最大流。

而根据定理4后半部分证明中定义的办法,可以根据v t就是否属于来判断D中有无关于f的增广链。

在实际计算时,我们就是用给顶点标号的方法来定义的,在标号过程中,有标号的顶点表示就是中的点,没有标号的点表示不就是中的点。

一旦有了标号,就表明找到一条从v s到v t的增广链;如果标号过程无法进行下去,而v t尚未标号,则说明不存在从v s到v t的增广链,于就是得到最大流。

这时将已标号的点(至少有一个点v s)放在集合中,将未标号点(至少有一个点v t)放在集合中,就得到一个最小截集。

4、2 寻求最大流的标号法(Ford , Fulkerson)从一个可行流出发(若网络中没有给定,则可以设就是零流),经过标号过程与调整过程。

1)1)标号过程在这个过程中,网络中的点或者就是标号点(又分为已检查与未检查两种),或者就是未标号点,每个标号点的标号包含两部分:第一个标号表明它的标号就是从哪一点得到的,以便找出增广链;第二个标号就是为确定增广链的调整量θ用的。

标号过程开始,总先给v s标上(0,+∞),这时v s就是标号而未检查的点,其余都就是未标号点,一般地,取一个标号而未检查的点v i,对一切未标号点v j:(1) 在弧上,,则给v j标号。

这里。

这时点v j成为标号而未检查的点。

(2) 若在弧上,,给v j标号。

这里。

这时点v j成为标号而未检查的点。

于就是成为标号而已检查过的点,重复上述步骤,一旦被标上号,表明得到一条从到的增广链,转入调整过程。

若所有标号都就是已检查过,而标号过程进行不下去时,则算法结束,这时的可行流就就是最大流。

2)2调整过程首先按及其它点的第一个标号,利用“反向追踪”的办法,找出增广链μ。

例如设v t的第一个标号为(或),则弧(或相应地)就是μ上的弧。

接下来检查的第一个标号,若为(或),则找出(或相应地)。

再检查的第一个标号,依此下去,直到为止。

这时被找出的弧就构成了增广链。

令调整量θ就是,即的第二个标号。

令去掉所有的标号,对新的可行流,重新进入标号过程。

下面,以例题说明此算法求解过程。

例3 用标号法求图7-20所示网络最大流。

弧旁的数就是解:对图7-20中各顶点进行标号。

首先给标(0,+∞),即检查:在弧上,因为,又有,所以给标;在弧上,因为,又有,所以给标。

检查:在弧上,因为,又有,所以给标;,所以给标;在弧上,因为,又有,所以给V3标。

因为前面已给v 3标过号,这里又给标,它们分别表示两条不同的路线,这里不存在修改标号的问题(与最短路不同)。

因为我们的目标就是尽快找出一条从v s到v t 的增广链,即尽快使终点v t获得标号,所以不必在中途过多停留。

也就就是说在对已标号点v i 进行检查时,每次只检查一个相邻点v j(不论前向弧或后向弧均可),再给标号即可,而不必检查所有与v i相邻的点。

事实上,其余的相邻点也不会漏掉,因为以后还要通过检查这些点来找出新的增广链。

以下我们就按这种思路进行。

检查:在弧上,因为,又有、所以给标、至此,终点已获得标号,于就是找出一条从到的增广链。

再由标号的第一部分用反向追踪法找出路线,即(见图7-21)。

进行调查:这时的调整量、再按公式(7、20)调整。

由于上各弧均为前向弧,故得,,、(见图7-21)、其余的不变、对这个新的可行流再进入标号过程,寻找新增广链。

开始给标,检查,给标,检查:在弧上,因为(见图7-21),故该弧已饱与,标号无法进行下去。

所以给标,检查:在弧上,因为,又有所以给标,检查:在弧上,因为,又有,所以给标、于就是又得到一条增广链(见图7-22)进行调整: 这时。

调整结果如图9、28所示。

再重新标号求新的增广链、开始给标,检查,给标。

检查,给标,检查,给标,检查,因已就是饱与弧(见图7-22)。

标号无法进行。

,所以给标、于就是又得到一条增广链:、再进行调整(见图7-23)、再重新进行标号求新的增广链:开始给标(0,+),检查,给标、检查:这时弧均已饱与。

而在弧上,因,又有所以给标,表明弧为后向弧、检查,给标。

检查,给标。

于就是又得到一条增广链:、再进行调整(见图7-24)。

相关主题