應用運籌學基礎:線性規划 (1) - 極點與基可行解


學校有一門課叫《應用運籌學基礎》,是計算機學院唯一教優化的課程,感覺上得還行,這里簡單記錄一下上課學到的知識。第一節課是線性規划(linear programming)。

 

凸集

對於集合 $S$,若任意兩元素 $x, y \in S$,且對於任意 $0 \le \theta \le 1$ 有 $\theta x + (1-\theta)y \in S$,那么 $S$ 是凸集(convex set,形象地想象就是凸的圖形)。

可以推廣:若 $S$ 為凸集,那么對任意 $n \ge 2$ 個元素 $x_1, x_2, \dots, x_n \in S$ 以及任意 $\sum_{i=1}^n \theta_i = 1$,都有 $\sum_{i=1}^n \theta_ix_i \in S$。

可以使用歸納法證明:

(1) 對於 $n = 2$,根據凸集的定義,結論成立。

(2) 若對於 $n = k$ 結論成立,即對任意 $x_1, x_2, \dots, x_k \in S$ 以及任意 $\sum_{i=1}^k \theta_i = 1$,有 $\sum_{i=1}^k \theta_ix_i \in S$。那么對於任意 $y_1, y_2, \dots, y_{k+1} \in S$ 以及任意 $\sum_{i=1}^{k+1} \lambda_i = 1$,有 $\sum_{i=1}^k \lambda_i = 1 - \lambda_{k+1}$,即 $\sum_{i=1}^k \lambda_i / (1 - \lambda_{k+1}) = 1$,那么 $t_{k+1} = \sum_{i=1}^k \lambda_iy_i / (1 - \lambda_{k+1}) \in S$,根據凸集的定義,自然有 $\sum_{i=1}^{k+1} \lambda_iy_i = (1 - \lambda_{k+1})t_{k+1} + \lambda_{k+1}y_{k+1} \in S$,結論成立。

凸集的交仍然是凸集,容易通過定義證明。

 

凸函數

對於定義在凸集 $S$ 上的函數 $f(x)$,若對於任意 $0 \le \theta \le 1$ 有 $f(\theta x + (1-\theta) y) \le \theta f(x) + (1-\theta) f(y)$,那么 $f(x)$ 是凸函數(convex function)。

可以推廣為延森不等式(Jensen's inequality,原來一直念琴生不等式,被老師吐槽了一通...):若 $f(x)$ 是凸函數,那么對於任意 $\sum_{i=1}^n \theta_i = 1$,有 $f(\sum_{i=1}^n \theta_ix_i) \le \sum_{i=1}^n \theta_i f(x_i)$。

若 $-f(x)$ 是凸函數,那么 $f(x)$ 是凹函數(concave function);根據定義,仿射函數(affine function)即是凸函數又是凹函數。

 

凸函數美妙的性質是:局部最優就是全局最優。利用反證法證明如下:

若 $x_1$ 與 $x_2$ 滿足 $|x_1-x_2| < \epsilon$,那么 $x_1$ 與 $x_2$ 在對方的鄰域內。假設 $\hat{x}$ 是局部最優點而不是全局最優點,設 $x^*$ 為全局最優點,那么 $f(\hat{x}) > f(x^*)$。由於 $f(x)$ 為凸函數,那么對於它們凸組合出來的一點 $x = \theta \hat{x} + (1-\theta)x^*$ 有 $f(x) \le \theta f(\hat{x}) + (1-\theta) f(x^*) < f(\hat{x})$。只要取 $\theta = 1 - \epsilon/(2|\hat{x}-x^*|)$,就有 $|x - \hat{x}| = \epsilon/2 < \epsilon$,說明 $x$ 在 $\hat{x}$ 的鄰域內,而且比它優,與我們開始的假設不相符。

 

線性規划

線性規划(linear programming,LP)問題指的是如下形式的優化問題:$$\min_{x} \quad c^Tx + d \\ \text{s.t.} \quad Ax \le b \\ Px = q$$ 簡單來說,就是目標函數和約束函數都是仿射函數的優化問題。

由於仿射函數既是凸函數又是凹函數,所以優化問題是 min 還是 max 問題不大;由於常數 $d$ 對優化問題的解沒有影響,一般也可以去掉。課堂上討論的 LP 問題是如下形式的問題 $$\max_{x} \quad c^Tx \\ \text{s.t.} \quad Ax \le b \\ Px = q \\ x \ge 0$$ 其實,$Ax \le b$ 這個約束,可以通過給每個不等式增加一個松弛變量進行松弛:對於 $a_1x_1 + a_2x_2 + \dots + a_nx_n \le b$ 這個約束,我們添加 $x_{n+1}$,把問題變為$a_1x_1 + a_2x_2 + \dots + a_nx_n + x_{n+1} = b$。注意到原來的約束取的是小等於號,所以 $x_{n+1} \ge 0$ 這個條件是滿足的。

這樣,我們就把 LP 問題特化為 $$\max_{x} \quad c^Tx \\ \text{s.t.} \quad Ax = b \\ x \ge 0$$

 

為了發掘 LP 問題的一些性質,我們進行一些定義。

極點(extreme point):設 $S$ 為凸集,若 $x \in S$ 無法表示為其它兩個 $S$ 內元素的凸組合,那么 $x$ 是極點。

LP 問題的可行域實際上是很多超平面的交,最后組成的應該是一個超多面體。在這個超多面體有界的情況下,極點就是這些超多面體的頂點。對於 LP 問題而言,在超多面體有界的情況下,最優解一定可以在極點取到,且極點的數量是有限的(不過不知道怎么證明- -但是感性地想一想好像還是很有道理的,和函數的極值什么的有點像...)

基可行解(basic feasible solution):我們討論 $Ax = b$ 有解且行滿秩的情況(如果 $Ax = b$ 沒有解那這個問題也沒得做了,如果行不滿秩,那么我們去掉線性相關的限制條件即可)。設 $A$ 是一個 $m \times n$ 的矩陣,根據線性代數的知識,我們可以從 $A$ 中選出最多 $m$ 列線性無關的列向量,其它列向量都和它們線性相關。我們把這 $m$ 個列向量調整到前面去,把 $A$ 分成兩部分:$A = \begin{bmatrix} A_B & A_N \end{bmatrix}$,其中 $A_B$ 就是那 $m$ 個線性無關的列向量。我們容易構造出 $Ax = b$ 的一個解:$$x = \begin{bmatrix} A_B^{-1}b \\ 0 \end{bmatrix}$$ 稱這種解為基可行解。顯然,基可行解至多有 $C_n^m$ 種。

 

接下來我們要證明一個厲害的定理:每個極點都對應着一個基可行解,且每個基可行解都對應着一個極點。有了這個定理,再結合可行域有解情況下最優解一定可以在極點取到,我們只要枚舉基可行解,就能找到最優解了(至於如何優雅地枚舉下節課再說- -)。

首先證明一個引理:若 $x = \begin{bmatrix} x_1 & x_2 & \dots & x_k & 0 & 0 & \dots \end{bmatrix}$ 不是基可行解,那么 $x$ 中非 0 元素對應的 $A$ 中的 $k$ 列是線性相關的。如果 $k > m$ 顯然這 $k$ 列線性相關;如果 $k \le m$ 但這 $k$ 列線性無關,那么我們就可以把這 $k$ 列當作 $A_B$(如果 $k < m$ 就再選幾個線性無關的列,湊成 $m$ 個),$x$ 就成為了一個基可行解。所以這 $k$ 列一定是線性相關的。

首先我們用反證法證明:若 $x$ 為極點,那么 $x$ 也是基可行解。假設 $x$ 並不是基可行解,我們把 $x$ 里的非 0 元素(假設有 $k$ 個)都調整到前面去(相應地,也要把 $A$ 中這 $k$ 個非 0 元素對應的列調到前面去),那么我們可以把 $x$ 寫為 $x = \begin{bmatrix} x_1 & x_2 & \dots & x_k & 0 & 0 & \dots \end{bmatrix}$。根據引理,$A$ 中對應的 $k$ 列是線性相關的。

記線性相關的 $k$ 列為 $p_1, p_2, \dots, p_k$,我們就有不全為 0 的 $\lambda_i$,使得 $\sum_{i=1}^k \lambda_i p_i = 0$。記輔助向量 $v = \begin{bmatrix} \lambda_1 & \lambda_2 & \dots & \lambda_k & 0 & 0 & \dots \end{bmatrix}^T$,令 $x' = x + \epsilon v$,$x'' = x - \epsilon v$,顯然我們有 $x = (x' + x'') / 2$。由於 $x_1$ 至 $x_k$ 均大於 0,當 $\epsilon$ 充分小時,$x' \ne x''$,且 $x' \ge 0$ 和 $x'' \ge 0$ 的性質也能得到保證。另外,$Ax' = A(x + \epsilon v) = Ax = b$,$Ax'' = A(x - \epsilon v) = Ax = b$,說明 $x'$ 與 $x''$ 都是可行解。這就是說,$x$ 可以表示為可行域內其它兩點的凸組合,與 $x$ 是極點的假設矛盾,反證法結束。

我們繼續用反證法證明:若 $x$ 為基可行解,那么 $x$ 為極點。假設 $x$ 不是極點,那么有 $x = (x' + x'') / 2$,而且 $x' \ne x''$,以及 $x' \ge 0$ 與 $x'' \ge 0$。設 $x_i = 0$,注意到 $x'$ 與 $x''$ 元素非負,那么 $x'_i = x''_i = 0$。設 $x$ 中有 $k$ 個非 0 元素,根據基可行解的定義,這些元素所對應的 $A$ 的列向量是線性無關的,那么想從這些列向量得到 $b$,線性組合的方式也是唯一的。這就說明了 $x = x' = x''$,則 $x$ 是極點,反證法結束。

 

這次課上還遇到了一個有趣的轉換。給定 $m \times n$ 的矩陣 $A$ 和 $m$ 維向量 $b$,考慮以下優化問題:$$\max_{x} \min_{j} \quad \sum_{i=1}^m b_ix_i - \sum_{i=1}^m a_{i,j}x_i \\ \text{s.t.} \quad x \le q \\ x \ge 0$$ 這個問題第一眼看上去並不像一個線性規划,因為這是一個 max 再套 min 的問題。我們把它改寫一下:$$\max_{x} \quad \sum_{i=1}^m b_ix_i - (\max_{j} \quad \sum_{i=1}^m a_{i,j}x_i) \\ \text{s.t.} \quad x \le q \\ x \ge 0$$ 注意到第二個 max 針對的變量 $j$ 的取值是有限的(只有 1 到 $n$),我們就可以把它提出來,變成下面的問題:$$\max_{x,y} \quad \sum_{i=1}^m b_ix_i - y \\ \text{s.t.} \quad x \le q \\ x \ge 0 \\ y \ge \sum_{i=1}^m a_{i,j}x_i \quad \forall j = 1, 2, \dots, n$$ 一下子就變成了線性規划問題,感覺這個操作非常厲害...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM