本節內容對應 教材 Network Flows Theory, Algorithm and Application,作者:Ahuja R。K。, Magnant T。L。, Orlin J。B。, 1993。 第二章 Path, Trees and Cycles

1 圖的簡介

1。1 圖的表示

1 有向圖(directed graph) 和 無向圖(undirected graph)。圖

G=(N,A)

N

表示節點的集合,

A

表示邊的集合。

有向圖:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

N=\{1,2,3,4,5,6\}, A=\{(1,2),(1,3),(2,3),(2,4),(2,5),(3,5),(5,4),(4,5),(5,6)\}

無向圖:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

N=\{1,2,3,4,5,6\}, A=\{(1,2),(1,3),(2,3),(2,4),(2,5),(3,5),(5,4),(4,5),(5,6)\}

G=(N,A)

可以由 Node-Arc Incidence Matrix 和 Node-Node Adjacency Matrix 來表示,關於這兩個矩陣的定義詳情見:教材Page 32-33,我們這裡就不再贅述了。

1。2 圖的相關概念和性質描述

相鄰節點,度(Degree),環(Cycle),子圖(Subgraph), 路徑(Path),有向路徑(Directed Path),二部圖 (Bipartite Graph),生成樹。

無向圖的連線性(Connectivity):從節點

i

到節點

j

至少存在一條路徑,稱之為 節點

i

和節點

j

是連線的。若一個無向圖中任意兩兩節點之間都是連線的,則稱該無向圖為連線的。

有向圖的連線性(Weakly Connectivity):若將該有向圖所有的有向邊替換為無向邊所構成的無向圖是連線的。

有向圖的強連線性(Strong Connectivity):若從任意一個節點

i

可以到達任意一個節點

j

,則稱該有向圖是強連線的。

Cut: 設圖的節點集合為

N

,cut 將圖中的節點分為兩部分

S

S

並且滿足

S\cap S

S\cup S

。如下圖所示 紅色粗線將圖中節點分為了兩部分。其中

S=\{1,2,3\}

S

,圖中虛線的邊是橫跨

S

S

的邊。

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

s-t Cut: 對於兩個不同的節點

s

t

,若

s\in S

t\in S

則該cut 是 s-t cut。

1。3 圖之間的轉化

無向圖轉有向圖

無向圖轉有向圖比較容易,我們可以將無向圖的任意一條不帶方向的邊都看做是兩條有方向的邊即可,如下圖所示:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

2 網路流最佳化問題的轉化

考慮如下網路流最佳化問題:

\underset{x}{\min}\sum_{\left( i,j \right) \in A}{c_{ij}x_{ij}}

(1)

\sum_{\left\{ j:\left( i,j \right) \in A \right\}}{x_{ij}}-\sum_{\left\{ j:\left( j,i \right) \in A \right\}}{x_{ji}}=b\left( i \right) ,\ \ \forall i\in N

(2)

l_{ij}\le x_{ij}\le u_{ij},\ \ \forall \left( i,j \right) \in A

(3)

2。1 消除邊Capacity下限約束

我們要去掉約束(3)中的下限約束

l_{ij}\le x_{ij}

代數推導:

考慮約束(3),若

l_{ij}\ne0

可以考慮採用如下變數代換來消掉(3)約束中的 Lower bound 約束。對於給定的

i,j

可以令

x_{ij}^{

(1。1)

考慮約束(2)中 含有

x_{ij}

的項有:

\sum_{\left\{ i:\left( i,n \right) \in A \right\}}{x_{in}}-\sum_{\left\{ m:\left( m,i \right) \in A \right\}}{x_{mi}}=b\left( i \right)

(1。2)

\sum_{\left\{ n:\left( n,j \right) \in A \right\}}{x_{nj}}-\sum_{\left\{ m:\left( i,m \right) \in A \right\}}{x_{im}}=b\left( j \right)

(1。3)

這樣就實現了將下限約束消去的目的。式(1。2)中第一項中含有

x_{ij}

,而式(1。3)中第二項含有

x_{ij}

。我們將式(1。1)分別帶入到式(1。2)和(1。3)中,即用

x_{ij}^{

替換掉式(1。2)(1。3)中

x_{ij}

可得:

\sum_{\left\{ i:\left( i,n \right) \in A/\left( i,j \right) \right\}}{x_{in}}+x_{ij}^{

(1。4)

\sum_{\left\{ n:\left( n,j \right) \in A \right\}}{x_{nj}}-\sum_{\left\{ m:\left( i,m \right) \in A/\left( i,j \right) \right\}}{x_{im}}+x^{

(1。5)

幾何解釋:

上面是一個簡單的代數推導的結果,從幾何上直觀來解釋,如下圖所示

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

如上圖所示,事實上剛才那個代換

x_{ij}=x_{ij}^{

,可以看做先讓從節點

i

到節點

j

之間有一個固定的流量即

l_{ij}

,如上圖所示我們只需要在原來節點

i

上扣除

l_{ij}

,在節點

j

上增加

l_{ij}

即可表示出這個固定的流量

l_{ij}

。這一點從式(1。4)(1。5)中也可以觀察出來。這樣我們從代數和幾何兩方面都對這個轉化有了基本的理解。

2。2 消除邊Capacity上限制約束

我們要去掉約束(3)中的上限約束

x_{ij}\le u_{ij}

,其實消除上限約束和前面消除下限約束的思路大同小異。

代數推導:

我們可以新增一個冗餘變數

s_{ij}\geq0

,這樣我們可以將上限約束等價變換為:

x_{ij}+s_{ij}=u_{ij}

(2。1)

對於給定的

i,j

,我們將約束(2)中含有

x_{ij}

這項的等式寫出來:

\sum_{\left\{ i:\left( i,n \right) \in A \right\}}{x_{in}}-\sum_{\left\{ m:\left( m,i \right) \in A \right\}}{x_{mi}}=b\left( i \right)

(2。2)

\sum_{\left\{ n:\left( n,j \right) \in A \right\}}{x_{nj}}-\sum_{\left\{ m:\left( i,m \right) \in A \right\}}{x_{im}}=b\left( j \right)

(2。3)

式(3。2)中第一項中含有

x_{ij}

,而式(2。3)中第二項含有

x_{ij}

。我們將式(2。1)帶入到式(3。3)中,即用

u_{ij}-s_{ij}

替換掉式(2。3)中

x_{ij}

可得:

\sum_{\left\{ n:\left( n,j \right) \in A \right\}}{x_{nj}}-\sum_{\left\{ m:\left( i,m \right) \in A/\left( i,j \right) \right\}}{x_{im}}-s_{ij}=b\left( j \right) +u_{ij}

(2。4)

\sum_{\left\{ i:\left( i,n \right) \in A \right\}}{x_{in}}-\sum_{\left\{ m:\left( m,i \right) \in A \right\}}{x_{mi}}=b\left( i \right)

(2。5)

-x_{ij}-s_{ij}=-u_{ij}

(2。6)

式(2。4)是關於節點

j

的方程,式(2。5)是關於節點

i

的方程,而式(2。6)我們可以看做是對虛擬節點

k

的平衡方程。

幾何解釋:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

從上圖中可以看出

 x_{ij},s_{ij}

都沒有了上限的約束,但實際上

x_{ij}

上限的約束是透過節點

k

的平衡方程隱含體現出來的。

x_{ij}

可以無限增大,但

s_{ij}

也會隨之一起增大,最終它們兩個互相抵消之後只能有

-u_{ij}

這麼多有效的流量。

上面的過程僅僅是對2個節點

i,j

實施了去上限約束的變換,如果對圖中所有節點都採用去上限約束的變換會怎麼樣?如下圖所示:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

不難看出對所有節點都採取去上限約束的處理後,會將形成一個二部圖。這個二部圖分別由原來的節點和新增加的等效節點構成。等效節點的個數和原圖中邊的數目相等。

雖然採用去上限約束會使得問題形式變得簡單,但同時也增加了邊和節點的數目,從計算複雜度的角度來說可能並不會帶來好處。但問題形式簡化後 二部圖的形式非常有利於對問題性質的分析,這一點需要大家注意。

2。3 邊方向翻轉

將邊

x_{ij}

流量表示為

x_{ji}

的負流量達到翻轉方向邊方向的目的。

代數推導

\tilde{x}_{ij}=x_{ij}-u_{ij}

,由於

{x}_{ij}\leq u_{ij}

, 所以

\tilde{x}_{ij}

是一個小於等於0的流量。那麼進一步

x

,即用從

j

i

的流量來表示從

i

j

的負流量。

整理上面兩個表示式可以知道,我們實際上是做了這樣一個等價變換:

x

幾何解釋:

上面是一個簡單的代數推導的結果,從幾何上直觀來解釋,如下圖所示

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

如上圖所示,事實上剛才那個代換

x

可以看做先讓從節點

i

到節點

j

之間有一個固定的流量即

u_{ij}

,如上圖所示我們只需要在原來節點

i

上扣除

u_{ij}

,在節點

j

上增加

u_{ij}

即可表示出這個固定的流量

u_{ij}

。但是我們知道

{x}_{ij}\leq u_{ij}

這就導致在增加 從節點

i

到節點

j

之間固定的流量

u_{ij}

,會使得

x_{ij}\leq0

。進一步我們將

-x_{ij}

理解為

x_{ji}

2。4 節點分離

將進節點和出節點進行分離,例如對於如下圖

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

對節點c採取節點分離,如下圖所示:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

如圖所示將原圖中節點c,拆分成了兩個節點c1,c2,c1節點負責接收從其它節點進入節點c的邊,c2節點負責從節點c出去的節點。簡單來說就是拆分之後 一個專心負責入,一個專心負責出。

如果對一個圖的所有的節點都做節點分離的話,如下圖所示:

【網路流最佳化(二)】圖的等價轉化與網路流最佳化問題的等價轉化

這樣就會形成一個二部圖,原圖中每個節點拆分出的2個節點分別位於二部圖的兩個集合中。