首页 > 其他分享 >浅谈线性规划

浅谈线性规划

时间:2023-07-01 15:14:07浏览次数:41  
标签:浅谈 min 线性规划 sum geqslant leqslant 对偶

以前学了很多次都没学明白,今天再来看看。

本文不会涉及单纯形法的知识点讲解,大部分题目侧重于线性规划对偶。

同样本文不会涉及相关知识点的证明,或是线性规划解的整数性说明,毕竟这只是一个总结性的文章。

拉格朗日对偶部分没学会,暂鸽。


线性规划标准型

对于任意线性规划,容易通过简单的变形使其变为以下形式(无限制的变量拆为两个非负变量作差):

\[\max c^T x\\Ax\leqslant b\\x\geqslant 0 \]

两个变量的线性规划:每条限制对应一个半平面,会交出一个不一定封闭的平面凸形,而最值可以看作最大化某直线纵截距,凸包二分即可。

整数线性规划

其要求自变量取到整数,这是 NP-hard 问题。不过很多情况下,我们遇到的线性规划问题都有整数最优解。

全幺模矩阵

若矩阵 \(A\) 满足任意子式值均为 \(\{-1,0,1\}\),我们称其全幺模矩阵。

在 OI 中,一个充分的判定方法是:系数在 \(\{-1,0,1\}\) 内,每列至多两个非零位置,且若某列有两个非零位置,将对应行连边,得到的图是二分图。

若约束为全幺模矩阵,整数线性规划可以看作普通线性规划求解。

任何最大流、最小费用最大流的线性规划都是全幺模矩阵。

标准型的对偶

我们定义一标准型线性规划的对偶为:

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

若 \(A\) 是 \(B\) 的对偶,那么 \(B\) 一定是 \(A\) 的对偶,称两者互为对偶。

对于某取等的限制,其改写成标准型后对偶会产生两个变量 \(y_1,y_2\),我们需要最小化 \(b(y_1-y_2)\),\(y_1-y_2\) 可以写成一无限制变量 \(y\)(即可以小于 \(0\))。因此取等的限制与无限制变量之间是对偶关系,这样推对偶会更方便。

强对偶定理

我们不加证明地指出——

对于线性规划 \(P\),假设其对偶形式为 \(D\),以下有且仅有一条成立:

  • \(P,D\) 均有最优解且最优解相等;
  • \(P,D\) 均无最优解;
  • 仅有一者有可行解,且有可行解的目标函数在约束下无界。

互补松弛定理

对于一组对偶线性规划 \(P,D\),\(x,y\) 分别为 \(P,D\) 最优解等价于以下两者同时成立:

  • 若 \(x_i>0\),\(D\) 中对应的限制是紧的;
  • 若 \(y_i>0\),\(P\) 中对应的限制是紧的。

(事实上反向也成立)

简证:我们令松弛变量 \(x_s=b-Ax,y_s=A^Ty-c\),根据强对偶定理有:

\[y^TAx+y^Tx_s=y^Tb=c^Tx=y^TAx-y_s^Tx\\\Leftrightarrow y^Tx_s+y_s^Tx=0 \]

如何还原方案

根据前文提到的互补松弛定理,我们若求出对偶定理的最优解,讨论每个变量是否为零,这样就能对应到原问题某个限制是否紧。

若原问题形式较好,我们通过某种方法还原了方案,此时根据互补松弛定理,任意合法解均为最优解。

一些模型

最短路模型:

\[\max d_t-d_s\\d_y\leqslant d_x+c_{x,y}((x,y)\in E) \]

最大流模型:(为了方便,我们加入边 \((t,s)\),流量为 \(\infty\),因此可以要求源汇也满足流量守恒)

\[\max f_{t,s}\\0\leqslant f_{x,y}\leqslant c_{x,y}((x,y)\in E)\\\sum_{(x,i)\in E}f_{x,i}=\sum_{(j,x)\in E}f_{j,x} \]

最小费用流模型:

\[\min\sum w_{x,y}f_{x,y}\\0\leqslant f_{x,y}\leqslant c_{x,y}((x,y)\in E)\\\sum_{(x,i)\in E}f_{x,i}=\sum_{(j,x)\in E}f_{j,x} \]

市面上的形式都引入了 \(b_x\) 这一变量表示 \(x\) 的出流量减入流量(可以看作一条连接源或汇的边),在这也记录一下:

\[\min\sum w_{x,y}f_{x,y}\\0\leqslant f_{x,y}\leqslant c_{x,y}((x,y)\in E)\\\sum_{(j,x)\in E}f_{j,x}-\sum_{(x,i)\in E}f_{x,i}=-b_x \]

一些对偶

最小费用流模型的对偶:

令 \(z_{x,y}\) 为第一个限制的对偶变量,\(p_x\) 为第二个限制的对偶变量:

\[\max\sum -b_xp_x-\sum_{(x,y)\in E}c_{x,y}z_{x,y}\\p_y-p_x-z_{x,y}\leqslant w_{x,y}((x,y)\in E)\\z_{x,y}\geqslant 0((x,y)\in E)\\p_x\geqslant 0 \]

消去 \(z_{x,y}\),整理得:

\[\min\sum b_xp_x+\sum_{(x,y)\in E}c_{x,y}\max(0,p_y-p_x-w_{x,y}) \]

最大费用循环流模型的对偶:

我们先写出最大费用循环流的线性规划

\[\max\sum_{(x,y)\in E} w_{x,y}f_{x,y}\\0\leqslant f_{x,y}\leqslant c_{x,y}((x,y)\in E)\\\sum_{(x,i)\in E}f_{x,i}=\sum_{(j,x)\in E}f_{j,x} \]

对偶得:

\[\min\sum_{(x,y)\in E} c_{x,y}z_{x,y}\\p_x-p_y+z_{x,y}\geqslant w_{x,y}\\z_{x,y}\geqslant 0 \]

同样地消去 \(z_{x,y}\),整理得:

\[\min\sum_{(x,y)\in E}c_{x,y}\max(0,p_y-p_x+w_{x,y}) \]

其等价于上面最小费用流添加汇点到源点的边后令所有 \(b_i=0\),且令 \(w'_{x,y}\leftarrow w_{x,y}\) 的结果,与我们的认知相吻合。

根据对偶的结果,我们可以得知若题目所求为这些结果的式子,可以对偶,并使用费用流/最大费用循环流解决。

一些例题

以下的例题若不特殊说明,默认变量非负。

① P3337 [ZJOI2013] 防守战线

令变量 \(p_i\) 表示 \([1,i]\) 建的塔数量,写出线性规划:

\[\min \sum_i p_i(C_i-C_{i+1})\\p_{i+1}-p_i\geqslant 0\\p_{R_i}-p_{L_i-1}\geqslant D_i \]

改写目标函数为:

\[\min \sum_i p_i(C_i-C_{i+1})+\sum_i\infty\max(0,-p_{i+1}+p_i)+\sum_i\infty\max(0,-p_{R_i}+p_{L_i-1}+D_i) \]

使用上面的最小费用流模型解决。

② P3980 [NOI2008] 志愿者招募

写出线性规划:

\[\min \sum_i c_ix_i\\\sum_{l_j\leqslant i\leqslant r_j}x_j\geqslant a_i \]

对偶得到:

\[\max\sum_i a_iy_i\\\sum_{i=l_j}^{r_j}y_i\leqslant c_j \]

不过到了这一步好像只能单纯形?

也可以作前缀和变为上一题的形式然后再对偶,不过这应该是等价于直接做费用流的。

③ ABC224H Security Camera 2

写出线性规划:

\[\min\sum a_ix_i+\sum b_iy_i\\x_i+y_j\geqslant c_{i,j}((i,j)\in E) \]

对偶得到:

\[\max\sum_{(i,j)\in E}c_{i,j}z_{i,j}\\\sum_{(u,i)\in E} c_{u,i}\leqslant a_u\\\sum_{(i,v)\in E}c_{i,v}\leqslant b_v \]

经典的二分图最大费用流模型。

④ CF671D Roads in Yusland

首先有一种不需要线性规划的方法,也提一下:

令 \(f_x\) 为覆盖了 \(x\) 子树与其父边的方案数,但 \(f\) 之间无法直接转移。我们 dfs 整棵树,对于每棵子树维护出很多 \((c,t)\) 表示覆盖完这棵树后继续向上覆盖 \(t\) 步,最小代价是 \(c\)。

对于 \(y\in \operatorname{son}(x)\),考察 \(y\) 的二元组 \((c,t)\) 转移到 \(x\),其产生的贡献是 \(c+\sum_{z\in \operatorname{son}(x),z\ne y}f_z\),于是我们可以使用支持全局减,合并,维护最大值的左偏树来维护所有方案,复杂度 \(O(n\log n)\)。

写出线性规划:

\[\min \sum c_iz_i\\\sum_{(x_j,y_j)\ni i} z_j\geqslant 1 \]

对偶得到:

\[\max \sum p_i\\\sum_{i\in (x_j,y_j)}p_i\leqslant c_j \]

这就是经典的贪心了,要维护每条链被覆盖的次数,每个点贪心地减,同样使用左偏树做到 \(O(n\log n)\)。

⑤ HDU6974 Destinations

注意到问题可以被改写成:有 \(3m\) 条链,选择 \(m\) 条链使得互不相交(因为同一起点的路径两两相交),同时容易发现 \(m\) 是上界,我们将权值改为 \(\inf-v_i\),即选择若干条不交链,最大化权值和。

写出线性规划:

\[\max \sum c_iz_i\\\sum_{(x_j,y_j)\ni i} z_j\leqslant 1 \]

对偶得到:

\[\min\sum p_i\\\sum_{i\in (x_j,y_j)}p_i\geqslant c_j \]

这是经典的树上延迟贪心,我们 dfs 整棵树,在 lca 处考察路径,若点权和不够就补上来,树状数组维护,复杂度 \(O(n\log n)\)。

⑥ P7246 手势密码

写出线性规划:

\[\min \sum_{u,v}z_{u,v}\\\sum_{(u,v)\ni i}z_{u,v}=a_i \]

对偶得到:

\[\max\sum a_ip_i\\\sum_{i\in(u,v)}p_i\leqslant 1 \]

其中 \(p_i\) 无正负限制。

于是直接令 \(f_{x,0/1}\) 表示从 \(x\) 子树出发,权值和最大的路径值为 \(0/1\) 的最大答案,容易发现 \(p_i\) 只会取 \(\{-1,0,1\}\),复杂度 \(O(n)\)。

⑦ P6631 [ZJOI2020] 序列

dxm 论文推法好像麻烦了点,类似上一题,我们有一个更简单的推法(其中 \(S\) 为操作构成的集族):

\[\min \sum_{T\in S}x_T\\\sum_{T\ni i}x_T=a_i \]

对偶得到:

\[\max\sum a_ip_i\\\sum_{i\in T}p_i\leqslant 1 \]

类似上一题地列出 dp,记录三类操作对应最大后缀和即可,容易发现值域 \(\{0,1\}\),复杂度 \(O(n)\)。

⑧ XX Open Cup GP of Moscow C Circles

写出线性规划:

\[\max\sum x_i\\x_i+x_{i\bmod n+1}\leqslant s_i \]

对偶得到:

\[\min\sum s_iy_i\\y_i+y_{i\bmod n+1}\geqslant 1 \]

事实上可以证明,除了全为 \(0.5\) 的情况,其余时候均满足 \(y_i\in\{0,1\}\),于是从前往后 dp 一下即可,环的限制不难拆,复杂度 \(O(n)\)。

⑨ CF1696G Fishingprince Plays With Array Again

写出线性规划:

\[\min\sum x_i+y_i\\Xx_i+Yx_{i-1}+Yy_i+Xy_{i-1}\geqslant a_i\\x_0=y_0=x_n=y_n=0 \]

我们发现第三行限制事实上是没有必要的,因为这些操作都可以找到对应不劣的合法操作代替。

对偶得到:

\[\max \sum a_iz_i\\Xz_i+Yz_{i+1}\leqslant 1\\Yz_i+Xz_{i+1}\leqslant 1\\ \]

不妨设 \(X\leqslant Y\),事实上可以证明,\(z_i\) 的取值只有 \(\{0,\frac 1{X+Y},\frac 1Y\}\),于是使用线段树维护矩阵乘法维护即可,复杂度 \(O(q\log n)\)。

⑩ P4642 [BJWC2008] 方程

线性规划式子在题面里就不列出来了,直接写出对偶形式:

\[\min z_1s+z_2t\\a_iz_1+b_iz_2\geqslant c_i \]

这里的 \(z_1,z_2\) 无正负限制,于是预处理半平面交,询问在凸包上二分即可,复杂度 \(O((n+q)\log n)\)。

⑪ CODECHEF Chefbook

写出线性规划:

\[\max\sum p_iout_i-q_iin_i\\s_{x,y}\leqslant w_{x,y}+p_x-q_y\leqslant t_{x,y}((x,y)\in E) \]

将 \(w_{x,y}\) 的影响消去,对偶得到:

\[\min\sum_{(x,y)\in E}-s'_{x,y}f_{x,y}+t'_{x,y}g_{x,y}\\-\sum_{(x,i)\in E}f_{x,i}+\sum_{(i,x)\in E}g_{i,x}\geqslant out_x\\\sum_{(x,i)\in E}f_{x,i}-\sum_{(i,x)\in E}g_{i,x}\geqslant-in_x \]

容易转成前面提到的最小费用流模型,而这题还要求构造方案,使用前文提到的还原方法,问题变为了差分约束,任跑一组解即可。

⑫ bzoj3118 orz the mst

对于每条非树边,其限制为权值大于等于路径上所有边,容易写出:

\[\min\sum_{e\in T}b_ex_e+\sum_{e\not\in T}a_ex_e\\x_e+w_e\geqslant w_i-x_i(i\in P_e,e\not\in T) \]

对偶得到:

\[\max\sum_{i\in P_e,e\not \in T}(w_i-w_e)y_{e,i}\\\sum_{i\in P_e}y_{e,i}\leqslant a_e(e\not\in T)\\\sum_{P_e\ni i}y_{e,i}\leqslant b_i(i\in T) \]

暴力连边,经典的二分图费用流模型。

⑬ P4412 [SHOI2004] 最小生成树

上一题的子问题。

⑭ CF1765J Hero to Zero

先证明一个经典结论:在一张带权二分图中,最大带权匹配的权值和恰好为最小顶标和。

写出最大带权匹配的线性规划:

\[\max\sum_{(x,y)\in E}w_{x,y}z_{x,y}\\\sum_{(x,i)\in E}z_{x,i}\leqslant 1(x\in L)\\\sum_{(i,x)\in E}z_{i,x}\leqslant 1(x\in R) \]

对偶得到:

\[\min\sum_{i\in L}p_i+\sum_{i\in R}q_i\\p_x+q_y\geqslant w_{x,y}((x,y)\in E) \]

证毕。此时再回顾 ⑫,其无非是将最小顶标和对偶成了最大带权匹配问题。

回到这个问题,我们直接设 \(x_i,y_j\) 分别表示某一行/列操作数量,写出线性规划:

\[\min\sum x_i+y_i+\sum_{i,j}(c_{i,j}-x_i-y_j)=\sum c_{i,j}-(n-1)(\sum x_i+y_i)\\x_i+y_j\leqslant c_{i,j} \]

这就是最小顶标和模型,对偶成最大匹配后容易使用贪心解决,复杂度 \(O(n\log n)\)。

⑮ 2022 集训队互测 Round 7 B 卑鄙的下毒人

令原材料毒药数量前缀和为 \(q_i\),写出线性规划:

\[\min k(q_n-q_0)+\sum_i\max(0,a_i-(b_{R_i}-b_{L_i-1}))\\q_i\leqslant q_{i+1} \]

式子很类似最大循环流模型,将 \(q_i\leqslant q_{i+1}\) 带上 \(\infty\) 的权值写入目标函数中,直接应用上面的式子得到建图:

  • \((0,n,k,0)\);
  • \((R_i,L_i-1,1,a_i)\);
  • \((i+1,i,\infty,0)\)。

我们可以去除 \((0,n)\) 的边变为有源汇最大费用流,取负变成最小费用流,由于有负权,我们需使用原始对偶求解。第一轮的势能计算也可以不使用 spfa,因为此时图为 dag 可以直接递推。

⑯ CF1307G Cow and Exercise

写出线性规划:

\[\max z_n-z_1\\z_y\leqslant z_x+c_{x,y}+w_{x,y}((x,y)\in E)\\\sum_{(x,y)\in E}w_{x,y}\leqslant C \]

对偶得到(注意 \(z\) 是不限制正负的变量,对偶后是取等的限制):

\[\min\sum_{(x,y)\in E}c_{x,y}f_{x,y}+Cg\\\sum_{(x,i)\in E}f_{x,i}-\sum_{(i,x)\in E}f_{i,x}=\begin{cases}1&x=1\\-1&x=n\\0&\text{otherwise}\end{cases}\\-f_{x,y}+g\geqslant 0 \]

其很类似最小费用流模型,稍微变形得到:

\[\min(\sum_{(x,y)\in E}c_{x,y}f_{x,y}+C)g\\\sum_{(x,i)\in E}f_{x,i}-\sum_{(i,x)\in E}f_{i,x}=\begin{cases}\frac 1g&x=1\\-\frac 1g&x=n\\0&\text{otherwise}\end{cases}\\f_{x,y}\leqslant 1 \]

注意到 \(\sum_{(x,y)\in E}c_{x,y}f_{x,y}\) 为每条边流量在 \([0,1]\) 内的图,流量恰好为 \(\frac 1g\) 时最小费用流费用大小,即求:

\[\max\frac{\operatorname{mincost of flow}(h)+C}{h} \]

虽然 \(h\) 是任意实数,可以证明对于任意区间 \([t,t+1](t\in\mathbb Z)\),最值永远在边界取到。

众所周知,最小费用最大流是凸的,于是记录下每次增广结束后的流量与费用,其不重不漏地构成了凸壳上所有位置,每次询问暴力遍历凸壳即可,复杂度 \(O(nm^2+qm)\)。

⑰ loj#6511. 「雅礼集训 2018 Day8」B

二分答案,我们考虑最小化支出,写出线性规划:

\[\min \sum c_iz_i\\d_y\geqslant d_x+w_y-z_y((x,y)\in E)\\d_i\leqslant mid \]

消去 \(z_i\) 可以发现这是最大费用循环流模型。

⑱ CF375E Red and Black Tree

有树形背包做法,这里仅讨论对偶做法,写出线性规划:

\[\min(1-c_i)z_i\\\sum_{\operatorname{dis}(x,i)\leqslant X}z_i\geqslant 1\\\sum z_i=m \]

容易发现不会有 \(z_i\leqslant 1\),对偶变为标准型,使用单纯型法解决。

⑲ 2021 集训队互测 Round 4 B 机器

标签:浅谈,min,线性规划,sum,geqslant,leqslant,对偶
From: https://www.cnblogs.com/xiaoziyao/p/17517642.html

相关文章

  • 浅谈线性基
    前言线性基是一种处理异或问题的利器,拥有优秀的时间复杂度基本性质概念定义:给定数集\(S\),以异或运算张成的数集与\(S\)相同的极大线性无关集,称为原数集的一个线性基。通俗地说,线性基是一个数的集合。每个序列都拥有至少一个线性基。取线性基中若干个数异或起来可以得到原......
  • 浅谈一下c#多线程编程
    概念线程:线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。同步:一定要等任务执行完了,得到结果,才执行下一个任务。如果程序执行耗时操作时会阻塞线程。应用场景UI与I/O:UI发出I/O操作,I/O操作是费时任务计算密集型工作(CPU-boun......
  • 浅谈PCBA板机械加工分类
    印制板的机械加工主要应用于印制板坯料的下料(俗称开料)、孔加工和外形加工,是印制板整个工艺程序中的重要步骤。由于印制板的孔和外形加工质量都直接影响印制板的机械装配性能和电气连接性能,尤其是印制板上各种用途的孔(元件安装孔、导通孔、安装孔、定位孔、检测孔等)加工质量还会影......
  • 浅谈装配式建筑的抗震性能到底好不好?
    前言根据国家标准《装配式混凝土建筑技术标准》GB/T51231-2016、《装配式混凝土结构技术规程》JGJ1-2014的相关内容,目前我国的装配式建筑结构的抗震性能基本等同于现浇结构的抗震性能。而实际上,由于预制构件的标准化生产,其实际的混凝土性能指标是优于现场浇筑的混凝土的,因此,在所有......
  • 浅谈SpringSecurity与CVE-2023-22602
    一、前言  前段时间Apache报告了CVE-2023-22602,由于1.11.0及之前版本的Shiro只兼容Spring的ant-style路径匹配模式(patternmatching),且2.6及之后版本的SpringBoot将SpringMVC处理请求的路径匹配模式从AntPathMatcher更改为了PathPatternParser,当1.11.0及之前版......
  • 浅谈单调队列优化DP
    对于形如\[f_i=\max(f_{L≤j≤R}+w_i)\]的状态转移方程,也就是转移来自之前某个定长区间的最值,我们可以使用单调队列来维护区间最值,从而优化时间复杂度。烽火传递我们看到题目可以想到用\(f_i\)表示考虑到\(i\)这个烽火台,点第\(i\)个的合法方案中的最小代价那么可以想到......
  • 浅谈无线测温系统在高压开关柜中的应用
    罗轩志安科瑞电气股份有限公司上海嘉定201801摘要:高压开关柜是配电系统中重要的组成部分,其主要作用是控制电荷、分配电能和开断电流等,对维持系统的稳定性有一定的保障作用。将无线测温技术应用于高压开关柜,可以实现对其进行实时的动态监测,有助于相关工作人员根据高压开关柜的温度......
  • 浅谈智能照明控制管理系统的功能介绍
    罗轩志安科瑞电气股份有限公司上海嘉定201801摘要:智能照明控制系统较好地实现了智能控制、人性化照明和节能降耗的功能,使其在楼宇控制领域变得越来越重要,越来越受到人们的重视。本文介绍了智能照明控制系统的概念、特点、优势、发展方向等内容,并着重对智能照明控制系统的结构......
  • 浅谈 Kotlin 与 Java 互操作 (上)
    前言浅谈Kotlin与Java互操作(上)Kotlinis100%interoperablewithJavaandAndroidKotlin官网的一句标语,其旨意是表达kotlin的Interoperable-互操作特性互操作就表示Kotlin中可以调用Java的开放接口来访问成员属性和成员方法,同时在Java代码中也百分百兼容Kotlin......
  • 浅谈类 k 短路问题
    u群题题意:\(n\)个数,对于所有大小在\([L,R]\)内的子集求和并排序,求前\(k\)小子集的信息。排序,记数组为\(a_{1,\cdots,n}\)。先考虑\(L=R\)的情况。最小的子集一定是\(a_{1,\cdots,L}\),第二小则是将\(a_L\)改为\(a_{L+1}\),推广到更一般的情况——我们以\([1,L]\)......