参考资料:
Linear Programming
Introduction
给定一个基集
U U U ,存在可行解集合
S \mathcal{S} S ,是
U U U 的一些子集形成的“集合族”,有
w i , i ∈ U w_i,i\in U w i , i ∈ U ,表示元素的价值。要找到
S ∈ S S\in \mathcal{S} S ∈ S 最小化或最大化
w ( S ) : = ∑ i ∈ S w i w(S):=\sum\limits_{i\in S}w_i w ( S ) := i ∈ S ∑ w i 。
一些例子:最短路问题、最小生成树问题、最大独立集、图的最大匹配、背包问题。
几乎所有
组合优化问题 Combinatorial Optimization Problem 都可以等价地写成一个
整数规划问题 Integer Program(IP),就是变量
x i ∈ { 0 , 1 } x_i\in\{0,1\} x i ∈ { 0 , 1 } 表示是否选择
i i i ,约束是解在可行解集合中,目标是最优化
∑ w i x i \sum w_ix_i ∑ w i x i 。
而 IP 问题很难,一般是 NP-Hard 的,但我们可以把
松弛 relax 成
x ∈ { 0 , 1 } ⟹ 0 ≤ x i ≤ 1 x\in\{0,1\}\implies 0\leq x_i\leq 1 x ∈ { 0 , 1 } ⟹ 0 ≤ x i ≤ 1 ,变成一个
线性规划问题 Linear Program(LP)问题。
对于一些问题,
LP ≡ IP \text{LP}\equiv \text{IP} LP ≡ IP ,我们就获得了
精确算法 Exact Algorithms。而一些问题
LP ≢ IP \text{LP}\not\equiv \text{IP} LP ≡ IP ,我们只能通过解决 LP 问题得到一个分数解,然后设计算法把解取整变成一个整数解,这就是
近似算法 Approximation Algorithms。
线性规划问题的一个例子:
min 7 x 1 + 4 x 2 s.t. x 1 + x 2 ≥ 5 x 1 + 2 x 2 ≥ 6 4 x 1 + x 2 ≥ 8 x 1 , x 2 ≥ 0 \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} min 7 x 1 + 4 x 2 x 1 + x 2 x 1 + 2 x 2 4 x 1 + x 2 x 1 , x 2 s.t. ≥ 5 ≥ 6 ≥ 8 ≥ 0
最优解是
x 1 = 1 , x 2 = 4 x_1=1,x_2=4 x 1 = 1 , x 2 = 4 得到
7 × 1 + 4 × 4 = 23 7\times 1+4\times 4=23 7 × 1 + 4 × 4 = 23 。
以下是线性规划的标准形式:
min c 1 x 1 + c 2 x 2 + ⋯ + c n x n s.t. a 1 , 1 x 1 + a 1 , 2 x 2 + ⋯ + a 1 , n x n ≥ b 1 a 2 , 1 x 1 + a 2 , 2 x 2 + ⋯ + a 2 , n x n ≥ b 2 ⋮ ⋮ ⋮ ⋮ a m , 1 x 1 + a m , 2 x 2 + ⋯ + a m , n x n ≥ b m x 1 , x 2 , ⋯ , x n ≥ 0 \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} min c 1 x 1 + c 2 x 2 + ⋯ + c n x n a 1 , 1 x 1 + a 1 , 2 x 2 + ⋯ + a 1 , n x n a 2 , 1 x 1 + a 2 , 2 x 2 + ⋯ + a 2 , n x n ⋮ ⋮ ⋮ ⋮ a m , 1 x 1 + a m , 2 x 2 + ⋯ + a m , n x n x 1 , x 2 , ⋯ , x n s.t. ≥ b 1 ≥ b 2 ≥ b m ≥ 0
写成:
x : = ( x 1 x 2 ⋮ x n ) ∈ R n x :=
\begin{pmatrix}
x_1 \\ x_2 \\ \vdots \\ x_n
\end{pmatrix}
\in \mathbb{R}^n x := x 1 x 2 ⋮ x n ∈ R n
c : = ( c 1 c 2 ⋮ c n ) ∈ R n c :=
\begin{pmatrix}
c_1 \\ c_2 \\ \vdots \\ c_n
\end{pmatrix}
\in \mathbb{R}^n c := c 1 c 2 ⋮ c n ∈ R n
A : = ( a 1 , 1 a 1 , 2 ⋯ a 1 , n a 2 , 1 a 2 , 2 ⋯ a 2 , n ⋮ ⋮ ⋱ ⋮ a m , 1 a m , 2 ⋯ a m , n ) ∈ R m × n A :=
\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} A := a 1 , 1 a 2 , 1 ⋮ a m , 1 a 1 , 2 a 2 , 2 ⋮ a m , 2 ⋯ ⋯ ⋱ ⋯ a 1 , n a 2 , n ⋮ a m , n ∈ R m × n
b : = ( b 1 b 2 ⋮ b m ) ∈ R m b :=
\begin{pmatrix}
b_1 \\ b_2 \\ \vdots \\ b_m
\end{pmatrix}
\in \mathbb{R}^m b := b 1 b 2 ⋮ b m ∈ R m
那么有:
min c T x s.t. A x ≥ b x ≥ 0 \begin{aligned}
\min\quad c^{\mathsf T}x&
\quad \text{s.t.}\\
Ax&\geq b\\
x&\geq 0
\end{aligned} min c T x A x x s.t. ≥ b ≥ 0
所有的线性规划都可以转化成标准形式。
如果求 max \max max 就是求目标函数的相反数的 min \min min 。
如果取值是 x i ≥ − a x_i\geq -a x i ≥ − a 则可以用 x i + a x_i+a x i + a 代替 x i x_i x i 。
如果某个变量 x i x_i x i 没有约束,引入两个新的变量 x i ′ , x i ′ ′ x_i',x_i'' x i ′ , x i ′′ 用 x i ′ − x i ′ ′ x_i'-x_i'' x i ′ − x i ′′ 代替 x x x 。
如果是 ≤ \leq ≤ 号,那条限制乘上 − 1 -1 − 1 。
如果是 = = = 号,那么再拼一个 ≤ \leq ≤ 的限制出来就可以强行取等。
我们称满足
A x ≥ b , x ≥ 0 Ax\geq b,x\geq 0 A x ≥ b , x ≥ 0 的
x x x 的集合为
可行域 Feasible Region,可行域其实是一个
多面体 Polyhedron。如果一个多面体中,每一个坐标方向都有上界和下界,那么这个多面体就是一个
多胞体 Polytope。
如果满足以下条件,则称
x x x 是
x ( 1 ) , x ( 2 ) , … , x ( t ) x^{(1)}, x^{(2)}, \dots, x^{(t)} x ( 1 ) , x ( 2 ) , … , x ( t ) 的一个
凸组合 Convex Combination:
存在
λ 1 , λ 2 , … , λ t ∈ [ 0 , 1 ] \lambda_1, \lambda_2, \dots, \lambda_t \in [0,1] λ 1 , λ 2 , … , λ t ∈ [ 0 , 1 ] ,使得
λ 1 + λ 2 + ⋯ + λ t = 1 , \lambda_1 + \lambda_2 + \cdots + \lambda_t = 1, λ 1 + λ 2 + ⋯ + λ t = 1 ,
且
λ 1 x ( 1 ) + λ 2 x ( 2 ) + ⋯ + λ t x ( t ) = x . \lambda_1 x^{(1)} + \lambda_2 x^{(2)} + \cdots + \lambda_t x^{(t)} = x. λ 1 x ( 1 ) + λ 2 x ( 2 ) + ⋯ + λ t x ( t ) = x .
所有由
x ( 1 ) , x ( 2 ) , … , x ( t ) x^{(1)}, x^{(2)}, \dots, x^{(t)} x ( 1 ) , x ( 2 ) , … , x ( t ) 的凸组合所构成的集合,称为这些点的
凸包 Convex Hull。
设
P P P 是一个多胞体,
x x x 是
P P P 中的一个点。如果不存在其他两个不同的点
x ′ , x ′ ′ ∈ P x', x'' \in P x ′ , x ′′ ∈ P ,使得
x x x 是它们的一个凸组合,那么称
x x x 是
P P P 的一个
顶点 vertex,也叫做
极点 Extreme Point。
引理:一个多胞体有有限多个顶点,并且它等于这些顶点的凸包。
引理:设
x ∈ R n x \in \mathbb{R}^n x ∈ R n 是一个
n n n 维多胞体的一个极点。
那么,在定义该多胞体的约束中,存在
n n n 条约束,使得把这
n n n 条约束中的“不等式”改成“等式”后,得到的线性方程组唯一解就是
x x x 。
引理:如果一个线性规划的可行域是一个多胞体,那么它的最优值一定可以在该多胞体的某个顶点处取得。
一些特殊情况,如在最小化的线性规划问题中:
如果可行域为空,最小值是 ∞ \infty ∞ 。
如果可行域 unbounded,也就是存在方向使目标函数可以无限减小,最小值是 − ∞ -\infty − ∞ 。
Methods for Solving Linear Programs
常见的三种算法:
单纯形法:Simplex Method,指数级复杂度,实际运行效率很快。
椭球法:Ellipsoid Method,多项式复杂度,实际运行效率很慢。他不能直接求解,而是判定是否有解。
内点法:Interior Point Method,多项式复杂度,实际运行效率很快。
单纯形法,Dantzig 提出。
其本质其实是,在顶点上进行游走,来改进目标函数的值,每次切换一个顶点。
我们先引入松弛变量把
A x ≥ b Ax\geq b A x ≥ b 转化为
A x − s = b Ax-s=b A x − s = b 其中
s ≥ 0 s\geq 0 s ≥ 0 。
然后我们不妨令
x n + i : = s i x_{n+i}:=s_i x n + i := s i ,我们可以整理出一套
x n + i x_{n+i} x n + i 关于
x j ( j ≤ n ) x_j(j\leq n) x j ( j ≤ n ) 的线性组合。把
x n + i x_{n+i} x n + i 称为
基变量 basic variable,
x j ( j ≤ n ) x_j(j\leq n) x j ( j ≤ n ) 称为
非基变量 non-basic variable。我们先令非基变量为
0 0 0 ,则可以得到基变量的取值,这是我们的基础解(但是不一定是可行解)。
我们选取那些能改进目标函数的非基变量替换基变量,来尽可能减小目标函数的取值。可以解不等式算出每个非基变量对于每个基变量而言,最紧的限制。然后找到最优的那个,把非基变量替换成基变量,得到和原来等价的式子,这个过程称之为转轴 pivot。这次新的换来的基变量即为入基变量 entering variable,变成非基变量的那个叫做出基变量 leaving variable。重复这个过程,即可得到最优解。
当然,如果选不出可以替换的了,显然已经得到 Optimal Solution 了。
如果存在某个可以改进目标函数的非基变量,但是无法确认他的上界,就是怎么改都可以,那么目标函数就可以无限减小,于是就是 Unbounded。
至于基础解不是可行解,我们可以这样子进行补救:做两次单纯形,第一次求解一个可行性的线性规划问题,得到一个基础解,然后拿基础解做第二次线性规划问题。
我们得到形式为:
min c T x s.t. A x = b x ≥ 0 \begin{aligned}
\min\quad c^{\mathsf T}x&
\quad \text{s.t.}\\
Ax&= b\\
x&\geq 0
\end{aligned} min c T x A x x s.t. = b ≥ 0
初始问题,我们先求解:
min 1 T a s.t. A x + a = b x , a ≥ 0 \begin{aligned}
\min\quad 1^{\mathsf T}a&
\quad \text{s.t.}\\
Ax+a&= b\\
x,a&\geq 0
\end{aligned} min 1 T a A x + a x , a s.t. = b ≥ 0
然后求解这个问题。显然若
b ≥ 0 b\geq 0 b ≥ 0 可以直接取
a = b a=b a = b 作为可行的基础解,而对于
b < 0 b<0 b < 0 的情况,我们不妨左右两边乘上
− 1 -1 − 1 ,因为我们形式是
A x = b Ax=b A x = b 了所以不会影响。
如果这个问题求解出来答案不是
0 0 0 则为 Infeasible。
另外,实际上可以取一个充分大的数
M M M 改成求解:
min c T x + M 1 T a s.t. A x + a = b x , a ≥ 0 \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} min c T x + M 1 T a A x + a x , a s.t. = b ≥ 0
另外,单纯形法的复杂度是指数级的,但是效率很优秀。关于复杂度的证明需要参考平滑分析 Smoothed Analysis。
椭球法,Khachiyan 提出。
椭球法是用来判定的,而不可以直接求解。但是他证明了线性规划是 P 问题。
具体流程是这样的:先找到一个很大的椭球,至少要包含可行域。然后取椭球的中心点。这时候我们需要一个
分离预言机 Separation Oracle,给定椭球的中心
x x x 判断
x x x 是否在可行域中。若不在,返回一个分离超平面把
x x x 和可行域分开。然后分离出来的椭球的某一部分,找到另一个完全包含这一部分的椭球,重复这个操作。
具体的一些流程还需要一些关于 LP 问题规模以及椭球相关的知识,但是椭球法有点 useless,主要意义是证明了 LP 是 P 问题,这里就不展开了。
至于有了椭球法之后,我们就可以通过一些手段调用椭球法求出答案。一个笨办法是二分答案,哈哈。但是有更深刻的东西,后文写完对偶相关的内容会介绍。
内点法,Karmarkar 提出。
LP 最优值在凸多面体上一定在某个顶点 ,但可行域内部到顶点的路径可以用连续函数描述。核心就是设计一个函数,让他按照函数走,走不出边界但是可以接近最优解。
而内点法仍然需要一个初始解,类似于单纯形法即可。
内点法相比单纯形的优势是更快,而且中途停止迭代的话得出的解疑似优于单纯形法(?)知乎上看到的,不一定保真。
上述算法都和整数大小还有精度等相关。至于 LP 能不能在强多项式时间内解决,目前还是个 Open Problem。
Linear Programming Duality
回到原来的例子:
min 7 x 1 + 4 x 2 s.t. x 1 + x 2 ≥ 5 x 1 + 2 x 2 ≥ 6 4 x 1 + x 2 ≥ 8 x 1 , x 2 ≥ 0 \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} min 7 x 1 + 4 x 2 x 1 + x 2 x 1 + 2 x 2 4 x 1 + x 2 x 1 , x 2 s.t. ≥ 5 ≥ 6 ≥ 8 ≥ 0
最优解是
x 1 = 1 , x 2 = 4 x_1=1,x_2=4 x 1 = 1 , x 2 = 4 得到
7 × 1 + 4 × 4 = 23 7\times 1+4\times 4=23 7 × 1 + 4 × 4 = 23 。
我们如何证明这是下界呢?
7 x 1 + 4 x 2 ≥ 3 ( x 1 + x 2 ) + ( 4 x 1 + x 2 ) ≥ 3 × 5 + 8 = 23 7x_1+4x_2\geq 3(x_1+x_2)+(4x_1+x_2)\geq 3\times 5+8=23 7 x 1 + 4 x 2 ≥ 3 ( x 1 + x 2 ) + ( 4 x 1 + x 2 ) ≥ 3 × 5 + 8 = 23
这个线性规划的对偶形式是:
max 5 y 1 + 6 y 2 + 8 y 3 s.t. y 1 + y 2 + 4 y 3 ≤ 7 y 1 + 2 y 2 + y 3 ≤ 4 y 1 , y 2 , y 3 ≥ 0 \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} max 5 y 1 + 6 y 2 + 8 y 3 y 1 + y 2 + 4 y 3 y 1 + 2 y 2 + y 3 y 1 , y 2 , y 3 s.t. ≤ 7 ≤ 4 ≥ 0
写成矩阵形式,则有原形式为:
min c T x s.t. A x ≥ b x ≥ 0 \begin{aligned}
\min\quad c^{\mathsf T}x&
\quad \text{s.t.}\\
Ax&\geq b\\
x&\geq 0
\end{aligned} min c T x A x x s.t. ≥ b ≥ 0
对偶形式为:
max b T y s.t. A T y ≤ c y ≥ 0 \begin{aligned}
\max\quad b^{\mathsf T}y&
\quad \text{s.t.}\\
A^{\mathsf T}y&\leq c\\
y&\geq 0
\end{aligned} max b T y A T y y s.t. ≤ c ≥ 0
在本例中有:
A = ( 1 1 1 2 4 1 ) A =
\begin{pmatrix}
1 & 1 \\
1 & 2 \\
4 & 1
\end{pmatrix} A = 1 1 4 1 2 1
b = ( 5 6 8 ) b =
\begin{pmatrix}
5 \\
6 \\
8
\end{pmatrix} b = 5 6 8
c = ( 7 4 ) c =
\begin{pmatrix}
7\\
4
\end{pmatrix} c = ( 7 4 )
设
P P P 为原线性规划的答案,
D D D 为对偶线性规划问题的答案,则有:
弱对偶定理 Weak Duality Theorem:D ≤ P D\leq P D ≤ P
强对偶定理 Strong Duality Theorem:D = P D=P D = P
弱对偶定理证明很简单。
设
x ∗ x^* x ∗ 为原线性规划问题的解,
y ∗ y^* y ∗ 为对偶线性规划问题的解:
D = b T y ∗ ≤ ( A x ∗ ) T y ∗ = ( x ∗ ) T A T y ∗ ≤ ( x ∗ ) T c = c T x ∗ = P D=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 D = b T y ∗ ≤ ( A x ∗ ) T y ∗ = ( x ∗ ) T A T y ∗ ≤ ( x ∗ ) T c = c T x ∗ = P
强对偶定理的证明要略花一些笔墨:
事实:如果一个点
x x x 不属于多面体
P \mathcal P P ,那么存在一个超平面将
x x x 与
P \mathcal P P 分开。
引理 Farkas Lemma:
A x = b , x ≥ 0 Ax=b,x\geq 0 A x = b , x ≥ 0 无可行解,当且仅当存在
y y y 使得
y T A ≥ 0 y^{\mathsf T} A \geq 0 y T A ≥ 0 且
y T b < 0 y^{\mathsf T} b \lt 0 y T b < 0 可行。
b ∉ { A x : x ≥ 0 } b\notin\{Ax:x\geq 0\} b ∈ / { A x : x ≥ 0 } ,因此存在一个超平面将
b b b 与
{ A x : x ≥ 0 } \{Ax : x \geq 0\} { A x : x ≥ 0 } 分开。
记该超平面为
y T z = g y^{\mathsf T} z = g y T z = g ,则对于所有
x ≥ 0 x \geq 0 x ≥ 0 有:
y T b < g y^{\mathsf T} b \lt g y T b < g 且
y T A x > g y^{\mathsf T}Ax \gt g y T A x > g 。
由此可得:
g < 0 g < 0 g < 0 且
y A ≥ 0 y^ A \geq 0 y A ≥ 0 。
因此:
y T b < g < 0 y^{\mathsf T}b < g < 0 y T b < g < 0 。
引理 Farkas Lemma 的变形:
A x ≤ b , x ≥ 0 Ax\leq b,x\geq 0 A x ≤ b , x ≥ 0 无可行解,当且仅当存在
y y y 使得
y T A ≥ 0 y^{\mathsf T} A \geq 0 y T A ≥ 0 且
y T b < 0 y^{\mathsf T} b\lt 0 y T b < 0 且
y ≥ 0 y\geq 0 y ≥ 0 可行。
改写为等价形式:
A x + x ′ = b Ax+x'=b A x + x ′ = b ,
x , x ′ ≥ 0 x,x'\geq 0 x , x ′ ≥ 0 。
即
( A , I ) ( x x ′ ) = b , ( x x ′ ) ≥ 0 (A,I)\begin{pmatrix}x\\x'\end{pmatrix}=b,\begin{pmatrix}x\\x'\end{pmatrix} \geq 0 ( A , I ) ( x x ′ ) = b , ( x x ′ ) ≥ 0 。
根据 Farkas 引理,存在
y y y 使得
y T ( A , I ) ≥ 0 , y T b < 0 y^{\mathsf T}(A,I)\geq 0,y^{\mathsf T}b\lt 0 y T ( A , I ) ≥ 0 , y T b < 0 。
等价于
y T A ≥ 0 , y ≥ 0 , y T b < 0 y^{\mathsf T}A\geq 0,y\geq 0,y^{\mathsf T}b\lt 0 y T A ≥ 0 , y ≥ 0 , y T b < 0 。
对于任意
ε > 0 \varepsilon > 0 ε > 0 ,方程组
( − A c T ) x ≤ ( − b P − ε ) , x ≥ 0 \begin{pmatrix}-A & c^{\mathsf T} \end{pmatrix} x \le \begin{pmatrix}-b \\ P - \varepsilon \end{pmatrix}, x \geq 0 ( − A c T ) x ≤ ( − b P − ε ) , x ≥ 0 无可行解。
根据 Farkas 引理,存在
y ∈ R m , y ≥ 0 y \in \mathbb{R}^m, y \geq 0 y ∈ R m , y ≥ 0 和
α ≥ 0 \alpha \geq 0 α ≥ 0 ,使得
( y T , α ) ( − A c T ) ≥ 0 , ( y T , α ) ( − b P − ε ) < 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 ( y T , α ) ( − A c T ) ≥ 0 , ( y T , α ) ( − b P − ε ) < 0 。
我们可以证明
α > 0 \alpha > 0 α > 0 。不失一般性,假设
α = 1 \alpha = 1 α = 1 ,则有:
− y T A + c T ≥ 0 , − y T b + P − ε < 0 -y^{\mathsf T} A + c^{\mathsf T} \geq 0,- y^{\mathsf T} b + P - \varepsilon < 0 − y T A + c T ≥ 0 , − y T b + P − ε < 0 。
等价于
A T y ≤ c , b T y > P − ε A^{\mathsf T} y \le c, b^{\mathsf T} y > P - \varepsilon A T y ≤ c , b T y > P − ε 。
由于该结论对任意
ε > 0 \varepsilon > 0 ε > 0 都成立,因此
D > P − ε ⟹ D = P D > P - \varepsilon \implies D = P D > P − ε ⟹ D = P ,因为
D ≤ P D \leq P D ≤ P 。
回忆一下椭球法的那个 Oracle。对于 LP 问题:
min c T x s.t. A x ≤ b x ≥ 0 \begin{aligned}
\min\quad c^{\mathsf T}x&
\quad \text{s.t.}\\
Ax&\leq b\\
x&\geq 0
\end{aligned} min c T x A x x s.t. ≤ b ≥ 0
可以这样调用 Oracle 3 次得出解:
检查原始可行性:询问问题
A x ≤ b , x ≥ 0 Ax\leq b,x\geq 0 A x ≤ b , x ≥ 0 是否有解。若无则 Infeasible。
检查对偶可行性:询问问题
A T y ≤ c , y ≥ 0 A^{\mathsf T}y\leq c,y\geq 0 A T y ≤ c , y ≥ 0 是否有解。若无则 Unbounded。
询问问题:
c T x ≤ b T y A x ≤ b x ≥ 0 A T y ≤ c y ≥ 0 \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} c T x A x x A T y y ≤ b T y ≤ b ≥ 0 ≤ c ≥ 0
根据强对偶定理,这个问题必然有解
( x ∗ , y ∗ ) (x^*,y^*) ( x ∗ , y ∗ ) 对应原始问题和对偶问题的最优解。
所以椭球法其实证明了 LP 问题是 P 问题。
Integral Polytopes: Exact Algorithms Using LP
如果一个多胞体
P ⊆ R n P\subseteq \mathbb{R}^n P ⊆ R n 的极点全在
Z n \mathbb{Z}^n Z n 中,则称
P P P 是
Integral Polytope 。这个我也不知道怎么翻译是对的。
有一些 COP 的限制形成了 Integral Polytope,那么他的最优解就都是整数,可以直接用 LP 解决。
二分图最大权匹配的 IP 形式是:
min ∑ e ∈ E w e x e s.t. ∑ e ∈ δ ( v ) x e ≤ 1 ∀ v ∈ L ∪ R x e ∈ { 0 , 1 } ∀ e ∈ E \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} min e ∈ E ∑ w e x e e ∈ δ ( v ) ∑ x e x e s.t. ≤ 1 ∀ v ∈ L ∪ R ∈ { 0 , 1 } ∀ e ∈ E
而他的 LP形式,就是把:
x e ∈ { 0 , 1 } ∀ e ∈ E x_e\in \{0,1\}\quad \forall e\in E x e ∈ { 0 , 1 } ∀ e ∈ E
换为:
x e ≥ 0 ∀ e ∈ E x_e\geq 0\quad \forall e\in E x e ≥ 0 ∀ e ∈ E
定理:二分图匹配的 LP 可行域是 Integral Polytope。
相当于证明:若
x x x 不是整点则能推到
x x x 不是极点。
而极点不能被凸组合出来,所以等价于不是整点的话,找到
x ′ , x ′ ′ ∈ P x',x''\in P x ′ , x ′′ ∈ P ,且
x ′ ≠ x ′ ′ x'\neq x'' x ′ = x ′′ ,且
x = 1 2 ( x ′ + x ′ ′ ) x=\frac{1}{2}(x'+x'') x = 2 1 ( x ′ + x ′′ ) 即可。
第一种情况:那些 0 < x e < 1 0\lt x_e\lt 1 0 < x e < 1 的边出现了环。
我们对环用蓝色和红色染色。对于
x ′ x' x ′ ,给每条蓝边
+ ϵ +\epsilon + ϵ ,红边
− ϵ -\epsilon − ϵ 。对于
x ′ ′ x'' x ′′ ,给每条蓝边
− ϵ -\epsilon − ϵ ,红边
+ ϵ +\epsilon + ϵ 。
第二种情况:那些 0 < x e < 1 0\lt x_e\lt 1 0 < x e < 1 的边形成了森林(就是无环)。
我们把叶子拿出来,选一条从叶子到叶子的路径,用蓝色红色染色。对于
x ′ x' x ′ ,给每条蓝边
+ ϵ +\epsilon + ϵ ,红边
− ϵ -\epsilon − ϵ 。对于
x ′ ′ x'' x ′′ ,给每条蓝边
− ϵ -\epsilon − ϵ ,红边
+ ϵ +\epsilon + ϵ 。
所以不是整点的点我们总能找到
x ′ , x ′ ′ x',x'' x ′ , x ′′ 凸组合出来。那么极点就一定都是整点了。
一个
s - t flow s\text{-}t\ \text{flow} s - t flow 是一个满足如下限制的向量
f ∈ R ≥ 0 E f\in \mathbb{R}^E_{\geq 0} f ∈ R ≥ 0 E :
∀ e ∈ E , 0 ≤ f ( e ) ≤ c e ∀ v ∈ V ∖ { 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) ∀ e ∈ E , 0 ≤ f ( e ) ≤ c e ∀ v ∈ V ∖ { s , t } , e ∈ δ in ( v ) ∑ f ( e ) = e ∈ δ 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) val ( f ) := e ∈ δ out ( s ) ∑ f ( e ) = e ∈ δ in ( t ) ∑ f ( e ) 。
最大流的 LP 形式是:
max ∑ e ∈ δ in ( t ) x e s.t. x e ≤ c e ∀ e ∈ E ∑ e ∈ δ in ( v ) x e − ∑ e ∈ δ out ( v ) x e = 0 ∀ v ∈ V ∖ { s , t } x e ≥ 0 ∀ e ∈ E \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} max e ∈ δ in ( t ) ∑ x e x e e ∈ δ in ( v ) ∑ x e − e ∈ δ out ( v ) ∑ x e x e s.t. ≤ c e = 0 ≥ 0 ∀ e ∈ E ∀ v ∈ V ∖ { s , t } ∀ e ∈ E
定理:网络流的 LP 可行域是 Integral Polytope。
任选一个
s - t flow s\text{-}t\ \text{flow} s - t flow x x x ,包含
0 < x e < 1 0\lt x_e\lt 1 0 < x e < 1 的边集叫做
E ′ E' E ′ 。
那么每个
v ∉ { s , t } v\notin \{s,t\} v ∈ / { s , t } 都必须有
0 0 0 条或者
≥ 2 \geq 2 ≥ 2 条边在
E ′ E' E ′ 中(
1 1 1 条的话显然整数和分数之间不会流守恒)。
忽略掉
E ′ E' E ′ 中边的方向,那么他含有一个环或者存在一条
s - t s\text{-}t s - t 的路径。
那么把环或者路径拿出来整体
+ ϵ +\epsilon + ϵ 或
− ϵ -\epsilon − ϵ 。
而最大流的 LP 可以写成这样:
max d T x s.t. ( B ′ − B ′ I ) x ≤ ( 0 0 c ) x ≥ 0 \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} max d T x B ′ − B ′ I x x s.t. ≤ 0 0 c ≥ 0
其中
B ∈ R ∣ V ∣ × ∣ E ∣ B\in\mathbb{R}^{|V|\times |E|} B ∈ R ∣ V ∣ × ∣ E ∣ :
B v , 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} B v , e = ⎩ ⎨ ⎧ + 1 − 1 0 , e ∈ δ in ( v ) , e ∈ δ out ( v ) , otherwise
d e = { 1 , e ∈ δ in ( t ) 0 , otherwise d_e=\begin{cases}1&,e\in \delta^{\text{in}}(t)\\0&,\text{otherwise}\end{cases} d e = { 1 0 , e ∈ δ in ( t ) , otherwise
然后删掉
s , t s,t s , t 两行得到
B ′ B' B ′ 。于是限制是
B ′ x = 0 B'x=0 B ′ x = 0 ,拆成大于号小于号各一条。
最小割的 LP 形式如下:
min ∑ e ∈ E c e y e s.t. π v − π u + y ( u , v ) ≥ 0 ∀ ( u , v ) ∈ E π s − π t ≥ 1 y e ≥ 0 ∀ e ∈ E \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} min e ∈ E ∑ c e y e π v − π u + y ( u , v ) π s − π t y e s.t. ≥ 0 ≥ 1 ≥ 0 ∀ ( u , v ) ∈ E ∀ e ∈ E
看起来很不像。我们先把上面的照搬过来,得到的应该是:
min 0 T u + 0 T v + c T y s.t. ( B ′ ) T u + ( − B ′ ) T v + I T y ≥ d u , v , y ≥ 0 \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} min 0 T u + 0 T v + c T y ( B ′ ) T u + ( − B ′ ) T v + I T y u , v , y s.t. ≥ d ≥ 0
而我们在引入一个
π : = u − v \pi:=u-v π := u − v 得到
( B ′ ) T π + y ≥ d (B')^{\mathsf T}\pi +y\geq d ( B ′ ) T π + y ≥ d 。
而这个
[ ( B ′ ) T π ] e = π v − π u [(B')^{\mathsf T}\pi]_e=\pi_v-\pi_u [( B ′ ) T π ] e = π v − π u ,于是就和最小割的对偶形式一样了。至于冒出来的那个
π s − π t ≥ 1 \pi_s-\pi_t\geq 1 π s − π t ≥ 1 其实是因为之前写的不规范导致的,不能简单的刻画为
B B B 删掉两行,要换个写法,不过感觉意义不大就不明确了。
因此最大流-最小割定理通过强对偶定理以及刚刚的转化也显然得证了。通过这样的对偶手法,我们还可以证明二分图最大匹配等于最小点覆盖。
加权区间调度问题,即
n n n 个活动,活动
i i i 在
[ s i , f i ) [s_i,f_i) [ s i , f i ) 时刻存在,并且有
w i > 0 w_i\gt 0 w i > 0 的权重。两个活动
i , j i,j i , j 可以参加当且仅当
[ s i , f i ) [s_i,f_i) [ s i , f i ) 和
[ s j , f j ) [s_j,f_j) [ s j , f j ) 无交。最大化选择的活动的
w i w_i w i 之和。
这个是经典的 DP 题。
他的 LP 形式是:
min ∑ i ∈ [ n ] x i w i s.t. ∑ i ∈ [ n ] : t ∈ [ s i , f i ) x i ≤ 1 ∀ t ∈ [ T ] x i ≥ 0 \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} min i ∈ [ n ] ∑ x i w i i ∈ [ n ] : t ∈ [ s i , f i ) ∑ x i x i ≥ 0 s.t. ≤ 1 ∀ t ∈ [ T ]
定理:加权区间调度问题的 LP 可行域是 Integral Polytope。
定义一个矩阵
A ∈ R m × n A\in \mathbb{R}^{m\times n} A ∈ R m × n 是
全幺模 (Tototally Unimodular TUM)矩阵,当且仅当
A A A 的每个子方阵的行列式都在
{ − 1 , 0 , 1 } \{-1,0,1\} { − 1 , 0 , 1 } 中。
给出一条定理一条引理:
如果一个多胞体
P P P 是
A x ≥ b , x ≥ 0 Ax\geq b,x\geq 0 A x ≥ b , x ≥ 0 的可行域,并且
A A A 是 TUM 矩阵,
b b b 是 Integral 的,则
P P P 是 Integral Polytope。
一个矩阵
A ∈ { 0 , 1 } m × n A\in\{0,1\}^{m\times n} A ∈ { 0 , 1 } m × n 如果
1 1 1 在每一列中形成一个区间,则
A A A 是 TUM 矩阵。
因此不难看出,
A A A 是 TUM 矩阵,所以这个 LP 是一个 Integral Polytope。
证明懒了,这里再给出几条别的引理:
如果 A ′ ∈ { 0 , ± 1 } n × n A'\in \{0,\pm 1\}^{n\times n} A ′ ∈ { 0 , ± 1 } n × n 满足 A ′ A' A ′ 每行最多一个 1 1 1 最多一个 − 1 -1 − 1 ,那么 det ( A ′ ) ∈ { 0 , ± 1 } \det(A')\in\{0,\pm 1\} det ( A ′ ) ∈ { 0 , ± 1 } 。
如果 A ∈ { 0 , ± 1 } m × n A\in \{0,\pm 1\}^{m\times n} A ∈ { 0 , ± 1 } m × n 满足 A A A 每行最多一个 1 1 1 最多一个 − 1 -1 − 1 ,那么 A A A 是 TUM 矩阵。证出上一条显然可以得到。故而可以得到推论:s - t flow s\text{-}t\ \text{flow} s - t flow 的 LP 可行域是 Integral Polytope。
二分图的“边-点关联矩阵”是 TUM 矩阵。故而可以得到推论:二分图最大权匹配的 LP 可行域是 Integral Polytope。
最小费用流的 LP 形式,其中
b b b 表示一个点的出流减入流最多是多少:
min ∑ e w e x e s.t. x e ≤ c e ∑ e ∈ δ out ( v ) x e − ∑ e ∈ δ in ( v ) x e ≤ b v x e ≥ 0 \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} min e ∑ w e x e x e e ∈ δ out ( v ) ∑ x e − e ∈ δ in ( v ) ∑ x e x e s.t. ≤ c e ≤ b v ≥ 0
设
z e z_{e} z e 是边流量约束的对偶变量,
p u p_u p u 是点流量约束的对偶变量,那么有:
max ∑ u − b u p u − ∑ e c e z e s.t. p v − p u − z ( u , v ) ≤ w ( u , v ) p u , z e ≥ 0 \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} max u ∑ − b u p u − e ∑ c e z e p v − p u − z ( u , v ) p u , z e s.t. ≤ w ( u , v ) ≥ 0
注意到,
z e z_e z e 只会在一条限制里出现,所以
c e c_e c e 非负的时候,
z e z_e z e 显然要取到下界
max { 0 , p v − p u − w ( u , v ) } \max\{0,p_v-p_u-w_{(u,v)}\} max { 0 , p v − p u − w ( u , v ) } 。
然后负号提出去就是求
− min ∑ u b u p u + ∑ e c e max { 0 , p v − p u − w ( u , v ) } -\min \sum\limits_{u}b_up_u+\sum\limits_{e}c_e\max\{0,p_v-p_u-w_{(u,v)}\} − min u ∑ b u p u + e ∑ c e max { 0 , p v − p u − w ( u , v ) } 。
另外,如果要求流出减流入恰好是
b b b ,那么
p p p 非负的限制就没了,因为一个
= = = 要拆成两个相反的约束,对偶之后就是两个相减的变量也就是取值任意。
所以如果题目出现的是这个形式的式子就可以转成费用流求解。
c e c_e c e 可以设为
∞ \infty ∞ ,使得
max { 0 , p v − p u − w ( u , v ) } \max\{0,p_v-p_u-w_{(u,v)}\} max { 0 , p v − p u − w ( u , v ) } 变为
p v − p u − w ( u , v ) ≤ 0 p_v-p_u-w_{(u,v)}\leq 0 p v − p u − w ( u , v ) ≤ 0 即为
p u + w ( u , v ) ≥ p v p_u+w_{(u,v)}\geq p_v p u + w ( u , v ) ≥ p v 的限制。
max { 0 , p u − p v } + max { 0 , p v − p u } \max\{0,p_u-p_v\}+\max\{0,p_v-p_u\} max { 0 , p u − p v } + max { 0 , p v − p u } 可以得到
∣ p u − p v ∣ |p_u-p_v| ∣ p u − p v ∣ 。
Examples in OI
P3337 [ZJOI2013] 防守战线
他的 LP 形式是:
min ∑ i ∈ [ 1 , n ] C i x i s.t. ∑ i ∈ [ l j , r j ] x i ≥ D j x i ≥ 0 \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} min i ∈ [ 1 , n ] ∑ C i x i i ∈ [ l j , r j ] ∑ x i x i s.t. ≥ D j ≥ 0
我们令
p i = ∑ j ∈ [ 1 , i ] x j p_i=\sum\limits_{j\in [1,i]}x_j p i = j ∈ [ 1 , i ] ∑ x j ,则我们其实是要最小化
∑ i ∈ [ 1 , n ] C i ( p i − p i − 1 ) \sum\limits_{i\in[1,n]}C_i(p_i-p_{i-1}) i ∈ [ 1 , n ] ∑ C i ( p i − p i − 1 ) ,等价于
∑ i ∈ [ 1 , n ] p i ( C i − C i + 1 ) \sum\limits_{i\in[1,n]}p_i(C_i-C_{i+1}) i ∈ [ 1 , n ] ∑ p i ( C i − C i + 1 ) 。而限制就转化为
p r − p l − 1 ≥ D p_{r}-p_{l-1}\geq D p r − p l − 1 ≥ D 和
p i − p i − 1 ≥ 0 p_i-p_{i-1}\geq 0 p i − p i − 1 ≥ 0 。
而
p r + ( − D ) ≥ p l − 1 p_{r}+(-D)\geq p_{l-1} p r + ( − D ) ≥ p l − 1 和
p i + ( − 0 ) ≥ p i − 1 p_{i}+(-0)\geq p_{i-1} p i + ( − 0 ) ≥ p i − 1 的东西,可以转化为
∞ max { 0 , p l − 1 − p r − ( − D ) } \infty\max\{0,p_{l-1}-p_{r}-(-D)\} ∞ max { 0 , p l − 1 − p r − ( − D )} 和
∞ max { 0 , p i − 1 − p i } \infty\max\{0,p_{i-1}-p_i\} ∞ max { 0 , p i − 1 − p i } 。
所以其实就是在最小化
∑ p i ( C i − C i + 1 ) + ∑ ∞ max { 0 , p l − 1 − p r − ( − D ) } + ∑ ∞ max { 0 , p i − 1 − p i } \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\} ∑ p i ( C i − C i + 1 ) + ∑ ∞ max { 0 , p l − 1 − p r − ( − D )} + ∑ ∞ max { 0 , p i − 1 − p i } ,那么建图跑费用流即可。
具体的就是
r → ( ∞ , − D ) l − 1 r\xrightarrow{(\infty,-D)} l-1 r ( ∞ , − D ) l − 1 和
i → ( ∞ , 0 ) i − 1 i\xrightarrow{(\infty,0)} i-1 i ( ∞ , 0 ) i − 1 。
而回忆一下我们的
p i p_i p i ,在线性规划里是什么?是点流量约束的对偶变量。我们最小化的
∑ b u p u \sum b_up_u ∑ b u p u 在这里体现的是
p i ( C i − C i + 1 ) p_i(C_i-C_{i+1}) p i ( C i − C i + 1 ) ,说明这个
C i − C i + 1 C_i-C_{i+1} C i − C i + 1 就是,每个点的出流减入流的上界,那么
C i − C i + 1 ≥ 0 C_i-C_{i+1}\geq 0 C i − C i + 1 ≥ 0 的时候,连
s → ( C i − C i + 1 , 0 ) i s\xrightarrow{(C_i-C_{i+1},0)} i s ( C i − C i + 1 , 0 ) i ,否则连
i → ( C i + 1 − C i , 0 ) t i\xrightarrow{(C_{i+1}-C_i,0)} t i ( C i + 1 − C i , 0 ) t 。这个所谓的
s , t s,t s , t 只是我们为了实现 MCMF 而加上去的,他本质就是给每个点加了一个免费的入流或者免费的出流,所以
C i − C i + 1 ≥ 0 C_i-C_{i+1}\geq 0 C i − C i + 1 ≥ 0 意义就是我出流随便多少,不超过
C i − C i + 1 C_{i}-C_{i+1} C i − C i + 1 即可,那么我们
s → i s\xrightarrow{} i s i 的不超过
C i − C i + 1 C_{i}-C_{i+1} C i − C i + 1 即可。
跑完费用流求出来的是最小值的相反数,我们输出的时候取相反数即可。
实现的时候费用流好像要写原始对偶才能过。
P3980 [NOI2008] 志愿者招募
他的 LP 形式是:
min ∑ j ∈ [ 1 , m ] c j x j s.t. ∑ i ∈ [ s j , t j ] x j ≥ a i x j ≥ 0 \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} min j ∈ [ 1 , m ] ∑ c j x j i ∈ [ s j , t j ] ∑ x j x j s.t. ≥ a i ≥ 0
写出它的对偶形式:
max ∑ i ∈ [ 1 , n ] a i y i s.t. ∑ i ∈ [ s j , t j ] y i ≤ c j y i ≥ 0 \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} max i ∈ [ 1 , n ] ∑ a i y i i ∈ [ s j , t j ] ∑ y i y i s.t. ≤ c j ≥ 0
用现实意义可以理解成,
y i y_i y i 是我低
i i i 天招一个人摊下来要多少钱”。
虽然形式和上一题一样,但是完全照着上一题的推出来会发现有负环跑不动。
那么我们倒着建即可,令
p i = ∑ j ∈ [ i , n ] y j p_i=\sum\limits_{j\in[i,n]}y_j p i = j ∈ [ i , n ] ∑ y j ,则我们其实是要最大化
∑ i ∈ [ 1 , n ] a i ( p i − p i + 1 ) \sum\limits_{i\in[1,n]}a_i(p_i-p_{i+1}) i ∈ [ 1 , n ] ∑ a i ( p i − p i + 1 ) ,等价于
∑ i ∈ [ 1 , n ] p i ( a i − a i − 1 ) \sum\limits_{i\in[1,n]}p_i(a_{i}-a_{i-1}) i ∈ [ 1 , n ] ∑ p i ( a i − a i − 1 ) ,然后等价于最小化
∑ i ∈ [ 1 , n ] p i ( a i − 1 − a i ) \sum\limits_{i\in[1,n]}p_i(a_{i-1}-a_{i}) i ∈ [ 1 , n ] ∑ p i ( a i − 1 − a i ) 然后取相反数。而限制就转化为
p s − p t + 1 ≤ c p_{s}-p_{t+1}\leq c p s − p t + 1 ≤ c 和
p i − p i + 1 ≥ 0 p_i-p_{i+1}\geq 0 p i − p i + 1 ≥ 0 。
而
p t + 1 + c ≥ p s p_{t+1}+c\geq p_{s} p t + 1 + c ≥ p s 和
p i + ( − 0 ) ≥ p i + 1 p_{i}+(-0)\geq p_{i+1} p i + ( − 0 ) ≥ p i + 1 的东西,可以转化为
∞ max { 0 , p s − p t + 1 − c } \infty\max\{0,p_{s}-p_{t+1}-c\} ∞ max { 0 , p s − p t + 1 − c } 和
∞ max { 0 , p i + 1 − p i } \infty\max\{0,p_{i+1}-p_i\} ∞ max { 0 , p i + 1 − p i } 。
所以其实就是在最小化
∑ p i ( a i − 1 − a i ) + ∑ ∞ max { 0 , p s − p t + 1 − c } + ∑ ∞ max { 0 , p i + 1 − p i } \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\} ∑ p i ( a i − 1 − a i ) + ∑ ∞ max { 0 , p s − p t + 1 − c } + ∑ ∞ max { 0 , p i + 1 − p i } ,那么建图跑费用流即可。
具体的就是
t + 1 → ( ∞ , c ) s t+1\xrightarrow{(\infty,c)} s t + 1 ( ∞ , c ) s 和
i → ( ∞ , 0 ) i + 1 i\xrightarrow{(\infty,0)} i+1 i ( ∞ , 0 ) i + 1 ,然后
a i − a i − 1 ≥ 0 a_i-a_{i-1}\geq 0 a i − a i − 1 ≥ 0 的时候连
s → i s\xrightarrow{} i s i ,否则连
i → t i\xrightarrow{}t i t 。
这次的答案不用再取相反数了,过程里两个取相反数抵消了。
教寺院训练营 模拟赛 R5 A. 放犬多
他的 LP 形式是:
max ∑ e ∈ E w e x e s.t. ∑ e ∈ Path ( u j , v j ) x e ≤ c j x e ≥ 0 \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} max e ∈ E ∑ w e x e e ∈ Path ( u j , v j ) ∑ x e x e s.t. ≤ c j ≥ 0
我们令
p u p_u p u 表示
1 → u 1\to u 1 → u 路径上的
x e x_e x e 之和,我们最大化的就是
∑ u ≠ r o o t w u ( p u − p f a u ) \sum\limits_{u\neq root}w_u(p_u-p_{fa_u}) u = roo t ∑ w u ( p u − p f a u ) ,转化到
∑ u p u ( w ( u , f a u ) − ∑ v ∈ son ( u ) w ( u , v ) ) \sum\limits_{u}p_u(w_{(u,fa_u)}-\sum\limits_{v\in \operatorname{son}(u)}w_{(u,v)}) u ∑ p u ( w ( u , f a u ) − v ∈ son ( u ) ∑ w ( u , v ) ) 。
所以其实是最小化
∑ u p u [ ( ∑ v ∈ son ( u ) w ( u , v ) ) − w ( u , f a u ) ] \sum\limits_{u}p_u[(\sum\limits_{v\in \operatorname{son}(u)}w_{(u,v)})-w_{(u,fa_u)}] u ∑ p u [( v ∈ son ( u ) ∑ w ( u , v ) ) − w ( u , f a u ) ]
然后对于限制的话,不妨令
u u u 是
v v v 的祖先,就变成了
p v − p u ≤ c j p_v-p_u\leq c_j p v − p u ≤ c j ,然后
p f a u − p u ≤ 0 p_{fa_u}-p_u\leq 0 p f a u − p u ≤ 0 。
所以这个可以转化为,
∞ max { 0 , p v − p u − c j } \infty\max\{0,p_v-p_u-c_j\} ∞ max { 0 , p v − p u − c j } 和
∞ max { p f a u − p u } \infty\max\{p_{fa_u}-p_u\} ∞ max { p f a u − p u } 。
所以我们就可以连边
u → ( ∞ , c j ) v u\xrightarrow{(\infty,c_j)}v u ( ∞ , c j ) v 和
u → ( ∞ , 0 ) f a u u\xrightarrow{(\infty,0)}fa_u u ( ∞ , 0 ) f a u 。
至于
b u : = ( ∑ v ∈ son ( u ) w ( u , v ) ) − w ( u , f a u ) b_u:=(\sum\limits_{v\in \operatorname{son}(u)}w_{(u,v)})-w_{(u,fa_u)} b u := ( v ∈ son ( u ) ∑ w ( u , v ) ) − w ( u , f a u ) ,
b u ≥ 0 b_u\geq 0 b u ≥ 0 时候连
s → ( b u , 0 ) u s\xrightarrow{(b_u,0)}u s ( b u , 0 ) u ,否则连
u → ( − b u , 0 ) t u\xrightarrow{(-b_u,0)} t u ( − b u , 0 ) t 。
然后仍然在这张图上跑 MCMF 即可。
QOJ5036 卑鄙的下毒人
本质是在最小化
∑ ∞ max { 0 , p i − 1 − p i } + k ( p n − p 0 ) , ∑ max { 0 , p l − 1 − p r − ( − a ) } \sum \infty\max\{0,p_{i-1}-p_i\}+k(p_n-p_0),\sum\max\{0,p_{l-1}-p_r-(-a)\} ∑ ∞ max { 0 , p i − 1 − p i } + k ( p n − p 0 ) , ∑ max { 0 , p l − 1 − p r − ( − a )} 。
建图
i − 1 → ( ∞ , 0 ) i i-1\xrightarrow{(\infty,0)} i i − 1 ( ∞ , 0 ) i ,
l − 1 → ( 1 , − a ) r l-1\xrightarrow{(1,-a)}r l − 1 ( 1 , − a ) r ,
s → ( k , 0 ) 0 s\xrightarrow{(k,0)}0 s ( k , 0 ) 0 ,
n → ( k , 0 ) t n\xrightarrow{(k,0)} t n ( k , 0 ) t 跑 MCMF。
但是数据范围导致硬上 Dinic 肯定过不去,注意到
k ≤ 5 k\leq5 k ≤ 5 最多增广
5 5 5 次就结束了,可以考虑原始对偶。由于图显然都是小的连大的是个 DAG,所以最开始的求一次最短路可以用拓扑排序代替 SPFA。
QOJ4899 机器
先推一下最大费用循环流的 LP 形式:
max ∑ e w e x e s.t. x e ≤ c e ∑ e ∈ δ out ( v ) x e − ∑ e ∈ δ in ( v ) x e = 0 x e ≥ 0 \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} max e ∑ w e x e x e e ∈ δ out ( v ) ∑ x e − e ∈ δ in ( v ) ∑ x e x e s.t. ≤ c e = 0 ≥ 0
对偶得到:
min − ∑ e c e z e s.t. p v − p u − z ( u , v ) ≤ w ( u , v ) z e ≥ 0 \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} min − e ∑ c e z e p v − p u − z ( u , v ) z e s.t. ≤ w ( u , v ) ≥ 0
注意,因为原来的限制是
= = = ,所以这里
p u p_u p u 没有限制,这是因为
= = = 要拆成
≤ \leq ≤ 和
≥ \geq ≥ ,而这样一组合
p u p_u p u 就被写成了两个变量相减就没有限制了。
还是
z e z_e z e 只在一条式子里出现,所以必然要顶到上界也就是
max { 0 , p v − p u − w ( u , v ) } \max\{0,p_v-p_u-w_{(u,v)}\} max { 0 , p v − p u − w ( u , v ) } ,然后其实本质上在最小化
− ∑ ( u , v ) c ( u , v ) × max { p v − p u − w ( u , v ) } -\sum\limits_{(u,v)}c_{(u,v)}\times \max\{p_v-p_u-w_{(u,v)}\} − ( u , v ) ∑ c ( u , v ) × max { p v − p u − w ( u , v ) } ,也就是最小化
∑ ( u , v ) c ( u , v ) × max { p u + w ( u , v ) − p v } \sum\limits_{(u,v)}c_{(u,v)}\times \max\{p_u+w_{(u,v)}-p_v\} ( u , v ) ∑ c ( u , v ) × max { p u + w ( u , v ) − p v } 。
所以这个题最小化的其实是:
∑ ∞ max { 0 , p u + ( h u − h v ) − p v } + ∑ max { 0 , p s + ( − a i , j ) − p i } + ∑ max { 0 , p i + ( − b i , j ) − p s } \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\} ∑ ∞ max { 0 , p u + ( h u − h v ) − p v } + ∑ max { 0 , p s + ( − a i , j ) − p i } + ∑ max { 0 , p i + ( − b i , j ) − p s }
认为
p s = 0 p_s=0 p s = 0 ,那么后两个式子可以表达成一个
f i ( p i ) f_i(p_i) f i ( p i ) 形式,前一个式子不妨令
p ′ : = p + h p':=p+h p ′ := p + h 那么相当于是要求
p u ′ ≤ p v ′ p'_u\leq p'_v p u ′ ≤ p v ′ 。
然后这个其实是一个广义的保序回归。好像是可以证明,如果函数是凸的并且和指数函数凸的方向一致,就可以跑保序回归的那个做法。
所以,我们直接整体二分这个东西,然后每次只要决策这些点取到
m i d mid mi d 还是
m i d + 1 mid+1 mi d + 1 。这个是一个最小权闭合子图,我们取反变成求最大权闭合子图。
这个是经典问题,
v a l i ≥ 0 val_i\geq 0 v a l i ≥ 0 就连
s → v a l i i s\xrightarrow{val_i}i s v a l i i 否则连
i → − v a l i t i\xrightarrow{-val_i}t i − v a l i t ,如果限制是
u u u 选了
v v v 也一定要选,连
u → ∞ v u\xrightarrow{\infty}v u ∞ v 。
本题中,我们看做所有点都先选
m i d mid mi d ,然后选一些点改成
m i d + 1 mid+1 mi d + 1 。对于限制
p u ′ ≤ p v ′ p'_u\leq p'_v p u ′ ≤ p v ′ 的,则选择了
u u u 必须要选择
v v v 。
建图求最大流,最后残量网络上和
s s s 相连的点就选
m i d + 1 mid+1 mi d + 1 ,别的都选
m i d mid mi d 。
求完之后分治下去继续求即可
CF1765J Hero to Zero
设第
i i i 列减掉了
p i p_i p i ,第
j j j 列减掉了
q j q_j q j ,那么在最小化:
∑ p i + ∑ q j + ∑ ( c i , j − p i − q j ) \sum p_i+\sum q_j+\sum (c_{i,j}-p_i-q_j) ∑ p i + ∑ q j + ∑ ( c i , j − p i − q j )
即:
( ∑ c i , j ) − ( n − 1 ) ( ∑ p i + ∑ q j ) (\sum c_{i,j})-(n-1)(\sum p_i+\sum q_j) ( ∑ c i , j ) − ( n − 1 ) ( ∑ p i + ∑ q j )
那么目标就是最大化
∑ p i + ∑ q j \sum p_i+\sum q_j ∑ p i + ∑ q j ,限制只是
p i + q j ≤ c i , j p_i+q_j\leq c_{i,j} p i + q j ≤ c i , j 。
注意,
p i , q j p_i,q_j p i , q j 没有限制,说明是两个变量相减的形式,那么我们对偶之后会得到等式。
通过写作矩阵的标准形式,我们可以直观得到对偶的结果:
min ∑ c i , j x i , j s.t. ∑ 1 ≤ j ≤ n x i , j = 1 ∀ 1 ≤ i ≤ n ∑ 1 ≤ i ≤ n x i , j = 1 ∀ 1 ≤ j ≤ n x i , j ≥ 0 \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} min ∑ c i , j x i , j 1 ≤ j ≤ n ∑ x i , j 1 ≤ i ≤ n ∑ x i , j x i , j s.t. = 1 = 1 ≥ 0 ∀1 ≤ i ≤ n ∀1 ≤ j ≤ n
这个是典型的二分图匹配的线性规划形式,也可以轻松证明这个矩阵其实是 TUM 矩阵,所以直接做就是精确解了。由于
c i , j = ∣ a i − b j ∣ c_{i,j}=|a_i-b_j| c i , j = ∣ a i − b j ∣ ,这个最小值显然是
a , b a,b a , b 各自排序之后对位匹配。
∑ c i , j \sum c_{i,j} ∑ c i , j 也是好求的,双指针扫一下就可以了。
复杂度瓶颈在排序。
ABC224H Security Camera 2
LP 形式显然为:
min ∑ a i x i + ∑ b j y j s.t. x i + y j ≥ c i , j x i , y j ≥ 0 \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} min ∑ a i x i + ∑ b j y j x i + y j x i , y j s.t. ≥ c i , j ≥ 0
对偶得到:
max ∑ c i , j z i , j s.t. ∑ L + 1 ≤ j ≤ L + R z i , j ≤ a i ∀ 1 ≤ i ≤ L ∑ 1 ≤ i ≤ L z i , j ≤ b j ∀ L + 1 ≤ j ≤ L + R z i , j ≥ 0 \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} max ∑ c i , j z i , j L + 1 ≤ j ≤ L + R ∑ z i , j 1 ≤ i ≤ L ∑ z i , j z i , j s.t. ≤ a i ≤ b j ≥ 0 ∀1 ≤ i ≤ L ∀ L + 1 ≤ j ≤ L + R
不是哥们这不是我们费用流的原始形式吗?
建图
s → ( a i , 0 ) i s\xrightarrow{(a_i,0)}i s ( a i , 0 ) i ,
j → ( b j , 0 ) t j\xrightarrow{(b_j,0)}t j ( b j , 0 ) t ,
i → ( ∞ , − c i , j ) j i\xrightarrow{(\infty,-c_{i,j})}j i ( ∞ , − c i , j ) j 跑最小费用最大流,然后答案取相反数即可。
CF605C Freelancer's Dreams
LP 形式为:
min ∑ z i s.t. ∑ a i z i ≥ p ∑ b i z i ≥ q z i ≥ 0 \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} min ∑ z i ∑ a i z i ∑ b i z i z i s.t. ≥ p ≥ q ≥ 0
对偶变成:
max p x + q y s.t. a i x + b i y ≤ 1 x , y ≥ 0 \begin{aligned}
\max\quad px+qy&
\quad \text{s.t.}\\
a_ix+b_iy&\leq 1\\
x,y&\geq 0
\end{aligned} max p x + q y a i x + b i y x , y s.t. ≤ 1 ≥ 0
注意到,
x x x 确定则
y y y 一定是取到
min { 1 − a i x b i } \min\{\frac{1-a_ix}{b_i}\} min { b i 1 − a i x } 。
而
p x px p x 是一个线性函数,
q min { 1 − a i x b i } q\min\{\frac{1-a_ix}{b_i}\} q min { b i 1 − a i x } 是多个线性函数取
min \min min ,我们有结论,多个线性函数取
min \min min 最后是一个上凸函数,上凸函数加上线性函数也还是上凸函数,所以可以在上凸壳上二分斜率找最值点。