再探究线性规划和对偶问题_学习笔记
这是一篇啃论文的学习笔记嗷
标准型线性规划和对偶
任意模型都可以转换成标准型,可写为
max
c
T
x
A
x
≤
b
x
≥
0
\max c^{T}x\\ Ax\le b\\ x\ge 0
maxcTxAx≤bx≥0
c
c
c 表示目标函数的系数,
x
x
x 为长度为
n
n
n 的向量表示变量,
A
A
A 为
m
×
n
m\times n
m×n 的矩阵表示约束的系数,
b
b
b 为长度为
m
m
m 的向量表示约束中的常数。
一般地,任意模型都可以转换成标准型,但有些过程比较繁琐,所以也可以选择死背
依旧很繁琐,所以接下来着眼标准型,毕竟它形式简单,且所有线性规划都能写成标准型。
标准型的对偶
任意线性规划都有对偶线性规划,下面给出标准型的对偶,为
min
y
T
b
A
T
y
≥
c
y
≥
0
\min y^Tb\\ A^Ty\ge c\\ y\ge 0
minyTbATy≥cy≥0
此处
y
y
y 称作对偶变量,这两个线性规划互为对偶问题。
对偶问题的性质
在这里给出对偶问题的一些基本结论,暂不做证明
弱对偶引理:假设
x
x
x 和
λ
λ
λ 分别是线性规划的原问题和对偶问题(对称形式及非对称形式)的可行解,则
x
T
x
≥
λ
T
b
x^Tx\ge λ^Tb
xTx≥λTb ,即“极大值
≤
\le
≤ 极小值”。
定理1:假设 x 0 x_0 x0 和 λ 0 λ_0 λ0 分别是原问题和对偶问题的可行解,如果 c T x 0 ≥ λ 0 T b c^Tx_0\ge λ_0^Tb cTx0≥λ0Tb,那么 x 0 x_0 x0 和 λ 0 λ_0 λ0 分别是各自问题的最优解。
定理2(对偶定理):如果原问题有最优解,那么其对偶问题也有最优解,并且它们目标函数的最优解相同。
定理3(互补松弛条件):
x
x
x 和
λ
λ
λ 分别是原问题和对偶问题的可行解,则它们分别是各自问题的最优解的充分必要条件为
1.
(
c
T
−
λ
T
A
)
x
=
0
2.
λ
T
(
A
x
−
b
)
=
0
\begin{aligned} & 1.\ \ \ \ (c^T-λ^TA)x=0 \\ & 2.\ \ \ \ λ^T(A_x-b)=0 \end{aligned}
1. (cT−λTA)x=02. λT(Ax−b)=0
拉格朗日对偶
论文上讲的并没有很清楚,所以在这里推一个b站视频 机器学习系列0.2.2——拉格朗日对偶性 还有可能需要的前置知识 机器学习系列0.2.1——拉格朗日乘子法及KKT条件 。
(反正我数学菜成一坨屎,看视频都看不懂。
(不过不重要2333。
一般的
设
f
(
x
)
,
g
(
x
)
f(x),g(x)
f(x),g(x) 为关于
x
x
x 的函数,(
x
x
x可以是向量),此时要求
max
f
(
x
)
g
(
x
)
≤
0
\max f(x)\\ g(x)\le 0
maxf(x)g(x)≤0
引入拉格朗日乘子
λ
\lambda
λ ,(
λ
\lambda
λ 可以是向量),
L
(
λ
)
=
max
f
(
x
)
−
λ
g
(
x
)
L(\lambda)=\max f(x)-\lambda g(x)
L(λ)=maxf(x)−λg(x),那么
f
(
x
)
≤
min
L
(
λ
)
f(x)\le \min L(\lambda)
f(x)≤minL(λ)
一般的拉格朗日对偶的性质
记
x
∗
x^*
x∗ 为满足
L
(
a
λ
1
+
(
1
−
a
)
λ
2
)
L(a\lambda_1+(1-a)\lambda_2)
L(aλ1+(1−a)λ2) 最大时的
x
x
x ,那么考虑
L
(
a
λ
1
+
(
1
−
a
)
λ
2
)
=
f
(
x
∗
)
−
(
a
λ
1
+
(
1
−
a
)
λ
2
)
g
(
x
∗
)
=
a
(
f
(
x
∗
)
−
λ
1
g
(
x
∗
)
)
+
(
1
−
a
)
(
f
(
x
∗
)
−
λ
2
g
(
x
∗
)
)
≤
a
L
(
λ
1
)
+
(
1
−
a
)
L
(
λ
2
)
\begin{aligned} &L(a\lambda_1+(1-a)\lambda_2)\\ =&f(x^*)-(a\lambda_1+(1-a)\lambda_2)g(x^*)\\ =&a(f(x^*)-\lambda_1g(x^*))+(1-a)(f(x^*)-\lambda_2g(x^*))\\ \le& aL(\lambda_1)+(1-a)L(\lambda_2) \end{aligned}
==≤L(aλ1+(1−a)λ2)f(x∗)−(aλ1+(1−a)λ2)g(x∗)a(f(x∗)−λ1g(x∗))+(1−a)(f(x∗)−λ2g(x∗))aL(λ1)+(1−a)L(λ2)
又因为
然后你发现这个东西是就是凸函数的零阶定义。把 λ \lambda λ 看成变量,那么函数 L ( λ ) L(\lambda) L(λ) 是凸的。然后在一般的拉格朗日对偶问题中,当 λ \lambda λ 不是一个向量,那么可以直接通过二分斜率或者三分来求得最小值。
线性规划中的拉格朗日对偶
线性规划的标准型
max
c
T
x
A
x
≤
b
x
≥
0
\max c^{T}x\\ Ax\le b\\ x\ge 0
maxcTxAx≤bx≥0
考虑代入拉格朗日对偶模型,令
f
(
x
)
=
c
T
x
f(x)=c^Tx
f(x)=cTx ,
g
(
x
)
=
A
x
−
b
g(x)=Ax-b
g(x)=Ax−b,
λ
=
y
T
\lambda=y^T
λ=yT 。因为有
f
(
x
)
≤
min
max
f
(
x
)
−
λ
g
(
x
)
f(x)\le \min \max f(x)-\lambda g(x)
f(x)≤minmaxf(x)−λg(x)
所以
max
c
T
x
≤
min
y
≥
0
max
x
≥
0
c
T
x
−
y
T
(
A
x
−
b
)
=
min
y
≥
0
max
x
≥
0
(
c
T
−
y
T
A
)
x
+
y
T
b
=
min
y
T
b
\max c^Tx\le \min_{y\ge 0} \max_{x\ge 0} c^Tx-y^T(Ax-b)=\min_{y\ge 0} \max_{x\ge 0} (c^T-y^TA)x+y^Tb=\min y^Tb
maxcTx≤y≥0minx≥0maxcTx−yT(Ax−b)=y≥0minx≥0max(cT−yTA)x+yTb=minyTb
显然若
c
T
−
y
T
A
>
0
c^T-y^TA>0
cT−yTA>0 ,
x
x
x 取
∞
\infty
∞ 时,上式则能取到
∞
\infty
∞ 。所以
c
T
−
y
T
A
≤
0
c^T-y^TA\le0
cT−yTA≤0,最后一步成立。注意满足
min
y
≥
0
max
x
≥
0
(
c
T
−
y
T
A
)
x
+
y
T
b
\min_{y\ge 0} \max_{x\ge 0} (c^T-y^TA)x+y^Tb
miny≥0maxx≥0(cT−yTA)x+yTb 的
x
x
x,并不是原问题的解,而满足这个式子的
y
y
y 则是其对偶问题的解。
现在问题就变成了,在满足 y T A ≥ c T , y ≥ 0 y^TA\ge c^T,y\ge 0 yTA≥cT,y≥0 的条件下, y T b y^Tb yTb 的最小值。就和将其直接对偶的问题一模一样了。也顺便证明了之前线性规划对偶的结论。
在线性规划的条件下,拉格朗日对偶和线性规划对偶本质相同,但形式不同。如遇到拉格朗日对偶的 min max \min\ \max min max 形式,可以考虑转化成线性规划问题求解。
转化最小费用流模型
一般地
对于边
u
v
∈
E
uv\in E
uv∈E ,令
f
u
v
f_{uv}
fuv 为边
u
v
uv
uv 的流量,常量
c
u
v
c_{uv}
cuv 为流量限制,
w
u
v
w_{uv}
wuv 为单位流量代价,
b
u
b_u
bu 为
u
u
u 点的流量需求(即要求流出的流量减去流进的流量为
b
u
b_u
bu),写成线性规划就是
min
∑
u
v
w
u
v
f
u
v
−
f
u
v
≥
−
c
u
v
∑
v
f
v
u
−
∑
v
f
u
v
=
−
b
u
\min \sum_{uv} w_{uv}f_{uv}\\ -f_{uv}\ge -c_{uv}\\ \sum_v f_{vu}-\sum_{v}f_{uv}=-b_u
minuv∑wuvfuv−fuv≥−cuvv∑fvu−v∑fuv=−bu
令
z
u
v
z_{uv}
zuv 为
f
u
v
≤
c
u
v
f_{uv} ≤ c_{uv}
fuv≤cuv 的对偶变量,
p
u
p_u
pu 为
∑
v
f
v
u
−
∑
v
f
u
v
\sum_vf_{vu}−\sum_vf_{uv}
∑vfvu−∑vfuv 的对偶变量,上面的模型不是标准型,换成标准型后
z
u
v
≥
0
,
p
u
无限制
z_{uv}\ge0,p_u\text{无限制}
zuv≥0,pu无限制 。写成对偶形式就是
max
∑
u
−
b
u
p
u
−
∑
u
v
c
u
v
z
u
v
p
v
−
p
u
−
z
u
v
≤
w
u
v
\max \sum_u -b_up_u-\sum_{uv}c_{uv}z_{uv}\\ p_v-p_u-z_{uv}\le w_{uv}
maxu∑−bupu−uv∑cuvzuvpv−pu−zuv≤wuv
假设已经求出了每一个
p
u
p_u
pu ,那么要在不等式限制下最大化上式,显然有
z
u
v
=
max
(
p
v
−
p
u
−
w
u
v
,
0
)
z_{uv}= \max(p_v-p_u-w_{uv},0)
zuv=max(pv−pu−wuv,0) 。所以可以得到
min
∑
u
b
u
p
u
+
∑
u
v
c
u
v
max
(
p
v
−
p
u
−
w
u
v
,
0
)
\min \sum_{u} b_up_u+\sum_{uv}c_{uv}\max(p_v-p_u-w_{uv},0)
minu∑bupu+uv∑cuvmax(pv−pu−wuv,0)
如果题目所求的为这个形式,就可以用最小费用流解决。
把题目所求目标函数的写成这个形式之后,其中目标变量是对于单个点的,而它的系数也就是 b u b_u bu 是流量需求, max \max max 中减去的是对应边的费用, max \max max 的系数 c u , v c_{u,v} cu,v 是流量限制。这里要注意,如果 p u p_u pu 的有限制 p u ≥ 0 p_u\ge 0 pu≥0,那么 b u b_u bu 就表示 u u u 点的流量需求至少为 b u b_u bu 。
两个月前 p_b_p_b 讲过类似的题 CF1307G Cow and Exercise 【线性规划转对偶+费用流】(要不是今天整理这个板块,我直接看不懂当时写的博客2333
特别地
KM 算法,专门用作解决二分图最大权匹配,或二分图最大权完美匹配问题的图论算法。底层逻辑同样也是线性规划对偶。
在二分图上,记
y
u
y_u
yu 为点
u
u
u 的顶标(
y
≥
0
y\ge 0
y≥0),
L
L
L 为左部点的点集,
R
R
R 为右部点的点集,
w
u
v
w_{uv}
wuv 为边权。现在的问题是
min
∑
u
∈
L
y
u
+
∑
v
∈
R
y
v
y
u
+
y
v
≥
w
u
v
\min \sum_{u\in L}y_u+\sum_{v\in R}y_v \\ y_u+y_v\ge w_{uv}\\
minu∈L∑yu+v∈R∑yvyu+yv≥wuv
将其对偶
max
∑
(
u
,
v
)
∈
E
w
u
,
v
x
u
,
v
∑
v
∈
R
x
u
,
v
≤
1
∑
u
∈
L
x
u
,
v
≤
1
\max \sum_{(u,v)\in E}w_{u,v}x_{u,v} \\ \sum_{v\in R}x_{u,v}\le1\\ \sum_{u\in L}x_{u,v}\le1\\
max(u,v)∈E∑wu,vxu,vv∈R∑xu,v≤1u∈L∑xu,v≤1
然后我们敏锐的发现,这个
x
x
x 可以看成一个矩阵,由不等式可以得出
x
∈
{
0
,
1
}
x\in\{0,1\}
x∈{0,1},两个和式的限制意思就是每一行每一列最多有一个点为
1
1
1 ,而且若某个点为
1
1
1 就会对应有
w
w
w 的贡献。
把 n n n 行 和 n n n 列看成 2 n 2n 2n 个点,把 x x x 矩阵看成边,为 1 1 1 就是对应行和列连边。然后下面这个问题就是个最大权二分图匹配。这个问题可以用网络流解决。
普通网络流只能求出答案,而 KM 算法则可以求出最小顶标的方案。记得省选前考过一道构造就是这个模型 某个不知道名字的题目 。
整数性的探讨
(咕咕咕咕咕咕咕咕咕,反正是对的。
例题1 [ZJOI2013]防守战线
设
x
i
x_i
xi 表示前
i
i
i 处有
x
i
x_i
xi 座塔,先抽象出数学模型
min
∑
x
i
(
C
i
−
C
i
+
1
)
x
R
−
x
L
−
1
≥
D
L
,
R
\min \sum x_i(C_i-C_{i+1})\\ x_{R}-x_{L-1}\ge D_{L,R} \\
min∑xi(Ci−Ci+1)xR−xL−1≥DL,R
法1:无脑对偶
max
∑
D
L
,
R
y
L
,
R
∑
L
=
1
i
y
L
,
i
−
∑
R
=
i
+
1
n
y
i
,
R
≤
(
C
i
−
C
i
+
1
)
\max \sum D_{L,R}y_{L,R}\\ \sum_{L=1}^iy_{L,i}-\sum_{R=i+1}^{n}y_{i,R}\le (C_i-C_{i+1}) \\
max∑DL,RyL,RL=1∑iyL,i−R=i+1∑nyi,R≤(Ci−Ci+1)
然后你发现这个
y
y
y 就是就是每条边的流量,然后限制就是每个点的流量需求,建图跑费用流即可。
法2:将目标函数写成
∑
v
x
v
(
C
v
−
C
v
+
1
)
+
∑
v
∞
max
(
0
,
x
v
−
x
v
−
1
)
+
∑
i
∞
max
(
0
,
x
L
i
−
1
−
x
R
i
+
D
i
)
\sum_{v}x_v(C_v-C_{v+1})+\sum_{v}\infty\max(0,x_v-x_{v-1})+\sum_{i}\infty\max(0,x_{L_i-1}-x_{R_i}+D_i)
v∑xv(Cv−Cv+1)+v∑∞max(0,xv−xv−1)+i∑∞max(0,xLi−1−xRi+Di)
wow,然后你发现这个东西也是费用流模型。
例题2 [Aizu 2230] How to Create a Good Game
这个题的难点是建出数学模型,设
x
u
,
v
x_{u,v}
xu,v 表示边
u
,
v
u,v
u,v 增加的长度,
p
u
p_u
pu 表示点
0
0
0 到点
u
u
u 的最长路径的长度,
w
u
,
v
w_{u,v}
wu,v 是原本的边权,
D
D
D 是原图上点
0
0
0 到点
n
−
1
n-1
n−1 的最长路径的长度,那么建出数学模型
max
∑
u
,
v
x
u
,
v
p
n
−
1
−
p
0
≤
D
x
u
,
v
≤
p
v
−
p
u
−
w
u
,
v
x
u
,
v
,
p
u
,
v
≥
0
\max \sum_{u,v}x_{u,v}\\ p_{n-1}-p_0\le D\\ x_{u,v} \le p_v-p_u-w_{u,v}\\ x_{u,v},p_{u,v}\ge 0
maxu,v∑xu,vpn−1−p0≤Dxu,v≤pv−pu−wu,vxu,v,pu,v≥0
观察发现
x
u
,
v
x_{u,v}
xu,v 的限制只有
x
u
,
v
≤
p
v
−
p
u
−
w
u
,
v
x_{u,v}\le p_v-p_u-w_{u,v}
xu,v≤pv−pu−wu,v ,目标函数为
min
∑
u
,
v
−
x
u
,
v
\min \sum_{u,v} -x_{u,v}
min∑u,v−xu,v 所以把
x
x
x 消去得到
min
∑
u
,
v
∞
max
(
p
u
−
p
v
+
w
u
,
v
,
0
)
+
p
u
−
p
v
+
w
u
,
v
+
∞
max
(
p
0
−
p
n
−
1
+
D
,
0
)
\min\sum_{u,v} \infty \max(p_{u}-p_v+w_{u,v},0)+p_u-p_v+w_{u,v} + \infty \max(p_0-p_{n-1}+D,0)
minu,v∑∞max(pu−pv+wu,v,0)+pu−pv+wu,v+∞max(p0−pn−1+D,0)
接下来把
p
u
p_u
pu 的系数求出,就是标准的费用流模型了。
例题3 [Utpc2012.12] じょうしょうツリー
设
p
u
p_u
pu 是点
u
u
u 最后的点权,那么建出线性规划模型
min
∑
v
∣
p
v
−
c
v
∣
p
u
≥
p
v
\min \sum_v |p_v-c_v|\\ p_u\ge p_v
minv∑∣pv−cv∣pu≥pv
令
p
0
=
0
p_0=0
p0=0 目标函数可以写成
min
∑
v
max
(
0
,
p
v
−
p
0
−
c
v
)
+
max
(
0
,
p
0
−
p
v
+
c
v
)
+
∑
u
,
v
∞
max
(
0
,
p
v
−
p
u
)
\min \sum_{v} \max(0,p_v-p_0-c_v)+\max(0,p_0-p_v+c_v)+\sum_{u,v}\infty\max(0,p_v-p_u)
minv∑max(0,pv−p0−cv)+max(0,p0−pv+cv)+u,v∑∞max(0,pv−pu)
嗯,然后你发现就是费用流。
转化成动态规划模型
例题1 [XX Open Cup. GP of Moscow] Circles
提交链接是英文的,题面是这样的
题目描述:给定一个长度为 n n n 的非负整数序列 s 1 , s 2 , . . . , s n s_1, s_2, ..., s_n s1,s2,...,sn,称长度为 n n n 的非负序列(不一定要 是整数) x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn 是平衡的当且仅当对于任意 i i i 都有 x i + x ( i m o d n ) + 1 ≤ s i x_i+x_{(i\ mod \ n)+1} ≤ s_i xi+x(i mod n)+1≤si。定义 f ( s 1 , s 2 , . . . , s n ) f(s_1, s_2, ..., s_n) f(s1,s2,...,sn) 为所有平衡的序列的中 x 1 + x 2 + . . . + x n x_1+x_2+...+x_n x1+x2+...+xn 的最大值。给定长度为 n n n 的非负整数序列 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an 。对于所有 3 ≤ k ≤ n 3 \le k \le n 3≤k≤n,求出 f ( a 1 , a 2 , . . . , a k ) f(a_1, a_2, ..., a_k) f(a1,a2,...,ak) 。 3 ≤ n ≤ 1 e 5 , 0 ≤ a i ≤ 1 e 5 3\le n\le 1e5,0\le a_i\le 1e5 3≤n≤1e5,0≤ai≤1e5 。
建出模型
max
∑
u
k
x
u
x
u
+
x
(
u
+
1
)
≤
a
u
(
u
<
k
)
x
1
+
x
k
≤
a
k
\max \sum_u^k x_u\\ x_u+x_{(u+1)} ≤ a_u \ (u<k)\\ x_1+x_{k}\le a_k
maxu∑kxuxu+x(u+1)≤au (u<k)x1+xk≤ak
将其对偶
min
∑
u
k
a
u
y
u
y
u
+
y
u
+
1
≥
1
(
u
<
k
)
y
1
+
y
k
≥
1
\min \sum_u^k a_uy_u\\ y_u+y_{u+1}\ge 1\ (u<k)\\ y_1+y_k\ge1
minu∑kauyuyu+yu+1≥1 (u<k)y1+yk≥1
因为
0
≤
y
≤
1
0\le y\le 1
0≤y≤1 ,于是我们大胆的猜想
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1}。我们假设它是对的,那么设
d
p
[
i
]
[
0
/
1
]
[
0
/
1
]
dp[i][0/1][0/1]
dp[i][0/1][0/1] 表示前
i
i
i 个位置 ,
y
1
y_1
y1 为
[
0
/
1
]
[0/1]
[0/1] ,
y
2
y_2
y2 为
[
0
/
1
]
[0/1]
[0/1] 时
∑
a
i
y
i
\sum a_iy_i
∑aiyi 的最小值,用
d
p
dp
dp 就可以在线性时间内求出答案。
然后你发现你猜错了,可是呢我们又发现只有在 y 1 = y 2 = . . . = y n = 0.5 y_1=y_2=...=y_n=0.5 y1=y2=...=yn=0.5 时答案才有可能更优,否则 y y y 一定 ∈ { 0 , 1 } \in\{0,1\} ∈{0,1}。所以最后你加了个特判你就过了。
(证明我不会,反正它是对的。
例2 [ZJOI2020] 序列
放个题解链接
拉格朗日对偶的特殊应用
蒋神说这个没啥用2333(那我学个peach?
例1 POJ2595 Min-Max
以求最大值为例
max
∑
i
=
1
n
q
i
μ
i
∑
i
=
1
n
p
i
μ
i
=
C
∑
μ
i
=
1
\max \sum_{i=1}^n q_i\mu_i\\ \sum_{i=1}^n p_i\mu_i=C\\ \sum\mu_i=1
maxi=1∑nqiμii=1∑npiμi=C∑μi=1
法1:暴力对偶
min
C
x
+
y
p
i
x
+
y
≥
q
i
x
,
y
无
限
制
\min Cx+y\\ p_ix+y\ge q_i\\ x,y无限制
minCx+ypix+y≥qix,y无限制
发现可以把
y
y
y 消去得到目标函数
min
C
x
+
max
{
q
i
−
p
i
x
}
\min Cx+\max \{q_i-p_ix\}
minCx+max{qi−pix}
然后你发现直接维护凸包即可。
法2:我不会,告辞。
例2 [Utpc2012.10] きたまさの逆襲
我也不会,告辞。
学习资料《再探线性规划对偶在信息学竞赛中的应用 南京外国语学校 丁晓漫》orz丁姐