1 ネットワークとフロー
定義 1.1. 有限有向グラフD=(V,A)、相異なる二頂点s,t∈V、および容量とよぶ写像c:A→[0,∞)の組(D,c,s,t)をネットワーク (flow network) という。sを湧点 (source)、tを吸点 (sink) という。
写像f:A→Rがフロー (flow) であるとは、次の二条件を満たすことをいう。
- (容量制約)各a∈Aについて0≤f(a)≤c(a)が成り立つ。
- (保存則)各v∈V∖{s,t}について
a∈δ−(v)∑f(a)=a∈δ+(v)∑f(a)
が成り立つ。
フローfの値 (value of a flow) を
val(f)=a∈δ+(s)∑f(a)−a∈δ−(s)∑f(a)と定める。値が最大であるフロー、すなわち任意のフローf′についてval(f′)≤val(f)を満たすフローfを最大フロー (maximum flow) という。
フローが少なくとも一つ存在するかどうかは、この定義だけからは明らかでない。各弧で値0をとる写像がフローであることは命題 3.2の証明で確かめる。以下では、RAをすべての写像A→Rのなす∣A∣次元の実ベクトル空間とみなし、フロー全体の集合を
F={f∈RA: f はフローである}
と書く。
2 カットとフローの値の上界
定義 2.1.s∈Sかつt∈V∖Sを満たす頂点集合S⊆Vを s-tカット (s-t cut) という。s-tカットSの容量 (capacity) を
c(S)=a∈δ+(S)∑c(a)と定める。容量が最小であるs-tカットを最小カット (minimum cut) という。
s-tカットは湧点側と吸点側を分ける切り分けであり、その容量は切り分けを順方向に越えることのできる量の総和である。次の命題は、この見方を等式と不等式の形で確定する。等式の側は後の議論でも繰り返し用いる。
命題 2.2. 任意のフローfと任意のs-tカットSに対し
val(f)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)が成り立つ。とくにval(f)≤c(S)が成り立つ。
証明. 各頂点v∈Vに対し
b(v)=a∈δ+(v)∑f(a)−a∈δ−(v)∑f(a)と置く。保存則によりv∈V∖{s,t}ではb(v)=0であり、値の定義によりb(s)=val(f)である。Sはsを含みtを含まないので、Sの要素はsか、または保存則の成り立つ頂点である。したがって
v∈S∑b(v)=b(s)=val(f)が成り立つ。
左辺を弧ごとに数え直す。自己ループが無いので、弧a=(u,v)の始点と終点は相異なる。aが∑v∈Sb(v)へ寄与する仕方は次の四通りである。u∈Sかつv∈Sのとき、b(u)に+f(a)、b(v)に−f(a)として現れて相殺する。u∈Sかつv∈/Sのとき、すなわちa∈δ+(S)のとき、b(u)に+f(a)としてだけ現れる。u∈/Sかつv∈Sのとき、すなわちa∈δ−(S)のとき、b(v)に−f(a)としてだけ現れる。u∈/Sかつv∈/Sのとき、寄与は無い。したがって
v∈S∑b(v)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)となり、主張の等式を得る。
不等式を示す。容量制約によりf(a)≥0であるから、右辺の第二の和は非負であり、これを落とすと上からの評価になる。さらに各a∈δ+(S)でf(a)≤c(a)であるから
val(f)≤a∈δ+(S)∑f(a)≤a∈δ+(S)∑c(a)=c(S)が成り立つ。▨
この命題は、フローの値とカットの容量が一致する対を見つけることに意味を与える。そのような対が見つかれば、両者の最適性を他の候補と比べることなく確定することができるからである。この見通しは定理 5.1 (3)⇒(1) の段で証明の形にする。同定理は、値と容量の一致が必ず起こることを主張する。
3 最大フローの存在
容量が非負の実数であるとき、フローの値がとりうる値の集合は上に有界な実数の集合であるから上限をもつ。しかし上限が実際に達成されること、すなわち最大フローが存在することは、この段階では分かっていない。そこで、フロー全体の集合がコンパクトであることと、フローの値が連続であることを示して最大値の存在を得る。
コンパクト性を用いるためには、まずフローの値が連続であることを確かめる必要がある。有限次元空間上の線形汎関数の連続性は上流の記事が扱っていないので、ここで示す。
補題 3.1.Aを有限集合とし、α∈RAを固定する。RAに Euclid 距離ρ2を入れ、
L(x)=a∈A∑α(a)x(a)によってL:RA→Rを定める。このときLは§E2.4 定義 1.1の意味で連続である。
証明.K=1+∑a∈A∣α(a)∣と置く。K≥1>0である。x,y∈RAに対し、各a∈Aについて
∣x(a)−y(a)∣≤(b∈A∑(x(b)−y(b))2)1/2=ρ2(x,y)が成り立つ。三角不等式により
∣L(x)−L(y)∣=a∈A∑α(a)(x(a)−y(a))≤a∈A∑∣α(a)∣∣x(a)−y(a)∣≤Kρ2(x,y)を得る。ε>0に対してδ=ε/K>0と置けば、ρ2(x,y)<δのとき∣L(x)−L(y)∣<εが成り立つ。したがってLは各点で連続である。▨
命題 3.2. ネットワーク(D,c,s,t)に対し、フロー全体の集合F⊆RAは空でない有界閉集合であり、val:F→Rは連続である。従属選択公理を仮定すると、valはFの上で最大値をとる。すなわち最大フローが存在する。
証明.A=∅のときはRAが一点集合であり、Fはその一点からなり、valは0という値だけをとるので主張は成り立つ。以下A=∅とし、n=∣A∣≥1と置く。
空でないこと。各弧で値0をとる写像はフローであるからF=∅である。
有界であること。C=maxa∈Ac(a)と置く。f∈Fならば各aで0≤f(a)≤Cであるから
ρ2(f,0)=(a∈A∑f(a)2)1/2≤nCが成り立つ。したがってFは原点を中心とする半径nC+1の開球に含まれ、有界である。
閉であること。各a∈AについてΦa(x)=x(a)と置き、各v∈V∖{s,t}について
Kv(x)=a∈δ−(v)∑x(a)−a∈δ+(v)∑x(a)と置く。自己ループが無いのでδ−(v)とδ+(v)は交わらず、Kvは係数が1、−1または0である線形汎関数である。Φaも線形汎関数であるから、補題 3.1によりこれらはすべて連続である。
Fの補集合が開であることを示す。g∈RA∖Fとすると、次の三つの場合のいずれかが起こる。
- あるa0∈AについてΦa0(g)<0である。ε=−Φa0(g)>0に対するΦa0の連続性のδ>0をとると、ρ2(x,g)<δを満たすxはΦa0(x)<Φa0(g)+ε=0を満たすので、x∈/Fである。
- あるa0∈AについてΦa0(g)>c(a0)である。ε=Φa0(g)−c(a0)>0に対するδ>0をとると、ρ2(x,g)<δを満たすxはΦa0(x)>Φa0(g)−ε=c(a0)を満たすので、x∈/Fである。
- あるv0∈V∖{s,t}についてKv0(g)=0である。ε=∣Kv0(g)∣>0に対するδ>0をとると、ρ2(x,g)<δを満たすxは∣Kv0(x)−Kv0(g)∣<εを満たすのでKv0(x)=0であり、x∈/Fである。
いずれの場合もgの周りの開球がFと交わらない。したがってFの補集合は開であり、Fは閉である。
値の連続性。α(a)=1(a∈δ+(s)のとき)、α(a)=−1(a∈δ−(s)のとき)、α(a)=0(それ以外のとき)と定めると、自己ループが無いのでδ+(s)とδ−(s)は交わらず、αは矛盾なく定まる。このときval(x)=∑aα(a)x(a)であるから、補題 3.1によりvalはRA上で連続である。連続性はεとδによる条件であるから、定義域を部分集合Fへ制限したものも、FにRAの距離を入れた部分空間の上で連続である。
結論。Aの要素に1からnまで番号を付けると、RAは Euclid 距離を保ったままRnと同一視される。従属選択公理のもとで§E2.9 定理 4.3をRnの有界閉集合Fへ適用すると、Fはコンパクトである。ここで用いるコンパクト性も、次に用いる連続性も、距離から定まる位相についてのものである。実際、§E2.4 定義 1.1の意味での連続性は、§E2.4 定理 2.1により、開集合の逆像が開集合であることと同値であり、これが位相空間の写像としての連続性である。F=∅でありval:F→Rは距離から定まる位相について連続であるから、§E2.19 定理 4.4によりvalはFの上で最大値をとる。最大値を与えるf∈Fが最大フローである。▨
4 残余ネットワークと増加道
フローが最大でないとき、どの方向へ量を動かせば値が増えるかを表すのが残余ネットワークである。弧aについては、容量までの余裕c(a)−f(a)の分だけ順方向へ増やすことができ、既に流れているf(a)の分だけ逆方向へ打ち消すことができる。この二種類の操作を、向きをもつ弧として一つのグラフにまとめる。
定義 4.1. ネットワーク(D,c,s,t)とフローfに対し、残余ネットワーク (residual network)Dfを次のように定める。頂点集合はVとする。各弧a=(u,v)∈Aについて、
- c(a)−f(a)>0であるとき、uを始点としvを終点とする順方向残余弧 (forward residual arc)a+を置き、その残余容量 (residual capacity) をcf(a+)=c(a)−f(a)と定める。
- f(a)>0であるとき、vを始点としuを終点とする逆方向残余弧 (backward residual arc)a−を置き、その残余容量をcf(a−)=f(a)と定める。
残余弧は元の弧aと向きの別によって区別する。すなわち残余弧は対(元の弧, 向き)で識別し、始点と終点が同じ二つの残余弧を同一視しない。したがってDfは、始点と終点が同じ弧を複数もつことのある多重有向グラフであり、§D2.11 定義 1.1の有向グラフとは限らない。逆平行な弧の対(u,v)、(v,u)について両方向に残余がある場合に、実際にそのようなことが起こる。そこで、Dfにおける有向道と到達可能性を本記事が次のように定める。頂点がすべて相異なるように残余弧を順にたどってsからtへ至る列を増加道 (augmenting path) という。すなわち増加道とは、頂点の列s=w0,w1,…,wk=t(w0,…,wkは相異なる)と残余弧の列r1,…,rkであって、各riがwi−1を始点、wiを終点とするものである。同じ規約で、Dfにおいてsから到達可能 (reachable) な頂点を、sから始まるこの形の列の終点として定める。増加道Pに対し
Δ(P)=min{cf(r): r は P に現れる残余弧}をPのボトルネック (bottleneck) という。残余弧の残余容量はいずれも正であるからΔ(P)>0である。
この増加道は残余ネットワーク上の有向道であって、元のネットワークの有向道ではない。既に流れている弧を打ち消す逆方向残余弧を用いることができる点が、単純に空きのある弧をたどるだけの操作との違いである。
補題 4.2. フローfと増加道Pをとり、Δ=Δ(P)と置く。写像f′:A→Rを
f′(a)=⎩⎨⎧f(a)+Δf(a)−Δf(a)(a+ が P に現れるとき),(a− が P に現れるとき),(それ以外のとき)で定める。このときf′はフローであり、val(f′)=val(f)+Δが成り立つ。
証明. f′が矛盾なく定まること。増加道Pの頂点はすべて相異なる。弧a=(u,v)についてa+とa−がともにPに現れたとすると、Pはuからvへの移動とvからuへの移動をともに含むので、uとvがそれぞれ二度現れることになり、頂点が相異なることに反する。また、同じ残余弧がPに二度現れることも、頂点が相異なることに反する。したがって上の場合分けは重複せず、f′は矛盾なく定まる。
容量制約。Pに現れない弧ではf′=fであるから制約は保たれる。a+がPに現れるときはΔ≤cf(a+)=c(a)−f(a)であるから
0≤f(a)≤f(a)+Δ=f′(a)≤c(a)が成り立つ。a−がPに現れるときはΔ≤cf(a−)=f(a)であるから
0≤f(a)−Δ=f′(a)≤f(a)≤c(a)が成り立つ。
保存則と値。各頂点wについてb(w)=∑a∈δ+(w)f(a)−∑a∈δ−(w)f(a)と置き、f′について同様に定めたものをb′(w)と書く。Pに現れる残余弧rの始点をx、終点をyとすると、rによる流量の変更がbに与える差は次のとおりである。r=a+かつa=(x,y)のときはf(a)がΔだけ増え、a∈δ+(x)かつa∈δ−(y)であるから、b(x)はΔだけ増えb(y)はΔだけ減る。r=a−かつa=(y,x)のときはf(a)がΔだけ減り、a∈δ+(y)かつa∈δ−(x)であるから、やはりb(x)はΔだけ増えb(y)はΔだけ減る。いずれの場合も、残余弧の始点で+Δ、終点で−Δの差が生じる。
増加道をs=w0,r1,w1,…,rk,wk=tと書く。各riはwi−1を始点、wiを終点とする。頂点wi(0<i<k)はriの終点かつri+1の始点であるから、差の総和は−Δ+Δ=0でありb′(wi)=b(wi)=0となる。Pに現れない頂点では流量が変わらないのでb′=bである。よってf′は保存則を満たし、フローである。s=w0はr1の始点であって、どのriの終点でもないからb′(s)=b(s)+Δであり、val(f′)=val(f)+Δを得る。▨
5 最大フロー最小カット定理
5.1 証明方針
三条件の同値性を、(1)⇒(2)⇒(3)⇒(1) という巡回の形で示す。
(1)⇒(2) は対偶をとる。増加道が存在すれば補題 4.2が値の大きいフローを与えるので、もとのフローは最大でない。
(3)⇒(1) は命題 2.2の不等式から直ちに従う。
本質的な一手は (2)⇒(3) にある。増加道が存在しないという仮定を、カットの構成へ翻訳する。残余ネットワークDfにおいてsから到達可能な頂点全体をSと置く。増加道が存在しないことはtがsから到達不能であることに他ならないから、Sはs-tカットである。次にSの境界を調べる。Sから出る弧に容量までの余裕が残っていれば、その順方向残余弧によって外側の頂点が到達可能になるので、余裕は残っていない。Sへ入る弧に正の流量があれば、その逆方向残余弧によって外側の頂点が到達可能になるので、流量は零である。この二つを命題 2.2の等式へ代入すると、val(f)=c(S)が得られる。
最後に、最大フローと最小カットの値が一致することを述べるためには、最大フローが実在しなければならない。これは命題 3.2が与える。従属選択公理を用いる段はここだけであり、三条件の同値の証明には用いない。
定理 5.1 (最大フロー最小カット定理). 非負実容量の有限ネットワーク(D,c,s,t)において、フローfについての次の三条件は同値である。
- fは最大フローである。
- 残余ネットワークDfにsからtへの増加道が存在しない。
- val(f)=c(S)を満たすs-tカットSが存在する。
さらに、従属選択公理を仮定すると、最大フローの値と最小カットの容量は等しい。三条件の同値の証明は選択公理を用いず、最後の主張だけが命題 3.2を経由して従属選択公理を用いる。
証明. (1)⇒(2). 対偶を示す。Dfに増加道Pが存在すると仮定する。補題 4.2により、val(f′)=val(f)+Δ(P)を満たすフローf′が存在する。Δ(P)>0であるからval(f′)>val(f)となり、fは最大フローではない。
(2)⇒(3).Dfにおいてsから到達可能な頂点全体をSと置く。長さ0の有向道によりs∈Sである。仮定によりsからtへの有向道は存在しないのでt∈/Sである。したがってSはs-tカットである。
a=(u,v)∈δ+(S)をとる。u∈Sかつv∈/Sである。もしf(a)<c(a)であるとすると、順方向残余弧a+がDfに存在し、uからvへ移ることができるのでv∈Sとなって矛盾する。よってf(a)=c(a)である。
a=(v,u)∈δ−(S)をとる。u∈Sかつv∈/Sである。もしf(a)>0であるとすると、逆方向残余弧a−がuを始点としvを終点としてDfに存在するのでv∈Sとなって矛盾する。よってf(a)=0である。
これらを命題 2.2の等式へ代入すると
val(f)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)=a∈δ+(S)∑c(a)−0=c(S)を得る。
(3)⇒(1).val(f)=c(S)を満たすs-tカットSをとる。任意のフローf′について命題 2.2によりval(f′)≤c(S)=val(f)が成り立つので、fは最大フローである。
最大フローと最小カットの一致。命題 3.2により最大フローf∗が存在する。(1)⇒(2)⇒(3)によりval(f∗)=c(S∗)を満たすs-tカットS∗が存在する。任意のs-tカットS′について命題 2.2によりc(S′)≥val(f∗)=c(S∗)であるから、S∗は最小カットであり、最大フローの値と最小カットの容量はともにval(f∗)に等しい。▨
6 Ford–Fulkerson 法と整数性
定理の (2)⇒(1) は、増加道が見つからなくなるまで増加を繰り返す手続きが最大フローを与えることを意味する。ただし停止することは別に示す必要がある。ここでは容量がすべて非負整数である場合に停止性を証明する。
命題 6.1. ネットワーク(D,c,s,t)の容量がすべて非負整数であるとする。各弧で値0をとるフローfから出発し、残余ネットワークDfに増加道が存在するかぎり、増加道を一つ選んで補題 4.2の増加操作を行い、その結果を新しいfとする手続きを Ford–Fulkerson 法という。この手続きは有限回の反復で停止し、停止時のフローは各弧で整数値をとる最大フローである。
証明. 不変条件。ループ不変条件(§D2.8 定義 1.1)として「現在のfはフローであり、各弧で整数値をとる」をとる。初期化では、各弧で値0をとる写像がフローであり整数値をとるので成り立つ。維持を示す。fが整数値をとるフローであるとき、各弧aでc(a)−f(a)とf(a)はともに整数であるから、残余容量はすべて正の整数であり、選んだ増加道PのボトルネックΔ(P)は正の整数である。補題 4.2により増加操作の結果f′はフローであり、各弧でf′(a)はf(a)に整数を加えるか引くかしたものであるから整数値をとる。よって不変条件は保たれる。
停止性。S0={s}と置くと、s=tであるからS0はs-tカットである。容量が整数であるからc(S0)は非負整数である。ループの状態に対して
Φ=c(S0)−val(f)と定める。ここでΦは変量を表す記号であり、頂点集合Vとは無関係である。不変条件によりval(f)は整数であり、命題 2.2によりval(f)≤c(S0)であるから、Φは非負整数である。本体を一度実行すると、上に述べたとおりΔ(P)は正の整数であるからval(f)は1以上増え、Φは狭義に減少する。したがって§D2.8 命題 1.4により手続きは有限回の反復で停止する。
終了。停止時にはループの継続条件が偽であり、残余ネットワークに増加道が存在しない。不変条件により停止時のfはフローであって各弧で整数値をとるから、定理 5.1 (2)⇒定理 5.1 (1)によりfは整数値をとる最大フローである。以上の三段は§D2.8 定理 1.2の形の議論であり、手続きは停止して最大フローを返す。▨
系 6.3 (整数性定理). ネットワークの容量がすべて非負整数であるとき、各弧で整数値をとる最大フローが存在する。
証明.命題 6.1により、Ford–Fulkerson 法は有限回で停止し、停止時のフローは各弧で整数値をとる最大フローである。これが求める最大フローである。▨
7 検算例
例 7.1 (4 頂点ネットワークの最大フローと最小カット). 頂点集合を{s,a,b,t}とし、弧と容量を
c(s,a)=3,c(s,b)=2,c(a,b)=1,c(a,t)=2,c(b,t)=3と定める。各弧で値0をとるフローから出発して増加操作を三度行う。
- 増加道s→a→tをとる。ボトルネックはmin{3,2}=2であり、この道に沿って2を流す。
- 増加道s→b→tをとる。ボトルネックはmin{2,3}=2であり、この道に沿って2を流す。
- 増加道s→a→b→tをとる。残余容量は順に3−2=1、1−0=1、3−2=1であるからボトルネックは1であり、この道に沿って1を流す。
得られたフローは
f(s,a)=3,f(s,b)=2,f(a,b)=1,f(a,t)=2,f(b,t)=3であり、値はval(f)=f(s,a)+f(s,b)=3+2=5である。この例では、5本の弧のすべてで流量が容量に等しい。保存則を確かめると、頂点aでは入る量が3、出る量がf(a,b)+f(a,t)=1+2=3であり、頂点bでは入る量がf(s,b)+f(a,b)=2+1=3、出る量がf(b,t)=3である。吸点tへ入る量はf(a,t)+f(b,t)=2+3=5であり、値と一致する。
このフローの残余ネットワークでは、sを始点とする順方向残余弧が存在しない。c(s,a)−f(s,a)=0かつc(s,b)−f(s,b)=0であり、sを終点とする弧が無いのでsを始点とする逆方向残余弧も存在しないからである。したがってsから到達可能な頂点はsだけであり、定理 5.1の証明が与えるカットはS={s}である。その容量はc(s,a)+c(s,b)=3+2=5であり、val(f)=5と一致する。
他のs-tカットの容量も数える。S={s,a}ではδ+(S)={(s,b),(a,b),(a,t)}であり容量は2+1+2=5である。S={s,b}ではδ+(S)={(s,a),(b,t)}であり容量は3+3=6である。S={s,a,b}ではδ+(S)={(a,t),(b,t)}であり容量は2+3=5である。いずれも5以上であり、最小カットの容量が5であることと整合する。容量がすべて整数であり、得られたフローも整数値をとるので、系 6.3とも整合する。
8 演習
問題 8.1.
- 命題 2.2の等式の証明で、両端がSに属する弧の寄与が相殺することを、弧a=(u,v)がb(u)とb(v)のどちらへどの符号で現れるかを明示して書き下せ。さらに、自己ループを許した場合にこの数え直しのどこが成り立たなくなるかを述べよ。
- 補題 4.2の証明は、増加道の頂点がすべて相異なることを二箇所で用いている。その二箇所を指摘し、頂点の重複を許した残余弧の列に対して同じ定義を用いるとf′の容量制約が破れる例を、具体的なネットワークとフローによって構成せよ。
- 定理 5.1 (2)⇒(3) で構成したカットSが最小カットであることを、命題 2.2だけを用いて示せ。
- 命題 3.2の証明において、容量制約の上限f(a)≤c(a)を課さず保存則と非負性だけを課した集合を考えると、有界性の証明のどこが成り立たなくなるかを述べ、その集合が有界でない具体例を挙げよ。
- 容量がすべて非負の有理数であるとき、Ford–Fulkerson 法が有限回で停止することを、命題 6.1の証明の不変条件と変量をどう取り替えればよいかを示したうえで証明せよ。
10 扱った範囲と次の記事
本記事は、非負実容量の有限ネットワークについて最大フローの存在を示し、最大フロー最小カット定理を完全に証明した。容量がすべて非負整数である場合について、Ford–Fulkerson 法の停止性と整数値をとる最大フローの存在を導いた。増加道の選び方に応じた反復回数の上界、一般の線形計画双対性、係数行列の全単模性および二部マッチングへの帰着は扱っていない。次の記事では、有限二部グラフについて交互道と増加道を定義し、増加道が存在しないことによる最大マッチングの特徴づけと、最大マッチングの辺数と最小頂点被覆の頂点数が等しいことを証明する。