单纯形法 · 关秀翠 首页 目标 前测 ① 思想 ② 实施 ③ 实例 后测 知识图谱 拓展

单纯形法:从思想到实施

东南大学 数学学院 《最优化方法》 第 2 章 线性规划 新授课 90 分钟

主讲:关秀翠 · 基于 2.5「单纯形方法的思想」+ 2.6「单纯形法的实施」两份课件整理 · 所有数值经 numpy.linalg.inv(B) @ A 严格验算

支撑毕业要求指标点:1-2 数学基本概念 · 2-1 识别与提炼 · 2-2 建立数学模型 · 3-1 理解约束条件 · 4-1 工程与社会

课程目标

学完这 90 分钟,你应该能——

  1. 理解单纯形法的几何(顶点↔bfs)与代数(基变换)双重原理
  2. 执行单纯形表的手算:初始化→选入基→选主元→行变换→判别最优
  3. 编程用 numpy 实现完整单纯形法(拓展任务)
  4. 诊断退化、无界、循环等病态情形(错误诊断卡片)
  5. 衔接从单纯形法的「离散」到梯度下降的「连续」(末页过渡)

前测 · 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. 关键事实

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.50

当 θ = 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 的行取最小比值:

(1) 计算所有候选:$\theta_i = x^0_{B(i)} / \bar{a}_{ij}$(仅当 $\bar{a}_{ij} > 0$)
(2) 选最小:$\theta = \min_i \theta_i$
(3) 最小比值所在行对应的基变量 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₃321001
x₄2−10102
x₅−130013
rc−3−3000−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)。

1.0
1.0

当前 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 010 b₂
⋮⋮⋮⋮⋮⋮⋮⋮
xB(m) am1am2…am,n−m 0…1 bm
zj z₁z₂…zn−m 0…0 z

2. 关键元素

几何 → 代数:每张表 = 当前 bfs 位置 + 邻接 bfs 信息(aij)+ 沿哪个方向走会降多少成本(zj)。

B.2 · 初始化:从 LP 到初始 bfs

1. 目标:找到一个 bfs 作为起点

关键:A 中要有 m 个线性无关的单位列向量,这些列对应的变量就是初始基。

2. 两种情形

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₁321001
R₂ − R₁2−10102
R₃ − R₁−130013

✅ 初始基 = [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−3000−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₃3210011/2 = 0.5
x₄2−10102跳过(−1 < 0)
x₅−1300133/3 = 1.0

最小比值 = 1/2,位于 R₁ → x₃ 出基,主元 = 2。

(对照:PPT 2.5 演示的 x₁ 路径,比值 1/3、2/2、R₃ 跳过(x₁ 系数 −1),主元 3,同样 x₃ 出基。)

互动 I-5:看"撞墙先后顺序"

1 / 2 = 0.5
x₂ 系数 = −1 < 0,不参与比值
3 / 3 = 1.0

最小 0.5 → 行 1 (x₃) 撞墙最先 → x₃ 出基 → 主元 = 2

📌 无界判别:如果入基列所有元素都 ≤ 0,则没有合法的 θ,LP 无界(unbounded)。这是单纯形法的"终止"分支之一。

B.5 · Clear Pivot Column:行变换

1. 目标:让主元列变成单位向量

① 主元行 R_pivot:除以主元 a_pp,让主元位置变成 1
② 其他行 R_i:减去 主元行 × aij,让主元列其他元素归零
③ 重算检验数行:用新基的 c_B 重新计算 zj = cBT aj 与 RHS 列 −z

2. 本例(主元 2 在 R₁,x₂ 入基)

① R₁' = R₁ / 2   : (3/2, 1, 1/2, 0, 0 | 1/2)
②a R₂' = R₂ + R₁'(消 −1):(7/2, 0, 1/2, 1, 0 | 5/2)
②b R₃' = R₃ − 3R₁'(消 3):(−11/2, 0, −3/2, 0, 1 | 3/2)

3. 迭代 1 末表(基 [x₂,x₄,x₅])

基x₁x₂x₃x₄x₅b
x₂3/211/2001/2
x₄7/201/2105/2
x₅−11/20−3/2013/2
rc3/203/200−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. 几何与代数双视角

2. 终止判别

两种终止:

  1. 最优:所有 cj − zj ≥ 0,无列可入基增降成本。读出当前 bfs 即为最优。
  2. 无界:某入基列 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₃321001
x₄2−10102
x₅−130013
rc−3−3000−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₁。

① R₁' = R₁/2    : (3/2, 1, 1/2, 0, 0 | 1/2)
②a R₂' = R₂ + R₁'  : (7/2, 0, 1/2, 1, 0 | 5/2)
②b R₃' = R₃ − 3R₁' : (−11/2, 0, −3/2, 0, 1 | 3/2)
基x₁x₂x₃x₄x₅b
x₂3/211/2001/2
x₄7/201/2105/2
x₅−11/20−3/2013/2
rc3/203/200−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* 代回三个约束检验:

三行全部成立,且非基变量 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₃121008
x₄4001016
x₅0400112
rc−2−30000

互动 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₃):

① R₃' = R₃/4 : (0, 1, 0, 0, 1/4 | 3)
②a R₁' = R₁ − 2R₃' : (1, 0, 1, 0, −1/2 | 2)
②b R₂' = R₂(x₂ 列已为 0): (4, 0, 0, 1, 0 | 16)
基x₁x₂x₃x₄x₅b
x₃1010−1/22
x₄4001016
x₂01001/43
rc−20003/49

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₃ 出基)。

① R₁' = R₁ : (1, 0, 1, 0, −1/2 | 2)
② R₂' = R₂ − 4R₁' : (0, 0, −4, 1, 2 | 8)
基x₁x₂x₃x₄x₅b
x₁1010−1/22
x₄00−4128
x₂01001/43
rc0020−1/413

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₄ 出基)。

① R₂' = R₂/2 : (0, 0, −2, 1/2, 1 | 4)
②a R₁' = R₁ + (1/2)R₂' : (1, 0, 0, 1/4, 0 | 4)
②b R₃' = R₃ − (1/4)R₂' : (0, 1, 1/2, −1/8, 0 | 2)
基x₁x₂x₃x₄x₅b
x₁1001/404
x₅00−21/214
x₂011/2−1/802
rc003/21/8014

检验数 = [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₃12104
x₄2−1012
rc0−4004

互动 I-8(续):主元值是多少?

x₂ 入基,x₂ 列 = (2, −1)。正元素只有 R₁ 的 2。主元 = ?

展开完整答案

主元 = 2(R₁,x₃ 出基)。

① R₁' = R₁/2 : (1/2, 1, 1/2, 0 | 2)
② R₂' = R₂ + R₁' : (5/2, 0, 1/2, 1 | 4)
基x₁x₂x₃x₄b
x₂1/211/202
x₄5/201/214
rc2020−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)为止。

下一步去哪

这些内容对应《最优化方法》第 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):

> from scipy.optimize import linprog
> c = [1,1,1,1,1]
> A = [[3,2,1,0,0],[5,1,1,1,0],[2,5,1,0,1]]
> b = [1,3,4]
> r = linprog(c, A_eq=A, b_eq=b, bounds=(0,None), method='highs')
> print(r.fun, r.x) # 4.5 [0. 0.5 0. 2.5 1.5]

手算是为了懂原理;真到工程和数模竞赛,用求解器(scipy、Gurobi、COPT、MindOpt)更稳、更快、更不易错。

2. 复杂度:为什么单纯形法「理论慢、实际快」

3. 三个后续专题的伏笔

① Bland 规则:每次选「下标最小」的入基/出基变量,可严格避免退化导致的循环。

② 对偶单纯形法:从「对偶可行」出发反向迭代,是灵敏度分析、整数规划割平面、Benders 分解的基石。

③ 大 M / 两阶段法:当没有天然单位基(如约束带 ≥ 或 =)时,引入人工变量构造初始基。

本节知识图谱

13 个知识点,按「思想 → 工具 → 判别」三层组织。核心链路是绿色的主路径。

LP 标准型 → 基可行解 = 顶点 → 顶点间移动 = 换基
单纯形表 → 选入基列(最负检验数) → 最小比值选主元 → 主元消去(行变换)
最优性判别 → 最优 ↺ 继续迭代
无界(整列 ≤ 0) 退化 / 循环(Bland 规则)

单纯形法助教

试试问我这些问题(输入关键词即可):

你好!问我「检验数是什么」「最小比值为什么取最小」「主元怎么选」「无界怎么判断」等。
📊 本页已访问 次