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

Lecture 5 线性规划入门

LR 的定义

定义:一个线性规划或线性优化问题实例 $(f, {\rm Opt}, C)$ 由以下部分组成:

  1. 一个线性目标函数 $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$ 都是有理数。

  2. 一个优化准则:${\rm Opt} \in \lbrace \text{Maximize, Minimize}\rbrace$。
  3. 一个由 $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$ 都是有理数。

  1. 如果把 $v$ 代入变量 $x = (x_1, \cdots, x_n)$ 后,约束 $C_i(v)$ 成立,那么 $v = (v_1, \cdots, v_n) \in \mathbb{R}^n$ 满足 $C_i(x)$。
  2. 如果 $v$ 满足 $C$ 中的每一个约束 $C_i$,那么称 $v\in \mathbb{R}^n$ 是系统 $C(x)$ 的一个解。
  3. 令 $K(C) \subseteq \mathbb{R}^n$ 表示系统 $C(x)$ 的所有解的集合。如果 $K(C)$ 非空,则称 $C$ 是可行的
  4. 对于 $\text{Opt = Maximize}$,一个最优解是某个 $x^\ast \in K(C)$,使得 \(f(x^\ast) = \max_{x\in K(C)}f(x)\)

陈述

下面三种 LP 问题可能的“答案”覆盖了所有可能情况。

  1. 问题不可行。
  2. 问题可行但无界。
  3. 存在一个最优可行解(OFS)。
    1. 这样一个最优解是 $x^\ast \in \mathbb{R}^n$
    2. 最优目标值为 $f(x^\ast) \in \mathbb{R}$。

LP 问题的简化形式

  1. 原则上,我们只需要考虑最大化,因为:

    \[\min_{x\in K}f(x) = -\max_{x\in K} -f(x)\]

    (当且仅当两边都无界时,任意一边才无界。)

  2. 我们只需要一个形如 $f(x_1, \cdots, x_n) = x_i$ 的目标函数,其中 $x_i$ 是某个变量,因为我们可以:

    引入新变量 $x_0$。向约束 $C$ 中添加新约束 $f(x) = x_0$。把新的目标设为“优化 $x_0$”。

  3. 不需要“$=$”约束:$\alpha = \beta \Leftrightarrow (\alpha \leq \beta \wedge \alpha \geq \beta)$。
  4. 不需要“$\alpha \geq \beta$”,其中 $\beta \in \mathbb{R}: \alpha \geq \beta \Leftrightarrow -\alpha \leq - \beta$。
  5. 我们可以约束每个变量 $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))$。

  1. $\mathbf{For}$ $i = n\text{ downto } 1$
    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$,供后续使用。)

    2. 移除 $H_i$,即所有涉及 $x_i$ 的约束。用以下约束替换它们:

      \[\lbrace \alpha_j \le \beta_I \mid j = 1, \cdots, k, \&\ I = 1, \cdots, r\rbrace\]
  2. 最后只剩下 $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$,也很容易找到它。
  3. 一旦得到 $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 消元法在最坏情况下表现很差,但它仍然可能非常有用。它可以用来移除冗余变量和约束。而且它的最坏情况行为在实践中有时并不会出现。