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

学习自 丁晓漫,再探线性规划对偶在信息学竞赛中的应用,2021集训队论文。当然很多公式和图片是直接抄下来的。

被迫营业

定义什么的全都跳过。

如果一开始就讲对偶的定义,那做到最后一题的时候多半已经忘记定义了(比如我),所以学习笔记的写作顺序会和原论文不同。

因为是被迫营业,所以很多简单的东西不会被略过,可能讲得较慢。

通用解法

OI 中能用到的暂时只有单纯形法。

可以在这里学习。

标准型对偶

(目前看来)最常用的对偶。

先把原线性规划写成标准形式:

\[\max c^T x\\ Ax\le b\\ x\ge 0 \]

其中 \(x,c\) 是长度为 \(n\) 的向量,分别表示变量和目标函数系数。 \(A\)\(m\times n\) 的矩阵,表示 \(m\) 个约束。 \(b\) 是长度为 \(m\) 的向量,表示约束中的常数。

这可以对偶成

\[\min y^Tb\\ A^Ty\ge c\\ y\ge 0 \]

其中 \(y\) 是新的变量。

方便背诵的形式:限制和变量对调,目标函数系数和约束常数对调,约束中的系数不变。

可以证明其中一边有解时另一边也一定有解,且目标函数的最优解相同。注意对偶是双向的。

一个弱点是从对偶形式的 \(y\) 较难还原出原形式的 \(x\) (论文没写,我不会),所以对偶形式的 \(y\) 所具有的性质不能在 \(x\) 上找到对应的性质,并且在要求输出方案时不太能做。

最小费用流模型

建议全文背诵,比每次重新推一遍快很多。

\(f_{uv},c_{uv},w_{uv}\) 分别表示流量、流量上界、代价。\(b_u\) 表示 \(u\) 的流量需求,即流出减流入至多是 \(b_u\) (论文中用了等号,效果略有不同,下面会讲)。

直接把线性规划写出来,得到

\[\min \sum_{u v} w_{u v} f_{u v} \\ -f_{u v} \geq-c_{u v} \\ \sum_{v} f_{v u}-\sum_{v} f_{u v}\ge -b_{u} \]

\(z_{uv}\) 是边流量约束的对偶变量, \(p_u\) 是点流量约束的对偶变量。有

\[\max \sum_{u}-b_{u} p_{u}-\sum_{u v} c_{u v} z_{u v} \\ p_{v}-p_{u}-z_{u v} \leq w_{u v} \]

注意到 \(z_{uv}\) 的系数是非正数(这要求 \(c\) 是非负数),而且它只在一个约束中出现,所以容易发现它一定要取到下界 \(\max (0,p_v-p_u-w_{uv})\) 。然后把负号提出去,变成

\[-\min \left\{\sum_{u} b_{u} p_{u}+\sum_{u v} c_{u v} \max \left(0, p_{v}-p_{u}-w_{u v}\right)\right\} \]

其中 \(p_u,p_v,c_{uv}\) 都必须是非负数,\(b,w\) 没有限制。

另外,如果要求“流出减流入恰好是 \(b_u\)”,就会使得 \(p_u\) 非负的限制被删除。这是因为一个 \(=\) 要被拆成两个相反的约束,对偶之后就是两个相减的变量,也就相当于取值任意。

因为对偶是双向的,所以如果题目可以转化成最后这个形式,就一定可以用费用流求解。

整数性的探讨

虽然费用流在流量都是整数的时候最优解也一定是整数,但这并不代表它的对偶问题也一定有整数最优解。

不过事实证明整数最优解是一定存在的:

把非整数的 \(p_u\) 拿出来,按照本质不同的非零小数部分分类,设有 \(k\) 种。

随便拿一部分出来,考虑把它调大或者调小 \(\epsilon\)

分类讨论一下发现调大调小的 \(\Delta\) 之和恰好为 0 ,所以必然有一边不劣。往这边一直调直到 \(k\) 减小即可。

所以在这个模型中不再需要考虑整数解的存在性了。

例题

设置变量的一些技巧可以自己揣摩。

默认所有设出的变量都会带 \(\ge0\) 的限制。

[ZJOI2013] 防守战线

直接设 \(p_i\) 表示前 \(i\) 个位置一共建了几个塔,就是

\[\min p_{i}\left(C_{i}-C_{i+1}\right) \\ p_{i+1}-p_{i} \geq 0 \\ p_{R_{i}}-p_{L_{i}-1} \geq D_{i} \]

直接转化成

\[\sum_{v} p_{v}\left(C_{v}-C_{v+1}\right)+\sum_{v} \infty \max \left(0, p_{v}-p_{v+1}\right)+\sum_{i} \infty \max \left(0, p_{L_{i}-1}-p_{R_{i}}+D_{i}\right) \]

[Aizu 2230] How to Create a Good Game

\(p_i\) 表示到 \(i\) 的最长路。设原图 \(0\)\(n-1\) 的最长路长度是 \(D\) 。设 \(x_{uv}\) 是增长的边权。

虽然不能限制 \(p\) 恰好等于最长路,但是如果取到比最长路更长一定不优,所以只需要限制它不是太短,即满足三角不等式。

\[\max \sum_{u v} x_{u v} \\ p_{n-1}-p_{0} \leq D \\ p_{v}-p_{u} \geq w_{u v}+x_{u v} \\ \]

仍然注意到 \(x_{uv}\) 只在一个约束中出现,所以它必然取到上界 \(p_v-p_u-w_{uv}\) ,而且这东西必须 \(\ge 0\)

该取反的取反,得到

\[\min \sum_{u v} \infty \max \left(0, p_{u}-p_{v}+w_{u v}\right)+p_{u}-p_{v}+w_{u v} \]

动态规划模型

对偶时贡献系数会变成约束的常数,那么如果贡献系数很小,对偶之后的操作空间就很小。此时可能可以用 DP 解决。

当然还是逃不过证明整数最优解存在的这一步。

例题

[XX Open Cup. GP of Moscow] Circles

限制是一个环,要求相邻两个相加不超过 \(s_i\) ,贡献系数是 1 。

容易发现对偶之后仍然是一个环,要求相邻两个相加至少是 1 ,贡献系数是 \(s_i\) ,求最小值。

容易发现每个变量的取值都是 \([0,1]\) 。进一步地,可以发现所有变量都应当取 \(\{0,1\}\) ,或者是全部 \(0.5\)

证明:
对于偶环,可以奇数位置减、偶数位置加,或者反过来,则一定有一种调整方法不劣。调到出现 0 为止,那么它两边都是 1 ,与剩下的位置独立,可以删去。然后对剩下的位置接着操作即可。

对于奇环,拿一个最优解出来,考虑是否有相邻两个位置相加大于 1 。如果不存在那么必须全都是 \(0.5\) ,否则从这里断开之后可以一样的方法操作。为了保证最优性,两个方向调整都不会改变总和,所以奇数加偶数减直到出现 0 即可。

然后随便 DP 。

[ZJOI2020] 序列

二三类操作是类似的,而一类操作和它们不太一样。二三类操作之间又是独立的。

如果只有其中一种操作,都很容易知道答案是差分之后 \(>0\) 位置的和。

那么设做完一类操作之后每个位置的值是 \(b_i\) ,则答案显然是

\[\min \left\{\sum \max(0,b_i-b_{i-2})+\max(0,(a_i-b_i)-(a_{i-1}-b_{i-1}))+\infty \max(0,b_i-a_i)\right\} \]

转化成最大费用流就是

\[b_{i-2}\to b_i,[0,1],0\\ b_i\to b_{i-1},[0,1],a_i-a_{i-1}\\ S\to b_i,[0,+\infty),-a_i\\ b_i\to T,[0,+\infty),0 \]

(稍微注意一点:我们其实弄出了一个新的变量 \(t=0\) 。为了保证 \(t=0\) 就会在目标函数中加上 \(+\infty \cdot t\) ,也就相当于从 \(S\) 连向 \(t\) 的流量无穷的边。那么 \(t\)\(S,T\) 都有流量无穷的边,所以它就是 \(S,T\) 的化身。连边中所有不存在的变量都会视语境变成 \(S\)\(T\) 。)

注意我们是最大费用流,所以 \(S\to b_i\) 的边肯定是能不流就不流。而其他边的流量非常小,跨度也很小,直接 DP 即可。

显然这比贪心做法简单一万倍。唯一的坏处就是做完之后啥也没学到(

拉格朗日对偶

一般的拉格朗日对偶

\[\max f(x)\\ g(x)\le 0 \]

引入拉格朗日乘子 \(\lambda\) ,要求 \(\lambda\ge 0\) 。设 \(L(\lambda)=\max f(x)-\lambda g(x)\) 。(注意 \(x,\lambda\) 也可以同时是向量。)

由定义容易得到 \(\max f(x)\le \min L(\lambda)\)

由于 \(L(\lambda)\)\(\max\) 里面关于 \(\lambda\) 线性,而外面套一层 \(\max\) ,所以容易发现 \(L({a+b\over 2})\le {1\over 2}(L(a)+L(b))\) ,即满足凸性。

(不过暂时没有看出凸性有什么用)

注意此时我们甚至不知道 \(\max f(x)\le \min L(\lambda)\) 的等号是否能取到。

线性规划中的拉格朗日对偶

\(f(x)={c}^{T} {x}, g(x)={A} {x}-{b}, \lambda=y^{T}\) ,其中 \(y\) 是对偶问题中的最优解。

那么就有 \(L(\lambda)=\max c^Tx-y^T(Ax-b)=\max (c^T-y^TA)x+y^Tb\) 。因为 \(c^T\le y^TA\) ,所以 \(x=0\) 时取到最大值 \(y^Tb\) ,恰好是 \(\max f(x)\)

可以看出在线性规划中对偶和拉格朗日对偶有着奥妙重重的关系。论文说它们本质相同,我头脑愚钝不知何为本质(

有什么用呢?可以正着做,也就是设出 \(\lambda\) 然后乱搞;也可以倒着做,见到 \(\min \{\max\{\}\}\) 的形式时反着推回普通线性规划的形式。

例题

[POJ Monthly 2015.5] Min-Max

没有太多可解释的。

直接对偶也是可以的。有两个限制

\[\sum p_i\mu_i=C\\ \sum \mu_i=1 \]

根据前面所说,\(=\) 的限制对偶之后的变量可以在 \(\mathbb{R}\) 中任取,所以对偶之后的限制是半平面交,最值会在凸包顶点处取到。

[Utpc2012.10] きたまさの逆襲

\(\lambda_i\) 表示给 \(U_i\) 加的 buff 层数, \(f_{uv}\) 表示这条边是否存在于完美匹配中,则答案显然是

\[\max _{\lambda_{1}, \ldots, \lambda_{k} \geq 0} \min _{|f|=|V|} \sum _i\left(\sum_{u \in U_{i}} \sum_{v}\left(w_{u v}+\lambda_{i}\right) f_{u v}-b_{i} \lambda_{i}\right) \]

里层拆成两部分,分别是

\[\sum_{uv}w_{uv}f_{uv}\\ -\sum _i\left(b_{i}-\sum_{u \in U_{i}} \sum_{v} f_{u v} \right)\lambda_{i} \]

第一部分就是代价函数,第二部分就是限制函数。对偶的结果就是

\[\min \sum_{uv}w_{uv}f_{uv}\\ b_{i}-\sum_{u \in U_{i}} \sum_{v} f_{u v}\ge 0 \]

可以看出是满足一些条件的最小费用流,直接做即可。

最后还有整数性的问题。前面证明拉格朗日对偶时说的是 \(\lambda=y^T\) ,而由于费用流的对偶变量都是整数,所以一定存在合法的整数 \(\lambda\)

posted @ 2021-06-25 21:32  p_b_p_b  阅读(1873)  评论(0编辑  收藏  举报