復雜網絡中,單源單點的最小費用最大流算法(MCMF)應用廣泛。
在實際網絡問題中,不僅考慮從 Vs 到 Vt 的流量最大,還要考慮可行流在網絡傳送過程中的費用問題,這就是網絡的最小費用最大流問題。
最小費用最大流問題的一般提法:已知容量網絡 D=(V ,A ,C),每條弧 (Vi,Vj) 除了已給出容量 Cij 外,還給出單位流量的傳輸費用 bij≥0,記作D=(V, A, C, B),其中bij ∈B。要在費用、容量網絡 D 中尋找 Vs→Vt的最大流 f={fij},且使流的總傳輸費用:
b(f)=Σbij fij 最小
從上一講可知,最大流的求法就是在容量網絡上從某個可行流出發,設法找到一條從 Vs→Vt 的增廣鏈,然后沿着此增廣鏈調整流量,作出新的流量增大了的可行流。在這個新的可行流基礎上再尋找它的增廣鏈。如此反復進行,直至再找不出增廣鏈,就得到了該網絡的最大流。
例子:給定費用、容量網絡圖(bij,cij),試求網絡的最小費用最大流。
解:
(1)、初始取0流量,此時總費用為 f(0) = 0。
(2)、由原始網絡構建費用網絡圖(費用網絡圖每條線路上的權重為bij,bij為單位流量的費用)。
(3)、通過當前費用網絡圖找到一個費用最少的路徑,即vs->v3->v2->vt。通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min{8,5,7} = 5,即流量為5,當前的最小費用為 f(1) = 5*1+5*2+5*1 = 20。下圖為流量網絡圖。
(4)、在(3)的基礎上構造新的費用網絡圖,構造方法為:當線路沒流量通過時,流量方向不變,費用為原始費用。如vs->v2;
當線路流量等於該線路的最大容量時,則流量方向改變,費用為原始費用的負數。如v3->v2變為v2->v3;
當線路流量小於該線路的最大容量時,則增加反向流量,費用為原始費用的負數。如vs->v3新增v3->vs;
(5)、在(4)中得到的費用網絡圖上,找到費用最少的路徑,即vs->v2->vt,通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min{10,7-5} = 2,得到的最小費用流的流量為7,當前的最小費用為 f(2) = 2*4+5*1+5*2+7*1 = 30。
(6)、構造可行流 f2的費用網絡圖。
(7)、在(6)中得到的費用網絡圖上,找到費用最少的路徑,即vs->v3->v4->vt,通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min{8-5,10,4} = 3,得到的最小費用流的流量為10,當前的最小費用為 f(3) = 2*4+8*1+5*2+7*1+3*3+3*2 = 42
(8)、構造可行流 f3 的費用網絡圖。
(9)、在(8)的費用網絡圖上,找到費用最少的路徑,即vs->v2->v3->v4->vt,通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min{10-2, 10-3, 4-3, 5} = 1,得到的最小費用流的流量為11,當前最小費用為 f(4) = 3*4+8*1+4*2+7*1+4*3+4*2 = 55
(10)、構造可行流 f4 的費用網絡圖。
由於無法找到從 vs->vt 的最短路,所以 f(4) 就是該網絡的最小費用最大流。