LP-duality 定理
LP-duality 定理:线性规划问题的对偶定理。
【线性规划问题的标准形式】
给定矩阵 \(A,b,c\),其中 \(b,c\) 都是只有一列的矩阵(可以当作列向量看)。
问题 1: 求向量(一组数)\(\vec{x}\),要求 \(A\cdot \vec{x}\le \vec{b}\)
且 \(\vec{x}\ge 0\),使得 \(c^T\cdot \vec{x}\) 最大。
\[\begin{cases}A\cdot\vec{x}\le \vec{b}\\\vec{x}\ge 0\end{cases},\max\{c^T\cdot \vec{x}\} \]
问题 2: 求向量(一组数)\(\vec{y}\),要求 \(A^T\cdot \vec{y}\ge \vec{c}\) 且 \(\vec{y}\ge 0\),使得 \(b^T\cdot \vec{y}\) 最小。
\[\begin{cases}A^T\cdot \vec{y}\ge \vec{c}\\\vec{y}\ge 0\end{cases},\min\{b^T\cdot \vec{y}\} \]
【定理内容】
用于将线性规划问题转化为对偶问题,然后用算法解决。
这两个问题是 "对偶" 的,根据定理,它们满足这两个性质:
弱对偶性:记问题 1 的任一组可行解 \(\vec{X}\) 和问题 2 的任一组可行解 \(\vec{Y}\),则 \(c^T\cdot\vec{X}\le b^T\cdot\vec{Y}\)。
强对偶性:如果问题 1,2 都是有解的,则 1 的最优解(最大值)和 2 的最优解(最大值)相等。
【一些观察】
线性规划问题其实可以看做给出一大堆不等式,求条件极值。
观察发现,LP 定理的问题 2 的变量个数(\(\vec{y}\) 的元素个数)恰好等于问题 1 的约束个数(\(A\) 的行数)
【定理应用其一:最大流最小割定理】
网络流问题就是天生的一类线性规划问题。
这里将用 LP-duality 定理粗略证明 MF=MC 定理。拿个例子。
\(e_1\sim e_5\) 是每条边的标号。\(x_1\sim x_5\) 表示各边的流量。令 \(cap_i\) 表示 \(e_i\) 的容量(图中未写)。
先把最大流问题改造成线性规划模式。
第一条不等式就是每条边不能流超过容量的,后两条等式满足 \(1,2\) 流量守恒。
目标是 \(\max x_1+x_2\)。
虽然是等式,但其实我们可以把它拆成两个不等式。
这就是一个标准的线性规划问题的形式。为什么?改成矩阵形式看看。
通过 LP 定理,我们等价于求:
\[\begin{cases}A^T\cdot \vec{y}\ge \vec{c}\\\vec{y}\ge 0\end{cases},\min\{b^T\cdot \vec{y}\} \]
那这是什么呢?
而我们的 \(\vec{y}\) 应当是一个包含 \(y_1\sim y_9\) 的列向量。搭配上 \(\vec{c}\),写成不等式看看。
观察发现 \(y_6,y_7\) 和 \(y_8,y_9\) 都是成对以差的形式出现。不如令 \(z_1=y_6-y_7,z_2=y_8-y_9\),换元。而且注意 \(z_1,z_2\) 是没有 \(\ge 0\) 限制的。
然后我们会用到几个引理:
引理 1:\(z_1,z_2\in [0,1]\)。
如果不在 \([0,1]\) 内,容易发现,总可以将不在 \([0,1]\) 的变量调整,更靠近 \([0,1]\) 且使得原本的 \(\vec{y}\) 依然是合法解。
引理 1.5:给定数组 \(d_1\sim d_n\)(可正可负),要求设置 \(n\) 个变量 \(0\le z_1\le z_2\le\dots\le z_n\le 1\),使 \(\sum d_iz_i\) 取最小值。则 \(z_1\sim z_n\in \{0,1\}\)
将 \(z_1\sim z_n\) 视作数轴上 \([0,1]\) 内顺次排列的 \(n\) 个点。从 \(i=1\) 开始,如果 \(d_i>0\),就向左移到极限;否则向右移到极限。容易发现每次移动之后,\(z_i\) 要么 \(=0\) 了,要么和 \(z_{i+1}\) 重合(可以和 \(z_{i+1}\) 同步移动)。
引理 2:\(z_1,z_2\in \{0,1\}\)。
如果方程里的 \(z_1,z_2\) 的大小顺序确定了,显然每个 \(y_i\) 都能取到一个最小值(而这个最小值要么是 \(0\),要么可以表示为 \(z_i\) 们的线性组合)。那么 \(\min\{cap_1y_1+cap_2y_2+cap_3y_3+cap_4y_4+cap_5y_5\}\) 就可以写成 \(\min(P\cdot z_1+Q\cdot z_2)\) 的形式。更一般地,可以归约到 引理 1.5 的问题形式。
因为对于每种大小顺序,都能归约到 引理 1.5;而只要是 引理 1.5,就必然有 \(z_i\in \{0,1\}\)。所以可得:\(z_i\in \{0,1\}\)。
引理 3:不等式只有三种类型,\(\ge 1-z_i,\ge z_i-z_j,\ge z_k-0\)。
其实就是在考虑 \(A^T\) 中的第 \(6\sim 9\) 列,其实对应了 \(A\) 的对应行,也就是点的出入均衡条件。
而 \(A\) 的一行的某一列如果是 \(1,-1\),表示这一行所对应的点有对应的出或者入边(如果是 \(1\) 就是这个列对应的边是入)。
众所周知,一条边恰好从一个点出,向一个点入。所以在 \(A\) 的某一列上最多出现 \(1,-1\) 各一次(如果是与 \(S\) 或者 \(T\) 相连的边,就只会有 \(1\) 和 \(-1\) 中的一个)。
\(A\) 的一列对应 \(A^T\) 的一行,所以 \(A^T\) 的一行按理应该只出现 \(1,-1\) 各一个;结合我们为了等式而拆出来了两个不等式(两个对应不等式其实对应了一个 \(z\)),\(A^T\) 的每一行最多出现 \(4\) 个 \(\pm 1\),也就是最多对应两个 \(z\)。
下面根据引理 2,3 来证明求 \(y_1\sim y_5,z_1,z_2\) 就是在求最小割。
因为 \(z_1,z_2\in \{0,1\}\),而不等式只有三种类型:\(\ge 1-z_i,\ge z_i-z_j,\ge z_k-0\),所以显然 \(y_i\in \{0,1\}\)。
将 \(y_i=0/1\) 视作第 \(i\) 条边是否割掉;将 \(z_i=0/1\) 视作第 \(i\) 个点是否与 \(S\) 连通。可以发现这就是求最小割。