本文主要內容介紹線性規划問題 (Linear Programming) 及其對偶問題 (Dual Problem)。
Introduction
線性規划 (Linear Programming) 就是高中數學講的那個線性規划,不過現在是從計算機的角度來談這個問題的。
給定一個目標函數 (Objective function) ,和若干個不等式約束 (Constraints) :
求出目標函數的最大值。
常規的做法是令 \(c = x_1 + 6x_2\),然后可得 \(x_2 = \frac{1}{6}(-x_1+c)\) ,通過作圖法,找出截距 \(c\) 的最大值。
這里的可行域是一個封閉的區域,因此最優解必然存在,最優解不存在的 2 種情況是:
- 可行域是空的,比如 \(x \le 1, x \ge 2\) .
- 可行域不是封閉的,比如目標函數為 \(\max{x_1+x_2}\) ,約束條件為 $ x_1, x_2 \ge 0$ 。
但應當注意的是,即使可行域不是封閉的,最優解可能依然存在,比如目標函數為 \(\max{x_1}\),而約束條件為 \(x_1 \le 1, x_2 \ge 0\) .
Simplex
LP 問題是 NP-Hard 的,單純形法 (Simplex) 是一個解決 LP 問題的算法,將在下一篇文章詳細介紹,在這里先給出一個直觀的介紹。
從可行域的一個有效點出發,若果存在一個相鄰頂點使得目標函數具有更優值,那么令當前頂點為這個鄰居頂點,重復這個過程直到不存在這樣的更優鄰居頂點。
為什么這樣的局部測試 (Local Test) 會找到全局最優解呢?
In this way it does hill-climbing on the vertices of the polygon, walking from neighbor to neighbor so as to steadily increase profit along the way.
By simple geometry - think of the profit line passing through this vertex. Since all the vertex’s neighbors lie below the line, the rest of the feasible polygon must also lie below this line.
如果存在 3 個變量,即:
那么 Simplex 的過程實際上是在一個凸多面體的邊緣上進行 hill-climbing:
Standard and slack forms
對於一個 LP 問題的實例,我們都能把它轉換為一個標准型 (Standard Form) :
- 目標函數是 \(max\) 類型的。
- 所有變量都具有非負約束 (Nonnegativity constraints) 。
- 所有的約束條件都是 \(\le\) 類型的不等式
然后對於任意的標准型 LP 問題,我們都能轉換為 Slack Form 來解決,沒找到中文翻譯,暫且稱之為「松弛型」。
Standard form
標准型具有下列形式:
如果寫成矩陣形式:
其中,\(\textbf{c}^T\) 是一個行向量(即 \(\textbf{c}\) 是一個列向量),\(\textbf{b}\) 和 \(\textbf{x}\) 均為列向量,\(\textbf{A}\) 是一個矩陣,並且有 \(|\textbf{A}| = m \times n\)。
下面看如何任意一個 LP 問題轉換為標准型。非標准型可能存在下列情況:
- 目標函數 \(z\) 可能為 \(\text{minimize } z\) 類型。
- 可能存在 \(=, \ge\) 這樣的約束條件。
- 可能存在某些變量 \(x_i\) ,缺少了 \(x_i \ge 0\) 這樣的非負約束條件。
對於前面 2 種情況,處理方法是顯而易見的:
- 把目標函數轉換為 \(\text{maximize } -z\) .
- \(f(x) = k\) 轉換為 \(k \le f(x) \le k\) 的形式 。
- \(f(x) \ge k\) 轉換為 \(-f(x) \le -k\) 的形式。
對於最后一種情況,對於缺少非負約束的 \(x_i\) :
- 令 \(x_i = x_{i_{1}} - x_{i_2}\) ,並替換所有的 \(x_i\) .
- 添加 2 個額外的約束:\(x_{i_1}, x_{i_2} \ge 0\) .
其實這相當於坐標系的變換,以二維空間為例,令 \(x = x - k\) 相當於把可行域往右移動了 \(k(k\ge0)\) 個單位,對 \(y\) 坐標做同樣的操作,相當於把可行域向上移動,最終可使得可行域都位於第一象限,即所有變量都具有非負約束。
一個簡單的例子:
| Primal | Standard |
|---|---|
![]() |
![]() |
Slack form
對於一個標准型的 LP :
令:
即轉換為:
一個簡單的例子:
| Standard | Slack |
|---|---|
![]() |
![]() |
其中,在等號左邊的變量稱為 basic varibales 或者是 slack variables , 等號右邊的變量稱為 nonbasic variables .
Dual
對於一個標准型的 LP 問題實例:
其對偶問題為:
前者常在教材中稱為 Primal LP,后者稱為 Dual LP 。
一個簡單的例子:
在該例子當中:
而在 Dual LP 當中:\(\textbf{y} = [y_1, y_2, y_3] ^ T\) .
下面來證明關於 Dual Problem 的 3 個性質:
- Weak Duality
- Strong Duality
- Complementary Slackness
Weak Duality
我們知道最大流-最小割也是對偶問題,它們的 Weak Duality 是這樣的:
Let \(f\) be any flow and \((A, B)\) be any cut. Then \(val(f) \le cap(A, B)\) .
在 LP 問題中,同樣具有這一性質:
設 \(\textbf{x}, \textbf{y}\) 分別是標准型 Primal LP 和 Dual LP 的一個可行解,那么有 \(\textbf{c}^T \textbf{x} \le \textbf{b}^T \textbf{y}\) .
證明:
由於 \(\textbf{A}^T \textbf{y} \ge \textbf{c}\) ,那么 \(\textbf{x}^T \textbf{A}^T \textbf{y} \ge \textbf{x}^T \textbf{c} = \textbf{c}^T \textbf{x}\) (三者都是 \(1 \times 1\) 的矩陣)。
同理,\(\textbf{A} \textbf{x} \le \textbf{b}\) ,那么 $\textbf{y}^T \textbf{A} \textbf{x} \le \textbf{y}^T \textbf{b} = \textbf{b}^T \textbf{y} $ 。那么就有:
\[\textbf{c}^T \textbf{x} = \textbf{x}^T \textbf{c} \le \textbf{x}^T \textbf{A}^T \textbf{y} = \textbf{y}^T \textbf{A} \textbf{x} \le \textbf{y}^T \textbf{b} = \textbf{b}^T \textbf{y} \]
Strong Duality
LP 問題的強對偶性如下:
如果 Primal LP 存在最優解 \(\textbf{x}_0\) ,那么 Dual LP 也必然存在最優解 \(\textbf{y}_0\) ,且目標函數值 \(\textbf{c}^T \textbf{x}_0 = \textbf{b}^T \textbf{y}_0\) ,反之亦然。
通過證明 Complementary Slackness 可得。
Complementary Slackness
Complementary Slackness 描述的是:
- Primal LP 的變量與 Dual LP 的約束之間的關系。
- Dual LP 的變量與 Primal LP 的約束之間的關系。
Complementary Slackness 的數學描述,個人覺得是 Refs [4] 的描述是最好理解的(這里不建議看 Wikipedia ),而證明過程最簡潔的是 Refs [5] 。
Theorem (Complementary Slackness)
Let \(\textbf{x}\) be a feasible solution to the primal LP and \(\textbf{y}\) be a feasible solution to the dual LP. Then \(\textbf{x}\) is optimal to the primal and \(\textbf{y}\) is optimal to the dual if and only if the conditions of Complementary Slackness hold:
\[(b_i - \sum_{j=1}^{n}a_{ij}x_j)y_i = x_{n+i}y_i = 0 \text{ for } i=1,2, \dots, m \]and
\[(\sum_{i=1}^{m}a_{ji}y_i - c_j)x_j = y_{m+j}x_j = 0 \text{ for } j=1,2, \dots, n . \]Proof
- \(\textbf{x}\) and \(\textbf{y}\) are both optimal for their respective LPs
\(\iff\) (by weak duality)- \(\textbf{c}^T \textbf{x} = \textbf{b}^T \textbf{y}\)
\(\iff\) (since \(\textbf{b}^T \textbf{y}\) is \(1 \times 1\), and recall \(\textbf{c}^T \textbf{x} \le \textbf{y}^T \textbf{Ax} \le \textbf{y}^T \textbf{b}\))- \(\textbf{c}^T \textbf{x} = \textbf{y}^T \textbf{Ax}\) and \(\textbf{y}^T \textbf{Ax} = \textbf{y}^T \textbf{b}\)
\(\iff\) (Algebra)- \((\textbf{A}^T \textbf{y} - \textbf{c})^T \textbf{x} = 0\) and \(\textbf{y}^T (\textbf{Ax} - \textbf{b}) = 0\) .
\(\iff\)- The complementary slackness conditions hold.
從 LP 問題的 Slack 形式來看待這個性質:
- 如果 Primal 的第 i 個 Slack Variable 不為 0 ( i.e. \(x_{n+i} > 0\) ) ,那么 Dual 的第 i 個 Non-basic Variable 等於 0 ( i.e. \(y_i = 0\) ) .
- 如果 Dual 的第 j 個 Slack Variable 不為 0 ( i.e. \(y_{m+j} > 0\) ) ,那么 Primal 的第 j 個 Non-basic Variable 等於 0 ( i.e. \(x_j = 0\) ) .
如果把 Primal 的變量 \(x_i\) 看作是一個資源 (Resource) 的數量,那么 Dual 的變量 \(y_j\) 就是資源的價值 (Value),Complementary Slackness 揭示了一個十分簡單的經濟學原理:
- \(x_{n+i} > 0\) 表示資源數量存在冗余,那么有 \(y_i = 0\) 表示資源的冗余部分是沒有價值的。
- \(y_{m+j} > 0\) 表示資源仍然具有價值(價格不為 0 ),那么有 \(x_j = 0\) 表示該資源供應短缺。
References
- [1] DPV - Algorithm
- [2] CLRS - Introduction to Algorithm (Chapter 29)
- [3] Wikipedia - Linear Programming
- [4] https://www.math.ubc.ca/~anstee/math340/340complementaryslackness.pdf
- [5] https://www.matem.unam.mx/~omar/math340/comp-slack.html



