目录
- [Linear Programming](#Linear Programming)
-
- Introduction
- [Methods for Solving Linear Programs](#Methods for Solving Linear Programs)
- [Linear Programming Duality](#Linear Programming Duality)
- [Integral Polytopes: Exact Algorithms Using LP](#Integral Polytopes: Exact Algorithms Using LP)
- [Examples in OI](#Examples in OI)
参考资料:
- 2021 年国家集训队论文 南京外国语学校 丁晓漫 再探线性规划对偶在信息学竞赛中的应用
- 算法设计与分析(2024年春季学期)栗师 Linear Programming
- Summer School (July 12 --- July 16, 2024) 栗师 Combinatorial Optimization Via Linear Programming
- 线性规划与网络流 Larunatrecy
- 《再探线性规划对偶在信息学竞赛中的应用》 - 学习笔记 - p_b_p_b - 博客园
- 线性规划 - ez_lcw - 博客园
- 费用流线性规划对偶的构造方案 - 洛谷专栏
- 数学规划与运筹学 (12) 内点法 - 知乎
- 【线性规划(七)】内点法 - 知乎
- 数学规划与运筹学 (11) Khachyian 椭球法 - 知乎
- Linear Programming - The Simplex Algorithm(1) - 知乎
- 浅谈 OI 中的一些对偶类问题 - 洛谷专栏
- 对偶 - 题单 - 洛谷 | 计算机科学教育新生态 来自 教寺院训练营,私有状态。
- 线性规划基础 - OI Wiki
- Wikipedia
Linear Programming
Introduction
给定一个基集 U U U,存在可行解集合 S \mathcal{S} S,是 U U U 的一些子集形成的"集合族",有 w i , i ∈ U w_i,i\in U wi,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∑wi。
一些例子:最短路问题、最小生成树问题、最大独立集、图的最大匹配、背包问题。
几乎所有组合优化问题 Combinatorial Optimization Problem 都可以等价地写成一个整数规划问题 Integer Program(IP),就是变量 x i ∈ { 0 , 1 } x_i\in\{0,1\} xi∈{0,1} 表示是否选择 i i i,约束是解在可行解集合中,目标是最优化 ∑ w i x i \sum w_ix_i ∑wixi。
而 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≤xi≤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} min7x1+4x2x1+x2x1+2x24x1+x2x1,x2s.t.≥5≥6≥8≥0
最优解是 x 1 = 1 , x 2 = 4 x_1=1,x_2=4 x1=1,x2=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} minc1x1+c2x2+⋯+cnxna1,1x1+a1,2x2+⋯+a1,nxna2,1x1+a2,2x2+⋯+a2,nxn⋮⋮⋮⋮am,1x1+am,2x2+⋯+am,nxnx1,x2,⋯,xns.t.≥b1≥b2≥bm≥0
其中 n n n 是变量个数, m m m 是限制个数。
写成:
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:= x1x2⋮xn ∈Rn
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:= c1c2⋮cn ∈Rn
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:= a1,1a2,1⋮am,1a1,2a2,2⋮am,2⋯⋯⋱⋯a1,na2,n⋮am,n ∈Rm×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:= b1b2⋮bm ∈Rm
那么有:
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} mincTxAxxs.t.≥b≥0
所有的线性规划都可以转化成标准形式。
- 如果求 max \max max 就是求目标函数的相反数的 min \min min。
- 如果取值是 x i ≥ − a x_i\geq -a xi≥−a 则可以用 x i + a x_i+a xi+a 代替 x i x_i xi。
- 如果某个变量 x i x_i xi 没有约束,引入两个新的变量 x i ′ , x i ′ ′ x_i',x_i'' xi′,xi′′ 用 x i ′ − x i ′ ′ x_i'-x_i'' xi′−xi′′ 代替 x x x。
- 如果是 ≤ \leq ≤ 号,那条限制乘上 − 1 -1 −1。
- 如果是 = = = 号,那么再拼一个 ≤ \leq ≤ 的限制出来就可以强行取等。
我们称满足 A x ≥ b , x ≥ 0 Ax\geq b,x\geq 0 Ax≥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. λ1x(1)+λ2x(2)+⋯+λtx(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∈Rn 是一个 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 Ax≥b 转化为 A x − s = b Ax-s=b Ax−s=b 其中 s ≥ 0 s\geq 0 s≥0。
然后我们不妨令 x n + i : = s i x_{n+i}:=s_i xn+i:=si,我们可以整理出一套 x n + i x_{n+i} xn+i 关于 x j ( j ≤ n ) x_j(j\leq n) xj(j≤n) 的线性组合。把 x n + i x_{n+i} xn+i 称为基变量 basic variable, x j ( j ≤ n ) x_j(j\leq n) xj(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} mincTxAxxs.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} min1TaAx+ax,as.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 Ax=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} mincTx+M1TaAx+ax,as.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} min7x1+4x2x1+x2x1+2x24x1+x2x1,x2s.t.≥5≥6≥8≥0
最优解是 x 1 = 1 , x 2 = 4 x_1=1,x_2=4 x1=1,x2=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 7x1+4x2≥3(x1+x2)+(4x1+x2)≥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} max5y1+6y2+8y3y1+y2+4y3y1+2y2+y3y1,y2,y3s.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} mincTxAxxs.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} maxbTyATyys.t.≤c≥0
在本例中有:
A = ( 1 1 1 2 4 1 ) A = \begin{pmatrix} 1 & 1 \\ 1 & 2 \\ 4 & 1 \end{pmatrix} A= 114121
b = ( 5 6 8 ) b = \begin{pmatrix} 5 \\ 6 \\ 8 \end{pmatrix} b= 568
c = ( 7 4 ) c = \begin{pmatrix} 7\\ 4 \end{pmatrix} c=(74)
设 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=bTy∗≤(Ax∗)Ty∗=(x∗)TATy∗≤(x∗)Tc=cTx∗=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 Ax=b,x≥0 无可行解,当且仅当存在 y y y 使得 y T A ≥ 0 y^{\mathsf T} A \geq 0 yTA≥0 且 y T b < 0 y^{\mathsf T} b \lt 0 yTb<0 可行。
b ∉ { A x : x ≥ 0 } b\notin\{Ax:x\geq 0\} b∈/{Ax:x≥0},因此存在一个超平面将 b b b 与 { A x : x ≥ 0 } \{Ax : x \geq 0\} {Ax:x≥0} 分开。
记该超平面为 y T z = g y^{\mathsf T} z = g yTz=g,则对于所有 x ≥ 0 x \geq 0 x≥0 有: y T b < g y^{\mathsf T} b \lt g yTb<g 且 y T A x > g y^{\mathsf T}Ax \gt g yTAx>g。
由此可得: g < 0 g < 0 g<0 且 y A ≥ 0 y^ A \geq 0 yA≥0。
因此: y T b < g < 0 y^{\mathsf T}b < g < 0 yTb<g<0。
引理 Farkas Lemma 的变形: A x ≤ b , x ≥ 0 Ax\leq b,x\geq 0 Ax≤b,x≥0 无可行解,当且仅当存在 y y y 使得 y T A ≥ 0 y^{\mathsf T} A \geq 0 yTA≥0 且 y T b < 0 y^{\mathsf T} b\lt 0 yTb<0 且 y ≥ 0 y\geq 0 y≥0 可行。
改写为等价形式: A x + x ′ = b Ax+x'=b Ax+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)(xx′)=b,(xx′)≥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 yT(A,I)≥0,yTb<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 yTA≥0,y≥0,yTb<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 (−AcT)x≤(−bP−ε),x≥0无可行解。
根据 Farkas 引理,存在 y ∈ R m , y ≥ 0 y \in \mathbb{R}^m, y \geq 0 y∈Rm,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 (yT,α)(−AcT)≥0,(yT,α)(−bP−ε)<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 −yTA+cT≥0,−yTb+P−ε<0。
等价于 A T y ≤ c , b T y > P − ε A^{\mathsf T} y \le c, b^{\mathsf T} y > P - \varepsilon ATy≤c,bTy>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} mincTxAxxs.t.≤b≥0
可以这样调用 Oracle 3 次得出解:
-
检查原始可行性:询问问题 A x ≤ b , x ≥ 0 Ax\leq b,x\geq 0 Ax≤b,x≥0 是否有解。若无则 Infeasible。
-
检查对偶可行性:询问问题 A T y ≤ c , y ≥ 0 A^{\mathsf T}y\leq c,y\geq 0 ATy≤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} cTxAxxATyy≤bTy≤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⊆Rn 的极点全在 Z n \mathbb{Z}^n Zn 中,则称 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} mine∈E∑wexee∈δ(v)∑xexes.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 xe∈{0,1}∀e∈E
换为:
x e ≥ 0 ∀ e ∈ E x_e\geq 0\quad \forall e\in E xe≥0∀e∈E
定理:二分图匹配的 LP 可行域是 Integral Polytope。
选一个 x x x 在可行域 P P P 中
相当于证明:若 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=21(x′+x′′) 即可。
- 第一种情况:那些 0 < x e < 1 0\lt x_e\lt 1 0<xe<1 的边出现了环。
我们对环用蓝色和红色染色。对于 x ′ x' x′,给每条蓝边 + ϵ +\epsilon +ϵ,红边 − ϵ -\epsilon −ϵ。对于 x ′ ′ x'' x′′,给每条蓝边 − ϵ -\epsilon −ϵ,红边 + ϵ +\epsilon +ϵ。
- 第二种情况:那些 0 < x e < 1 0\lt x_e\lt 1 0<xe<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≥0E:
∀ 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)≤ce∀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} maxe∈δin(t)∑xexee∈δin(v)∑xe−e∈δout(v)∑xexes.t.≤ce=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<xe<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} maxdTx B′−B′I xxs.t.≤ 00c ≥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} Bv,e=⎩ ⎨ ⎧+1−10,e∈δin(v),e∈δout(v),otherwise
d d d 是:
d e = { 1 , e ∈ δ in ( t ) 0 , otherwise d_e=\begin{cases}1&,e\in \delta^{\text{in}}(t)\\0&,\text{otherwise}\end{cases} de={10,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} mine∈E∑ceyeπv−πu+y(u,v)πs−πtyes.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} min0Tu+0Tv+cTy(B′)Tu+(−B′)Tv+ITyu,v,ys.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) [si,fi) 时刻存在,并且有 w i > 0 w_i\gt 0 wi>0 的权重。两个活动 i , j i,j i,j 可以参加当且仅当 [ s i , f i ) [s_i,f_i) [si,fi) 和 [ s j , f j ) [s_j,f_j) [sj,fj) 无交。最大化选择的活动的 w i w_i wi 之和。
这个是经典的 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} mini∈[n]∑xiwii∈[n]:t∈[si,fi)∑xixi≥0s.t.≤1∀t∈[T]
定理:加权区间调度问题的 LP 可行域是 Integral Polytope。
定义一个矩阵 A ∈ R m × n A\in \mathbb{R}^{m\times n} A∈Rm×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 Ax≥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 形式:
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} mine∑wexexee∈δout(v)∑xe−e∈δin(v)∑xexes.t.≤ce≤bv≥0
设 z e z_{e} ze 是边流量约束的对偶变量, p u p_u pu 是点流量约束的对偶变量,那么有:
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} maxu∑−bupu−e∑cezepv−pu−z(u,v)pu,zes.t.≤w(u,v)≥0
注意到, z e z_e ze 只会在一条限制里出现,所以 c e c_e ce 非负的时候, z e z_e ze 显然要取到下界 max { 0 , p v − p u − w ( u , v ) } \max\{0,p_v-p_u-w_{(u,v)}\} max{0,pv−pu−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)}\} −minu∑bupu+e∑cemax{0,pv−pu−w(u,v)}。
另外,如果要求流出减流入恰好是 b b b,那么 p p p 非负的限制就没了,因为一个 = = = 要拆成两个相反的约束,对偶之后就是两个相减的变量也就是取值任意。
所以如果题目出现的是这个形式的式子就可以转成费用流求解。
c e c_e ce 可以设为 ∞ \infty ∞,使得 max { 0 , p v − p u − w ( u , v ) } \max\{0,p_v-p_u-w_{(u,v)}\} max{0,pv−pu−w(u,v)} 变为 p v − p u − w ( u , v ) ≤ 0 p_v-p_u-w_{(u,v)}\leq 0 pv−pu−w(u,v)≤0 即为 p u + w ( u , v ) ≥ p v p_u+w_{(u,v)}\geq p_v pu+w(u,v)≥pv 的限制。
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,pu−pv}+max{0,pv−pu} 可以得到 ∣ p u − p v ∣ |p_u-p_v| ∣pu−pv∣。
另外,网络流输出方案可以参考 费用流线性规划对偶的构造方案 - 洛谷专栏。
Examples in OI
待添加。