网络流

维基百科,自由的百科全书
跳转至: 导航搜索

圖論中,網絡流英语:Network flow)是指在一個每條邊都有容量(capacity)的有向圖分配,使一條邊的流量不會超過它的容量。通常在運籌學中,有向图称为网络。顶点称为节点(node)而边称为(arc)。一道流必須符合一個結點的進出的流量相同的限制,除非這是一個源點(source)──有較多向外的流,或是一個匯點(sink)──有較多向內的流。一個網絡可以用來模擬道路系統的交通量、管中的液體、電路中的電流或類似一些東西在一個結點的網絡中遊動的任何事物。

定義[编辑]

假設 G = (V,E) 是一個有限的有向圖,它的每條 \ (u,v) \in E 都有一個非負值實數的容量c(u, v)。如果(u, v) \not \in E,我們假設 c(u, v) = 0。我們區別兩個頂點:一個源點 s 和一個匯點 t。一道網絡流是一個對於所有結點 uv 都有以下特性的實數函數 f:V \times V \rightarrow \mathbb{R}

容量限制(Capacity Constraints) \ f(u, v) \le c(u, v)一條邊的流不能超過它的容量。
斜對稱(Skew Symmetry) \ f(u, v) = - f(v, u)uv的淨流必須是由vu的淨流的相反(參考例子)。
流守恆(Flow Conservation) 除非u = su = t,否則\ \sum_{w \in V} f(u, w) = 0一結點的淨流是零,除了「製造」流的源點和「消耗」流的匯點。

流守恒意味着: \ \sum_{(u,v) \in E} f(u,v) = \sum_{(v,z) \in E} f(v,z) ,对每个顶点 \ {v \in V\setminus\{s,t\}}

注意 f(u,v) 是由 uv流。如果該圖代表一個實質的網絡,由 uv 有4單位的實際流及由 vu 有3單位的實際流,那麼 f(u, v) = 1f(v, u) = -1

基本上,我们可以说,物理网络的网络流是从 s = \ \sum_{(s,v)\in E} f(s,v) 出发的流

邊的剩餘容量(residual capacity)是 c_f(u, v) = c(u, v) - f(u, v)。這定義了以 G_f(V, E_f) 表示的剩餘網絡(residual network),它顯示可用的容量的多少。留意就算在原網絡中由 uv 沒有邊,在剩餘網絡仍可能有由 uv 的邊。因為相反方向的流抵消,減少vu 的流等於增加uv 的流。增廣路(augmenting path)是一條路徑 (u_1, u_2, \dots, u_k),而 u_1 = su_k = tc_f(u_i, u_{i+1}) > 0,這表示沿這條路徑傳送更多流是可能的。当且仅当剩余网络\ G_f 没有增广路时处于最大流英语maximum flow

因此如下使用图 G 建立 \ G_f

  1. \ G_f = \ V 的顶点
  1. 定义如下的 \ G_f = \ E_f 的边

对每条边 \ (x,y) \in E

  1. \ f(x,y) < c(x,y),建立容量\ c_f = c(x,y) - f(x,y) 的前向边\ (x,y) \in E_f
  2. \ f(x,y) > 0,建立容量\ c_f =  f(x,y) 的后向边\ (y, x) \in E_f

这个概念用在计算流量网的最大流英语maximum flowFord–Fulkerson算法英语Ford–Fulkerson algorithm中。

有时需要对有多于一个源点的网络,于是就引入了图的超源点[1] 这包含了一个与无限容量的边连接的每个源点,以作为一个整体源点。汇点也有类似的构造称作超汇点[2]

例子[编辑]

一個顯示了流及容量的流網絡。

在右邊可以看到一個有以s標示的源點、以t標示的匯點及4個額外結點的流網絡。流及容量以f/c顯示。注意網絡怎樣保證斜對稱、容量限制及流守恆。由st的總流量為5,由此可簡單地觀察到源於s的所有向外流是5,也就是匯於t的向內流。我們知道在其它結點中沒有任何流出現或消失。

上面的流網絡的剩餘網絡,顯示了剩餘容量。

在下面你可以看到對既定的流的剩餘網絡。注意某些邊的剩餘容量是正數而原來的容量是零,如邊(d, c)。這道流不是一道最大流英语maximum flow。沿路徑(s, a, c, t)(s, a, b, d, t)(s, a, b, d, 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)在原來的網絡中並不存在,但你可以沿它傳送流,因此仍是一道正當的流。

假如這是一個真實的網絡,由ab的2單位的流及由ba的1單位的流事實上可能存在,但我們只維持流。

應用[编辑]

將一連串的水管繪畫成一個網絡。每條水管有一特定的闊度,因此只可以保持一特定的水流量。當任何水管匯合,流入匯流點的總水量必須等於流出的水量,否則我們會很快地缺水,或者我們會團積水。我們有一個作為源點的入水口,和一個作為匯點的出水口。一道流便是一條由源點到匯點而使從出水口流出的總水量一致的可能路徑。直觀地,一個網絡的總流量是水從出口流出的速率。

流可以關於在交通網絡上的人或物質,或電力分配系統上的電力。對於任何這樣的實物網絡,進入任何中途結點的流需要等於離開那結點的流。Bollobás基爾霍夫電流定律描繪這限制的特性,同時較遲的作者(即Chartrand)提及它在某些守恆方程的普遍化。

生態學中也可找到流網絡的應用:當考慮在食物網中不同組織之間養料及能量的流,流網絡便自然地產生。與這些網絡有聯繋的數學問題和那些液體流或交通流網絡中所產生的難題有很大分別。由Robert Ulanowicz及其他人發展的生態系統網絡分析領域包含使用資訊理論熱力學的概念去研究這些網絡隨時間的演變。

普遍化及專門化[编辑]

利用網絡流去找出最大流是最簡單及最普通的問題,它提供了在一指定的圖中由源點到匯點的最大可能總流量。還有很多其它問題可以利用最大流演算法去解決,假設它們可以適當地塑造成流網絡的模樣,例如二部圖匹配(Bipartite Matching)、任務分配問題(Assignment Problem)和運輸問題(Transportation Problem)。

多物網絡流問題(Multi-commodity Flow Problem)中,可以有多個源點和匯點,和各種各樣的由指定源點傳送到指定匯點的「物品(Commodities)」。例如這可能是不同的工廠生產的各種各樣的貨物經由「同一」運輸網絡運送到不同的消費者手上。

最少費用流問題(Minimum Cost Flow Problem)中,每條邊u,v都有特定費用k(u,v)。沿這條邊傳送f(u,v)的費用是f(u,v) \cdot k(u,v)。目標是要用最低的成本由源點傳送一特定數量的流到匯點。

環流問題(Circulation Problem)中,每條邊除了有上限c(u,v)外,還有下限l(u,v)。每條邊亦有一個費用。很多時,流守恆適用於環流問題中所有結點,由匯點到源點亦有一條連結。這樣便能利用l(t,s)c(t,s)支配總流量。這問題因流環繞網絡流動而得名。

有增益網絡普遍化網絡中,每條邊都有增益,一個實數(非零)使如果這條邊有一增益g而有一流量x的流在尾部流入,便有一流量gx的流從頭部流出。

参见[编辑]

参考文献[编辑]

延伸阅读[编辑]

外部链接[编辑]