可是我真的不会线性规划对偶
前言
因为我太猪了所以只能去学一个不会严谨证明(虽然强对偶定理好像也没看到有人证明)的 oi 范围内易理解方法了。
学习自在 OI 中更易上手的线性规划对偶和线性规划对偶入门 & 题解:AT_abc224_h [ABC224H] Security Camera 2。
介绍 & 举例
其实对我来说光文字叙述是很看不懂的,所以不妨直接上手:
需要求解的形式:
\[\begin{align*} \max\limits_{x\ge 0, y\ge 0} &\sum\limits_{i = 1}^m y_i\\ s.t. \quad y_i &\le 1\\ y_i &\le \sum\limits_{j = l_i}^{r_i} x_j\\ \sum\limits_{i = 1}^n x_i &\le k \end{align*} \]其中这个 \(x\ge 0, y\ge 0\) 代表的是 \(x_i\ge 0, y_i\ge 0\)(偷懒简写了一下)。
第一步
考虑把所有限制表示为 \(\cdots\le 0\) 的形式:
第二步
考虑把限制合并进这个求和式:
这可以当作是一个先手和后手博弈的过程,先手就是要最大化一开始要求的值的“我”。
而后手的作用就是限制“我”的 \(x, y\) 的选值必须要合法(满足之前的约束)。
举个例子,比如说如果选择的 \(y_i\le 1\),也就有 \(y_i - 1\le 0\)。
因为要求了后手想让这个求和的值小,但是因为 \(a_i\le 0\),所以 \(a_i(y_i - 1)\ge 0\),那么为了最小肯定只能选择 \(a_i = 0\),于是此时 \(a_i(y_i - 1) = 0\) 也正好不会对原本“我”想求的值 \(\sum\limits_{i = 1}^m y_i\) 产生影响。
但是如果选择的 \(y_i > 1\),也就有 \(y_i - 1 > 0\)。
那么后手为了让这个和的值尽量小,可以把 \(a_i\) 的值定为无穷小,那么整个和的值就会是无穷小,就不会被我先手的 \(\max\) 取到。
简而言之就是,如果先手我选择的 \(x, y\) 存在了不合法,那么后手就可以让这个值产生的影响变为无穷小进而让这个情况不可能被我外层的 \(\max\) 取到;否则要是都合法,那么后手只能被迫把这些新系数设为 \(0\),那么此时的值就是原来我想求的那个值 \(\sum\limits_{i = 1}^m y_i\)。
第三步
考虑对偶,交换 \(\max, \min\) 的位置:
这一步我并不会证明,我猜测可能就是线性规划对偶的证明,qaq。
第四步
考虑把主语由 \(a_i, b_i, c\) 变为 \(x_i, y_i\),即把主元换为内层的变量:
第五步
考虑第二步的过程,给限制主动加上一个系数加入求和式。
发现第四步的转换后的式子跟第二步操作后的式子形式已经非常类似了:
\(x_i, y_i\) 作为为限制配上系数,而 \(- \sum\limits_{i = 1}^m a_i - ck\) 就是要求的值。
于是考虑做一个第二步的“逆过程”,把这个求和式重新整理成线性规划形式:
整理限制的一个方法是假设自己此时是这个 \(\max\) 的后手,要打乱先手的 \(\min\)。
那么因为 \(y_i\ge 0\),所以当 \(1 + a_i + b_i > 0\) 时,让 \(y_i\) 变得无穷大,这个和式就无穷大,就不会被算入了,也就对应着不合法;否则当 \(1 + a_i + b_i\le 0\) 时,只能被迫选择 \(y_i = 0\),那么就不会影响求和式 \(- \sum\limits_{i = 1}^m a_i - ck\) 的值,也就对应的合法。
所以可以通过这个分讨得知所对应的限制就是 \(1 + a_i + b_i\le 0\)。
第六步
自行整理这个线性规划啦。
比如说对于这个式子可以考虑令 \(a' = -a, b' = -b, c' = -c\) 变为:
再整理一下就得到了:
浙公网安备 33010602011771号