Lecture 5 线性规划入门
LR 的定义
定义:一个线性规划或线性优化问题实例 $(f, {\rm Opt}, C)$ 由以下部分组成:
-
一个线性目标函数 $f: \mathbb{R}^n \mapsto \mathbb{R}$,给定为:
\[f(x_1, \cdots, x_n) = c_1x_1 + c_2x_2 + \cdots + c_nx_n + d\]其中我们假设系数 $c_i$ 和常数 $d$ 都是有理数。
- 一个优化准则:${\rm Opt} \in \lbrace \text{Maximize, Minimize}\rbrace$。
-
一个由 $m$ 个线性约束,或线性不等式/等式组成的集合(或系统)$C(x_1, \cdots, x_n)$,即 $C_i(x_1, \cdots, x_n), i = 1, \cdots, m$,其中 $C_i(x)$ 具有如下形式:
\[a_{i, 1} x_1 + a_{i, 2} x_2 + \cdots + a_{i, n} x_n\ \Delta\ b_i\]其中 $\Delta \in \lbrace \leq, \geq, =\rbrace$,并且 $a_{i, j}$ 和 $b_i$ 都是有理数。
注:
- 如果把 $v$ 代入变量 $x = (x_1, \cdots, x_n)$ 后,约束 $C_i(v)$ 成立,那么 $v = (v_1, \cdots, v_n) \in \mathbb{R}^n$ 满足 $C_i(x)$。
- 如果 $v$ 满足 $C$ 中的每一个约束 $C_i$,那么称 $v\in \mathbb{R}^n$ 是系统 $C(x)$ 的一个解。
- 令 $K(C) \subseteq \mathbb{R}^n$ 表示系统 $C(x)$ 的所有解的集合。如果 $K(C)$ 非空,则称 $C$ 是可行的。
- 对于 $\text{Opt = Maximize}$,一个最优解是某个 $x^\ast \in K(C)$,使得 \(f(x^\ast) = \max_{x\in K(C)}f(x)\)
陈述:
下面三种 LP 问题可能的“答案”覆盖了所有可能情况。
- 问题不可行。
- 问题可行但无界。
- 存在一个最优可行解(OFS)。
- 这样一个最优解是 $x^\ast \in \mathbb{R}^n$
- 最优目标值为 $f(x^\ast) \in \mathbb{R}$。
LP 问题的简化形式
-
原则上,我们只需要考虑最大化,因为:
\[\min_{x\in K}f(x) = -\max_{x\in K} -f(x)\](当且仅当两边都无界时,任意一边才无界。)
-
我们只需要一个形如 $f(x_1, \cdots, x_n) = x_i$ 的目标函数,其中 $x_i$ 是某个变量,因为我们可以:
引入新变量 $x_0$。向约束 $C$ 中添加新约束 $f(x) = x_0$。把新的目标设为“优化 $x_0$”。
- 不需要“$=$”约束:$\alpha = \beta \Leftrightarrow (\alpha \leq \beta \wedge \alpha \geq \beta)$。
- 不需要“$\alpha \geq \beta$”,其中 $\beta \in \mathbb{R}: \alpha \geq \beta \Leftrightarrow -\alpha \leq - \beta$。
-
我们可以约束每个变量 $x_i$ 满足 $x_i \geq 0$:
对每个变量 $x_i$ 引入两个变量 $x^+_i, x_i^-$。把每次出现的 $x_i$ 替换为 $(x_i^+ - x_i^-)$,并添加约束 $x_i^+\geq 0, x_i^-\geq 0$。
(N.B. 不能同时执行 (2.) 和 (5.)。)
Fourier-Motzkin 消元法
Wiki: Fourier-Motzkin Elimination Example
$\mathbf{Input}$:LP 实例 $(x_0, \text{Opt}, C(x_0, x_1, \cdots, x_n))$。
- $\mathbf{For}$ $i = n\text{ downto } 1$
-
将每个涉及 $x_i$ 的约束重写为 $\alpha \le x_i$,或重写为 $x_i \le \beta$。(两者之一总是可行的。)设这些约束为:
\[\alpha_1 \le x_i, \cdots, \alpha_k \le x_i; x_i \le \beta_1, \cdots, x_i \le \beta_r\](保留这些约束,记为 $H_i$,供后续使用。)
-
移除 $H_i$,即所有涉及 $x_i$ 的约束。用以下约束替换它们:
\[\lbrace \alpha_j \le \beta_I \mid j = 1, \cdots, k, \&\ I = 1, \cdots, r\rbrace\]
-
- 最后只剩下 $x_0$(或没有变量)。所有约束都具有 $\alpha_j \le x_0$、$x_0 \le \beta_I$ 或 $\alpha_j \le \beta_I$ 的形式,其中 $a_j$ 和 $b_I$ 都是常数。对于这样一个单变量(或零变量)的 LP,检查“可行性”和“有界性”很容易;如果存在最优 $x^\ast_0$,也很容易找到它。
- 一旦得到 $x^\ast_0$,将它代入 $H_1$,求解 $x_1^\ast$。然后用 $x_0^\ast, x^\ast_1$ 代入 $H_2$ 来求解 $x^\ast_2, \cdots$;用 $x^\ast_0, \cdots, x^\ast_{i - 1}$ 代入 $H_i$ 来求解 $x^\ast_i, \cdots$;于是 $x^\ast = (x^\ast_0, \cdots, x^\ast_n)$ 就是一个最优可行解。
备注
在最坏情况下,如果每个变量 $x_i$ 都出现在每个约束中,那么 “For loop” 的每次迭代都会使约束数量平方增长。
高斯消元法要好得多,并且不会遭受这种爆炸。
推论 1:LP 问题的三种可能“答案”确实覆盖了所有可能情况。
推论 2:如果一个 LP 有 OFS,那么它有一个有理数 OFS,即 $x^\ast$,并且 $f(x^\ast)$ 也是有理数。
虽然 Fourier-Motzkin 消元法在最坏情况下表现很差,但它仍然可能非常有用。它可以用来移除冗余变量和约束。而且它的最坏情况行为在实践中有时并不会出现。