线性规划

线性规划（，简称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.


问题通常以矩阵形式表达，形式如下：


其他形式，例如最小化问题、包含其他形式约束条件的问题以及涉及负变量的问题，均可以重写为等价的标准型问题。

 示例 
假设一位农民有一片面积为 L 公顷的农田，可以种植小麦或大麦，或者两者的组合。农民拥有 F 千克的肥料和 P 千克的农药。每公顷小麦需要 F1 千克肥料和 P1 千克农药，而每公顷大麦需要 F2 千克肥料和 P2 千克农药。设 S1 和 S2 分别为每公顷小麦和大麦的售价。如果用 x1 和 x2 分别表示种植小麦和大麦的面积，则通过选择 x1 和 x2 的最佳值可以实现利润最大化。这个问题可以表示为以下标准型的线性规划问题：
max: （最大化收益，即小麦总销售额加大麦总销售额，收益是“目标函数”）   （总面积限制）  （肥料限制）  （农药限制）  （种植面积不能为负）

矩阵形式表示为：
 max 
 s.t. 

 增广型（松弛型） 
线性规划问题可以转换为增广型，以便使用单纯形法的通用形式求解。这种形式引入非负的松弛变量（slack variable），将约束中的不等式转化为等式。此时问题可以用以下分塊矩陣形式表示：
 max ：


其中，是新引入的松弛变量，是决策变量，是需要最大化的变量。

 示例 
上述例子可转换为以下增广型：
{|
|-
| colspan="2" | max: 
| （目标函数）
|-
| s.t.
| 
| （增广约束）
|-
|
| 
| （增广约束）
|-
|
| 
| （增广约束）
|-
|
| 
|}
其中是（非负的）松弛变量，分别表示未使用的面积、未使用的肥料量和未使用的农药量。

矩阵形式表示为：
 max ：


 对偶

每个线性规划问题，称为原问题，都可以变换为一个对偶问题。可将“原问题”表达成矩阵形式：
 max 

 s.t. 

而相应的对偶问题就可以表达成以下矩阵形式：

 min   
 s.t. 

这里用来作为未知向量。

 例子 

上述线性规划例子的对偶问题：

假如有一个种植园主缺少肥料和农药，他希望同这个农夫谈判付给农夫肥料和农药的价格。可以构造一个数学模型来研究如何既使得农夫觉得有利可图肯把肥料和农药的资源卖给他，又使得自己支付的金额最少？

问题可以表述如下

假设分别表示每单位肥料和农药的价格，则所支付租金最小的目标函数可以表示为

    (控制肥料與農藥的價格，使得农夫觉得比起拿那些肥料和農藥去種植小麥，賣給園主更有利可图)   (與上相似，但改為大麥) （不可用负数单位金額购买）

 理論 

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

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

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

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

 参见 
 单纯形法，一种用于线性规划问题求解的常用方法
 列昂尼德·坎托罗维奇（線性規劃奠基者之一）
 影子价格
 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.
  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 

求解軟件包
 —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


Category:凸最佳化
Category:几何算法
Category:P完全问题