《再探线性规划对偶在信息学竞赛中的应用》学习笔记

零、开始之前的闲话


只学了一部分(指 \(16\) 年的都没学懂),所以可能比较跳跃,然后因为原文对我而言本身就比较跳跃,所以有些东西是按我自己的想法写下来的,所以也不一定对

 

壹、定义与对偶定理


定义浅抄一下

对于一组变量 \(x_1,x_2,\ldots,x_n\) 来说,不等式 \(\sum\limits_{i=1}^n a_i x_i \le\)\(=\)\(\ge b\) 被称为一个线性约束,而 \(\sum\limits_{i=1}^n c_i x_i\) 则是关于这组变量的线性目标函数。
规划问题可分为线性规划、整数规划、非线性规划、动态规划等,而线性规划是在一组线性约束条件下,求一线性目标函数最大或最小的问题。

适用性非常广泛,很多题目都可以规约到线性规划

不过 \(\le,=,\ge\) 同时出现太麻烦了,所以我们通过一些变换让线性约束都变成 \(\le\) ,同时再约束 \(x_i \ge 0\) ,这样就有了标准型,用向量表示可写成

\[\max \mathbf{c}^{T}\mathbf{x} \\ A \mathbf{x} \le \mathbf{b} \\ \mathbf{x} \ge \mathbf{0} \]

怎么转换?若是 \(\ge\) 则两边取反,若是 \(=\) 则加个辅助变量 \(x_{i}' \ge 0\) 变为 \(\sum\limits_{i=1}^n a_i x_i -x_{i}' \le b_i\) ,若没有 \(x_i \ge 0\) 限制则把 \(x_i\) 改写为 \(x_i'-x_i'' \quad (x_i',x_i'' \ge 0)\)

然后我们有其对偶(两个互为对偶),为

\[\min \mathbf{b}^{T}\mathbf{y} \\ A^T \mathbf{y} \ge \mathbf{c} \\ \mathbf{y} \ge \mathbf{0} \]

我们称 \(y_i\)\(\sum_{j=1}^n a_{i,j}x_j \ge c_i\) 这个约束条件的对偶变量

对于上面两个定义,有弱对偶定理(弱对偶定理貌似适用于大多数规划)

\[\max \mathbf{c}^{T}\mathbf{x} \le \min \mathbf{b}^{T}\mathbf{y} \]

强对偶定理(只适用于线性规划)

\[\max \mathbf{c}^{T}\mathbf{x} = \min \mathbf{b}^{T}\mathbf{y} \]

证明别找我,论文里也只贴了文献

注意对于 \(=\) 的条件,推一推会发现所有原本是等于的都会转化为 \(\le\) 的对偶变量减 \(\ge\) 的对偶变量,那么我们改写为无符号限制(也就是没有 \(\ge 0\) 限制)的 \(\varphi_i=y_{i}-y_{i}'\) ,也就是

\[\max \mathbf{c}^{T}\mathbf{x} \\ A \mathbf{x} = \mathbf{b} \\ \mathbf{x} \ge \mathbf{0} \]

\[\min \mathbf{b}^{T}\mathbf{y} \\ A^T \mathbf{y} \ge \mathbf{c} \]

对偶(反过来也是一样)

可能会疑惑为啥 \(A\mathbf{x}=\mathbf{b}\) 限制明显变强,但是为啥下面还少了一个限制,但是注意对偶后这会让最值取得相较于 \(\mathbf{y} \ge 0\) 更小,所以其实原本的线性规划的最值也是会变小的

 

P.S. 具体复杂问题如何推导?最好的就是按照上面的化为系数矩阵然后暴推,更直观的说明

 

贰、拉格朗日对偶


先咕咕咕了

 

叁、最小费用流模型


我们设每条边 \((u,v)\) 流量为 \(f_{u,v}\) ,其流量限制为 \(c_{u,v}\) ,单位流量代价为 \(w_{u,v}\) ,然后每个点流量需求(流出的总量减去流入的总量)为 \(b_u\)

那么这个限制对应的最小费用最大流模型只需要再让超级源点向 \(b_u>0\) 的点连流量限制为 \(b_u\) 的边, \(b_u<0\) 的点向超级汇点连流量限制为 \(|b_i|\) 的边,这些边单位流量代价都是 \(0\)

那么我们如果能把最小费用流表示为一个线性规划,那么若有问题能规约到答案等价的问题,就可以用最小费用流解决

先列出其线性规划

\[\min \sum_{u,v}w_{u,v}f_{u,v} \\ \sum_{v}f_{v,u}-\sum_{v}f_{u,v}=-b_u \\ -f_{u,v} \ge -c_{u,v} \\ f_{u,v} \ge 0 \]

\(z_{u,v}\)\(-f_{u,v} \ge -c_{u,v}\) 条件的对偶变量, \(p_u\)\(\sum_{v}f_{v,u}-\sum_{v}f_{u,v}=-b_u\) 的对偶变量,则有上面问题的对偶

\[\max -\sum_{i=1}^{n}b_ip_i-\sum_{u,v}c_{u,v}z_{u,v} \\ p_v-p_u-z_{u,v} \le w_{u,v} \\ z_{u,v} \ge 0 \]

显然假设 \(p\) 已确定,则 \(z_{u,v}\)\(\max(0,p_v-p_u-w_{u,v})\) 最优,所以最小费用流的答案等价于对于变量 \(p_i\) (无符号限制)最优化

\[-\min \sum_{i=1}^{n}b_ip_i+\sum_{u,v}c_{u,v}\max(0,p_v-p_u-w_{u,v}) \]

对于此类问题有一个很强的结论,直接贴原文吧(证明直接读原文吧)

在最后得出的那个等价的式子中,如果满足所有 \(w_{u,v}\) 均为整数,那么一定可以在所有 \(p_u\) 都为整数时取到最优解。也就是说,每条边的单位流量代价都为整数的费用流的对偶一定有整数最优解。

 

[ZJOI2013] 防守战线

区间和限制还是转化为差分比较好,我们设前 \(i\) 个建了 \(S_i\) 个塔,那么就是问题就是( \(C_0=0\)

\[\min \sum_{i=0}^{n}(C_i-C_{i+1})S_i \\ \forall i \in [1,n], S_{i-1} \le S_i \\ \forall i \in [1,m], S_{R_i}-S_{L_i} \ge d_i \]

我们考虑将限制化到 \(\min\) 中,怎么搞?考虑若不满足限制就有 \(\infty\) 的代价即可,所以变为

\[\min \sum_{i=0}^{n}(C_i-C_{i+1})S_i + \sum_{i=1}^{n}\infty \max(0,S_{i-1}-S_{i})+\sum_{i=1}^{m}\infty \max(0,S_{L_i-1}-S_{R_i}+d_i) \]

那么就转化为了费用流形式,直接按照上述建图即可,不过貌似要原始对偶才能过

评测链接

 

How to Create a Good Game

差不多的题,直接贴份代码吧

评测链接

 

Cow and Exercise

\((u,v)\) 的增加量为 \(w_{u,v}\)\(d_u\) 为最短路,可列出其线性规划

\[\max d_n-d_1 \\ d_v-d_u-x_{u,v} \le w_{u,v} \\ \sum_{u,v}x_{u,v} \le X \\ d_u \ge 0,x_{u,v} \ge 0 \]

其对偶为

\[\min \sum_{u,v} w_{u,v}a_{u,v}+bX \\ b-a_{u,v} \ge 0 \\ \sum_{v}a_{v,u}-\sum_{v}a_{u,v} \ge \begin{cases} -1 & u=1 \\ 0 & 1 < u < n \\ 1 & u=n \end{cases} \\ a_{u,v} \ge 0,b \ge 0 \]

首先有互补松弛性

我们知道后面那个问题的第二个约束条件的对偶变量为 \(d_u\) ,又因为原问题在 \(\forall i \in [1,n],d_i \not=0\) 时可取到最优解,所以可以改写为

\[\min \sum_{u,v} w_{u,v}a_{u,v}+bX \\ b-a_{u,v} \ge 0 \\ \sum_{v}a_{v,u}-\sum_{v}a_{u,v} = \begin{cases} -1 & u=1 \\ 0 & 1 < u < n \\ 1 & u=n \end{cases} \\ a_{u,v} \ge 0,b \ge 0 \]

这个 \(bX\) 形式比较诡异,我们考虑把 \(b\) 提出来,让 \(a_{u,v}'=\frac{a_{u,v}}{b}\) ,则有

\[\min (\sum_{u,v} w_{u,v}a_{u,v}'+X)b \\ a_{u,v}' \le 1 \\ \sum_{v}a_{v,u}'-\sum_{v}a_{u,v}' = \begin{cases} -\frac{1}{b} & u=1 \\ 0 & 1 < u < n \\ \frac{1}{b} & u=n \end{cases} \\ a_{u,v}' \ge 0,b \ge 0 \]

可以发现若 \(b\) 固定,先忽略 \(X\) 这个常数,剩下的问题就是一个以 \(1\) 为源点, \(n\) 为汇点,所有边流量限制为 \(1\) ,总流量为 \(\frac{1}{b}\) 的最小费用流问题

我们令 \(F=\frac{1}{b}\) 那么答案其实就是 \(\min \frac{cost+X}{F}\)

\(F\) 的整数性是好证明的,因为流量限制都为 \(1\) ,考虑 \(\text{EK}\) 的过程,当 \(F \in (k,k+1],k \in \mathbb{Z}\) 时,式子可改写为 \(\frac{kF+c}{F}\) (因为这一条流的代价都为当前的最短路),那么必定是取 \(F=k+1\) 时最优

既然保证了整数性,且对于题中的图, \(\text{MaxFlow} < n\) ,先 \(\text{EK}\) 预处理出来流量为 \(F\) 时的 \(cost\) 然后每次询问暴力枚举即可,可以做到 \(O(n^2m+qn)\)

能不能更给力点啊?设从 \(F-1\)\(F\) 这次拓展的总花费为 \(w\) ,有

\[\frac{cost+X}{F}-\frac{cost-w+X}{F-1}=\frac{Fw-cost-X}{F(F-1)} \]

\(w'\)\(F-2\)\(F-1\) 拓展的总花费,因为费用流是凸函数,故 \(w'<w\) ,所以有

\[(Fw-cost-X)-[(F-1)w'-(cost-w)-X]=(F-1)(w-w') \ge 0 \]

所以 \(Fw-cost\) 不降,又因为我们只要找到最后一个 \(Fw-cost-X \ge 0\) 的位置就可以了,二分即可,费用流再套个原始对偶,时间复杂度 \(O(nm\log m+q \log n)\)

评测链接

 

肆、动态规划模型


[XX Open Cup. GP of Moscow] Circles

考虑对于一个问题 \(f(s_1,s_2,\ldots,s_n)\) 列出其线性规划

\[\max \sum_{i=1}^{n}x_i \\ x_i+x_{(i \bmod n)+1} \le s_i \\ x_i \ge 0 \]

然后有其对偶

\[\min \sum_{i=1}^{n}s_i y_i \\ y_i+y_{(i \bmod n)+1} \ge 1 \\ y_i \ge 0 \]

可以发现把 \(y_i\) 界定在 \([0,1]\) 中时即可取到最优解,若能找到 \(y_i \in S\)\(S\) 为有限集那么这个问题就能更轻松的解决

大胆猜测 \(S=\{0,\frac{1}{2},1\}\) ,也就是三个极值,可以证明必有一组最优解使得 \(y_i \in S\) ,具体可看原文

那么枚举一下第一个取值, \(\text{DP}\) 即可

 

「ZJOI2020」序列

显然如果只有一操作就是积木大赛,操作次数总共就是 \(\sum\limits_{i=1}^n{\max(0,a_i-a_{i-1})}\)

那么设第 \(i\) 个位置一操作个数为 \(x_i\) ,那么转化为求下面这个线性规划

\[\min \sum_{i=1}^n\max(0,x_i-x_{i-1})+\max(0,(a_i-x_i)-(a_{i-2}-x_{i-2})) \\ 0 \le x_i \le a_i \]

发现这貌似和最小费用流模型很像?为了满足限制可以改写为

\[\min\sum_{i=1}^n\max(0,x_i-x_{i-1})+\max(0,(a_i-x_i)-(a_{i-2}-x_{i-2}))+\infty \max(0,x_i-a_i)+\infty \max(0,-x_i) \]

后面两个贡献为 \(\infty\) 不是边的样子也不是点的样子,我们多设个变量 \(s\) ,需要满足限制 \(s=0\) 然后再进一步改写为

\[\min\sum_{i=1}^n\max(0,x_i-x_{i-1})+\max(0,(a_i-x_i)-(a_{i-2}-x_{i-2}))+\infty \max(0,x_i-s-a_i)+\infty \max(0,s-x_i)+\infty s \\ s \ge 0 \]

注意到最小费用流时若是 \(\sum\limits_v f_{v,u}-\sum\limits_v f_{u,v} \ge -b_{u}\) 则能对偶出

\[-\min \ldots +b_u p_u + \ldots \\ \cdots \\ p_u \ge 0 \\ \cdots \]

也就是和上面的 \(s\) 一样,这就代表这个点的流量需求没有限制,所以其实这个点向源汇点连边的流量限制都为 \(\infty\) ,那么这个点就等价于源点与汇点,所以上面那个可以和之前的一样建图,然后源点向每个点 \(i\)\([0,\infty),-a_i\) 的边(前一个是流量限制), \(i\) 向汇点连 \([0,\infty),a_i\) 的边,注意这两种边要满足的是 \(\sum\limits_v f_{v,s}-\sum\limits_v f_{s,v} \ge -\infty\) ,所以都不需要保证满流

显然不能直接跑费用流,全是负环,可以发现实际上对于一个 \(i\) ,源点向 \(i\) 流的流量 \(c_i \le 2\)

因为是最小费用流(没有要求最大流),直接走 \(s \rightarrow i \rightarrow t\) 肯定不优,通过上面的建图,剩下 \(i\) 能走的边一共就两条流量限制为 \(1\) 的边,所以最多就是 \(2\)

我们直接 \(\text{DP}\) ,设 \(f_{i,x,y,z}\) 表示考虑完了 \(i \sim n\)\(s \rightarrow i\) 的边,然后 \(i-1 \rightarrow i+1\) 的流量为 \(x\)\(i \rightarrow i+2\) 的流量为 \(y\)\(i+1 \rightarrow i\) 的流量为 \(z\) ,直接转移即可,当前 \(s \rightarrow i\) 的边的流量可以算出来

更具体的可以看 \(\text{p}\color{red}{\_\text{b}\_\text{p}\_\text{b}}\)评测记录 (不过边有些许不同,连边的方式可以看他的博客

不过这推起来太麻烦了(?),我们来点更无脑的!我们总是把变量消掉用 \(\max(0,\cdots)\) 代替,考虑反其道而行之,最初的线性规划可改写为

\[\min \sum_{i=1}^{n} y_i+z_i \\ -x_i \ge -a_i \\ y_i-x_i+x_{i-1} \ge 0 \\ z_i-x_{i-2}+x_i \ge a_i-a_{i-2} \\ x_i,y_i,z_i \ge 0 \]

\(X_i\)\(-x_i \ge -a_i\) 的对偶变量, \(Y_i\)\(y_i-x_i+x_{i-1} \ge 0\) 的对偶变量, \(Z_i\)\(z_i-x_{i-2}+x_i \ge a_i-a_{i-2}\) 的对偶变量,则有对偶

\[\max \sum_{i=1}^{n}(a_i-a_{i-2})Z_i - a_i X_i \\ Y_i \le 1 \\ Z_i \le 1 \\ -X_i-Y_i+Y_{i+1}+Z_{i}-Z_{i+2} \le 0 \\ X_i,Y_i,Z_i \ge 0 \]

其实这就是最大费用流的线性规划形式,再把 \(X_i\) 消去,可转化为求

\[\max \sum_{i=1}^{n}(a_i-a_{i-2})Z_i - a_i \max(0,-Y_i+Y_{i+1}+Z_{i}-Z_{i+2}) \\ Y_i \le 1 \\ Z_i \le 1 \\ Y_i,Z_i \ge 0 \]

又因为有其为最大费用流的线性规划,所以能够保证整数性,所以 \(Y_i,Z_i \in \{0,1\}\) ,所以设 \(f_{x,y,z}\) 表示 \(Z_{i-2}=x,Y_{i-1}=y,Z_{i}=z\) ,直接枚举 \(Y_i\)\(Z_{i+1}\) 转移即可,可以发现其实上下两个 \(\text{DP}\) 其实一模一样

评测链接

 

 

什么时候更拉格朗日对偶还是个未知数,所以暂时完结撒花!

posted @ 2022-06-30 21:06  一叶知秋‘  阅读(7)  评论(0编辑  收藏  举报