線性規劃

線性規劃（Linear Programming，簡稱 LP）是一種數學方法，透過線性方程或不等式描述問題的約束條件和目標，以實現最佳結果（例如利潤最大化或成本最小化）。作為最最佳化的一種特例，線性規劃在許多領域都有重要應用。

更嚴謹地說，線性規劃旨在最佳化一個線性目標函式，該函式需滿足一定的線性等式和不等式約束。其解的可行域是一個凸多胞形，這一區域由若干線性不等式描述的有限半空間的交集定義。目標函式本質上是定義在這一凸多面體上的實值仿射函式。透過線性規劃演算法，可以在多胞形內找到目標函式的最大值或最小值（若解存在）。

線性規劃問題通常用標準型表達為：

其中，是待求解的變數向量，和是已知向量，是已知矩陣。需要最大化的被稱為目標函式，而約束條件和定義了目標函式最佳化範圍內的凸多面體。

線性規劃的應用覆蓋多個領域。它在數學研究中尤為常見，同時也在商業、經濟學以及某些工程問題中具有重要價值。線性規劃與特徵方程、馮・諾依曼的總體均衡模型及結構均衡模型緊密相關（詳見對偶線性規劃）。

目前，運輸、能源、電信和製造業等行業廣泛使用線性規劃模型。透過這種方法，可以高效解決規劃、路由、日程安排、任務分配和設計等各類複雜問題，為實際應用提供精確的數學支援。

歷史

線性不等式組求解問題可追溯到傅立葉的時期，他於 1827 年發表了一種求解方法， 這一方法後來被稱為。

20 世紀 30 年代末期，蘇聯數學家康託羅維奇和美國經濟學家列昂惕夫各自獨立開展了線性規劃的應用研究。康託羅維奇致力於解決生產排程問題，列昂惕夫則專注於經濟領域的應用。然而，他們的開創性成果在相當長的時期內並未受到應有的重視。

二戰期間，線性規劃迎來了重大轉機。這一數學工具在應對戰時各種複雜挑戰時展現出獨特優勢，特別是在運輸物流、任務排程和資源分配等方面。考慮到成本和資源限制等現實約束條件，線性規劃在最佳化這些環節時發揮了不可替代的作用。

正是戰時的顯著成效讓線性規劃逐漸受到廣泛關注。二戰結束後，這一方法獲得了學界普遍認可，並在運籌學、經濟學等諸多領域奠定了基礎性地位。康託羅維奇和列昂惕夫在 30 年代末期提出的理論貢獻，最終成為線性規劃在決策最佳化領域廣泛應用的重要基石。

康託羅維奇的研究成果起初在蘇聯並未得到重視。 同一時期，美籍荷蘭經濟學家庫普曼斯開始用線性規劃方法處理經典經濟問題。兩位學者後來共同獲得了 1975 年諾貝爾經濟學獎。 1941 年，希區柯克（Frank Lauren Hitchcock）將運輸問題也納入線性規劃框架，提出了一種與後來的單純形法極為相似的解法。 可惜希區柯克於 1957 年去世，而諾貝爾獎是不能追授的。

1946 年至 1947 年間，丹齊格獨立開發了通用線性規劃方法，用於解決美國空軍的規劃難題。 1947 年，他發明了單純形法，這是首個能夠高效解決大多數線性規劃問題的方法。 當丹齊格與馮・諾伊曼會面討論單純形法時，後者敏銳地發現這一理論與其正在研究的博弈論問題本質上是等價的，由此提出了對偶理論。 丹齊格在 1948 年 1 月 5 日完成的未發表報告《線性不等式定理》（A Theorem on Linear Inequalities）中對此作出了嚴格證明。 他的研究成果於 1951 年正式發表，此後在戰後各行業的日常規劃中得到廣泛應用。

丹齊格最初研究的是一個 70 人對應 70 個崗位的最優分配問題。若要窮舉所有可能的排列組合來尋找最佳方案，所需的計算量是天文數字，甚至超過了可觀測宇宙中的粒子總數。然而，將這一問題轉化為線性規劃模型並使用單純形法，卻能在很短時間內求得最優解。這得益於線性規劃理論大幅降低了需要檢驗的可行解數量。

1979 年，哈奇揚（Leonid Khachiyan）首次證明了線性規劃問題可在多項式時間內求解。 而該領域更具突破性的理論與實踐進展出現在 1984 年，當時卡馬卡（Narendra Karmarkar）提出了求解線性規劃的新型內點法。

用途

線性規劃作為一個被廣泛應用的最佳化領域，這絕非偶然。運籌學中大量的實際問題都可以轉化為線性規劃問題。 在線性規劃領域，網路流問題和多商品流問題等特殊案例因其重要性而催生了大量針對性的演算法研究。許多其他型別的最佳化演算法也往往透過解決線性規劃的子問題來實現其目標。從發展歷程來看，線性規劃孕育了最佳化理論中的諸多核心理念，包括對偶性、分解，以及凸性及其推廣的重要性等。線性規劃不僅在微觀經濟學的創立期發揮了重要作用，如今在企業管理中仍然扮演著關鍵角色，廣泛應用於規劃、生產、運輸和技術等領域。雖然現代企業面臨的管理挑戰日新月異，但在有限資源條件下實現利潤最大化和成本最小化始終是企業追求的目標。值得一提的是，谷歌也將線性規劃應用於 YouTube 影片的穩定性最佳化。

標準型

標準型是描述線性規劃問題時最常用、最直觀的形式。其由以下三個部分組成：

需要最大化的線性（或仿射）目標函式

 e.g.

問題約束條件，形式如下：

 e.g.

:

非負變數

 e.g.

:

問題通常以矩陣形式表達，形式如下：

3.1 示例

假設一位農民有一片面積為 L 公頃的農田，可以種植小麥或大麥，或者兩者的組合。農民擁有 F 千克的肥料和 P 千克的農藥。每公頃小麥需要 F1 千克肥料和 P1 千克農藥，而每公頃大麥需要 F2 千克肥料和 P2 千克農藥。設 S1 和 S2 分別為每公頃小麥和大麥的售價。如果用 x1 和 x2 分別表示種植小麥和大麥的面積，則透過選擇 x1 和 x2 的最佳值可以實現利潤最大化。這個問題可以表示為以下標準型的線性規劃問題：

矩陣形式表示為：

 max

 s.t.

增廣型（鬆弛型）

線性規劃問題可以轉換為增廣型，以便使用單純形法的通用形式求解。這種形式引入非負的鬆弛變數（slack variable），將約束中的不等式轉化為等式。此時問題可以用以下分塊矩陣形式表示：

 max ：

其中，是新引入的鬆弛變數，是決策變數，是需要最大化的變數。

4.1 示例

上述例子可轉換為以下增廣型：

其中是（非負的）鬆弛變數，分別表示未使用的面積、未使用的肥料量和未使用的農藥量。

矩陣形式表示為：

 max ：

對偶

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

 max

 s.t.

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

 min

 s.t.

這裡用來作為未知向量。

5.1 例子

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

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

問題可以表述如下

假設分別表示每單位肥料和農藥的價格，則所支付租金最小的目標函式可以表示為

理論

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

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

另一種情況是，約束條件的多面體可以在目標函式的方向無界（例如：），目標函式可以取得任意大的數值，所以沒有最優解。

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

演演算法

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

第一個在最壞情況具有多項式時間複雜度的線性規劃演算法在 1979 年由前蘇聯數學家提出。這個演算法建基於非線性規劃中發明的橢球法（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。