运筹学课件 最大流与最小费用流

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

y min{c( x, y ) f ( x, y ), x } ,
则给顶点 y 标号为 ( x , y ) ,若 f ( x, y) c( x, y) ,则不给顶点 y 标号。

in{ ② 若 ( y, x) A , f (y,x) , y m (f , y), x } x , 且 则给 y 0 令
定义 1 称 N (V , E, c, X , Y ) 为一个网络,如果: (1) G (V , E ) 是一个有向图; (2) c 是 E 上的非负函数,称为容量函数,对 每条边 e , c (e) 称为边 e 的容量; (3)X 与 Y 是 V 的两个非空不交子集, 分别称 为 G 的发点集与收点集,I V \ ( X Y ) 称为 G 的中 间点集。 X 的顶点称为发点或源, Y 的顶点称为收 点或汇, I 的顶点称为中间点。 若 | X | 1,| Y | 1 ,称 N 为多源多汇网络;若 | X | 1,| Y | 1,称 N 为单源单汇网络。 主要研究单源单汇网络。
最大流算法的基本思想(Ford-Fulkerson 算法): 判别网络 N 中当前给定的流 f (初始时,取 f 为零流)是否 存在增广链,若没有,则该流 f 为最大流;否则,求出 f 的改进流
f ' ,把 f ' 看成 f ,再进行判断和计算,直到找到最大流为止。 算法(标号法) : 这种方法分为以下两个过程: A.标号过程:通过标号过程寻找一条可增广轨。 B.增流过程:沿着可增广轨增加网络的流量。
(1)在弧 e P 上, 0 f (e) c(e) ,即 P 中每条弧都是不饱和弧; (2)在弧 e P 上, 0 f (e) c(e) ,即 P 中每条弧都是非零弧; 则称 P 是关于流 f 的一条增广链。 显然一条 f 增广链就是一个从发点 s 到收点 t 的 f 非饱和链。若在 网络中存在一条 f 增广链,则表明 f 不是最大流。 定理 3
标号为 ( x , y ) ,若 f ( y, x) 0 ,则不给 y 标号。

(iii)不断地重复步骤(ii)直到收点 t 被标号,或不再有顶点可以标号 为止。 当 t 被标号时, 表明存在一条从 s 到 t 的可增广轨, 则转向增流过程 (B) 。 如若 t 点不能被标号,且不存在其它可以标号的顶点时,表明不存在从 s 到 t 的可增广轨,算法结束,此时所获得的流就是最大流。
定义 4 设 f 是网络 N 的一个流,则 f 的流的价值 Val f 定义为
Val f =
eN ( X )

f (e)
eN (Y )

f (e)
即流的价值是发点集的流出量,也是收点集的流入量。
注 3:任何一个多源多汇网络 N (V , E, c, X , Y ) 都等价与一个 单源单汇网络 N (V , E , c , X , Y ) 。在解决实际问题时,常把多源 多汇网络转化为单源单汇网络。
这两个过程的步骤分述如下:
(A)标号过程: (i) 对任意的弧 e ( x, y) E , f ( , ) 0 ; 置 xy 给发点标号为 ( s , ) , 令 s ; (ii)若顶点 x 已经标号,则对 x 的所有未标号的邻接顶点 y 按以下规 则标号: ① 若 ( x, y) A ,且 f ( x, y) c( x, y) 时,令
( 表示从 y 流入 x 的流可减少 y ; s , ) 表示发点可提供任意多的流
到别的点。 (2)算法终止后,令已标号的点的集合为 A ,则割 ( A, A) 即为 最小割,从而最大流的流量 Val f C ( A, A) 。
程序设计步骤: 对每个节点 j ,其标号包括两部分信息 (pred( j ), max f(j)) 该节点在可能的增广路中的前一个节点 pred( j ) , 以及沿该可能的增广路到该节点为止可 以增广的最大流量 max f ( j ) 。 STEP0 置初始可行流 x(如零流) 对节点 t 标号, ; 即令 max f (t ) =任意正值 (如 1) 。 STEP1 若 max f (t ) 0 ,继续下一步;否则停止,已经得到最大流,结束。 STEP2 取消所有节点 j V 的标号,即令 max f ( j ) 0 ,
' ' ' ' ' '
(1) V V {s, t} , s, t 分别是 N 的发点与收点;
'
'
(2) E E {( s, x) | x X } {( y, t ) | y Y } ;
'
(3)c c(e), e E ;c ( s, x) , x X ,c ( y, t ) , y Y 。 图 1 所示网络等价于图 2 所示的单源单汇网络。
例 1:图 1 表示一个网络及网络流
x1
6,1
v1
5,1 4,0
1, 0 1, 0 2,1
y1
2, 2
1,1 2, 2
x2
3,0
v4
3, 2
5,3
3,1
v3
4, 4
s
6,0 6, 4
y3
y2
图1
发点集: 收点集:
X {x1 , x2 }
Y { y2 }
中间点集: I {v1 , v2 , v3 , v4 , y1 , y2 }
第2讲 网络流问题

一、网络及网络流 二、最大流与最小割 三、最小费用最大流
一、网络及网络流

现实生活中,人们经常见到一些网络,如铁路网、 公路网、通信网、运输网等等。这些网络有一 个共同的特点,就是在网络中都有物资、人或 信息等某种量从一个地方流向另一个地方,如 何安排这些量的流动以便取得最大效益是一个 很有意义的实际问题。50年代福特(Ford)、 富克逊(Fulkerson)建立的“网络流理论”, 是网络应用的重要组成部分。
' '
'
x1
6,1
v1
5,1 4,0
1,0
y1
, 2
1,1
2,2
v4
3,0
1,0
2,1
2,2
s
, 4
x2
5,3
源自文库v3
图2
3,1 4,4
s 6,0
6,4
y3
,0 , 6 t y2 ,0
3, 2
二、最大流与最小割
最大流问题是一类应用极为广泛的问题, 例如在交通运输网络中 有人流、车流、货物流,供水网络中有水流,金融系统中有现金流, 通讯系统中有信息流,等等。 定义 5 设 N (V , E, c, s, t ) 是一个网络, f 是一个流,若不存在 流 f ,使
eN ( v )

f (e)
eN ( v )

f (e), v I ,
其中: N (v) 表示 v 的所有出弧的集, N (v) 表示 v 的所有 入弧的集。则称 f 是网络 N 的一个流, f (e) 是边 e 的流量。 注 1: (1) 容量约束表示通过边的流量不能超过改边的 容量; 守恒条件表示在每个中间点, 流进与流出该点的总流 量相等,即保持中间点的流量平衡。 (2) 任一网络至少存在一个流, 如零流 ( f (e) 0, e V ) 。
增广链及最大流算法
定义 7 若 f 是网络 N 的一个流,对 e E , (1)若 f (e) c(e) ,则称 e 为 f 的饱和弧; (2)若 f (e) c(e) ,则称 e 为 f 的不饱和弧; (3)若 f (e) 0 ,则称 e 为 f 的正弧; (4)若 f (e) 0 ,则称 e 为 f 的零弧; 定义 8 若 P 是网络 N 中从源 s 到汇 t 的一条初等链(点、边 不重复的有向路) 定义链的方向为从 s 到 t, , 则链上的弧 (有向边) 分为两类: 正向弧:弧的方向与链的方向一致,正向弧的全体记作 P ; 反向弧:弧的方向与链的方向相反,反向弧的全体记作 P 。
c (e) f ( e) e P 定义 9 设 l ( P ) min l (e) ,其中 l (e) , eE ( P ) f (e) e P (1)若 l ( P) 0 ,则称 P 链为 f 饱和链; (2)若 l ( P) 0 ,则称 P 链为 f 非饱和链。 定义 10 设 f 是一个流, P 是从源 s 到汇 t 的一条链,若 P 满足

uij 为割 ( A, A)
设 K 是一个割, 若不存在割 K ' , 使得 C ( K ) C ( K ) , 则称 K 是
'
N 的最小割。
注 4:割是从 A 到 A 的有向弧组成的
最大流与最小割的关系:
定理 1 设 f 是 N 的流, ( A, A) 是一个割,则: (1) Val f
eN ( A)

f (e)
eN ( A)

f (e)
(2) Val f C ( A, A) 。 式(1)表明运输网络的一个自源 s 到汇 t 的流值,等于任何分离 s 和 t 的 割中流的净值,即割的自 A 到 A 的弧中的流减去自 A 到 A 的流的总体。 定理 2(最大流最小割定理) (1)设 f 是流, K 是割,若 Val f C ( K ) ,则 f 是最大流, K 是 最小割。 (2)网络 N 的最大流的价值等于最小割的容量。 上述定理是图论的重要核心,关于图的许多结果,在适当的选择网络 后,应用这个定理往往能够轻易地获得解决。从这个定理的证明中,可以 引出求网络最大流的一个算法。但这种方法实际做起来有困难,因为没解 决如何寻找增广链的方法。
例:单源单汇网络和多元多汇网络。
a
3,3 5, 4
c
3,3
s
4, 4
5,1
2, 0
1,1
5, 4
t
b
3,3
d
x1
6,1
v1
5,1 4, 0
1, 0
y1
1,1
2, 2
3, 0
v4
1, 0
2,1
2, 2
y2
5,3
3,1
s
4, 4
6, 0
6, 4
y3
x2
3, 2
v3
定义 2 设 N 为一个网络, f 是 E 上的非负函数,如果: (1)容量限制条件: 0 f (e) c(e) , e E ; (2)流量守恒条件:
定义 3
eN ( A)


f (e)
eN ( A)

设 f 是 网 络 N 的 一 个 流 , A V , 则 称 f (e) 为流出 A 的净流量,称 f (e) f (e)
eN ( A) eN ( A)
为流入 A 的净流量。 注 2: (1)流入、流出任何中间点的净流量为 0; (2)流出发点集 X 的净流量等于流入收点集 Y 的净流量。
'
Val f ' Val f
则称 f 为 N 的最大流。 定义 6 若 A V , s A, t A V A , 则称 N 中弧的集合 ( A, A)
, A 是网络 N 的一个割 (cut) 记作 K , C ( A ) , 称
的容量。
( i j A ,) iS , jS
f 是网络 N 的最大流的充要条件是 N 不含 f 增广链。
寻求最大流问题的方法: 先任一假设网络的一个流, 然后由此出发, 设法逐渐增大流值。 这里假定弧的容量为正整数 (若弧的容量为有理数, 则可化为整数 后再进行) 。 令 uij f ij , 当(i, j )为前向弧 ij , 当(i , j )为后向弧 f ij , min{ ij } 则在这条可增广轨上每条前向弧的流都可以增加一个量 , 而 相应的后向弧的流可减少 ,这样就可使得网络的流量获得增加, 同时可以使每条弧的流量不超过它的容量, 而且保持为正, 也不影 响其它弧的流量。总之,网络中 f 可增广链的存在是有意义的, 因为这意味着 f 不是最大流。
(B)增流过程 (i)令 u t 。 (ii)若 u 的标号为 (v , t ) ) ,则 f (v, u ) f (v, u ) t ;若 u 的 标号为 (v , t ) ,则 f (u, v) f (u, v) t 。 (iii)若 u s ,把全部标号去掉,并回到标号过程(A) 。否 则,令 u v ,并回到增流过程(ii) 。 注: (1)标号 ( x , y ) 表示从 x 流入 y 的流可增加 y ; ( x , y )
相关文档
最新文档