线性规划

在數學中，**線性規劃**（**Linear Programming**，簡稱 **LP**）特指目標函數和約束條件皆為線性的最佳化問題。

線性規劃是最優化問題中的一個重要領域。在作業研究中所面臨的許多實際問題都可以用線性規劃來處理，特別是某些特殊情況，例如：網路流、多商品流量等問題，都被認為非常重要。目前已有大量針對線性規劃演算法的研究。很多最佳化問題算法都可以分解為線性規劃子問題，然後逐一求解。在線性規劃的歷史發展過程中所衍伸出的諸多概念，建立了最優化理論的核心思維，例如「對偶」、「分解」、「凸集」的重要性及其一般化等。在微觀經濟學和商業管理領域中，線性規劃亦被大量應用於例如降低生產過程的成本等手段，最終提升產值與營收。對線性規劃有早期貢獻的列昂尼德・維塔利耶維奇・康托羅維奇和特亞林・科普曼斯於 1975 年共同獲得諾貝爾經濟學獎。

## 標準型

描述線性規劃問題的常用和最直觀形式是標準型。標準型包括以下三個部分：

* 一個需要極大化的線性函數，例如

　
: : $c_{1}x_{1}+c_{2}x_{2}$

* 以下形式的問題約束，例如：

　
: : $a_{11}x_{1}+a_{12}x_{2}\leq b_{1}$

　
: $a_{21}x_{1}+a_{22}x_{2}\leq b_{2}$

　
: $a_{31}x_{1}+a_{32}x_{2}\leq b_{3}$

* 和非負變數，例如：

　
: : $x_{1}\geq 0$

　
: $x_{2}\geq 0$

線性規劃問題通常可以用矩陣形式表達成：

　
: maximize $\mathbf {c} ^{T}\mathbf {x} $

　
: subject to $\mathbf {A} \mathbf {x} \leq \mathbf {b} ,\,\mathbf {x} \geq 0$

其他類型的問題，例如極小化問題，不同形式的約束問題，和有負變數的問題，都可以改寫成其等價問題的標準型。

### 例子

以下是一個線性規劃的例子。假設一個農夫有一塊 $A$ 平方千米的農地，打算種植小麥或大麥，或是兩者依某一比例混合種植。該農夫只可以使用有限數量的肥料 $F$ 和農藥 $P$ ，而單位面積的小麥和大麥都需要不同數量的肥料和農藥，小麥以 $(F_{1},P_{1})$ 表示，大麥以 $(F_{2},P_{2})$ 表示。設小麥和大麥的售出價格分別為 $S_{1}$ 和 $S_{2}$ ，則小麥與大麥的種植面積問題可以表示為以下的線性規劃問題：

## 增廣矩陣（鬆弛型）

在用單純型法求解線性規劃問題之前，必須先把線性規劃問題轉換成增廣矩陣形式。增廣矩陣形式引入非負鬆弛變數將不等式約束變成等式約束。問題就可以寫成以下形式：

　
: Maximize $Z$ in:

　
: ${\begin{bmatrix}1&-\mathbf {c} ^{T}&0\\0&\mathbf {A} &\mathbf {I} \end{bmatrix}}{\begin{bmatrix}Z\\\mathbf {x} \\\mathbf {x} _{s}\end{bmatrix}}={\begin{bmatrix}0\\\mathbf {b} \end{bmatrix}}$

　
: $\mathbf {x} ,\,\mathbf {x} _{s}\geq 0$

這裡 $\mathbf {x} _{s}$ 是新引入的鬆弛變數， $Z$ 需要極大化的變數。

### 例子

以上例子的轉換成增廣矩陣：

這裡 $x_{3},x_{4},x_{5}$ ，是（非負）鬆弛變數。

寫成矩陣形式：

　
: Maximize $Z$ in:

　
: ${\begin{bmatrix}1&-S_{1}&-S_{2}&0&0&0\\0&1&1&1&0&0\\0&F_{1}&F_{2}&0&1&0\\0&P_{1}&P_{2}&0&0&1\\\end{bmatrix}}{\begin{bmatrix}Z\\x_{1}\\x_{2}\\x_{3}\\x_{4}\\x_{5}\end{bmatrix}}={\begin{bmatrix}0\\A\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x_{1}\\x_{2}\\x_{3}\\x_{4}\\x_{5}\end{bmatrix}}\geq 0$

## 對偶

每個線性規劃問題，稱為原問題，都可以轉換為一個對偶問題。可將「原問題」表達成矩陣形式：

　
: maximize $\mathbf {c} ^{T}\mathbf {x} $

　
: subject to $\mathbf {A} \mathbf {x} \leq \mathbf {b} ,\,\mathbf {x} \geq 0$

而相應的對偶問題就可以表達成以下矩陣形式：

　
: minimize $\mathbf {y} ^{T}\mathbf {b} $

　
: subject to $\mathbf {y} ^{T}\mathbf {A} \geq \mathbf {c} ^{T},\,\mathbf {y} \geq 0$

這裡用 $y$ 來作為未知向量。

### 例子

上述線性規劃例子的對偶問題：

假如有一個種植園主缺少肥料和農藥，他希望同這個農夫談判付給農夫肥料和農藥的價格。可以構造一個數學模型來研究如何既使得農夫覺得有利可圖肯把肥料和農藥的資源賣給他，又使得自己支付的金額最少？

問題可以表述如下

假設 $y_{1},y_{2}$ 分別表示每單位肥料和農藥的價格，則所支付租金最小的目標函數可以表示為

## 理論

幾何上，線性約束條件的集合相當於一個凸包或凸集，叫做可行域。因為目標函數亦是線性的，所以其極值點會自動成為最值點。線性目標函數亦暗示其最優解只會出現在其可行域的邊界點中。

在兩種情況下線性規劃問題沒有最優解。其中一種是在約束條件相互矛盾的情況下（例如 $x\geq 2$ 和 $x\leq 1$ ），其可行域將會變成空集，問題沒有解，因此亦沒有最優解。在這種情況下，該線性規劃問題會被稱之為「不可行」。

另一種情況是，約束條件的多面體可以在目標函數的方向無界（例如： $\max z=x_{1}+3x_{2}\ s.t.\ x_{1}\geq 0,x_{2}\geq 0,x_{1}+x_{2}\geq 10$ ），目標函數可以取得任意大的數值，所以沒有最優解。

除了以上兩種病態的情況以外（問題通常都會受到資源的限制，如上面的例子），最優解永遠都能夠在多面體的頂點中取得。但最優解未必是唯一的：有可能出現一組最優解，覆蓋多面體的一條邊、一個面、甚至是整個多面體（最後一種情況會在目標函數只能等於 0 的情況下出現）。

## 演算法

單純形演算法利用多面體的頂點構造一個可能的解，然後沿著多面體的邊走到目標函數值更高的另一個頂點，直至到達最優解為止。雖然這個演算法在實際上很有效率，在小心處理可能出現的「迴圈」的情況下，可以保證找到最優解，但它的最壞情況可以很壞：可以構築一個線性規劃問題，單純形演算法需要問題大小的指數倍的運行時間才能將之解出。事實上，有一段時期內人們曾不能確定線性規劃問題是 NP 完全問題還是可以在多項式時間裏解出的問題。

第一個在最壞情況具有多項式時間複雜度的線性規劃算法在 1979 年由前蘇聯數學家列昂尼德・哈奇揚提出。這個算法建基於非線性規劃中瑙姆・Z・索爾發明的橢球法（ellip-soid method），該法又是阿爾卡迪・內米羅夫斯基（2003 年約翰・馮・諾伊曼理論獎得主）和 D. Yudin 的凸集最優化橢球法的一般化。

理論上，「橢球法」在最惡劣的情況下所需要的計算量要比「單形法」增長的緩慢，有希望用之解決超大型線性規劃問題。但在實際應用上，Khachiyan 的演算法令人失望：一般來說，單純形演算法比它更有效率。它的重要性在於鼓勵了對內點演算法的研究。內點演算法是針對單形法的「邊界趨近」觀念而改採「內部逼近」的路線，相對於只沿著可行域的邊沿進行移動的單純形演算法，內點演算法能夠在可行域內移動。

1984 年，貝爾實驗室印度裔數學家納倫德拉・卡爾瑪卡爾提出了投影尺度法（又名卡爾瑪卡爾演算法）。這是第一個在理論上和實際上都表現良好的算法：它的最壞情況僅為多項式時間，且在實際問題中它比單純形演算法有顯著的效率提升。自此之後，很多內點演算法被提出來並進行分析。一個常見的內點演算法為 Mehrotra predictor-corrector method。儘管在理論上對它所知甚少，在實際應用中它卻表現出色。

單形法沿著邊界由一個頂點移動到「相鄰」的頂點，內點演算法每一步的移動考量較周詳，「跨過可行解集合的內部」去逼近最佳解。當今的觀點是：對於線性規劃的日常應用問題而言，如果演算法的實現良好，基於單純形法和內點法的演算法之間的效率沒有太大差別，只有在超大型線性規劃中，頂點幾成天文數字，內點法有機會領先單形法。

線性規劃的求解程式在各種各樣的工業最優化問題裡被廣泛使用，例如運輸網路的流量的最優化問題，其中很多都可以不太困難地被轉換成線性規劃問題。

線性規劃理論中存在幾個尚未解決的問題，這些開放問題的答案將會是數學運算中的根本突破，並且很可能是解決大規模線性規劃問題的主要進展。

* LP 存在強多項式時間算法嗎？
* LP 存在多項式時間算法以得到一個嚴格互補解嗎？
* LP 在實數（單位成本）模型下存在多項式時間算法嗎？

這些問題已經由史蒂芬・斯梅爾在二十一世紀十八個尚未解決的最偉大的問題中應用。用斯梅爾的話來說，「第三個問題是線性規劃理論中最主要的尚未解決的問題」。然而，對於線性規劃問題存在弱多項式時間算法，比如橢球算法和內點算法，尚未發現限制在約束條件個數和變數個數的強多項式時間算法，此算法的發展將會帶來理論上重大意義，或者是解決大規模線性規劃上的實際收益。

```
   儘管赫爾希博士猜想近來被證明是錯誤的，但是它依舊留下下面的開放問題：
   * Are there pivot rules which lead to polynomial-time Simplex variants?
   * Do all polytopal graphs have polynomially-bounded diameter?
```

## 整數規劃

要求所有的未知量都為整數的線性規劃問題叫做**整數規劃**（integer programming, IP）或**整數線性規劃**（integer linear programming, ILP）問題。相對於即使在最壞情況下也能有效率地解出的線性規劃問題，整數規劃問題的最壞情況是不確定的，在某些實際情況中（有約束變數的那些）為 NP 困難問題。

**0-1 整數規劃**是整數規劃的特殊情況，所有的變數都要是 0 或 1（而非任意整數）。這類問題亦被分類為 NP 困難問題。

只要求當中某幾個未知數為整數的線性規劃問題叫做**混合整數規劃**（mixed integer programming, MIP）問題。這類問題通常亦被分類為 NP 困難問題。

存在著幾類 IP 和 MIP 的子問題，它們可以被有效率地解出，最值得注意的一類是具有完全單位模約束矩陣，和約束條件的右邊全為整數的一類。

一個解決大型整數線性規劃問題的先進演算法為 delayed column generation。

## 參見

* 單體法，一種用於線性規劃問題求解的常用方法
* 列昂尼德・坎托羅維奇（線性規劃奠基者之一）
* 影子價格
* MPS file format
* LP example, Job Shop problem

## 參考

* Alexander Schrijver: "Theory of Linear and Integer Programming". John Wiley and Sons. 1998.
* Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. _Introduction to Algorithms_, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 978-0-262-03293-3. Chapter 29: Linear Programming, pp.770–821.
* Michael R. Garey and David S. Johnson. Computers and Intractability: A Guide to the Theory of NP-Completeness. W.H. Freeman. 1979. ISBN 978-0-7167-1045-5.  A6: MP1: INTEGER PROGRAMMING, pg.245.

## 外部連結

* Guidance on Formulating LP problems （頁面存檔備份，存於網際網路檔案館）
* 0-1 Integer Programming Benchmarks with Hidden Optimum Solutions （頁面存檔備份，存於網際網路檔案館）
* COIN-OR- Open Source Library for linear programming （頁面存檔備份，存於網際網路檔案館）
* Cplex - Commercial library for linear programming
* Xpress-MP - Optimization software free to students （頁面存檔備份，存於網際網路檔案館）
* MOSEK - Optimization software for LP, QP, MIP, SOCP and more （頁面存檔備份，存於網際網路檔案館）
* A Tutorial on Integer Programming （頁面存檔備份，存於網際網路檔案館）
* The linear programming FAQ （頁面存檔備份，存於網際網路檔案館）

求解軟體包

* AIMMS—include linear programming in industry solutions (free trial license available);
* COIN-OR （頁面存檔備份，存於網際網路檔案館）—COmputational INfrastructure for Operations Research, open-source library
* Cplex—Commercial library for linear programming
* HOPDM （頁面存檔備份，存於網際網路檔案館）—Higher Order Primal Dual Method
* LINDO （頁面存檔備份，存於網際網路檔案館）—LP, IP, Global solver/modeling language
* LiPS （頁面存檔備份，存於網際網路檔案館）—Free easy-to-use program intended for solving linear, integer and goal programming problems.
* lp\_solve （頁面存檔備份，存於網際網路檔案館）
* MOSEK （頁面存檔備份，存於網際網路檔案館）—Optimization software for LP, QP, MIP, SOCP and more
* Premium Solver （頁面存檔備份，存於網際網路檔案館）—Spreadsheet add-in
* What's Best! （頁面存檔備份，存於網際網路檔案館）—Spreadsheet add-in
* Xpress-MP （頁面存檔備份，存於網際網路檔案館）—Optimization software free to students
* GIPALS （頁面存檔備份，存於網際網路檔案館）—Linear programming environment and dynamic link library (DLL)
* DecisionPro Linear Programming Optimization Software
* QSopt （頁面存檔備份，存於網際網路檔案館） Optimization software for LP (free for research purposes).
* Microarray Data Classification Server (MDCS) based on linear programming
* Linear programming and linear goal programming A freeware program for MS-DOS
* Simplex Method Tool A quick-loading web page