フローネットワーク

**フローネットワーク**（）は、グラフ理論における重み付き有向グラフの一種であり、各枝に**容量**（capacity）を設定し、各枝を**フロー**（flow）が流れる。各枝のフローはその容量を超えることはない。オペレーションズ・リサーチでは、重み付きグラフを**ネットワーク**と呼び、頂点を**ノード**、枝を**アーク**と呼ぶ。フローが満足すべき制約条件として、1つのノードに流入するフローとそのノードから流出するフローは常に等しい。ただし、始点（source）と終点（sink）では、その限りではない。このネットワークは、例えば道路網の交通量、パイプを流れる液体、電気回路を流れる電流、その他の何らかのネットワーク上を移動するものをモデル化するのに適している。フローネットワークに関する最適化問題はネットワークフロー問題と呼ばれる。

## 定義
有限な有向グラフ \ G(V,E) の各枝 \ (u,v) \in E に非負実数の容量 \ c(u,v) が設定されているとする。\ (u, v) \not \in E の場合、\ c(u, v) = 0 と見なす。ここで、2つの頂点、始点 \ s と終点 \ t を区別する。フローネットワークは実数関数 \ f:V \times V \rightarrow \mathbb{R} で表され、全ノード \ u と \ v について、次が成り立つ。

:

ここで、\ f(u,v) は \ u から \ v へのフローの総和を意味する。グラフが物理的ネットワークを表していて、\ u から \ v へ4単位のフローがあり、\ v から \ u へ3単位のフローがある場合、\ f(u,v)=1 および \ f(v,u)=-1 となる。

枝の**残余容量**（residual capacity）とは、\ c_f(u,v) = c(u,v) - f(u,v) で表される量である。ここから**残余ネットワーク**（residual network）\ G_f(V,E_f) が定義され、利用可能な容量で構成されたネットワークを意味する。本来のネットワークには \ u から \ v への枝がない場合でも、残余ネットワークでは \ u から \ v への枝がある場合もある。反対向きのフローは相殺されるため、\ v から \ u へのフローが減少するということは、\ u から \ v へのフローが増加することを意味する。**増加道**（augmenting path）とは、残余ネットワーク内の経路 \ (u_1,u_2,\dots,u_k) であって、\ u_1=s かつ \ u_k=t であり、\ c_f(u_i, u_{i+1}) > 0 であるような経路を意味する。最大フローのネットワークとは、残余ネットワークに増加道が存在しない場合を指す。

## 例
thumb|right|300px|フローと容量を示したフローネットワーク。
右図は、始点 s、終点 t、他の4つのノードから構成されるフローネットワークである。フローと容量は f/c のように示されている。この図において、確かに容量制限、歪対称性、フロー保存則が成り立っている。また、始点 s から終点 t への総フロー量が 5 であることは、s から流出しているフロー量や t に流入しているフロー量が 5 であり、また他のノードにおいてはフローの増減が無いことから確認できる。

right|frame|上記フローネットワークの残余ネットワーク。残余容量を示している。
次の図では、上図の残余ネットワークを示している。例えば枝 (d, c) のように、元の容量が 0 だった枝であっても残余容量が正であるものが存在する。なお、この残余ネットワークには増加道 (s, a, c, t)、(s, a, b, d, t)、(s, a, b, d, c, t) が存在することから、上図のネットワークは最大フローではないことがわかる。例えば増加道 (s, a, c, t) の残余容量は \min\{ c(s, a) - f(s, a), c(a, c) - f(a, c), c(c, t) - f(c, t) \} = \min\{ 5 - 3, 3 - 2, 2 - 1 \} = \min\{ 2, 1, 1 \} = 1 と計算できる。ここで、増加道 (s, a, b, d, c, t) は元のネットワークには存在しない経路であるが、この経路に沿ってフローを送り込むことは可能である。

## 応用
水道管の配管をネットワークとして考える。各水道管には直径があり、特定の量の水流しか流せない。管と管の接続部に流入する水量は、そこから流出する水量と等しい。水道網には水源（始点）と排水溝（終点）がある。途中がどうであれ、始点から終点に水は流れるだけであり、水源からの流出量が一定なら水の消費量は一定である。直観的には、ネットワークの全フローは水源からの流出量と等しい。

交通網や送電網などもフローネットワークで表すことができる。このような物理ネットワークでは、中間ノードに流入するフローとそこから流出するフローは常に等しい。Béla Bollobás は、このような性質をキルヒホッフの法則を使って定式化し、後には（Chartrandなどが）保存方程式として一般化した。

フローネットワークは生態学でも利用されている。すなわち、食物連鎖における異なる生体間の栄養とエネルギーのフローをフローネットワークとしてモデル化する。そのようなネットワークに関する数学の問題は、流体や交通網のそれとは全く異なる。生態系をネットワークとしてモデル化することは、Robert Ulanowicz らが行ったもので、情報理論や熱力学のネットワークに関する成果を取り入れている。

## 一般化と特殊化
フローネットワークについての最も単純で一般的な問題として最大流問題、すなわち与えられたグラフについて始点から終点への可能な最大フローを求める問題がある。最大フローを求めるアルゴリズムを使って、フローネットワークにモデル化可能な他の問題も解くことができる。例えば2部マッチング、、交通問題などがある。

では、始点と終点がそれぞれ複数あり、それぞれ固有の品種がフローとして流通する。これは、例えば各種工場から様々な製品が生産され、様々な顧客に「同じ交通網」を通して届けられるのに似ている。

最小費用流問題では、各枝 u,v には所定のコスト k(u,v) が設定されており、フロー f(u,v) を送るのにかかるコストは f(u,v) \cdot k(u,v) で表される。目的は、所定のフローを始点から終点へ最小費用で送ることである。

循環流問題では、枝に対して下限 l(u,v) と上限 c(u,v) が与えられる。各枝にはコストも設定されている。終点から始点への枝が追加され、全ノードでフロー保存則が成り立つようになっていることが多い。この場合、上限と下限の間で可能なフローの総計を求める。その名の通り、この問題ではフローはネットワーク上を循環する。

利得のあるネットワークでは、各枝には利得が設定されており、フロー x が利得 g の枝を通ると、最終的にフローが gx となる。

## 参考文献
* 
* 
* 
* 
* 
* 

## 関連項目
* 最大フロー最小カット定理
* フォード・ファルカーソンのアルゴリズム
* ネットワークフロー問題

## 外部リンク
* Maximum Flow Problem
* Maximum Flow
* Real graph instances
* Software and papers for network flow problems