专栏文章

[笔记] 线性规划 学习笔记

算法·理论参与者 41已保存评论 43

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
43 条
当前快照
3 份
快照标识符
@mkpp7ql2
此快照首次捕获于
2026/01/23 01:01
4 周前
此快照最后确认于
2026/02/19 01:16
11 小时前
查看原文
参考资料:

Linear Programming

Introduction

给定一个基集 UU,存在可行解集合 S\mathcal{S},是 UU 的一些子集形成的“集合族”,有 wi,iUw_i,i\in U,表示元素的价值。要找到 SSS\in \mathcal{S} 最小化或最大化 w(S):=iSwiw(S):=\sum\limits_{i\in S}w_i
一些例子:最短路问题、最小生成树问题、最大独立集、图的最大匹配、背包问题。
几乎所有组合优化问题 Combinatorial Optimization Problem 都可以等价地写成一个整数规划问题 Integer Program(IP),就是变量 xi{0,1}x_i\in\{0,1\} 表示是否选择 ii,约束是解在可行解集合中,目标是最优化 wixi\sum w_ix_i
而 IP 问题很难,一般是 NP-Hard 的,但我们可以把松弛 relax 成 x{0,1}    0xi1x\in\{0,1\}\implies 0\leq x_i\leq 1,变成一个线性规划问题 Linear Program(LP)问题。
对于一些问题,LPIP\text{LP}\equiv \text{IP},我们就获得了精确算法 Exact Algorithms。而一些问题 LP≢IP\text{LP}\not\equiv \text{IP},我们只能通过解决 LP 问题得到一个分数解,然后设计算法把解取整变成一个整数解,这就是近似算法 Approximation Algorithms。

线性规划问题的一个例子:
min7x1+4x2s.t.x1+x25x1+2x264x1+x28x1,x20\begin{aligned} \min\quad 7x_1+4x_2& \quad \text{s.t.}\\ x_1+x_2&\geq 5\\ x_1+2x_2&\geq 6\\ 4x_1+x_2&\geq 8\\ x_1,x_2&\geq 0 \end{aligned}
最优解是 x1=1,x2=4x_1=1,x_2=4 得到 7×1+4×4=237\times 1+4\times 4=23

以下是线性规划的标准形式:
minc1x1+c2x2++cnxns.t.a1,1x1+a1,2x2++a1,nxnb1a2,1x1+a2,2x2++a2,nxnb2am,1x1+am,2x2++am,nxnbmx1,x2,,xn0\begin{aligned} \min\quad c_1x_1+c_2x_2+\dots+c_n x_n& \quad \text{s.t.}\\ a_{1,1}x_1 + a_{1,2}x_2 + \cdots + a_{1,n}x_n&\geq b_1 \\ a_{2,1}x_1 + a_{2,2}x_2 + \cdots + a_{2,n}x_n&\geq b_2 \\ \vdots \qquad \vdots \qquad \vdots \qquad \vdots \qquad \\ a_{m,1}x_1 + a_{m,2}x_2 + \cdots + a_{m,n}x_n&\geq b_m \\ x_1,x_2,\cdots,x_n&\geq 0 \end{aligned}
其中 nn 是变量个数,mm 是限制个数。
写成:
x:=(x1x2xn)Rnx := \begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{pmatrix} \in \mathbb{R}^n c:=(c1c2cn)Rnc := \begin{pmatrix} c_1 \\ c_2 \\ \vdots \\ c_n \end{pmatrix} \in \mathbb{R}^n A:=(a1,1a1,2a1,na2,1a2,2a2,nam,1am,2am,n)Rm×nA := \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix} \in \mathbb{R}^{m \times n} b:=(b1b2bm)Rmb := \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_m \end{pmatrix} \in \mathbb{R}^m
那么有:
mincTxs.t.Axbx0\begin{aligned} \min\quad c^{\mathsf T}x& \quad \text{s.t.}\\ Ax&\geq b\\ x&\geq 0 \end{aligned}
所有的线性规划都可以转化成标准形式。
  • 如果求 max\max 就是求目标函数的相反数的 min\min
  • 如果取值是 xiax_i\geq -a 则可以用 xi+ax_i+a 代替 xix_i
  • 如果某个变量 xix_i 没有约束,引入两个新的变量 xi,xix_i',x_i''xixix_i'-x_i'' 代替 xx
  • 如果是 \leq 号,那条限制乘上 1-1
  • 如果是 == 号,那么再拼一个 \leq 的限制出来就可以强行取等。

我们称满足 Axb,x0Ax\geq b,x\geq 0xx 的集合为可行域 Feasible Region,可行域其实是一个多面体 Polyhedron。如果一个多面体中,每一个坐标方向都有上界和下界,那么这个多面体就是一个多胞体 Polytope。

如果满足以下条件,则称 xxx(1),x(2),,x(t)x^{(1)}, x^{(2)}, \dots, x^{(t)} 的一个凸组合 Convex Combination:
存在 λ1,λ2,,λt[0,1]\lambda_1, \lambda_2, \dots, \lambda_t \in [0,1],使得
λ1+λ2++λt=1,\lambda_1 + \lambda_2 + \cdots + \lambda_t = 1,
λ1x(1)+λ2x(2)++λtx(t)=x.\lambda_1 x^{(1)} + \lambda_2 x^{(2)} + \cdots + \lambda_t x^{(t)} = x.
所有由 x(1),x(2),,x(t)x^{(1)}, x^{(2)}, \dots, x^{(t)} 的凸组合所构成的集合,称为这些点的凸包 Convex Hull。

PP 是一个多胞体,xxPP 中的一个点。如果不存在其他两个不同的点 x,xPx', x'' \in P,使得 xx 是它们的一个凸组合,那么称 xxPP 的一个顶点 vertex,也叫做极点 Extreme Point。
引理:一个多胞体有有限多个顶点,并且它等于这些顶点的凸包。
引理:设 xRnx \in \mathbb{R}^n 是一个 nn 维多胞体的一个极点。 那么,在定义该多胞体的约束中,存在 nn 条约束,使得把这 nn 条约束中的“不等式”改成“等式”后,得到的线性方程组唯一解就是 xx
引理:如果一个线性规划的可行域是一个多胞体,那么它的最优值一定可以在该多胞体的某个顶点处取得。
一些特殊情况,如在最小化的线性规划问题中:
  • 如果可行域为空,最小值是 \infty
  • 如果可行域 unbounded,也就是存在方向使目标函数可以无限减小,最小值是 -\infty

Methods for Solving Linear Programs

常见的三种算法:
单纯形法:Simplex Method,指数级复杂度,实际运行效率很快。
椭球法:Ellipsoid Method,多项式复杂度,实际运行效率很慢。他不能直接求解,而是判定是否有解。
内点法:Interior Point Method,多项式复杂度,实际运行效率很快。

单纯形法,Dantzig 提出。
其本质其实是,在顶点上进行游走,来改进目标函数的值,每次切换一个顶点。
我们先引入松弛变量把 AxbAx\geq b 转化为 Axs=bAx-s=b 其中 s0s\geq 0
然后我们不妨令 xn+i:=six_{n+i}:=s_i,我们可以整理出一套 xn+ix_{n+i} 关于 xj(jn)x_j(j\leq n) 的线性组合。把 xn+ix_{n+i} 称为基变量 basic variable,xj(jn)x_j(j\leq n) 称为非基变量 non-basic variable。我们先令非基变量为 00,则可以得到基变量的取值,这是我们的基础解(但是不一定是可行解)。
我们选取那些能改进目标函数的非基变量替换基变量,来尽可能减小目标函数的取值。可以解不等式算出每个非基变量对于每个基变量而言,最紧的限制。然后找到最优的那个,把非基变量替换成基变量,得到和原来等价的式子,这个过程称之为转轴 pivot。这次新的换来的基变量即为入基变量 entering variable,变成非基变量的那个叫做出基变量 leaving variable。重复这个过程,即可得到最优解。
当然,如果选不出可以替换的了,显然已经得到 Optimal Solution 了。
如果存在某个可以改进目标函数的非基变量,但是无法确认他的上界,就是怎么改都可以,那么目标函数就可以无限减小,于是就是 Unbounded。
至于基础解不是可行解,我们可以这样子进行补救:做两次单纯形,第一次求解一个可行性的线性规划问题,得到一个基础解,然后拿基础解做第二次线性规划问题。
我们得到形式为:
mincTxs.t.Ax=bx0\begin{aligned} \min\quad c^{\mathsf T}x& \quad \text{s.t.}\\ Ax&= b\\ x&\geq 0 \end{aligned}
初始问题,我们先求解:
min1Tas.t.Ax+a=bx,a0\begin{aligned} \min\quad 1^{\mathsf T}a& \quad \text{s.t.}\\ Ax+a&= b\\ x,a&\geq 0 \end{aligned}
然后求解这个问题。显然若 b0b\geq 0 可以直接取 a=ba=b 作为可行的基础解,而对于 b<0b<0 的情况,我们不妨左右两边乘上 1-1,因为我们形式是 Ax=bAx=b 了所以不会影响。
如果这个问题求解出来答案不是 00 则为 Infeasible。
另外,实际上可以取一个充分大的数 MM 改成求解:
mincTx+M1Tas.t.Ax+a=bx,a0\begin{aligned} \min\quad c^{\mathsf T}x+M1^{\mathsf T}a& \quad \text{s.t.}\\ Ax+a&= b\\ x,a&\geq 0 \end{aligned}
另外,单纯形法的复杂度是指数级的,但是效率很优秀。关于复杂度的证明需要参考平滑分析 Smoothed Analysis。

椭球法,Khachiyan 提出。
椭球法是用来判定的,而不可以直接求解。但是他证明了线性规划是 P 问题。
具体流程是这样的:先找到一个很大的椭球,至少要包含可行域。然后取椭球的中心点。这时候我们需要一个分离预言机 Separation Oracle,给定椭球的中心 xx 判断 xx 是否在可行域中。若不在,返回一个分离超平面把 xx 和可行域分开。然后分离出来的椭球的某一部分,找到另一个完全包含这一部分的椭球,重复这个操作。
具体的一些流程还需要一些关于 LP 问题规模以及椭球相关的知识,但是椭球法有点 useless,主要意义是证明了 LP 是 P 问题,这里就不展开了。
至于有了椭球法之后,我们就可以通过一些手段调用椭球法求出答案。一个笨办法是二分答案,哈哈。但是有更深刻的东西,后文写完对偶相关的内容会介绍。

内点法,Karmarkar 提出。
LP 最优值在凸多面体上一定在某个顶点,但可行域内部到顶点的路径可以用连续函数描述。核心就是设计一个函数,让他按照函数走,走不出边界但是可以接近最优解。
而内点法仍然需要一个初始解,类似于单纯形法即可。
内点法相比单纯形的优势是更快,而且中途停止迭代的话得出的解疑似优于单纯形法(?)知乎上看到的,不一定保真。

上述算法都和整数大小还有精度等相关。至于 LP 能不能在强多项式时间内解决,目前还是个 Open Problem。

Linear Programming Duality

回到原来的例子:
min7x1+4x2s.t.x1+x25x1+2x264x1+x28x1,x20\begin{aligned} \min\quad 7x_1+4x_2& \quad \text{s.t.}\\ x_1+x_2&\geq 5\\ x_1+2x_2&\geq 6\\ 4x_1+x_2&\geq 8\\ x_1,x_2&\geq 0 \end{aligned}
最优解是 x1=1,x2=4x_1=1,x_2=4 得到 7×1+4×4=237\times 1+4\times 4=23
我们如何证明这是下界呢?
7x1+4x23(x1+x2)+(4x1+x2)3×5+8=237x_1+4x_2\geq 3(x_1+x_2)+(4x_1+x_2)\geq 3\times 5+8=23
这个线性规划的对偶形式是:
max5y1+6y2+8y3s.t.y1+y2+4y37y1+2y2+y34y1,y2,y30\begin{aligned} \max\quad 5y_1+6y_2+8y_3& \quad \text{s.t.}\\ y_1+y_2+4y_3&\leq 7\\ y_1+2y_2+y_3&\leq 4\\ y_1,y_2,y_3&\geq 0 \end{aligned}
写成矩阵形式,则有原形式为:
mincTxs.t.Axbx0\begin{aligned} \min\quad c^{\mathsf T}x& \quad \text{s.t.}\\ Ax&\geq b\\ x&\geq 0 \end{aligned}
对偶形式为:
maxbTys.t.ATycy0\begin{aligned} \max\quad b^{\mathsf T}y& \quad \text{s.t.}\\ A^{\mathsf T}y&\leq c\\ y&\geq 0 \end{aligned}
在本例中有:
A=(111241)A = \begin{pmatrix} 1 & 1 \\ 1 & 2 \\ 4 & 1 \end{pmatrix} b=(568)b = \begin{pmatrix} 5 \\ 6 \\ 8 \end{pmatrix} c=(74)c = \begin{pmatrix} 7\\ 4 \end{pmatrix}
PP 为原线性规划的答案,DD 为对偶线性规划问题的答案,则有:
  • 弱对偶定理 Weak Duality Theorem:DPD\leq P
  • 强对偶定理 Strong Duality Theorem:D=PD=P
弱对偶定理证明很简单。
xx^* 为原线性规划问题的解,yy^*为对偶线性规划问题的解:
D=bTy(Ax)Ty=(x)TATy(x)Tc=cTx=PD=b^{\mathsf T}y^*\leq (Ax^*)^{\mathsf T}y^*=(x^*)^{\mathsf T}A^{\mathsf T}y^*\leq (x^*)^{\mathsf T}c=c^{\mathsf T}x^*=P
强对偶定理的证明要略花一些笔墨:
事实:如果一个点 xx 不属于多面体 P\mathcal P,那么存在一个超平面将 xxP\mathcal P 分开。
引理 Farkas Lemma:Ax=b,x0Ax=b,x\geq 0 无可行解,当且仅当存在 yy 使得 yTA0y^{\mathsf T} A \geq 0yTb<0y^{\mathsf T} b \lt 0 可行。
b{Ax:x0}b\notin\{Ax:x\geq 0\},因此存在一个超平面将 bb{Ax:x0}\{Ax : x \geq 0\} 分开。
记该超平面为 yTz=gy^{\mathsf T} z = g,则对于所有 x0x \geq 0 有:yTb<gy^{\mathsf T} b \lt gyTAx>gy^{\mathsf T}Ax \gt g
由此可得:g<0g < 0yA0y^ A \geq 0
因此:yTb<g<0y^{\mathsf T}b < g < 0
引理 Farkas Lemma 的变形:Axb,x0Ax\leq b,x\geq 0 无可行解,当且仅当存在 yy 使得 yTA0y^{\mathsf T} A \geq 0yTb<0y^{\mathsf T} b\lt 0y0y\geq 0 可行。
改写为等价形式:Ax+x=bAx+x'=bx,x0x,x'\geq 0
(A,I)(xx)=b,(xx)0(A,I)\begin{pmatrix}x\\x'\end{pmatrix}=b,\begin{pmatrix}x\\x'\end{pmatrix} \geq 0
根据 Farkas 引理,存在 yy 使得 yT(A,I)0,yTb<0y^{\mathsf T}(A,I)\geq 0,y^{\mathsf T}b\lt 0
等价于 yTA0,y0,yTb<0y^{\mathsf T}A\geq 0,y\geq 0,y^{\mathsf T}b\lt 0
对于任意 ε>0\varepsilon > 0,方程组 (AcT)x(bPε),x0\begin{pmatrix}-A & c^{\mathsf T} \end{pmatrix} x \le \begin{pmatrix}-b \\ P - \varepsilon \end{pmatrix}, x \geq 0无可行解。
根据 Farkas 引理,存在 yRm,y0y \in \mathbb{R}^m, y \geq 0α0\alpha \geq 0,使得 (yT,α)(AcT)0,(yT,α)(bPε)<0(y^{\mathsf T}, \alpha) \begin{pmatrix}-A & c^{\mathsf T} \end{pmatrix} \geq 0, (y^{\mathsf T}, \alpha) \begin{pmatrix}-b \\ P - \varepsilon \end{pmatrix} < 0
我们可以证明 α>0\alpha > 0。不失一般性,假设 α=1\alpha = 1,则有:yTA+cT0,yTb+Pε<0-y^{\mathsf T} A + c^{\mathsf T} \geq 0,- y^{\mathsf T} b + P - \varepsilon < 0
等价于 ATyc,bTy>PεA^{\mathsf T} y \le c, b^{\mathsf T} y > P - \varepsilon
由于该结论对任意 ε>0\varepsilon > 0 都成立,因此D>Pε    D=PD > P - \varepsilon \implies D = P,因为 DPD \leq P

回忆一下椭球法的那个 Oracle。对于 LP 问题:
mincTxs.t.Axbx0\begin{aligned} \min\quad c^{\mathsf T}x& \quad \text{s.t.}\\ Ax&\leq b\\ x&\geq 0 \end{aligned}
可以这样调用 Oracle 3 次得出解:
  1. 检查原始可行性:询问问题 Axb,x0Ax\leq b,x\geq 0 是否有解。若无则 Infeasible。
  2. 检查对偶可行性:询问问题 ATyc,y0A^{\mathsf T}y\leq c,y\geq 0 是否有解。若无则 Unbounded。
  3. 询问问题:
    cTxbTyAxbx0ATycy0\begin{aligned} c^{\mathsf{T}}x&\leq b^{\mathsf{T}} y\\ Ax&\leq b\\ x&\geq 0\\ A^{\mathsf{T}}y&\leq c\\ y&\geq 0 \end{aligned}
    根据强对偶定理,这个问题必然有解 (x,y)(x^*,y^*) 对应原始问题和对偶问题的最优解。
所以椭球法其实证明了 LP 问题是 P 问题。

Integral Polytopes: Exact Algorithms Using LP

如果一个多胞体 PRnP\subseteq \mathbb{R}^n 的极点全在 Zn\mathbb{Z}^n 中,则称 PPIntegral Polytope。这个我也不知道怎么翻译是对的。
有一些 COP 的限制形成了 Integral Polytope,那么他的最优解就都是整数,可以直接用 LP 解决。

二分图最大权匹配的 IP 形式是:
mineEwexes.t.eδ(v)xe1vLRxe{0,1}eE\begin{aligned} \min\quad \sum\limits_{e\in E} w_ex_e& \quad \text{s.t.}\\ \sum\limits_{e\in \delta(v)}x_e&\leq 1\quad \forall v\in L\cup R\\ x_e&\in \{0,1\}\quad \forall e\in E \end{aligned}
而他的 LP形式,就是把:
xe{0,1}eEx_e\in \{0,1\}\quad \forall e\in E
换为:
xe0eEx_e\geq 0\quad \forall e\in E
定理:二分图匹配的 LP 可行域是 Integral Polytope。
选一个 xx 在可行域 PP
相当于证明:若 xx 不是整点则能推到 xx 不是极点。
而极点不能被凸组合出来,所以等价于不是整点的话,找到 x,xPx',x''\in P,且 xxx'\neq x'',且 x=12(x+x)x=\frac{1}{2}(x'+x'') 即可。
  • 第一种情况:那些 0<xe<10\lt x_e\lt 1 的边出现了环。
我们对环用蓝色和红色染色。对于 xx',给每条蓝边 +ϵ+\epsilon,红边 ϵ-\epsilon。对于 xx'',给每条蓝边 ϵ-\epsilon,红边 +ϵ+\epsilon
  • 第二种情况:那些 0<xe<10\lt x_e\lt 1 的边形成了森林(就是无环)。
我们把叶子拿出来,选一条从叶子到叶子的路径,用蓝色红色染色。对于 xx',给每条蓝边 +ϵ+\epsilon,红边 ϵ-\epsilon。对于 xx'',给每条蓝边 ϵ-\epsilon,红边 +ϵ+\epsilon
所以不是整点的点我们总能找到 x,xx',x'' 凸组合出来。那么极点就一定都是整点了。

一个 s-t flows\text{-}t\ \text{flow} 是一个满足如下限制的向量 fR0Ef\in \mathbb{R}^E_{\geq 0}
eE,0f(e)cevV{s,t},eδin(v)f(e)=eδout(v)f(e)\forall e\in E,0\leq f(e)\leq c_e\\ \forall v\in V\setminus\{s,t\},\sum\limits_{e\in \delta^\text{in}(v)} f(e)=\sum\limits_{e\in \delta^\text{out}(v)} f(e)
而一个流的权值定义为 val(f):=eδout(s)f(e)=eδin(t)f(e)\operatorname{val}(f):=\sum\limits_{e\in \delta^\text{out}(s)} f(e)=\sum\limits_{e\in \delta^\text{in}(t)} f(e)
最大流的 LP 形式是:
maxeδin(t)xes.t.xeceeEeδin(v)xeeδout(v)xe=0vV{s,t}xe0eE\begin{aligned} \max\quad \sum\limits_{e\in \delta^\text{in}(t)} x_e& \quad \text{s.t.}\\ x_e&\leq c_e\quad &\forall e\in E\\ \sum\limits_{e\in \delta^\text{in}(v)} x_e-\sum\limits_{e\in \delta^\text{out}(v)} x_e&=0\quad &\forall v\in V\setminus\{s,t\}\\ x_e&\geq 0\quad &\forall e\in E \end{aligned}
定理:网络流的 LP 可行域是 Integral Polytope。
任选一个 s-t flows\text{-}t\ \text{flow} xx,包含 0<xe<10\lt x_e\lt 1 的边集叫做 EE'
那么每个 v{s,t}v\notin \{s,t\} 都必须有 00 条或者 2\geq 2 条边在 EE' 中(11 条的话显然整数和分数之间不会流守恒)。
忽略掉 EE' 中边的方向,那么他含有一个环或者存在一条 s-ts\text{-}t 的路径。
那么把环或者路径拿出来整体 +ϵ+\epsilonϵ-\epsilon
而最大流的 LP 可以写成这样:
maxdTxs.t.(BBI)x(00c)x0\begin{aligned} \max\quad d^{\mathsf T}x& \quad \text{s.t.}\\ \begin{pmatrix}B'\\-B'\\I\end{pmatrix}x&\leq \begin{pmatrix}0\\0\\c\end{pmatrix}\\ x&\geq 0 \end{aligned}
其中 BRV×EB\in\mathbb{R}^{|V|\times |E|}
Bv,e={+1,eδin(v)1,eδout(v)0,otherwise\begin{aligned} B_{v,e}=\begin{cases} +1&,e\in \delta^{\text{in}}(v)\\ -1&,e\in \delta^{\text{out}}(v)\\ 0&,\text{otherwise} \end{cases} \end{aligned}
dd 是:
de={1,eδin(t)0,otherwised_e=\begin{cases}1&,e\in \delta^{\text{in}}(t)\\0&,\text{otherwise}\end{cases}
然后删掉 s,ts,t 两行得到 BB'。于是限制是 Bx=0B'x=0,拆成大于号小于号各一条。
最小割的 LP 形式如下:
mineEceyes.t.πvπu+y(u,v)0(u,v)Eπsπt1ye0eE\begin{aligned} \min\quad \sum\limits_{e\in E}c_ey_e& \quad \text{s.t.}\\ \pi_v-\pi_u+y_{(u,v)}&\geq 0\quad &\forall (u,v)\in E\\ \pi_s-\pi_t&\geq 1\\ y_e&\geq 0\quad &\forall e\in E \end{aligned}
看起来很不像。我们先把上面的照搬过来,得到的应该是:
min0Tu+0Tv+cTys.t.(B)Tu+(B)Tv+ITydu,v,y0\begin{aligned} \min\quad 0^{\mathsf T}u+0^{\mathsf T}v+c^{\mathsf T}y& \quad \text{s.t.}\\ (B')^{\mathsf T}u+(-B')^{\mathsf T}v+I^{\mathsf T}y&\geq d\\ u,v,y&\geq 0 \end{aligned}
而我们在引入一个 π:=uv\pi:=u-v 得到 (B)Tπ+yd(B')^{\mathsf T}\pi +y\geq d
而这个 [(B)Tπ]e=πvπu[(B')^{\mathsf T}\pi]_e=\pi_v-\pi_u,于是就和最小割的对偶形式一样了。至于冒出来的那个 πsπt1\pi_s-\pi_t\geq 1 其实是因为之前写的不规范导致的,不能简单的刻画为 BB 删掉两行,要换个写法,不过感觉意义不大就不明确了。
因此最大流-最小割定理通过强对偶定理以及刚刚的转化也显然得证了。通过这样的对偶手法,我们还可以证明二分图最大匹配等于最小点覆盖。

加权区间调度问题,即 nn 个活动,活动 ii[si,fi)[s_i,f_i) 时刻存在,并且有 wi>0w_i\gt 0 的权重。两个活动 i,ji,j 可以参加当且仅当 [si,fi)[s_i,f_i)[sj,fj)[s_j,f_j) 无交。最大化选择的活动的 wiw_i 之和。
这个是经典的 DP 题。
他的 LP 形式是:
mini[n]xiwis.t.i[n]:t[si,fi)xi1t[T]xi0\begin{aligned} \min\quad \sum\limits_{i\in [n]}x_iw_i& \quad \text{s.t.}\\ \sum\limits_{i\in[n]:t\in[s_i,f_i)} x_i&\leq 1\quad &\forall t\in [T]\\ x_i\geq 0 \end{aligned}
定理:加权区间调度问题的 LP 可行域是 Integral Polytope。
定义一个矩阵 ARm×nA\in \mathbb{R}^{m\times n}全幺模(Tototally Unimodular TUM)矩阵,当且仅当 AA 的每个子方阵的行列式都在 {1,0,1}\{-1,0,1\} 中。
给出一条定理一条引理:
  • 如果一个多胞体 PPAxb,x0Ax\geq b,x\geq 0 的可行域,并且 AA 是 TUM 矩阵,bb 是 Integral 的,则 PP 是 Integral Polytope。
  • 一个矩阵 A{0,1}m×nA\in\{0,1\}^{m\times n} 如果 11 在每一列中形成一个区间,则 AA 是 TUM 矩阵。
因此不难看出,AA 是 TUM 矩阵,所以这个 LP 是一个 Integral Polytope。
证明懒了,这里再给出几条别的引理:
  • 如果 A{0,±1}n×nA'\in \{0,\pm 1\}^{n\times n} 满足 AA' 每行最多一个 11 最多一个 1-1,那么 det(A){0,±1}\det(A')\in\{0,\pm 1\}
  • 如果 A{0,±1}m×nA\in \{0,\pm 1\}^{m\times n} 满足 AA 每行最多一个 11 最多一个 1-1,那么 AA 是 TUM 矩阵。证出上一条显然可以得到。故而可以得到推论:s-t flows\text{-}t\ \text{flow} 的 LP 可行域是 Integral Polytope。
  • 二分图的“边-点关联矩阵”是 TUM 矩阵。故而可以得到推论:二分图最大权匹配的 LP 可行域是 Integral Polytope。

最小费用流的 LP 形式,其中 bb 表示一个点的出流减入流最多是多少:
minewexes.t.xeceeδout(v)xeeδin(v)xebvxe0\begin{aligned} \min\quad \sum\limits_{e}w_ex_e& \quad \text{s.t.}\\ x_e&\leq c_e\\ \sum\limits_{e\in \delta^\text{out}(v)} x_e-\sum\limits_{e\in \delta^\text{in}(v)} x_e&\leq b_v\\ x_e&\geq 0 \end{aligned}
zez_{e} 是边流量约束的对偶变量,pup_u 是点流量约束的对偶变量,那么有:
maxubupuecezes.t.pvpuz(u,v)w(u,v)pu,ze0\begin{aligned} \max\quad \sum\limits_{u}-b_up_u-\sum\limits_{e}c_ez_e& \quad \text{s.t.}\\ p_v-p_u-z_{(u,v)}&\leq w_{(u,v)}\\ p_u,z_e&\geq 0 \end{aligned}
注意到,zez_e 只会在一条限制里出现,所以 cec_e 非负的时候,zez_e 显然要取到下界 max{0,pvpuw(u,v)}\max\{0,p_v-p_u-w_{(u,v)}\}
然后负号提出去就是求 minubupu+ecemax{0,pvpuw(u,v)}-\min \sum\limits_{u}b_up_u+\sum\limits_{e}c_e\max\{0,p_v-p_u-w_{(u,v)}\}
另外,如果要求流出减流入恰好是 bb,那么 pp 非负的限制就没了,因为一个 == 要拆成两个相反的约束,对偶之后就是两个相减的变量也就是取值任意。
所以如果题目出现的是这个形式的式子就可以转成费用流求解。
cec_e 可以设为 \infty,使得 max{0,pvpuw(u,v)}\max\{0,p_v-p_u-w_{(u,v)}\} 变为 pvpuw(u,v)0p_v-p_u-w_{(u,v)}\leq 0 即为 pu+w(u,v)pvp_u+w_{(u,v)}\geq p_v 的限制。
max{0,pupv}+max{0,pvpu}\max\{0,p_u-p_v\}+\max\{0,p_v-p_u\} 可以得到 pupv|p_u-p_v|
另外,网络流输出方案可以参考 费用流线性规划对偶的构造方案 - 洛谷专栏

Examples in OI

P3337 [ZJOI2013] 防守战线

他的 LP 形式是:
mini[1,n]Cixis.t.i[lj,rj]xiDjxi0\begin{aligned} \min\quad \sum\limits_{i\in[1,n]}C_ix_i& \quad \text{s.t.}\\ \sum\limits_{i\in [l_j,r_j]} x_i&\geq D_j\\ x_i&\geq 0 \end{aligned}
我们令 pi=j[1,i]xjp_i=\sum\limits_{j\in [1,i]}x_j,则我们其实是要最小化 i[1,n]Ci(pipi1)\sum\limits_{i\in[1,n]}C_i(p_i-p_{i-1}),等价于 i[1,n]pi(CiCi+1)\sum\limits_{i\in[1,n]}p_i(C_i-C_{i+1})。而限制就转化为 prpl1Dp_{r}-p_{l-1}\geq Dpipi10p_i-p_{i-1}\geq 0
pr+(D)pl1p_{r}+(-D)\geq p_{l-1}pi+(0)pi1p_{i}+(-0)\geq p_{i-1} 的东西,可以转化为 max{0,pl1pr(D)}\infty\max\{0,p_{l-1}-p_{r}-(-D)\}max{0,pi1pi}\infty\max\{0,p_{i-1}-p_i\}
所以其实就是在最小化 pi(CiCi+1)+max{0,pl1pr(D)}+max{0,pi1pi}\sum p_i(C_i-C_{i+1})+\sum \infty\max\{0,p_{l-1}-p_{r}-(-D)\}+\sum \infty\max\{0,p_{i-1}-p_i\},那么建图跑费用流即可。
具体的就是 r(,D)l1r\xrightarrow{(\infty,-D)} l-1i(,0)i1i\xrightarrow{(\infty,0)} i-1
而回忆一下我们的 pip_i,在线性规划里是什么?是点流量约束的对偶变量。我们最小化的 bupu\sum b_up_u 在这里体现的是 pi(CiCi+1)p_i(C_i-C_{i+1}),说明这个 CiCi+1C_i-C_{i+1} 就是,每个点的出流减入流的上界,那么 CiCi+10C_i-C_{i+1}\geq 0 的时候,连 s(CiCi+1,0)is\xrightarrow{(C_i-C_{i+1},0)} i,否则连 i(Ci+1Ci,0)ti\xrightarrow{(C_{i+1}-C_i,0)} t。这个所谓的 s,ts,t 只是我们为了实现 MCMF 而加上去的,他本质就是给每个点加了一个免费的入流或者免费的出流,所以 CiCi+10C_i-C_{i+1}\geq 0 意义就是我出流随便多少,不超过 CiCi+1C_{i}-C_{i+1} 即可,那么我们 sis\xrightarrow{} i 的不超过 CiCi+1C_{i}-C_{i+1} 即可。
跑完费用流求出来的是最小值的相反数,我们输出的时候取相反数即可。
实现的时候费用流好像要写原始对偶才能过。

P3980 [NOI2008] 志愿者招募

他的 LP 形式是:
minj[1,m]cjxjs.t.i[sj,tj]xjaixj0\begin{aligned} \min\quad \sum\limits_{j\in[1,m]}c_jx_j& \quad \text{s.t.}\\ \sum\limits_{i\in [s_j,t_j]} x_j&\geq a_i\\ x_j&\geq 0 \end{aligned}
写出它的对偶形式:
maxi[1,n]aiyis.t.i[sj,tj]yicjyi0\begin{aligned} \max\quad \sum\limits_{i\in[1,n]}a_iy_i& \quad \text{s.t.}\\ \sum\limits_{i\in [s_j,t_j]} y_i&\leq c_j\\ y_i&\geq 0 \end{aligned}
用现实意义可以理解成,yiy_i 是我低 ii 天招一个人摊下来要多少钱”。
虽然形式和上一题一样,但是完全照着上一题的推出来会发现有负环跑不动。
那么我们倒着建即可,令 pi=j[i,n]yjp_i=\sum\limits_{j\in[i,n]}y_j,则我们其实是要最大化 i[1,n]ai(pipi+1)\sum\limits_{i\in[1,n]}a_i(p_i-p_{i+1}),等价于 i[1,n]pi(aiai1)\sum\limits_{i\in[1,n]}p_i(a_{i}-a_{i-1}),然后等价于最小化 i[1,n]pi(ai1ai)\sum\limits_{i\in[1,n]}p_i(a_{i-1}-a_{i}) 然后取相反数。而限制就转化为 pspt+1cp_{s}-p_{t+1}\leq cpipi+10p_i-p_{i+1}\geq 0
pt+1+cpsp_{t+1}+c\geq p_{s}pi+(0)pi+1p_{i}+(-0)\geq p_{i+1} 的东西,可以转化为 max{0,pspt+1c}\infty\max\{0,p_{s}-p_{t+1}-c\}max{0,pi+1pi}\infty\max\{0,p_{i+1}-p_i\}
所以其实就是在最小化 pi(ai1ai)+max{0,pspt+1c}+max{0,pi+1pi}\sum p_i(a_{i-1}-a_i)+\sum \infty\max\{0,p_{s}-p_{t+1}-c\}+\sum \infty\max\{0,p_{i+1}-p_i\},那么建图跑费用流即可。
具体的就是 t+1(,c)st+1\xrightarrow{(\infty,c)} si(,0)i+1i\xrightarrow{(\infty,0)} i+1,然后 aiai10a_i-a_{i-1}\geq 0 的时候连 sis\xrightarrow{} i,否则连 iti\xrightarrow{}t
这次的答案不用再取相反数了,过程里两个取相反数抵消了。

教寺院训练营 模拟赛 R5 A. 放犬多

他的 LP 形式是:
maxeEwexes.t.ePath(uj,vj)xecjxe0\begin{aligned} \max\quad \sum\limits_{e\in E}w_ex_e& \quad \text{s.t.}\\ \sum\limits_{e\in \operatorname{Path}(u_j,v_j)} x_e&\leq c_j\\ x_e&\geq 0 \end{aligned}
我们令 pup_u 表示 1u1\to u 路径上的 xex_e 之和,我们最大化的就是 urootwu(pupfau)\sum\limits_{u\neq root}w_u(p_u-p_{fa_u}),转化到 upu(w(u,fau)vson(u)w(u,v))\sum\limits_{u}p_u(w_{(u,fa_u)}-\sum\limits_{v\in \operatorname{son}(u)}w_{(u,v)})
所以其实是最小化 upu[(vson(u)w(u,v))w(u,fau)]\sum\limits_{u}p_u[(\sum\limits_{v\in \operatorname{son}(u)}w_{(u,v)})-w_{(u,fa_u)}]
然后对于限制的话,不妨令 uuvv 的祖先,就变成了 pvpucjp_v-p_u\leq c_j,然后 pfaupu0p_{fa_u}-p_u\leq 0
所以这个可以转化为,max{0,pvpucj}\infty\max\{0,p_v-p_u-c_j\}max{pfaupu}\infty\max\{p_{fa_u}-p_u\}
所以我们就可以连边 u(,cj)vu\xrightarrow{(\infty,c_j)}vu(,0)fauu\xrightarrow{(\infty,0)}fa_u
至于 bu:=(vson(u)w(u,v))w(u,fau)b_u:=(\sum\limits_{v\in \operatorname{son}(u)}w_{(u,v)})-w_{(u,fa_u)}bu0b_u\geq 0 时候连 s(bu,0)us\xrightarrow{(b_u,0)}u,否则连 u(bu,0)tu\xrightarrow{(-b_u,0)} t
然后仍然在这张图上跑 MCMF 即可。

QOJ5036 卑鄙的下毒人

本质是在最小化 max{0,pi1pi}+k(pnp0),max{0,pl1pr(a)}\sum \infty\max\{0,p_{i-1}-p_i\}+k(p_n-p_0),\sum\max\{0,p_{l-1}-p_r-(-a)\}
建图 i1(,0)ii-1\xrightarrow{(\infty,0)} il1(1,a)rl-1\xrightarrow{(1,-a)}rs(k,0)0s\xrightarrow{(k,0)}0n(k,0)tn\xrightarrow{(k,0)} t 跑 MCMF。
但是数据范围导致硬上 Dinic 肯定过不去,注意到 k5k\leq5 最多增广 55 次就结束了,可以考虑原始对偶。由于图显然都是小的连大的是个 DAG,所以最开始的求一次最短路可以用拓扑排序代替 SPFA。

QOJ4899 机器

先推一下最大费用循环流的 LP 形式:
maxewexes.t.xeceeδout(v)xeeδin(v)xe=0xe0\begin{aligned} \max\quad \sum\limits_{e}w_ex_e& \quad \text{s.t.}\\ x_e&\leq c_e\\ \sum\limits_{e\in \delta^\text{out}(v)} x_e-\sum\limits_{e\in \delta^\text{in}(v)} x_e&=0\\ x_e&\geq 0 \end{aligned}
对偶得到:
minecezes.t.pvpuz(u,v)w(u,v)ze0\begin{aligned} \min-\sum\limits_{e}c_ez_e& \quad \text{s.t.}\\ p_v-p_u-z_{(u,v)}&\leq w_{(u,v)}\\ z_e&\geq 0 \end{aligned}
注意,因为原来的限制是 ==,所以这里 pup_u 没有限制,这是因为 == 要拆成 \leq\geq,而这样一组合 pup_u 就被写成了两个变量相减就没有限制了。
还是 zez_e 只在一条式子里出现,所以必然要顶到上界也就是 max{0,pvpuw(u,v)}\max\{0,p_v-p_u-w_{(u,v)}\},然后其实本质上在最小化 (u,v)c(u,v)×max{pvpuw(u,v)}-\sum\limits_{(u,v)}c_{(u,v)}\times \max\{p_v-p_u-w_{(u,v)}\},也就是最小化 (u,v)c(u,v)×max{pu+w(u,v)pv}\sum\limits_{(u,v)}c_{(u,v)}\times \max\{p_u+w_{(u,v)}-p_v\}
所以这个题最小化的其实是:
max{0,pu+(huhv)pv}+max{0,ps+(ai,j)pi}+max{0,pi+(bi,j)ps}\sum \infty\max\{0,p_u+(h_u-h_v)-p_v\}+\sum \max\{0,p_s+(-a_{i,j})-p_i\}+\sum \max\{0,p_i+(-b_{i,j})-p_s\}
认为 ps=0p_s=0,那么后两个式子可以表达成一个 fi(pi)f_i(p_i) 形式,前一个式子不妨令 p:=p+hp':=p+h 那么相当于是要求 pupvp'_u\leq p'_v
然后这个其实是一个广义的保序回归。好像是可以证明,如果函数是凸的并且和指数函数凸的方向一致,就可以跑保序回归的那个做法。
所以,我们直接整体二分这个东西,然后每次只要决策这些点取到 midmid 还是 mid+1mid+1。这个是一个最小权闭合子图,我们取反变成求最大权闭合子图。
这个是经典问题,vali0val_i\geq 0 就连 svaliis\xrightarrow{val_i}i 否则连 ivaliti\xrightarrow{-val_i}t,如果限制是 uu 选了 vv 也一定要选,连 uvu\xrightarrow{\infty}v
本题中,我们看做所有点都先选 midmid,然后选一些点改成 mid+1mid+1。对于限制 pupvp'_u\leq p'_v 的,则选择了 uu 必须要选择 vv
建图求最大流,最后残量网络上和 ss 相连的点就选 mid+1mid+1,别的都选 midmid
求完之后分治下去继续求即可

CF1765J Hero to Zero

设第 ii 列减掉了 pip_i,第 jj 列减掉了 qjq_j,那么在最小化:
pi+qj+(ci,jpiqj)\sum p_i+\sum q_j+\sum (c_{i,j}-p_i-q_j)
即:
(ci,j)(n1)(pi+qj)(\sum c_{i,j})-(n-1)(\sum p_i+\sum q_j)
那么目标就是最大化 pi+qj\sum p_i+\sum q_j,限制只是 pi+qjci,jp_i+q_j\leq c_{i,j}
注意,pi,qjp_i,q_j 没有限制,说明是两个变量相减的形式,那么我们对偶之后会得到等式。
通过写作矩阵的标准形式,我们可以直观得到对偶的结果:
minci,jxi,js.t.1jnxi,j=11in1inxi,j=11jnxi,j0\begin{aligned} \min\quad \sum c_{i,j}x_{i,j}& \quad \text{s.t.}\\ \sum\limits_{1\leq j\leq n} x_{i,j}&=1\quad &\forall 1\leq i\leq n\\ \sum\limits_{1\leq i\leq n} x_{i,j}&=1\quad &\forall 1\leq j\leq n\\ x_{i,j}&\geq 0 \end{aligned}
这个是典型的二分图匹配的线性规划形式,也可以轻松证明这个矩阵其实是 TUM 矩阵,所以直接做就是精确解了。由于 ci,j=aibjc_{i,j}=|a_i-b_j|,这个最小值显然是 a,ba,b 各自排序之后对位匹配。
ci,j\sum c_{i,j} 也是好求的,双指针扫一下就可以了。
复杂度瓶颈在排序。

ABC224H Security Camera 2

LP 形式显然为:
minaixi+bjyjs.t.xi+yjci,jxi,yj0\begin{aligned} \min\quad \sum a_ix_i+\sum b_jy_j& \quad \text{s.t.}\\ x_i+y_j&\geq c_{i,j}\\ x_i,y_j&\geq 0 \end{aligned}
对偶得到:
maxci,jzi,js.t.L+1jL+Rzi,jai1iL1iLzi,jbjL+1jL+Rzi,j0\begin{aligned} \max\quad \sum c_{i,j}z_{i,j}& \quad \text{s.t.}\\ \sum\limits_{L+1\leq j\leq L+R}z_{i,j}&\leq a_i\quad &\forall 1\leq i\leq L\\ \sum\limits_{1\leq i\leq L}z_{i,j}&\leq b_j\quad &\forall L+1\leq j\leq L+R\\ z_{i,j}&\geq 0 \end{aligned}
不是哥们这不是我们费用流的原始形式吗?
建图 s(ai,0)is\xrightarrow{(a_i,0)}ij(bj,0)tj\xrightarrow{(b_j,0)}ti(,ci,j)ji\xrightarrow{(\infty,-c_{i,j})}j 跑最小费用最大流,然后答案取相反数即可。

CF605C Freelancer's Dreams

LP 形式为:
minzis.t.aizipbiziqzi0\begin{aligned} \min\quad \sum z_i& \quad \text{s.t.}\\ \sum a_iz_i&\geq p\\ \sum b_iz_i&\geq q\\ z_i&\geq 0 \end{aligned}
对偶变成:
maxpx+qys.t.aix+biy1x,y0\begin{aligned} \max\quad px+qy& \quad \text{s.t.}\\ a_ix+b_iy&\leq 1\\ x,y&\geq 0 \end{aligned}
注意到,xx 确定则 yy 一定是取到 min{1aixbi}\min\{\frac{1-a_ix}{b_i}\}
pxpx 是一个线性函数,qmin{1aixbi}q\min\{\frac{1-a_ix}{b_i}\} 是多个线性函数取 min\min,我们有结论,多个线性函数取 min\min 最后是一个上凸函数,上凸函数加上线性函数也还是上凸函数,所以可以在上凸壳上二分斜率找最值点。

评论

43 条评论,欢迎与作者交流。

正在加载评论...