跳转至

线性规划与单纯形法

知识框架

线性规划(Linear Programming, LP)是整门运筹学的地基:对偶理论、运输问题、整数规划、目标规划都建立在它之上。本页要解决三个问题:

  • 建模:把实际问题写成 LP 模型,并化为标准形
  • 直观理解:两个变量时用图解法求解,建立"可行域是凸多面体、最优解在顶点"的几何直觉
  • 通用算法:单纯形法的原理、表格操作模板,以及没有现成初始基时的大 M 法 / 两阶段法

考试中的典型考法:标准形转化(小题)、图解法 + 解的情况判断(小题)、单纯形表完整迭代(大题,几乎必考)、大 M 法或两阶段法(大题)、由单纯形表反读信息(如判断解的类型)。

线性规划模型与标准形

LP 模型的三要素

一个线性规划模型由三部分组成,且目标函数和约束都必须是线性的:

  1. 决策变量 \(x_1, x_2, \dots, x_n\):要确定的未知量;
  2. 目标函数 \(\max\)(或 \(\min\))\(z = c_1 x_1 + c_2 x_2 + \cdots + c_n x_n\);
  3. 约束条件:一组线性等式或不等式,外加变量的符号约束(\(\ge 0\)、\(\le 0\) 或自由)。

一般形式:

\[ \begin{aligned} \max(\text{或 } \min)\quad & z = \sum_{j=1}^{n} c_j x_j \\ \text{s.t.}\quad & \sum_{j=1}^{n} a_{ij} x_j \;(\le,\ =,\ \ge)\; b_i, \quad i = 1, \dots, m \\ & x_j \ge 0 \text{(或} \le 0 \text{、或自由)}, \quad j = 1, \dots, n \end{aligned} \]

标准形

定义(LP 标准形)

本整理采用最通行的约定,标准形要求同时满足:

  1. 目标函数为 极大化 \(\max z\);
  2. 约束全部为 等式;
  3. 右端常数 \(b_i \ge 0\);
  4. 所有变量 非负 \(x_j \ge 0\)。

矩阵形式:\(\max z = \boldsymbol{c}^{\mathsf T}\boldsymbol{x}\),s.t. \(\boldsymbol{A}\boldsymbol{x} = \boldsymbol{b},\ \boldsymbol{x} \ge \boldsymbol{0}\),其中 \(\boldsymbol{A}\) 为 \(m \times n\) 矩阵(\(m < n\)),\(\boldsymbol{b} \ge \boldsymbol{0}\)。

教材口径差异

有的教材以 \(\min\) 为标准形。两者只差一个符号转换,但检验数的最优性判别符号相反(见「单纯形法」一节),考试时务必按本校教材的口径答题,并在卷面上写清自己用的判别准则。

转化为标准形的方法(模板)

非标准情形 转化方法
\(\min z\) 令 \(z' = -z\),改为 \(\max z' = -\sum c_j x_j\),最后结果取反
约束为 \(\le\) 左端 加松弛变量 \(x_s \ge 0\) 化为等式
约束为 \(\ge\) 左端 减剩余变量 \(x_s \ge 0\) 化为等式
右端 \(b_i < 0\) 该约束两边乘 \(-1\)(不等号方向反转)
变量 \(x_j \le 0\) 令 \(x_j' = -x_j \ge 0\) 代换
变量 \(x_j\) 自由(无符号约束) 令 \(x_j = x_j' - x_j''\),其中 \(x_j', x_j'' \ge 0\)

松弛 / 剩余变量在目标函数中的系数均为 \(0\)。

图解法与解的几何特征

图解法步骤(仅适用于两个决策变量)

  1. 在 \(x_1 O x_2\) 平面上画出每条约束的边界直线,确定可行半平面,取交集得到可行域;
  2. 画一条目标函数等值线 \(c_1 x_1 + c_2 x_2 = z_0\),其法向量(梯度方向)\((c_1, c_2)\) 是 \(z\) 增大的方向;
  3. 将等值线沿梯度方向(求 \(\max\))平移,最后离开可行域的位置即最优解所在;
  4. 联立相应边界直线方程解出最优点坐标,代入目标函数得最优值。

解的四种情况

情况 几何特征
唯一最优解 等值线最后只触及可行域的一个顶点
无穷多最优解 等值线与可行域的某条边平行,整条边都最优
无界解(\(z \to +\infty\)) 可行域无界,且目标函数可沿可行方向无限增大
无可行解 约束相互矛盾,可行域为空集

可行域无界 ≠ 无界解

可行域无界时,最优解仍可能存在(例如求 \(\max\) 而目标函数沿无界方向是减小的)。"无界解"要求目标函数值本身可以无限增大。

几何结论

  • LP 的可行域是凸集(凸多面体);
  • 若最优解存在,则一定可以在可行域的某个顶点处取得;
  • 顶点个数有限 —— 这就是单纯形法"只在顶点间搜索"的理论依据。

基本概念:基、基解、基可行解

设标准形中 \(\boldsymbol{A}\) 为 \(m \times n\) 矩阵,秩为 \(m\)。

定义

  • 基(basis):\(\boldsymbol{A}\) 中 \(m\) 个线性无关列构成的 \(m \times m\) 可逆子矩阵 \(\boldsymbol{B}\)。对应的变量称为基变量 \(\boldsymbol{x}_B\),其余为非基变量 \(\boldsymbol{x}_N\)。
  • 基解:令非基变量全为 \(0\),由 \(\boldsymbol{B}\boldsymbol{x}_B = \boldsymbol{b}\) 解出 \(\boldsymbol{x}_B = \boldsymbol{B}^{-1}\boldsymbol{b}\),得到的解称为对应于基 \(\boldsymbol{B}\) 的基解。
  • 基可行解:满足非负条件 \(\boldsymbol{B}^{-1}\boldsymbol{b} \ge \boldsymbol{0}\) 的基解。对应的基称为可行基。
  • 退化的基可行解:某个基变量取值为 \(0\) 的基可行解。

线性规划基本定理

  1. 可行域的顶点与基可行解一一对应(退化时多个基可能对应同一顶点);
  2. 若 LP 有可行解,则必有基可行解;
  3. 若 LP 有最优解,则必有最优基可行解 —— 因此只需在有限个基可行解中搜索。

基解个数至多 \(\binom{n}{m}\) 个,基可行解是其中满足非负性的那部分。

单纯形法

基本思想

从一个基可行解(顶点)出发,每次迭代换到一个相邻且目标值不更差的基可行解,直到没有可改进方向为止。每次迭代做两件事:选一个非基变量入基、选一个基变量出基。

检验数与最优性判别

设当前基为 \(\boldsymbol{B}\),记 \(z_j = \boldsymbol{c}_B^{\mathsf T} \boldsymbol{B}^{-1} \boldsymbol{p}_j\)(\(\boldsymbol{p}_j\) 为 \(\boldsymbol{A}\) 的第 \(j\) 列),定义检验数

\[ \sigma_j = c_j - z_j = c_j - \boldsymbol{c}_B^{\mathsf T} \boldsymbol{B}^{-1} \boldsymbol{p}_j . \]

\(\sigma_j\) 的含义:非基变量 \(x_j\) 每增加一个单位,目标函数 \(z\) 的净增量。基变量的检验数恒为 \(0\)。

最优性判别定理(max 问题)

对当前基可行解:

  • 若所有检验数 \(\sigma_j \le 0\) —— 当前解最优;
  • 若所有 \(\sigma_j \le 0\),且某非基变量的 \(\sigma_k = 0\) —— 存在无穷多最优解;
  • 若存在 \(\sigma_k > 0\),且 \(x_k\) 所在列的系数 \(\boldsymbol{B}^{-1}\boldsymbol{p}_k \le \boldsymbol{0}\)(整列无正分量)—— 无界解;
  • 否则继续迭代。

若求 \(\min\) 且不转化为 \(\max\),判别符号整体反向(所有 \(\sigma_j \ge 0\) 时最优)。

单纯形表迭代步骤(模板)

设已有标准形和一个现成的初始可行基(典型情形:全部约束原为 \(\le\) 且 \(b \ge 0\),松弛变量恰好构成单位阵初始基)。

  1. 建初始表:表头一行写各变量的价值系数 \(c_j\);左侧三列依次为基变量、对应的 \(c_B\)、右端常数 \(b\);中间填约束系数矩阵;
  2. 算检验数:对每列 \(j\),\(\sigma_j = c_j - \sum_i (c_B)_i \, a_{ij}\)(即 \(c_j\) 减去"\(c_B\) 列与该列系数的内积");
  3. 判最优:所有 \(\sigma_j \le 0\) 则停止,按 1.4.2 的定理读出结论;
  4. 选入基变量:取 \(\sigma_k = \max\{\sigma_j : \sigma_j > 0\}\) 对应的 \(x_k\) 入基(最大检验数规则),\(x_k\) 所在列为主元列;
  5. 选出基变量(最小比值法):对主元列中 \(a_{ik} > 0\) 的行计算 \(\theta_i = b_i / a_{ik}\),取 \(\theta\) 最小的行,该行基变量出基;该行为主元行,交叉处 \(a_{lk}\) 为主元;
  6. 旋转运算(高斯消元):主元行整行除以主元(主元变为 \(1\));其余各行减去"该行主元列系数 × 新主元行",把主元列消成单位向量;同时更新左侧基变量与 \(c_B\) 列;
  7. 回到第 2 步。

完整数值例

\[ \begin{aligned} \max\quad & z = 2x_1 + 3x_2 \\ \text{s.t.}\quad & x_1 + 2x_2 \le 8 \\ & 4x_1 \le 16 \\ & 4x_2 \le 12 \\ & x_1, x_2 \ge 0 \end{aligned} \]

加松弛变量 \(x_3, x_4, x_5\) 化为标准形,初始基为 \((x_3, x_4, x_5)\)。

初始表(\(c_j\):\(2,\ 3,\ 0,\ 0,\ 0\)):

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(x_5\) \(\theta\)
\(x_3\) 0 8 1 2 1 0 0 \(8/2=4\)
\(x_4\) 0 16 4 0 0 1 0 —
\(x_5\) 0 12 0 [4] 0 0 1 \(12/4=3\) ←
\(\sigma_j\) 2 3 ↑ 0 0 0

\(\sigma_2 = 3\) 最大,\(x_2\) 入基;\(\theta\) 最小在第 3 行,\(x_5\) 出基,主元为 \(4\)。

第二张表:

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(x_5\) \(\theta\)
\(x_3\) 0 2 [1] 0 1 0 \(-1/2\) \(2/1=2\) ←
\(x_4\) 0 16 4 0 0 1 0 \(16/4=4\)
\(x_2\) 3 3 0 1 0 0 \(1/4\) —
\(\sigma_j\) 2 ↑ 0 0 0 \(-3/4\)

\(x_1\) 入基,\(x_3\) 出基,主元为 \(1\)。

第三张表:

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(x_5\) \(\theta\)
\(x_1\) 2 2 1 0 1 0 \(-1/2\) —
\(x_4\) 0 8 0 0 \(-4\) 1 [2] \(8/2=4\) ←
\(x_2\) 3 3 0 1 0 0 \(1/4\) \(3/(1/4)=12\)
\(\sigma_j\) 0 0 \(-2\) 0 \(1/4\) ↑

注意:\(\sigma_5 = 0 - \left[2 \times (-\tfrac12) + 0 \times 2 + 3 \times \tfrac14\right] = \tfrac14 > 0\),还没到最优——迭代过程中检验数可能"由负转正",每张表都要完整重算。\(x_5\) 入基,\(x_4\) 出基,主元为 \(2\)。

第四张表(最终表):

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(x_5\) \(\theta\)
\(x_1\) 2 4 1 0 0 \(1/4\) 0
\(x_5\) 0 4 0 0 \(-2\) \(1/2\) 1
\(x_2\) 3 2 0 1 \(1/2\) \(-1/8\) 0
\(\sigma_j\) 0 0 \(-3/2\) \(-1/8\) 0

所有 \(\sigma_j \le 0\),达到最优:

\[ x_1^* = 4,\quad x_2^* = 2,\quad z^* = 2 \times 4 + 3 \times 2 = 14 . \]

(\(x_5 = 4\) 表示第三个约束有 4 个单位的松弛量:\(4x_2 = 8 < 12\)。)

人工变量法:大 M 法与两阶段法

当约束中含 "\(\ge\)" 或 "\(=\)" 时,化标准形后没有现成的单位阵初始基,需要给缺基的约束行加人工变量 \(x_a \ge 0\) 凑出单位阵。人工变量是"硬凑"出来的,最优解中必须把它们赶到 \(0\),两种方法:

大 M 法

  1. 给每个人工变量在目标函数中赋系数 \(-M\)(求 \(\max\) 时;求 \(\min\) 则为 \(+M\)),\(M\) 是任意大的正数;
  2. 按普通单纯形法迭代,\(M\) 当作一个比任何具体数都大的符号参与检验数的比较(检验数形如 \(aM + b\),先比 \(a\) 再比 \(b\));
  3. 最优表中若人工变量已全部出基(或取值为 0),去掉人工变量即得原问题最优解。

两阶段法

  1. 第一阶段:目标函数换成 \(\min w = \sum x_a\)(所有人工变量之和),用单纯形法求解;
    • 若 \(w^* > 0\) —— 原问题无可行解,停止;
    • 若 \(w^* = 0\) —— 得到原问题的一个基可行解;
  2. 第二阶段:删去人工变量列,换回原目标函数,从第一阶段的最终基出发继续单纯形迭代。

无可行解的判别

大 M 法迭代终止时,若仍有人工变量留在基中且取值大于 0,或两阶段法第一阶段最优值 \(w^* > 0\),则原问题无可行解。

两种方法怎么选

手算考题大多用大 M 法(少建一张目标函数表);当人工变量较多、或题目明确要求时用两阶段法。两阶段法数值上更稳定(计算机实现的首选),原理上完全等价。

解的判别汇总(由单纯形表读结论)

设求 \(\max\),当前表已算出全部检验数:

表中特征 结论
所有 \(\sigma_j \le 0\),且非基变量检验数全 \(< 0\) 唯一最优解
所有 \(\sigma_j \le 0\),且某非基变量 \(\sigma_k = 0\) 无穷多最优解(让 \(x_k\) 入基可得另一最优顶点)
某 \(\sigma_k > 0\),且该列系数全 \(\le 0\)(无正分量,\(\theta\) 算不出) 无界解
迭代结束但人工变量仍在基中且 \(> 0\) 无可行解

退化与循环

最小比值出现并列时,下一张表必出现退化(某基变量为 0);退化时目标值可能连续若干次迭代不增,极端情况会循环。手算考题几乎不考循环,了解结论即可:采用 Bland 规则(入基、出基都选下标最小者)可保证不循环。

典型例题

例 1(标准形转化)

将下列 LP 化为标准形:

\[ \begin{aligned} \min\quad & z = x_1 + 2x_2 - 3x_3 \\ \text{s.t.}\quad & x_1 + x_2 + x_3 \le 9 \\ & x_1 - x_2 + x_3 \ge 2 \\ & 3x_1 + x_2 - 2x_3 = 5 \\ & x_1 \ge 0,\ x_2 \ge 0,\ x_3 \text{ 自由} \end{aligned} \]
解答

逐项处理:① \(\min \to \max\):令 \(z' = -z\);② 自由变量:令 \(x_3 = x_4 - x_5\)(\(x_4, x_5 \ge 0\));③ 第 1 个约束加松弛变量 \(x_6\);④ 第 2 个约束减剩余变量 \(x_7\)。

\[ \begin{aligned} \max\quad & z' = -x_1 - 2x_2 + 3x_4 - 3x_5 \\ \text{s.t.}\quad & x_1 + x_2 + x_4 - x_5 + x_6 = 9 \\ & x_1 - x_2 + x_4 - x_5 - x_7 = 2 \\ & 3x_1 + x_2 - 2x_4 + 2x_5 = 5 \\ & x_1, x_2, x_4, x_5, x_6, x_7 \ge 0 \end{aligned} \]

最终答案换算回去:\(\min z = -z'^*\),\(x_3^* = x_4^* - x_5^*\)。

例 2(图解法 + 解的情况)

用图解法求解,并说明解属于哪种情况:

\[ \begin{aligned} \max\quad & z = 2x_1 + 4x_2 \\ \text{s.t.}\quad & x_1 + 2x_2 \le 8 \\ & x_1 \le 4,\quad x_2 \le 3 \\ & x_1, x_2 \ge 0 \end{aligned} \]
解答

可行域是由 \(x_1 + 2x_2 = 8\)、\(x_1 = 4\)、\(x_2 = 3\) 和两坐标轴围成的凸多边形。目标函数等值线 \(2x_1 + 4x_2 = z_0\) 的法向量 \((2, 4)\) 与约束 \(x_1 + 2x_2 \le 8\) 的边界直线法向量 \((1, 2)\) 共线,因此等值线平移到最后与这条边界整段重合。

该边界上的可行段为顶点 \((2, 3)\) 到 \((4, 2)\) 之间的线段:

  • 在 \((2, 3)\):\(z = 4 + 12 = 16\);
  • 在 \((4, 2)\):\(z = 8 + 8 = 16\)。

故本题为无穷多最优解,最优解集为线段 \(\{\lambda(2,3) + (1-\lambda)(4,2) : 0 \le \lambda \le 1\}\),最优值 \(z^* = 16\)。

例 3(单纯形表完整迭代)

用单纯形法求解:

\[ \begin{aligned} \max\quad & z = 2x_1 + 3x_2 \\ \text{s.t.}\quad & x_1 + x_2 \le 4 \\ & x_1 + 2x_2 \le 6 \\ & x_1, x_2 \ge 0 \end{aligned} \]
解答

加松弛变量 \(x_3, x_4\),初始基 \((x_3, x_4)\)。

初始表(\(c_j\):\(2,\ 3,\ 0,\ 0\)):

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(\theta\)
\(x_3\) 0 4 1 1 1 0 4
\(x_4\) 0 6 1 [2] 0 1 3 ←
\(\sigma_j\) 2 3 ↑ 0 0

\(x_2\) 入基、\(x_4\) 出基:

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(\theta\)
\(x_3\) 0 1 [1/2] 0 1 \(-1/2\) 2 ←
\(x_2\) 3 3 \(1/2\) 1 0 \(1/2\) 6
\(\sigma_j\) \(1/2\) ↑ 0 0 \(-3/2\)

\(x_1\) 入基、\(x_3\) 出基:

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(\theta\)
\(x_1\) 2 2 1 0 2 \(-1\)
\(x_2\) 3 2 0 1 \(-1\) 1
\(\sigma_j\) 0 0 \(-1\) \(-1\)

所有 \(\sigma_j \le 0\) 且非基变量检验数均严格小于 0,得唯一最优解:

\[ x_1^* = 2,\quad x_2^* = 2,\quad z^* = 10 . \]

例 4(大 M 法)

用大 M 法求解:

\[ \begin{aligned} \max\quad & z = 2x_1 + x_2 \\ \text{s.t.}\quad & x_1 + x_2 = 3 \\ & x_2 \le 2 \\ & x_1, x_2 \ge 0 \end{aligned} \]
解答

第 2 个约束加松弛变量 \(x_3\);第 1 个约束是等式、没有现成基变量,加人工变量 \(x_4\),目标函数中其系数取 \(-M\):

\[ \max z = 2x_1 + x_2 + 0 x_3 - M x_4 \]

初始表(基 \((x_4, x_3)\)):

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(\theta\)
\(x_4\) \(-M\) 3 [1] 1 0 1 3 ←
\(x_3\) 0 2 0 1 1 0 —
\(\sigma_j\) \(2+M\) ↑ \(1+M\) 0 0

\(\sigma_1 = 2 + M\) 最大,\(x_1\) 入基;只有第 1 行系数为正,\(x_4\) 出基:

基 \(c_B\) \(b\) \(x_1\) \(x_2\) \(x_3\) \(x_4\) \(\theta\)
\(x_1\) 2 3 1 1 0 1
\(x_3\) 0 2 0 1 1 0
\(\sigma_j\) 0 \(-1\) 0 \(-M-2\)

所有 \(\sigma_j \le 0\),且人工变量 \(x_4\) 已出基,得最优解:

\[ x_1^* = 3,\quad x_2^* = 0,\quad z^* = 6 . \]

易错点与考点提醒

高频易错点

  1. min / max 口径:求 \(\min\) 不转化时,最优性判别是"所有 \(\sigma_j \ge 0\)",与 \(\max\) 相反;最稳妥的做法是统一先化成 \(\max\) 标准形。
  2. \(\ge\) 约束的处理:减剩余变量后还没有基变量,通常还要再加人工变量——"减剩余"和"加人工"是两步,别合并成一步。
  3. 最小比值只对正分量算:主元列中 \(a_{ik} \le 0\) 的行不参与 \(\theta\) 比值(写 "—");若整列都 \(\le 0\),结论是无界解而不是"无解"。
  4. 检验数每张表都要重算:迭代中非基变量的 \(\sigma_j\) 可能由负转正(见「完整数值例」第三张表),不能想当然认为"负过一次就一直负"。
  5. 无穷多最优解的判别对象是非基变量:基变量检验数本来就是 0,不能据此判"无穷多最优"。
  6. 人工变量 ≠ 松弛变量:松弛变量有实际意义(资源剩余量),可以留在最优基中;人工变量必须为 0,否则无可行解。
  7. 退化时 \(\theta\) 并列:任选其一即可(考试一般不深究),但下一张表会出现取值为 0 的基变量,属正常现象。
  8. 图解法答题要完整:画可行域、标顶点坐标、画等值线和梯度方向、写明最优点与最优值,缺一步都可能扣分。

速查表

主题 关键结论
标准形四要素 \(\max\)、等式约束、\(b \ge 0\)、\(x \ge 0\)
自由变量 \(x_j = x_j' - x_j''\)(两个非负变量之差)
检验数 \(\sigma_j = c_j - \boldsymbol{c}_B^{\mathsf T} \boldsymbol{B}^{-1} \boldsymbol{p}_j\);基变量恒为 0
最优判别(max) 全部 \(\sigma_j \le 0\)
入基 取 \(\sigma_j > 0\) 中最大者
出基 最小比值 \(\theta = \min\{b_i / a_{ik} : a_{ik} > 0\}\)
无穷多最优 最优表中某非基变量 \(\sigma_k = 0\)
无界解 某 \(\sigma_k > 0\) 且该列全 \(\le 0\)
无可行解 人工变量留基且 \(> 0\)(或两阶段法 \(w^* > 0\))
大 M 法 人工变量目标系数 \(-M\)(max 口径)
两阶段法 一阶段 \(\min \sum x_a\);\(w^* > 0\) 即无可行解