对偶单纯形法:保持对偶可行的换基过程

Views: --

原始单纯形法始终保持 B1b0B^{-1}b\ge0,逐步修复检验数;对偶单纯形法反过来,始终保持检验数满足最优性符号,逐步修复负的基本变量。

什么时候用

对最小化问题,若某张表满足

σj=zjcj0\sigma_j=z_j-c_j\le0

但右端有负数,即

B1b≱0,B^{-1}b\not\ge0,

当前解原不可行、对偶可行,正适合对偶单纯形法。

最典型场景是:已经求出一个 LP 的最优表,现在只改变右端 bb。检验数完全不变,原最优基可能只因右端变负而失去可行性,从旧表继续做对偶单纯形远比重算快。

换基逻辑

设最负的右端位于第 rr 行,选该基本变量出基。为了把右端修成非负,需要从该行中选一个允许的非基变量进基。

在课程使用的 σj=zjcj0\sigma_j=z_j-c_j\le0 约定下,只考虑 arj<0a_{rj}<0 的列,并比较

θj=σjarj0.\theta_j=\frac{\sigma_j}{a_{rj}}\ge0.

在这些候选列中取最小的非负比值。若改用约化成本

cˉj=cjzj=σj0,\bar c_j=c_j-z_j=-\sigma_j\ge0,

同一个规则就是

θj=cˉjarj.\theta_j=\frac{\bar c_j}{-a_{rj}}.

为什么取最小值?主元变换相当于先让出基行对应的对偶变量变化;某个非基变量的约化成本最先降到零时,它正好可以进基。若越过这个最小比值,至少一个 cˉj\bar c_j 会变负,也就是 σj\sigma_j 变正,对偶可行性被破坏。

不同教材的表头与检验数定义可能让比值写成 cˉj/(arj)\bar c_j/(-a_{rj})。不要硬套外观,推导原则只有一个:换基后既要改善负右端,又不能破坏对偶可行性。

为什么会终止

每次换基保持对偶可行。若最终全部右端非负,则原、对偶同时可行,强对偶意味着当前表最优。若选定出基行中没有任何合适的负系数列,则无法恢复原可行性,原问题不可行。

小例子思路

假设一张最优表改变右端后出现

xB1=2x3+2x4,xB2=3+x3x4.x_{B_1}=-2-x_3+2x_4,\qquad x_{B_2}=3+x_3-x_4.

第一行基本变量为负,先让它出基。由字典式可直接看出:增大 x3x_3 会让 xB1x_{B_1} 更小,增大 x4x_4 才会通过 2x42x_4 抬高它。因此候选进基变量是 x4x_4

若把字典统一写成 xB=bAˉxNx_B=b-\bar A x_N,第一行的 x4x_4 系数对应 ar4=2<0a_{r4}=-2<0,与前面的候选列规则一致。最后还要用 σ4/ar4\sigma_4/a_{r4} 与其他候选列比较,确认换基后全部检验数仍不大于零。

与灵敏度分析的连接

  • 只改 bb:检验数不变,若新 B1bB^{-1}b 有负分量,用对偶单纯形。
  • 只改非基变量的 cjc_j:右端不变,若检验数破坏,用原始单纯形。
  • 新增约束:把新约束代入现有基变量后追加一行,常导致一个负右端,也常用对偶单纯形。

考试要点

  • 先写“当前表对偶可行但原不可行”,说明为什么选该算法。
  • 出基行由负右端决定;不是按原始单纯形的检验数选。
  • 没有允许进基列时结论是原问题不可行。
  • 完成后同时检查右端非负和检验数符号,二者缺一不可。

评论