单纯形法:从思想到实施
东南大学 数学学院 《最优化方法》 第 2 章 线性规划 新授课 90 分钟
主讲:关秀翠 · 基于 2.5「单纯形方法的思想」+ 2.6「单纯形法的实施」两份课件整理 ·
所有数值经 numpy.linalg.inv(B) @ A 严格验算
支撑毕业要求指标点:1-2 数学基本概念 · 2-1 识别与提炼 · 2-2 建立数学模型 · 3-1 理解约束条件 · 4-1 工程与社会
课程目标
学完这 90 分钟,你应该能——
- 理解单纯形法的几何(顶点↔bfs)与代数(基变换)双重原理
- 执行单纯形表的手算:初始化→选入基→选主元→行变换→判别最优
- 编程用 numpy 实现完整单纯形法(拓展任务)
- 诊断退化、无界、循环等病态情形(错误诊断卡片)
- 衔接从单纯形法的「离散」到梯度下降的「连续」(末页过渡)
前测 · 5 题(先修链)
确保你的基础能跟上 90 分钟。错题点开看提示。
Q1. 给定 A = [[1,2],[3,4]],对 A 做一次初等行变换 R2 → R2 - 3R1,新矩阵是?
答:
[[1,2],[0,-2]]Q2. LP 的标准型要求:目标函数为 min(或 max)形式、约束为______式、变量满足______。
答:
等式约束(=)、非负约束(x ≥ 0)Q3. 已知 LP 约束 x1 + 2x2 ≤ 6,引入松弛变量 x3 后化为 x1 + 2x2 + x3 = 6,要求 x3 满足?
答:
x3 ≥ 0(松弛变量也是非负的)Q4. LP 的基可行解(bfs)一定对应约束区域的______。
答:
顶点(vertex)。这是单纯形法的几何基础。Q5. 设 LP 有 m 个等式约束、n 个变量(n > m),基可行解的基变量数 = ______,非基变量数 = ______。
答:
m 个基变量、n−m 个非基变量① 思想(25 分钟)
对应原课件 2.5「单纯形方法的思想」。从几何直观到代数机制。
A.1 · 顶点 ↔ 基可行解(bfs)
ABT 导入:
[And] 你已会 LP 图解法——画等值线,找最优点。
[But] 三维以上画不出来,n=100 维更没戏。
[Therefore] 要把「图」翻译成「代数」——顶点 ↔ 基可行解(bfs)。
1. 关键事实
- LP 的最优解一定在顶点(polytope 的顶点)取得。
- 顶点 ↔ 基可行解(bfs) 一一对应。
- 算法思路:从一个 bfs 移动到另一个 bfs,直到找到最优。
2. 一个三维例子(PPT slide 5-9)
考虑 LP:
$$\min \; c^T x, \quad x \in \mathbb{R}^3, \quad \text{subject to } Ax \le b, \ x \ge 0$$
约束定义的多面体有顶点:
(0,0,0), (0,0,3), (1,0,3), (2,0,2), (2,0,0), (2,2,0), (0,2,0), (0,1,3)
互动 I-1:拖动 θ,看"下一个顶点"
从 x0 = (0,0,3) 出发,向某方向 θ 移动,找第一个撞墙的顶点。
当 θ = 0.5 时,下一个顶点是 (1, 0, 3);当 θ = 1.0 时,是 (2, 0, 2) 还是 (2, 0, 0) 取决于方向——这就是单纯形法要解决的"选哪个邻居"。
3. 为什么是 bfs?
每个 bfs 对应一个基(m 个基变量),换基 = 移动到相邻 bfs。这给了我们"从代数角度"枚举所有 bfs 的方法。
A.2 · 从 bfs 到 bfs 的移动机制
核心问题:当前 bfs 由基 B 决定。下一步:选哪个 Aj 入基?选哪个 AB(i) 出基?θ 取多少?
1. 移动公式(PPT slide 11-12)
从 x0 出发,沿 Aj 方向走 θ 步:
$$x^1 = x^0 + \theta A_j$$
新基变量值 = 原基变量值 - θ × 入基列在基中的展开(Aj = B·y,y 是 B−1Aj):
$$x^1_{B(i)} = x^0_{B(i)} - \theta \cdot \bar{a}_{ij}, \quad i = 1,\dots,m$$
这里 aij = B−1Aj 的第 i 个分量。
2. 最小比值规则(Min-Ratio Rule)
为保持 x¹B(i) ≥ 0,对所有 aij > 0 的行取最小比值:
xB(i) 出基几何意义:θ 最小的那行 = 第一个撞墙的约束 = 出基变量。这条规则保证了 bfs 仍可行(所有变量非负)。
3. 退化(Degenerate)
当某个 x0B(i) = 0 时,最小比值 = 0,θ = 0。换基不改变 bfs 位置(但换基),可能导致循环。这在课件里只是提醒,后续大 M/两阶段法会重新遇到。
A.3 · 初等行变换 = 基变换的代数实现
思想:在 bfs 之间移动 = 换基 = 对 A 做行变换(保持 Ax=b 等价)。
关键洞察(PPT slide 18-21):把 LP 写成单纯形表(simplex tableau),行变换就是高斯消元。
一个具体例子(PPT 2.5 slide 18 / 2.6 slide 17-22)
考虑 LP(5 变量,3 约束):
min x₁+x₂+x₃+x₄+x₅
s.t. 3x₁+2x₂+x₃ = 1
5x₁+x₂+x₃+x₄ = 3
2x₁+5x₂+x₃+x₅ = 4
x₁,x₂,x₃,x₄,x₅ ≥ 0
初始化:行变换 R₂ → R₂ − R₁,R₃ → R₃ − R₁
x₃ 在三行中的系数都是 1,不是单位列。做两次行变换,让 x₃ 只在 R₁ 出现:
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₃ | 3 | 2 | 1 | 0 | 0 | 1 |
| x₄ | 2 | −1 | 0 | 1 | 0 | 2 |
| x₅ | −1 | 3 | 0 | 0 | 1 | 3 |
| rc | −3 | −3 | 0 | 0 | 0 | −6 |
互动 I-3:R₂ → R₂ − R₁ 与 R₃ → R₃ − R₁ 的效果
点击下方按钮,看两行的变化:
验算(与原 PPT slide 19 逐位核对一致):行变换后初始基 [x₃,x₄,x₅] 对应 B = I,c_B = (1,1,1),故 z₁ = 3+2+(−1) = 4、z₂ = 2+(−1)+3 = 4,检验数 = [1−4, 1−4, 0, 0, 0] = [−3, −3, 0, 0, 0],RHS 列 −z = −6(x_B = (1,2,3),z = 6)。
A.4 · 检验数 zj 与最优性准则
1. 成本变化(PPT slide 22-24)
把 Aj 引入基,bfs 位置从 x0 变到 x¹ = x0 + θAj,成本变化为:
$$\Delta z = c_j - c_B^T \bar{A}_j = c_j - z_j$$
其中 zj = cBT B−1 Aj 称为 Aj 的检验数。
2. 最优性判别
定理:对于最小化问题,若所有非基变量的 cj − zj ≥ 0,则当前 bfs 是 LP 的最优解。
(证明:任何换基只能增成本,θ ≥ 0 时 Δz = θ(cj − zj) ≥ 0。)
互动 I-2:拖动 cj 滑块,看检验数实时变化
当前基 [x₃,x₄,x₅],B = I,c_B = (1,1,1)。
当前 x_B = (1, 2, 3),z = 6,-z = -6。
检验数 cj − zj:[−3, −3, 0, 0, 0]
最负检验数(最该入基的)会用红色高亮。
② 实施(35 分钟)
对应原课件 2.6「单纯形法的实施」。把思想变成可执行的算法步骤。
B.1 · 单纯形表(Simplex Tableau)的结构
1. 完整结构(PPT slide 3-4)
单纯形表 = 一张 m+1 行 × n+2 列的矩阵:
| 基 | x₁ | x₂ | … | xn−m | xn−m+1 | … | xn | b |
|---|---|---|---|---|---|---|---|---|
| xB(1) | a₁₁ | a₁₂ | … | a1,n−m | 1 | … | 0 | b₁ |
| xB(2) | a₂₁ | a₂₂ | … | a2,n−m | 0 | 1 | 0 | b₂ |
| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | |
| xB(m) | am1 | am2 | … | am,n−m | 0 | … | 1 | bm |
| zj | z₁ | z₂ | … | zn−m | 0 | … | 0 | z |
2. 关键元素
- B−1A 的非基列:
aij = B−1Aj,i 行 j 列 - B−1b:当前 bfs,
x_B = B−1b - 检验数行:
zj = cBTB−1Aj,等价于相对成本cj − zj - RHS:本课件用
−z = −cBTB−1b写入 RHS 列
几何 → 代数:每张表 = 当前 bfs 位置 + 邻接 bfs 信息(aij)+ 沿哪个方向走会降多少成本(zj)。
B.2 · 初始化:从 LP 到初始 bfs
1. 目标:找到一个 bfs 作为起点
关键:A 中要有 m 个线性无关的单位列向量,这些列对应的变量就是初始基。
2. 两种情形
- 情形 1:A 中已经有 m 个单位列 → 直接取这 m 个变量为基,
x_B = b(要求b ≥ 0)。 - 情形 2:A 中没有 m 个单位列 → 需要引入人工变量(大 M 法 / 两阶段法),本课件不展开。
3. 本课件例子的初始化
LP:
min x₁+x₂+x₃+x₄+x₅
s.t. 3x₁+2x₂+x₃ = 1 (R₁)
5x₁+x₂+x₃+x₄ = 3 (R₂)
2x₁+5x₂+x₃+x₅ = 4 (R₃)
观察:x₄ 在 R₂ 系数 1、x₅ 在 R₃ 系数 1 → x₄, x₅ 是天然基变量。但 x₃ 在 R₁、R₂、R₃ 三行都出现(系数都是 1),不是单位列。
互动 I-3(续):R₂ → R₂ − R₁,R₃ → R₃ − R₁,让 x₃ 成为 R₁ 独占
| x₁ | x₂ | x₃ | x₄ | x₅ | b | |
|---|---|---|---|---|---|---|
| R₁ | 3 | 2 | 1 | 0 | 0 | 1 |
| R₂ − R₁ | 2 | −1 | 0 | 1 | 0 | 2 |
| R₃ − R₁ | −1 | 3 | 0 | 0 | 1 | 3 |
✅ 初始基 = [x₃, x₄, x₅],B = I,x_B = (1, 2, 3),z = 6(与原 PPT slide 18 的标注 R₂−R₁、R₃−R₁ 一致)。
B.3 · 选入基列:最负检验数(min 问题)
规则:选 cj − zj 最负的列入基(即成本下降最快的方向)。
原理
沿 Aj 走一步 θ = 1,成本变化 = θ(cj − zj) = cj − zj。最负 = 下降最多。
本例(基 [x₃,x₄,x₅])
检验数 = [−3, −3, 0, 0, 0]。x₁ 与 x₂ 并列最负(都是 −3),任选其一都能降成本: PPT 2.5 slide 20-21 以 x₁ 入基做演示,PPT 2.6 slide 20-21 选 x₂。两条路径殊途同归(最优表相同)。本课件主路径选 x₂(与 2.6 一致,一次迭代到最优)。
互动 I-4:自动高亮最负检验数列
| x₁ | x₂ | x₃ | x₄ | x₅ | −z |
|---|---|---|---|---|---|
| −3 | −3 | 0 | 0 | 0 | −6 |
← x₁、x₂ 两列并列最负,同时被高亮。点击「下一步」看主元怎么选。
为什么「最负」不是「最大」?
对于最小化问题,成本要降。负的 cj − zj 意味着沿 Aj 走能降成本。最负 = 降最多。
对于最大化问题,cj − zj 改写为 zj − cj,选最大正的列(成本增加方向)。这是单纯形法最常被搞混的符号约定。
B.4 · 选主元:最小比值规则
规则:对入基列 a·j,对所有 aij > 0 的行计算比值 bi / aij,取最小所在行 = 出基行 = 主元位置。
本例(x₂ 入基,主路径)
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b | 比值 b/a |
|---|---|---|---|---|---|---|---|
| x₃ | 3 | 2 | 1 | 0 | 0 | 1 | 1/2 = 0.5 |
| x₄ | 2 | −1 | 0 | 1 | 0 | 2 | 跳过(−1 < 0) |
| x₅ | −1 | 3 | 0 | 0 | 1 | 3 | 3/3 = 1.0 |
最小比值 = 1/2,位于 R₁ → x₃ 出基,主元 = 2。
(对照:PPT 2.5 演示的 x₁ 路径,比值 1/3、2/2、R₃ 跳过(x₁ 系数 −1),主元 3,同样 x₃ 出基。)
互动 I-5:看"撞墙先后顺序"
最小 0.5 → 行 1 (x₃) 撞墙最先 → x₃ 出基 → 主元 = 2
📌 无界判别:如果入基列所有元素都 ≤ 0,则没有合法的 θ,LP 无界(unbounded)。这是单纯形法的"终止"分支之一。
B.5 · Clear Pivot Column:行变换
1. 目标:让主元列变成单位向量
R_pivot:除以主元 a_pp,让主元位置变成 1R_i:减去 主元行 × aij,让主元列其他元素归零c_B 重新计算 zj = cBT aj 与 RHS 列 −z2. 本例(主元 2 在 R₁,x₂ 入基)
3. 迭代 1 末表(基 [x₂,x₄,x₅])
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₂ | 3/2 | 1 | 1/2 | 0 | 0 | 1/2 |
| x₄ | 7/2 | 0 | 1/2 | 1 | 0 | 5/2 |
| x₅ | −11/2 | 0 | −3/2 | 0 | 1 | 3/2 |
| rc | 3/2 | 0 | 3/2 | 0 | 0 | −9/2 |
x_B = (1/2, 5/2, 3/2),z = 9/2 = 4.5。检验数全部 ≥ 0 → 已是最优(本例走 x₂ 路径一次迭代到最优)。
对照:PPT 2.5 演示的 x₁ 路径(中间表)
若迭代 1 选 x₁ 入基(主元 3 在 R₁):R₁' = R₁/3 = (1, 2/3, 1/3, 0, 0 | 1/3),R₂' = R₂ − 2R₁' = (0, −7/3, −2/3, 1, 0 | 4/3),R₃' = R₃ + R₁' = (0, 11/3, 1/3, 0, 1 | 10/3)。得中间表(基 [x₁,x₄,x₅],x_B = (1/3, 4/3, 10/3),z = 5,检验数 = [0, −1, 1, 0, 0]):x₂ 仍最负 → x₂ 继续入基(比值 1/2 vs 10/11,主元 2/3),第二步到达与上表完全相同的最终表。殊途同归:最优表由最优基唯一决定。
互动 I-6:逐步行变换(前/后切换)
B.6 · 成本变化:从 bfs0 到 bfs¹
1. 几何与代数双视角
- 几何:多面体上从一个顶点走到相邻顶点。本例走 x₂ 路径(2.6 主路径),z 从 6 一步降到 9/2 = 4.5(最优);走 x₁ 路径(2.5 演示),z 依次 6 → 5 → 9/2。
- 代数:每次迭代
Δz = θ × (cj − zj) = (1/2) × (−3) = −3/2(x₂ 入基),z: 6 → 9/2。
2. 终止判别
两种终止:
- 最优:所有
cj − zj ≥ 0,无列可入基增降成本。读出当前 bfs 即为最优。 - 无界:某入基列
a·j ≤ 0,找不到合法的 θ。LP 无下界(min)或无上界(max)。
③ 实例 + 练习(30 分钟)
把前面学的思想 + 实施步骤完整走一遍,然后你自己动手做两道。
C.1 · 完整实例:从初始表到最优解
回顾本节课贯穿始终的 LP(5 个变量、3 个约束):
min x₁+x₂+x₃+x₄+x₅
s.t. 3x₁+2x₂+x₃ = 1 (R₁)
5x₁+x₂+x₃+x₄ = 3 (R₂)
2x₁+5x₂+x₃+x₅ = 4 (R₃)
x₁,x₂,x₃,x₄,x₅ ≥ 0
迭代 0 · 初始表(基 [x₃, x₄, x₅])
初始化:R₂ ← R₂ − R₁,R₃ ← R₃ − R₁,让 x₃ 只在 R₁ 出现,凑出单位基 I。
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₃ | 3 | 2 | 1 | 0 | 0 | 1 |
| x₄ | 2 | −1 | 0 | 1 | 0 | 2 |
| x₅ | −1 | 3 | 0 | 0 | 1 | 3 |
| rc | −3 | −3 | 0 | 0 | 0 | −6 |
x_B = (1, 2, 3),z = 6。检验数 = [−3, −3, 0, 0, 0],有负数 → 未最优。x₁ 与 x₂ 并列最负。
验算(与原 PPT 2.6 slide 19 逐位核对一致):初始基 B = I,c_B = (1,1,1),z₁ = 3+2+(−1) = 4、z₂ = 2+(−1)+3 = 4,检验数 = [−3, −3, 0, 0, 0],RHS 列 −z = −6。
两条演示路径:PPT 2.5 slide 20-21 选 x₁ 入基(两次迭代到最优),PPT 2.6 slide 20-21 选 x₂ 入基(一次迭代到最优)。两条路径殊途同归。下面按 2.6 的 x₂ 主路径走一遍。
迭代 1 · x₂ 入基,x₃ 出基(主元 = 2)
x₁、x₂ 并列最负(−3),按 PPT 2.6 选 x₂ 入基。x₂ 列 = (2, −1, 3),正元素在 R₁、R₃。比值:1/2 = 0.5,3/3 = 1(R₂ 系数 −1 < 0 跳过)。最小 = 1/2 → 主元在 R₁。
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₂ | 3/2 | 1 | 1/2 | 0 | 0 | 1/2 |
| x₄ | 7/2 | 0 | 1/2 | 1 | 0 | 5/2 |
| x₅ | −11/2 | 0 | −3/2 | 0 | 1 | 3/2 |
| rc | 3/2 | 0 | 3/2 | 0 | 0 | −9/2 |
检验数 = [3/2, 0, 3/2, 0, 0] 全部 ≥ 0 → 最优。x_B = (1/2, 5/2, 3/2),z = 9/2 = 4.5。z 从 6 一步降到 9/2(Δz = (1/2)×(−3) = −3/2)。
验算(与原 PPT 2.6 slide 21 逐位核对一致):x₃ 列 = (1/2, 1/2, −3/2),检验数 = [1.5, 0, 1.5, 0, 0],RHS 列 −z = −4.5。
备选路径:x₁ 先入基(PPT 2.5 slide 20-21 的演示)
若迭代 1 选 x₁ 入基:x₁ 列 = (3, 2, −1),正元素 R₁、R₂,比值 1/3、2/2 = 1,最小 1/3 → 主元 3 在 R₁,x₃ 出基。R₁' = R₁/3 = (1, 2/3, 1/3, 0, 0 | 1/3),R₂' = R₂ − 2R₁' = (0, −7/3, −2/3, 1, 0 | 4/3),R₃' = R₃ + R₁' = (0, 11/3, 1/3, 0, 1 | 10/3)。中间表(基 [x₁,x₄,x₅]):x_B = (1/3, 4/3, 10/3),z = 5,检验数 = [0, −1, 1, 0, 0],x₂ 仍最负 → x₂ 入基(比值 (1/3)/(2/3) = 1/2 vs (10/3)/(11/3) = 10/11,主元 2/3 在 R₁),第二步到达与上面完全相同的最终表。殊途同归:最优表由最优基唯一决定。
最优解与验证
x* = (x₁, x₂, x₃, x₄, x₅) = (0, 1/2, 0, 5/2, 3/2), z* = 9/2
把 x* 代回三个约束检验:
- R₁:3·0 + 2·(1/2) + 0 = 1 ✓
- R₂:5·0 + 1·(1/2) + 0 + 5/2 = 3 ✓
- R₃:2·0 + 5·(1/2) + 0 + 0 + 3/2 = 4 ✓
三行全部成立,且非基变量 x₁=x₃=0,基变量非负 → 确实是一个可行基解,且检验数全非负,故为最优解。
C.2 · 自练 1:从建模到最优(生产计划)
某厂用三台设备加工两种产品 A、B。生产 1 件 A 需设备 I 1 小时、设备 II 4 小时;生产 1 件 B 需设备 I 2 小时、设备 III 4 小时。设备 I、II、III 每天可用工时分别为 8、16、12 小时。A、B 每件利润分别为 2、3 千元。求最优生产计划。
第 1 步 · 建模
设 x₁、x₂ 为 A、B 的产量:
max z = 2x₁ + 3x₂
s.t. x₁ + 2x₂ ≤ 8 (设备 I)
4x₁ ≤ 16 (设备 II)
4x₂ ≤ 12 (设备 III)
x₁, x₂ ≥ 0
转成 min 标准型(加松弛变量 x₃、x₄、x₅,与例题一致):
min z = −2x₁ − 3x₂
s.t. x₁ + 2x₂ + x₃ = 8
4x₁ + x₄ = 16
4x₂ + x₅ = 12
x₁,…,x₅ ≥ 0
松弛变量 x₃、x₄、x₅ 天然构成单位基。
第 2 步 · 初始表
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₃ | 1 | 2 | 1 | 0 | 0 | 8 |
| x₄ | 4 | 0 | 0 | 1 | 0 | 16 |
| x₅ | 0 | 4 | 0 | 0 | 1 | 12 |
| rc | −2 | −3 | 0 | 0 | 0 | 0 |
互动 I-8:你来选入基变量(min 问题)
检验数 = [−2, −3, 0, 0, 0],哪个变量入基?
第 3 步 · 选主元(x₂ 入基后)
x₂ 列 = (2, 0, 4),正元素在 R₁、R₃。比值:R₁ 8/2 = 4,R₃ 12/4 = 3。最小 = 3 → 主元在 R₃(x₅ 出基)。
展开完整答案(3 次迭代到最优)
注意:RHS 列存的是 −z。本题是 min 问题、z 为负,故 −z 为正。
迭代 1(x₂ 入基,主元 4 在 R₃):
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₃ | 1 | 0 | 1 | 0 | −1/2 | 2 |
| x₄ | 4 | 0 | 0 | 1 | 0 | 16 |
| x₂ | 0 | 1 | 0 | 0 | 1/4 | 3 |
| rc | −2 | 0 | 0 | 0 | 3/4 | 9 |
x_B = (2, 16, 3),z = −9。仍有负检验数 −2 → x₁ 入基。
迭代 2(x₁ 入基,主元 1 在 R₁):
x₁ 列 = (1, 4, 0),正元素 R₁、R₂。比值 2/1 = 2,16/4 = 4 → 主元 R₁(x₃ 出基)。
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₁ | 1 | 0 | 1 | 0 | −1/2 | 2 |
| x₄ | 0 | 0 | −4 | 1 | 2 | 8 |
| x₂ | 0 | 1 | 0 | 0 | 1/4 | 3 |
| rc | 0 | 0 | 2 | 0 | −1/4 | 13 |
x_B = (2, 8, 3),z = −13。注意:x₅ 列检验数变成 −1/4 仍为负 → 还没最优,需第三次迭代。这是本题与主例题不同的地方——考你是否会看全每一列的检验数,而不是只盯着 x₁、x₂。
迭代 3(x₅ 入基,主元 2 在 R₂):
x₅ 列 = (−1/2, 2, 1/4),正元素 R₂、R₃。比值 8/2 = 4,3/(1/4) = 12 → 主元 R₂(x₄ 出基)。
| 基 | x₁ | x₂ | x₃ | x₄ | x₅ | b |
|---|---|---|---|---|---|---|
| x₁ | 1 | 0 | 0 | 1/4 | 0 | 4 |
| x₅ | 0 | 0 | −2 | 1/2 | 1 | 4 |
| x₂ | 0 | 1 | 1/2 | −1/8 | 0 | 2 |
| rc | 0 | 0 | 3/2 | 1/8 | 0 | 14 |
检验数 = [0, 0, 3/2, 1/8, 0] 全部 ≥ 0 → 最优。
x* = (4, 2, 0, 0, 4), z* = −14
代回原 max 问题:利润 = 2·4 + 3·2 = 14 千元。最优计划:A 产 4 件、B 产 2 件,设备 III 有 4 小时空闲(x₅ = 4)。
对照图解法:可行域是五边形,顶点依次为 (0,0)、(4,0)、(4,2)、(2,3)、(0,3),利润 z = 2x₁+3x₂ 依次为 0、8、14、13、9。最大 14 在顶点 (4,2)。单纯形路径 (0,0) → (0,3) → (2,3) → (4,2),最后一步 x₅ 重新入基,对应从 (2,3) 沿边走到 (4,2)。这正是「检验数只要还有负的就不能停」的体现。
C.3 · 自练 2:完整做一次主元消去
用单纯形表求解(min 问题,可直接标准化):
min z = x₁ − 2x₂ + x₃
s.t. x₁ + 2x₂ + x₃ = 4
2x₁ − x₂ + x₄ = 2
x₁, x₂, x₃, x₄ ≥ 0
初始表(基 [x₃, x₄])
| 基 | x₁ | x₂ | x₃ | x₄ | b |
|---|---|---|---|---|---|
| x₃ | 1 | 2 | 1 | 0 | 4 |
| x₄ | 2 | −1 | 0 | 1 | 2 |
| rc | 0 | −4 | 0 | 0 | 4 |
互动 I-8(续):主元值是多少?
x₂ 入基,x₂ 列 = (2, −1)。正元素只有 R₁ 的 2。主元 = ?
展开完整答案
主元 = 2(R₁,x₃ 出基)。
| 基 | x₁ | x₂ | x₃ | x₄ | b |
|---|---|---|---|---|---|
| x₂ | 1/2 | 1 | 1/2 | 0 | 2 |
| x₄ | 5/2 | 0 | 1/2 | 1 | 4 |
| rc | 2 | 0 | 2 | 0 | −4 |
检验数 = [2, 0, 2, 0] 全部 ≥ 0 → 最优。x* = (0, 2, 0, 4),z* = −4。
验证:R₁:0 + 2·2 + 0 = 4 ✓;R₂:2·0 − 2 + 4 = 2 ✓;z = 0 − 2·2 + 0 = −4 ✓。
C.4 · 错误诊断:这些坑你踩过吗?
下面每组各有 1 个常见错误,找出它并说明正确做法(先自己想,再点开看解析)。
坑 1 · 对 min 问题,某同学每次选「检验数绝对值最大」的列入基。
解析
对 min 问题应选 最负 的检验数(成本下降最快),不是绝对值最大。绝对值最大若符号为正,入基反而会增成本。
坑 2 · 最小比值时,某同学把比值 bi/aij 里 aij < 0 的行也拿来比,结果选到了负的行。
解析
只有 aij > 0 的行才约束 θ 的上限(撞墙方向)。aij < 0 的行沿该方向不会让对应基变量降到 0,不能参与比值。若整列 ≤ 0,则 LP 无界。
坑 3 · 主元归一后,某同学忘了用主元行去「消去」其他行,直接进入下一轮。
解析
主元列必须变成单位向量(主元位置 1,其余 0),否则新基不再是单位基,b 也不再等于 x_B,后续检验数全错。
坑 4 · 换基后,某同学忘了更新检验数行,直接用旧检验数判断终止。
解析
检验数 cj − cBTB−1Aj 依赖当前基 B,换基后必须重算,否则可能误判「最优」或漏掉更优方向。
C.5 · 小结与衔接
本节一句话:单纯形法 = 沿多面体的边,从顶点走到相邻顶点,每次只换一个基变量,直到检验数全非负(min)为止。
下一步去哪
- 没有天然单位基怎么办?→ 大 M 法 / 两阶段法(引入人工变量),下节课讲。
- 怎么知道最优解对参数多敏感?→ 对偶理论与灵敏度分析(影子价格)。
- 退化、循环怎么办?→ Bland 规则(按最小下标选入基/出基)可保证不循环。
这些内容对应《最优化方法》第 2 章的后续小节,也是期末考试与数模竞赛的常考点。
后测 · 5 分钟快检
对照课前 5 题,检验这一节课你真正掌握了多少。
Q1 · 单纯形法的每一步,在几何上对应什么操作?
答案
沿多面体的边,从一个顶点(基可行解)走到相邻顶点,每次只换一个基变量,直到无法再改善目标函数。
Q2 · 对 min 问题,最优性判据是什么?
答案
所有检验数 cj − zj ≥ 0(即没有哪个非基列入基还能降低成本)。若某列 cj − zj < 0,它入基还能降成本,未最优。
Q3 · 最小比值规则为什么必须取最小,而不是随便选一个正的比值?
答案
θ 只能取到「第一个基变量降到 0」为止,再大就会让某个基变量变负、跳出可行域。最小比值 = 最早撞墙的那条约束 = 出基变量。
Q4 · 什么情况下判定 LP 无界?
答案
某入基列 a·j 的所有元素都 ≤ 0:沿该方向走,没有任何约束「撞墙」,θ 可无限大,目标函数可无限改善(min 无下界 / max 无上界)。
Q5 · 主例题初始表(基 [x₃,x₄,x₅])检验数为 [−3,−3,0,0,0],x₁ 与 x₂ 并列最负。若选 x₂ 入基,哪个变量出基、主元是多少?
答案
出基:x₃(x₂ 列 = (2, −1, 3),比值 min(1/2, 3/3) = 1/2 在 R₁)。主元 = 2。(对照:若按 PPT 2.5 演示选 x₁ 入基,比值 min(1/3, 2/2) = 1/3,同样 x₃ 出基,主元 = 3。两条路径殊途同归。)
拓展 · 从手算到代码,从经典到前沿
1. 用 Python 一行求解(scipy)
主例题对应的代码(对照手算结果 x*=(0, 0.5, 0, 2.5, 1.5), z*=4.5):
手算是为了懂原理;真到工程和数模竞赛,用求解器(scipy、Gurobi、COPT、MindOpt)更稳、更快、更不易错。
2. 复杂度:为什么单纯形法「理论慢、实际快」
- 最坏情况:指数级。Klee–Minty 立方体(1972)可让某些选主元规则走遍所有顶点。
- 实际表现:平均迭代次数 ≈ O(m) 量级,商业求解器能解百万变量规模。
- 多项式替代:内点法(Karmarkar 1984)、椭球法(Khachiyan 1979)是多项式时间,但常数大,工程上仍常与单纯形法并用。
3. 三个后续专题的伏笔
① Bland 规则:每次选「下标最小」的入基/出基变量,可严格避免退化导致的循环。
② 对偶单纯形法:从「对偶可行」出发反向迭代,是灵敏度分析、整数规划割平面、Benders 分解的基石。
③ 大 M / 两阶段法:当没有天然单位基(如约束带 ≥ 或 =)时,引入人工变量构造初始基。
本节知识图谱
13 个知识点,按「思想 → 工具 → 判别」三层组织。核心链路是绿色的主路径。
单纯形法助教
试试问我这些问题(输入关键词即可):