網絡流

在圖論中，網絡流（Network flow）是指在一個每條邊都有容量（Capacity）的有向圖分配流，使一條邊的流量不會超過它的容量。通常在運籌學中，有向圖稱為網絡。頂點稱為節點（Node）而邊稱為弧（Arc）。一道流必須符合一個結點的進出的流量相同的限制，除非這是一個源點（Source）──有較多向外的流，或是一個匯點（Sink）──有較多向內的流。一個網絡可以用來模擬道路系統的交通量、管中的液體、電路中的電流或類似一些東西在一個結點的網絡中遊動的任何事物。

**定義**

**網絡流圖**
如果帶權有限的有向圖滿足如下條件，則稱之為網絡流圖(或容量網絡):
*有且僅有一個結點  入度為0.稱為源點。
*有且僅有一個結點  出度為0.稱為匯點。
*, 稱為這條弧的容量。特別地，如果 ，可以假定 .

**淨流**
通過容量網絡中的一條弧  的流量(或淨流)記為 .

**弧**
弧是網絡流圖中的一條帶權邊 .
特殊的弧有：- 零流弧滿足 .- 非零流弧滿足 .- 飽和弧滿足 .- 非飽和弧滿足 .

**網絡流**
一個流量的集合  包含所有弧上的流，則稱為這個容量網絡的一個網絡流。

**可行流**
在容量網絡中滿足以下條件的網絡流稱為可行流:
*容量限制（Capacity Constraints）: .
*流守恆（Flow Conservation）: 除非  或 ，否則  一結點的淨流是零，除了“製造”流的源點和“消耗”流的匯點。

**偽流 === 
偽流是一種與可行流相對的概念，如果一個網絡流只滿足容量限制條件，不滿足流守恆條件，那麼這個網絡流就是一個偽流。

**剩餘容量**
邊的剩餘容量（Residual Capacity）簡稱為殘量,是 .

**殘量網絡**
由所有邊均為其殘量的  稱為殘量網絡（Residual Network）或剩餘網絡.它顯示可用的容量的多少。留意就算在原網絡中由  到  沒有邊，在剩餘網絡仍可能有由  到  的邊。因為相反方向的流抵消，減少由  到  的流等於增加由  到  的流。

**最大流**
對於一個網絡流圖，它最大的可行流即為它的最大流。

**增廣路**
增廣路（Augmenting Path）是一條路徑 ，而 、 及 ，這表示沿這條路徑傳送更多流是可能的。當且僅當剩餘網絡  沒有增廣路時處於最大流。

**性質**
在任意時刻， 的網絡流都滿足如下性質。

**容量限制 === 
通過一條弧的流量不能超過這條弧的容量上限。

**反對稱性**
從一個結點  到另一個結點  的淨流量一定是從  到  淨流量的相反數。

**流守恆**
對於  中任意一個結點 ,如果它既不是源點也不是匯點，那麼它到相鄰結點的所有流量之和為0.

**例子**
一個顯示了流及容量的流網絡。
在右邊可以看到一個有以標示的源點、以標示的匯點及4個額外結點的流網絡。流及容量以顯示。注意網絡怎樣保證斜對稱、容量限制及流守恆。由到的總流量為5，由此可簡單地觀察到源於的所有向外流是5，也就是匯於的向內流。我們知道在其它結點中沒有任何流出現或消失。
上面的流網絡的剩餘網絡，顯示了剩餘容量。
在下面你可以看到對既定的流的剩餘網絡。注意某些邊的剩餘容量是正數而原來的容量是零，如邊。這道流不是一道最大流。沿路徑、及還有可用的容量，也就是擴張路徑。第一條路徑的剩餘容量是。注意擴張路徑在原來的網絡中並不存在，但你可以沿它傳送流，因此仍是一道正當的流。
假如這是一個真實的網絡，由到的2單位的流及由到的1單位的流事實上可能存在，但我們只維持淨流。

**應用**
將一連串的水管繪畫成一個網絡。每條水管有一特定的闊度，因此只可以保持一特定的水流量。當任何水管匯合，流入匯流點的總水量必須等於流出的水量，否則我們會很快地缺水，或者我們會團積水。我們有一個作為源點的入水口，和一個作為匯點的出水口。一道流便是一條由源點到匯點而使從出水口流出的總水量一致的可能路徑。直觀地，一個網絡的總流量是水從出口流出的速率。
流可以適用於交通網絡上的人或材料，或配電系統上的電力。對於任何這樣的實物網絡，進入任何中途結點的流需要等於離開那個結點的流。這個守恆限制相當於基爾霍夫電流定律。
在生態學中也可找到網絡流的應用：當考慮在食物網中不同組織之間養料及能量的流，網絡流便自然地產生。與這些網絡有聯繫的數學問題和那些液體流或交通流網絡中所產生的難題有很大分別。由Robert Ulanowicz及其他人發展的生態系統網絡分析領域包含使用資訊理論及熱力學的概念去研究這些網絡隨時間的演變。

**普遍化及專門化**
利用網絡流去找出最大流是最簡單及最普通的問題，它提供了在一指定的圖中由源點到匯點的最大可能總流量。還有很多其它問題可以利用最大流演算法去解決，假設它們可以適當地塑造成流網絡的模樣，例如二分圖匹配（Bipartite Matching）、任務分配問題（Assignment Problem）和運輸問題（Transportation Problem）。
在多物網絡流問題（Multi-commodity Flow Problem）中，可以有多個源點和匯點，和各種各樣的由指定源點傳送到指定匯點的「物品（Commodities）」。例如這可能是不同的工廠生產的各種各樣的貨物經由「同一」運輸網絡運送到不同的消費者手上。
在最小費用最大流問題（Minimum Cost Flow Problem）中，每條邊都有特定費用。沿這條邊傳送的費用是。目標是要用最低的成本由源點傳送一特定數量的流到匯點。
在環流問題（Circulation Problem）中，每條邊除了有上限外，還有下限。每條邊亦有一個費用。很多時，流守恆適用於環流問題中所有結點，由匯點到源點亦有一條連結。這樣便能利用和支配總流量。這問題因流環繞網絡流動而得名。
在有增益網絡或普遍化網絡中，每條邊都有增益，一個實數（非零）使如果這條邊有一增益g而有一流量x的流在尾部流入，便有一流量gx的流從頭部流出。

**參見**
 佈雷斯悖論- Centrality- Constructal theory- Ford–Fulkerson算法- Dinic算法- Flow (computer networking)- Rooted graph- 最大流最小割定理- Oriented matroid- 最短路問題

**延伸閱讀**
 cite book | author=George T. Heineman, Gary Pollice, and Stanley Selkow | title= Algorithms in a Nutshell | publisher=Oreilly Media | year=2008 | chapter=Chapter 8:Network Flow Algorithms | pages = 226–250 | isbn=978-0-596-51624-6 - cite book | author=Ravindra K. Ahuja, Thomas L. Magnanti, and James B. Orlin | title= Network Flows: Theory, Algorithms and Applications | url=https://archive.org/details/networkflowstheo0000ahuj | publisher=Prentice Hall | year=1993 | isbn=0-13-617549-X - cite book | author=Bollobás, Béla | title= Graph Theory: An Introductory Course | location=Heidelberg | publisher=Springer-Verlag | year=1979 | isbn=3-540-90399-2- cite book | author=Chartrand, Gary & Oellermann, Ortrud R. | title=Applied and Algorithmic Graph Theory | location=New York | publisher=McGraw-Hill | year=1993 | isbn=0-07-557101-3-  isbn=0-914894-21-8-  isbn=0-521-28881-9 - cite book | author = Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein | title = Introduction to Algorithms | origyear = 1990 | edition = 2nd | year = 2001 | publisher = MIT Press and McGraw-Hill | pages = 696–697 | chapter = 26 | isbn = 0-262-03293-7

**外部鏈接**
  Maximum Flow Problem-  Real graph instances date=20120213151113 -  Lemon C++ library with several maximum flow and minimum cost circulation algorithms date=20051025011207 -  QuickGraph date=20180121140629 , graph data structures and algorithms for .Net

**參考資料 ==