Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Lecture 6 单纯形算法

“我们似乎不会卡在任何局部最优顶点上。这就是单纯形法的几何直觉。

单纯形法的几何直觉

$\text{Input}$:给定 $(f, {\rm Opt}, C)$ 和一个起始“顶点” $x\in K(C) \subseteq \mathbb{R}^n$。

$\text{While}$($x$ 有一个“相邻顶点” $x^\prime$,满足 $f(x^\prime) > f(x)$)

  • 选择这样一个相邻点 $x^\prime$。令 $x := x^\prime$。
  • (如果这个“相邻点”在“无穷远处”,则 $\text{Output}$:“unbounded”。)

$\text{Output}$:$x^\ast := x$ 是最优解,最优值为 $f(x^\ast)$。

但为什么这应该有效?为什么我们不会卡在某个局部最优?

关键原因:区域 $K(C)$ 是的。($x, y\in K,\ \lambda x + (1 - \lambda)y \in K,\ \text{for all }\lambda\in [0, 1]$。)

事实:在凸区域上,线性目标函数的局部最优总是全局最优。

原始形式中的 LP

使用上一讲中的简化规则,我们可以把任意 LP 转换为下面的形式:

最大化 $c_1 x_1+c_2 x_2+\ldots+c_n x_n+d$

满足约束

\[\begin{array}{ll}a_{1,1} x_1+a_{1,2} x_2+\ldots+a_{1, n} x_n & \leq b_1 \\a_{2,1} x_1+a_{2,2} x_2+\ldots+a_{2, n} x_n & \leq b_2 \\\ldots & \cdots \\\ldots & \cdots \\a_{m, 1} x_1+a_{m, 2} x_2+\ldots+a_{m, n} x_n & \leq b_m \\x_1, \ldots, x_n \geq 0\end{array}\]

松弛变量

通过给每个不等式添加一个松弛变量 $y_i$,我们得到一个等价的 LP 表达,其中只有等式(以及非负约束):

最大化 $c_1 x_1+c_2 x_2+\ldots+c_n x_n+d$

满足约束

\[\begin{array}{ll}a_{1,1} x_1+a_{1,2} x_2+\ldots+a_{1, n} x_n+y_1 & =b_1 \\a_{2,1} x_1+a_{2,2} x_2+\ldots+a_{2, n} x_n+y_2 & =b_2 \\\ldots & \ldots \\a_{m, 1} x_1+a_{m, 2} x_2+\ldots+a_{m, n} x_n+y_m & =b_m \\x_1, \ldots, x_n \geq 0 ; \quad y_1, \ldots, y_m \geq 0\end{array}\]

新的 LP 有一些特别好的性质

  1. 每个等式约束中至少有一个系数为 $1$ 的变量,并且这个变量不会出现在任何其他等式中。
  2. 对每个等式选择一个这样的变量 $y_i$,我们得到一组由 $m$ 个变量组成的集合 $B = \lbrace y_1, \cdots, y_m\rbrace$,称为一个
  3. 目标函数 $f(x)$ 只涉及非基变量。

我们把这种形式的 LP 称为一个“字典”(dictionary)。

基本可行解

把我们的字典重写为:

最大化 $c_1 x_1+c_2 x_2+\ldots+c_n x_n+d$

满足约束

\[\begin{aligned}& x_{n+1}=b_1-a_{1,1} x_1-a_{1,2} x_2-\ldots-a_{1, n} x_n \\& x_{n+2}=b_2-a_{2,1} x_1-a_{2,2} x_2-\ldots-a_{2, n} x_n \\&\ldots \quad \quad \ldots \\& x_{n+m}=b_m-a_{m, 1} x_1-a_{m, 2} x_2-\ldots-a_{m, n} x_n \\& x_1, \ldots, x_{n+m} \geq 0 \end{aligned}\]

假设由于某种原因,对所有 $i = 1, \cdots, m$ 都有 $b_i \geq 0$。那么我们有一个可行字典,以及它的一个可行解:令 $x_{n + i} := b_i$,对 $i = 1, \cdots, m$;并令 $x_j := 0$,对 $j = 1, \cdots, n$。此时目标值为 $f(0) = d$。

称这为一个基本可行解(BFS),其基为 $B$。

几何意义:一个 BFS 对应一个顶点。(但不同的基 $B$ 可能给出同一个 BFS。)

问题:我们如何从一个带有基 $B$ 的 BFS 移动到一个带有基 $B^\prime$ 的相邻 BFS?答案:枢轴变换(pivoting)。

枢轴变换

假设当前字典的基(左侧变量)是 $B = \lbrace x_{i_1}, \cdots, x_{i_m} \rbrace$,其中 $x_{i_r}$ 是约束 $C_r$ 左侧的变量。

下面的 pivoting 过程把我们从基 $B$ 移动到基 $B^\prime:= (B\backslash\lbrace x_{i_r}\rbrace) \bigcup \lbrace x_j \rbrace$。

通过 pivoting 将 $x_j$ 加入基,并从基 $B$ 中移除 $x_{i_r}$:

  1. 假设 $C_r$ 涉及 $x_j$,将 $C_r$ 重写为 $x_j = \alpha$。(最紧约束)
  2. 在其他约束 $C_I$ 中用 $\alpha$ 替换 $x_j$,得到 $C_I^\prime$。
  3. 新约束 $C^\prime$ 有一个新的基:$B^\prime:= (B\backslash\lbrace x_{i_r}\rbrace) \bigcup \lbrace x_j \rbrace$。
  4. 同样在 $f(x)$ 中用 $\alpha$ 替换 $x_j$,使得 $f(x)$ 再次只依赖于不在新基 $B^\prime$ 中的变量。

新基 $B^\prime$ 是 $B$ 的一个可能相邻基。然而,并不是每个这样的基 $B^\prime$ 都是合格的。

Pivoting 的合理性检查

为了检查一次 pivot 是否合格,我们必须确保:

  1. 新的常数 $b_i^\prime$ 仍然保持 $\geq 0$,这样我们保留一个“可行字典”,因此 $B^\prime$ 能给出一个 BFS。
  2. 新的 BFS 必须提升,或至少不能降低,新目标函数的值 $d^\prime = f(0)$。
  3. 我们还应该检查下面几种情况:
    1. 假设 $f(x)$ 中的所有变量都有负系数。那么这些变量从 $0$ 开始的任何增加都会降低目标值。因此我们已经位于一个最优 BFS $x^\ast$。$\text{Output: Opt-BFS}: x^\ast \& f(x^\ast) = f(0) = d^\prime$
    2. 假设 $f(x)$ 中某个变量 $x_j$ 的系数 $c_j > 0$,并且 $x_j$ 在每个约束 $C_r$ 中的系数都 $\geq 0$。那么我们可以在不违反约束的情况下,把 $x_j$ 以及目标函数增加到“无穷大”。所以,$\text{Output:}$ Feasible but Unbounded

一个 simplex pivoting 步骤的例子

确实有必要给出一个帮助我们理解 pivoting 的例子。

最大化 $2x_1 + 3x_2 + 4x_3 + 8$

满足约束

\[\begin{aligned}& x_4=3-x_1-3 x_2-x_3 \\& x_5=4-2 x_1+x_2-2 x_3 \\& x_6=2-2 x_1-4 x_2+x_3 \\&x_1, \cdots, x_6\geq 0;\end{aligned}\]

初始 BFS 是 $(0, 0, 0, 3, 4, 2)$。假设我们接下来选择让 $x_2$ 进入基。

  1. 最紧的约束是 $x_6 = 2 - \ldots - 4x_2 + \ldots$,这意味着我们最多可以把 $x_2$ 增加到 $\frac{1}{2}$。
  2. 将约束 $x_6=2-2 x_1-4 x_2+x_3$ 重写为:$(\ast\ast)\ x_2 = \frac{1}{2} - \frac{1}{2}x_1 + \frac{1}{4}x_3 - \frac{1}{4}x_6$,并通过用 $(\ast\ast)$ 右侧替换 $x_2$,重写目标函数和其他约束。

延伸阅读

  1. Simplex Algorithm - oi-wiki