本科专业课程 最优化方法 · 第 3 章 线性规划 新授课

初始基不可行时,如何从对偶一侧破局?——对偶单纯形法

你已经会从「原始可行」的基出发做单纯形迭代;但如果表格右端出现了负分量,单纯形法寸步难行——能否保持对偶可行,从不可行的一侧走到最优?

(原始)单纯形法 保持 b ≥ 0(原始可行) 等待 σ ≥ 0(对偶可行) 对偶单纯形法 保持 σ ≥ 0(对偶可行) 消除 b 的负分量(原始可行) 对偶关系 行/列选择互换 · 迭代方向互逆
本节目标:掌握对偶单纯形法的适用条件、迭代表格操作及其对偶解释;前置回顾:原始单纯形法(表格迭代)、对偶理论(σ≥0 的含义)。预计学习 45 分钟。

课程目标

  • 能陈述对偶单纯形法的适用条件:检验数全部 \(\sigma_j \ge 0\)(min 型)而基解 \(\mathbf{b}\) 存在负分量;
  • 能用表格手工执行完整的对偶单纯形迭代(先选出基行,再按最大比值选入基列),并判定无可行解情形;
  • 能解释该方法与原始单纯形法的对偶关系,以及迭代中目标值(对偶下界)的单调性;
  • 能在新增约束的灵敏度分析场景中,从旧最优表热启动求解,避免从头重解。

毕业要求 2-1 扎实数学基础 毕业要求 3-2 建模与求解 毕业要求 4-1 算法论证

前测:先修诊断

Q1(对偶理论):对 min 型问题,某基 \(\mathbf{B}\) 对应检验数 \(\sigma_j = c_j - z_j\)。判定「当前基是对偶可行」的条件是?

Q2(单纯形法):原始单纯形法迭代中,表格右端 \(\mathbf{b} = \mathbf{B}^{-1}\mathbf{b}_0\) 始终保持什么性质?

模块一:为什么需要对偶单纯形法

And:你已经会用原始单纯形法求解:从一个原始可行基(\(\mathbf{b}\ge 0\))出发,保持可行性,沿可行域顶点走到最优。

But:两种常见情况让这个起点消失——①化标准形后剩余变量作基,\(\mathbf{b}\) 出现负分量,初始解不可行;②方案执行前临时新增约束(如产能上限),原最优解失效,\(\mathbf{b}\) 变负而检验数仍 \(\sigma\ge 0\)。此时原始单纯形无从起步,从头重解又太浪费。

Therefore:换一个「保持对象」:既然检验数行已是对偶可行的,就全程保持 \(\sigma\ge 0\),转而逐步消除 \(\mathbf{b}\) 的负分量——这就是对偶单纯形法。

两种方法对比

(原始)单纯形法对偶单纯形法
初始状态\(\mathbf{b}\ge 0\)(可行),\(\sigma\) 任意\(\sigma\ge 0\)(对偶可行),\(\mathbf{b}\) 可有负分量
保持量原始可行性 \(b_i\ge 0\)对偶可行性 \(\sigma_j\ge 0\)
选择顺序先选列(入基),再按 \(\theta\) 选行(出基)先选行(出基),再按 \(\theta\) 选列(入基)
终止条件\(\sigma_j\ge 0\ \forall j\)\(b_i\ge 0\ \forall i\)
目标值含义原始目标 \(w\),单调下降(min)对偶目标 \(w_D=\mathbf{y}^T\mathbf{b}_0\),单调上升,从下方逼近 \(w^*\)

模块二:迭代规则

对偶单纯形法(min 型):设标准形 \(\min\ \mathbf{c}^T\mathbf{x},\ \mathbf{A}\mathbf{x}=\mathbf{b}_0,\ \mathbf{x}\ge 0\)。若当前基满足 \(\sigma_j\ge 0\ \forall j\) 但 \(\exists\, r:\ \bar b_r<0\),按下述规则迭代,全程保持对偶可行,直至 \(\bar{\mathbf{b}}\ge 0\)。

\[ \text{选出基行:}\quad \bar b_r=\min_i \bar b_i \ (< 0) \qquad \text{选入基列:}\quad \theta=\max_{j:\ \bar a_{rj}<0}\ \frac{\sigma_j}{\bar a_{rj}}\ \to\ s \tag{3.1} \]
第一步:检查 \(\bar{\mathbf{b}}=\mathbf{B}^{-1}\mathbf{b}_0\)。若全部分量 \(\ge 0\),当前基即为最优(\(\sigma\ge 0\) 且原始可行,双条件同时满足),停止。
第二步:选出基行——取 \(\bar b_r<0\)(习惯取最负分量)所在行 \(r\)。
第三步:选入基列——选择出基行中小于 0 的分量(负元素),用检验数行与该行负元素作比值 \(\theta_j=\sigma_j/\bar a_{rj}\)(\(\bar a_{rj}<0\),比值为负数),取最大比值对应的列 \(s\) 入基(等价于 \(\sigma_j/|\bar a_{rj}|\) 取最小)。若第 \(r\) 行所有 \(\bar a_{rj}\ge 0\),判定原问题无可行解,停止。
第四步:以 \(\bar a_{rs}\) 为枢轴做旋转(与原始单纯形完全相同的行变换),更新检验数行与目标值,回到第一步。

无可行解判定。若某次迭代中 \(\bar b_r<0\) 而该行 \(\bar a_{rj}\ge 0\ \forall j\),则原问题无可行解。

证明(点击展开,两种视角)
原始视角:该行对应的方程为 \(\sum_j \bar a_{rj} x_j = \bar b_r < 0\),其中基变量 \(x_{B_r}\) 系数为 1、非基变量系数 \(\bar a_{rj}\ge 0\)。由 \(\mathbf{x}\ge 0\),左端非负,与 \(\bar b_r<0\) 矛盾,故无任何可行解。
对偶视角:此时对偶问题的检验数结构表明对偶解可以无限改进目标值而无界,由弱对偶性,原始问题不可能有有限最优值;结合可行域非空时必有有限最优(或无界)的结论,只能是原始不可行。

收敛性。对偶单纯形法每次迭代产生对偶可行基,其目标值 \(w_D=\mathbf{y}^T\mathbf{b}_0\) 单调不减且有上界 \(w^*\)(弱对偶性);基的数量有限,配合 Bland 类避免循环规则,算法有限步终止。

模块三:完整例题与交互式迭代

例题

\[ \min\ w = 2x_1 + 3x_2,\qquad \text{s.t.}\ \begin{cases} x_1 + x_2 \ge 5 \\ x_1 + 2x_2 \ge 8 \\ x_1, x_2 \ge 0 \end{cases} \]

加剩余变量 \(x_3, x_4\),两个约束各乘 \(-1\) 使 \(-x_1-x_2+x_3=-5\)、\(-x_1-2x_2+x_4=-8\)。取 \(\{x_3,x_4\}\) 为初始基:\(\bar{\mathbf{b}}=(-5,-8)^T<0\) 原始不可行,但 \(\boldsymbol{\sigma}=(2,3,0,0)^T\ge 0\) 对偶可行——正是对偶单纯形的用武之地。

互动:对偶单纯形迭代器(表格 × 几何联动)

改变:迭代步;保持不变:例题与迭代规则;测量:出基/入基选择、对偶目标值 \(w_D\)、几何路径。先预测每步的出基行与入基列,再点「下一步」核对。

不可行基解 迭代路径 最优解

练习(应用层):在例题表 2 中(基 \(\{x_3,x_2\}\),\(\bar{\mathbf{b}}=(-1,4)^T\),\(\boldsymbol{\sigma}=(\tfrac12,0,0,\tfrac32)^T\),第 1 行 \((-\tfrac12,\ 0,\ 1,\ -\tfrac12)\)),应对哪些列计算比值 \(\theta_j\)?

模块四:几何与对偶视角

原始空间里发生了什么

迭代器右侧的几何图显示:初始基解 \((0,0)\) 是不可行点;第一轮后基解 \((0,4)\) 仍违反第一条约束;第二轮才落到可行域顶点 \((2,3)\)——恰好是最优解。与原始单纯形「在可行域边界上行走」不同,对偶单纯形是从可行域外逐步走进最优顶点。

严格地说,每步迭代的检验数都对应一个对偶可行解 \(\mathbf{y}\):非基剩余变量检验数给出 \(\mathbf{y}=(\sigma_3,\sigma_4)\) 的对偶读数,对偶目标值 \(w_D=\mathbf{y}^T\mathbf{b}_0\) 沿 \(0\to 12\to 13\) 单调上升——它是对偶问题的「可行迭代」,这与原始单纯形 \(w\) 单调下降形成完美镜像。

综合任务:新增约束的热启动

场景:例题的最优方案 \(x^*=(2,3)\) 已排产。执行前工厂临时新增产能约束 \(x_1 \le 1\),原方案失效。要求:从旧最优表出发,用对偶单纯形法热启动求新最优,禁止从头重解。

提示(旧最优表,基 \(\{x_1,x_2\}\)):

基\(x_1\)\(x_2\)\(x_3\)\(x_4\)\(\bar{\mathbf{b}}\)
\(x_1\)10−212
\(x_2\)011−13
\(\sigma\)0011\(w=13\)

脚手架三档(按自身情况选择):

  • L1 全脚手架:新约束 \(x_1+x_5=1\) 加入后,用 \(x_1\) 行消去 \(x_1\) 得第 3 行 \((0,0,2,-1,1\mid -1)\);你只需完成一次出基/入基选择(答案:出基 \(x_5\),比值 \(\theta(x_4)=\sigma_4/\bar a_{34}=1/(-1)=-1\),取最大者 \(x_4\) 入基)并完成旋转,得 \(x^*=(1,4),\ w^*=14\)。
  • L2 半脚手架:只给你「新行 \(\bar{\mathbf{b}}\) 为负且 \(\sigma_5=0\) 仍对偶可行」,其余自行推导。
  • L3 无脚手架:仅给场景与新增约束,独立完成消元、迭代与最优性验证,并说明为什么旧最优表上热启动是合法的(检验数行未变)。

自检(分析层):热启动后新问题的最优值 \(w^*=14\) 与旧值 \(13\) 的关系说明什么?

后测

Q1(理解):对偶单纯形法全程保持的性质是?

Q2(应用):某次迭代,出基行元素为 \((-2,\ 0,\ -3)\)(依次对应非基变量 \(x_1,x_2,x_3\)),检验数 \(\sigma_1=4,\ \sigma_2=1,\ \sigma_3=9\)。入基列应选?

Q3(分析):迭代中出现 \(\bar b_r=-2<0\) 且该行 \(\bar a_{rj}\ge 0\ \forall j\),结论是?

拓展资源

  1. 教材《最优化方法》对应章节:对偶单纯形法与灵敏度分析(按课程教学大纲指定章节复习)。
  2. Vanderbei, R. J. Linear Programming: Foundations and Extensions — The Dual Simplex Method 一节(英文进阶视角)。
  3. 进阶探究:原始–对偶算法框架;内点法中同样利用「原始–对偶同时迭代」思想(与 KKT 条件衔接)。

课程知识图谱

(正在加载 course-graph.json……)

授课教师

教师:关老师(数学学院) 答疑方式:课后答疑 + 课程群提问;本页 AI 助教可先解答常见疑问。

本课常见疑问

▸ 对偶单纯形法最难理解在哪?
「先选行后选列」与原始单纯形方向相反,且比值 θ 的含义变了:它保证的是入基后检验数仍非负(对偶可行不被破坏),而不是出基变量取值非负。抓住「两法各自保持一半性质」这条主线就不容易乱。
▸ 常见错误是什么?
①对所有列算 θ(应只对 \(\bar a_{rj}<0\) 的列);②把负比值当正数比较、或误取最小者(比值 \(\theta_j=\sigma_j/\bar a_{rj}\) 为负数,应取最大者);③出基行无负元素时误判为「无界」——正确结论是原问题无可行解;④旋转后忘记同步更新检验数行。
▸ 什么时候用它比原始单纯形划算?
典型场景:新增约束后热启动(本课综合任务);以及约束个数远多于变量个数时,对偶形式规模更小。单独从零求解时两者迭代量级相近,优势不明显。
▸ 想进一步了解该看什么?
教材对偶理论与灵敏度分析章节;Vanderbei《Linear Programming》The Dual Simplex Method 一节。版本信息请自行核对最新版。
📊 本页已访问 次