如何构造线性规划的对偶问题
原文:《How to take the Dual of a Linear Program》by Sebastien Lahaie
0、前言
这篇笔记的目的有:(1)解释如何判断一个问题是不是线性规划(2)讲解如何构造一个线性规划的对偶问题,以及(3)列举出关于一个线性规划和它的对偶问题的基础结论。这篇笔记不提供任何证明过程,也不解释任何线性规划对偶性中隐含的深层几何意义。这篇笔记的主要目标是解释机械化地构造对偶问题的流程细节。
除了本文提到的构造方法之外,还有许多其他的方法,但这是我最喜欢的方法。我发现当在几个问题上尝试过这个方法后,它还是很容易被记住的。这个方法可能比其他方法要慢要乏味,但它容易记住,且中间步骤可以得到一些有用的副产品。
1、公式
线性规划是一种最优化问题:在定义域中求解目标函数(objective function)的最大或最小值问题。其中,该目标函数是线性的,定义域(或称可行集合)是由一系列线性约束确定的。本文不会给出线性规划的一般公式,而是以一个例子来讲解。当用这个例子过一遍流程之后,你将对“什么是一个线性规划”有清晰的理解。
max
x
1
≥
0
,
x
2
≤
0
,
x
3
v
1
x
1
+
v
2
x
2
+
v
3
x
3
(1)
\tag{1} \max_{x_1\geq0,x_2\leq0,x_3}v_1x_1+v_2x_2+v_3x_3
x1≥0,x2≤0,x3maxv1x1+v2x2+v3x3(1)
s
.
t
.
a
1
x
1
+
x
2
+
x
3
≤
b
1
(2)
\tag{2} s.t.\quad a_1x_1+x_2+x_3 \leq b_1
s.t.a1x1+x2+x3≤b1(2)
x
1
+
a
2
x
2
=
b
2
(3)
\tag{3} x_1+a_2x_2 = b_2
x1+a2x2=b2(3)
a
3
x
3
≥
b
3
(4)
\tag{4} a_3x_3 \geq b_3
a3x3≥b3(4)
这里的变量有
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3。其余几项是常数(例如
v
1
,
a
2
,
b
3
v_1,a_2,b_3
v1,a2,b3)。线性规划包括有目标函数
(
1
)
(1)
(1)以及一系列的等式或不等式约束
(
2
-
4
)
(2\text{-}4)
(2-4)。目标函数为:
f
(
x
)
=
v
1
x
1
+
v
2
x
2
+
v
3
x
3
f(x)=v_1x_1+v_2x_2+v_3x_3
f(x)=v1x1+v2x2+v3x3
它是一个线性方程。也就是说,对于向量
x
1
x^1
x1和
x
2
x^2
x2,实常数
c
1
c_1
c1和
c
2
c_2
c2,有
f
(
c
1
x
1
+
c
2
x
2
)
=
c
1
f
(
x
1
)
+
c
2
f
(
x
2
)
f(c_1x^1+c_2x^2)=c_1f(x^1)+c_2f(x^2)
f(c1x1+c2x2)=c1f(x1)+c2f(x2)。这对于
(
1
)
(1)
(1)来说是显然成立的。目标函数可以是最大化或最小化问题,而这个例子是最大化问题。
每个约束条件的左边也都是线性方程,右边都是常数。(遇到右边含有变量的问题时,你可以通过移项来让右边变成常数。)在线性规划问题中,不能存在严格不等式。也就是说,形如
x
1
+
x
2
<
3
x_1+x_2<3
x1+x2<3的约束条件是不合法的。
那些限制每个变量是非负、非正或者无限制(unrestricted)的约束条件,称为特殊(special)约束。这种约束一般会列在
m
a
x
max
max或
m
i
n
min
min下面。形如
x
1
≥
2
x_1 \geq 2
x1≥2这样的不是特殊约束,而
x
1
≥
0
x_1 \geq 0
x1≥0这样的就是。在我们这个例子中,
x
1
x_1
x1是非负的,
x
2
x_2
x2是非正的,
x
3
x_3
x3是无限制的(那个条件用于说明这点)。
2、原问题和对偶问题
上述例子 ( 1 ) (1) (1)通常称为原问题(primal)。对于任意一个线性规划来说,都有一个与之相关联的对偶问题(dual)。从原问题推导出对偶问题,完全是机械化的操作流程。下面就以例子 ( 1 ) (1) (1)为例进行推导。整个推导过程包括七个步骤,前两步是将原问题转化为一个“标准格式”。
Step 1. 将目标函数改写为最小化问题。
例子
(
1
)
(1)
(1)是一个最大化问题,因此将它改写为:
min
x
1
≥
0
,
x
2
≤
0
,
x
3
−
v
1
x
1
−
v
2
x
2
−
v
3
x
3
\min_{x_1\geq0,x_2\leq0,x_3}-v_1x_1-v_2x_2-v_3x_3
x1≥0,x2≤0,x3min−v1x1−v2x2−v3x3
如果一个解能最大化该目标函数,也就能最小化该目标函数的取反值,因此这个操作并不会影响到最终的解集。
Step 2. 将不等式约束改写为“小于等于”的形式,且将每个约束条件的常数移项,使得式子右边为0。
经过这个操作之后,例子
(
1
)
(1)
(1)变成:
min
x
1
≥
0
,
x
2
≤
0
,
x
3
−
v
1
x
1
−
v
2
x
2
−
v
3
x
3
\min_{x_1\geq0,x_2\leq0,x_3}-v_1x_1-v_2x_2-v_3x_3
x1≥0,x2≤0,x3min−v1x1−v2x2−v3x3
s
.
t
.
a
1
x
1
+
x
2
+
x
3
−
b
1
≤
0
(5)
\tag{5} s.t.\quad a_1x_1+x_2+x_3-b_1 \leq 0
s.t.a1x1+x2+x3−b1≤0(5)
x
1
+
a
2
x
2
−
b
2
=
0
(6)
\tag{6} x_1+a_2x_2-b_2 = 0
x1+a2x2−b2=0(6)
−
a
3
x
3
+
b
3
≤
0
(7)
\tag{7} -a_3x_3+b_3 \leq 0
−a3x3+b3≤0(7)
Step 3. 给每个不等式约束定义对应的非负对偶变量,给每个等式约束定义无约束的对偶变量。
对于约束
(
5
)
(5)
(5)和
(
7
)
(7)
(7)分别定义变量
λ
1
≥
0
\lambda_1 \geq 0
λ1≥0和
λ
3
≥
0
\lambda_3 \geq 0
λ3≥0。对于约束
(
6
)
(6)
(6)定义无约束变量
λ
2
\lambda_2
λ2。
Step 4. 移除每个约束条件,并将
(
对
偶
变
量
)
∗
(
约
束
条
件
的
左
边
)
(对偶变量)*(约束条件的左边)
(对偶变量)∗(约束条件的左边) 加到目标函数中。使用对偶变量作为新的变量构造一个最大化问题。
具体到例子上,第一个约束
(
5
)
(5)
(5)被移除后,将下面一项加到目标函数上。
λ
1
(
a
1
x
1
+
x
2
+
x
3
−
b
1
)
\lambda_1(a_1x_1+x_2+x_3-b_1)
λ1(a1x1+x2+x3−b1)
对每个约束条件都做同样的操作之后(除了特殊约束外),并将对偶变量作为新的变量得到一个最大化问题,有:
max
λ
1
≥
0
,
λ
2
,
λ
3
≥
0
min
x
1
≥
0
,
x
2
≤
0
,
x
3
−
v
1
x
1
−
v
2
x
2
−
v
3
x
3
\max_{\lambda_1 \geq 0, \lambda_2, \lambda_3 \geq 0}\quad\min_{x_1\geq0,x_2\leq0,x_3}-v_1x_1-v_2x_2-v_3x_3
λ1≥0,λ2,λ3≥0maxx1≥0,x2≤0,x3min−v1x1−v2x2−v3x3
+
λ
1
(
a
1
x
1
+
x
2
+
x
3
−
b
1
)
(8)
\tag{8} +\quad\lambda_1(a_1x_1+x_2+x_3-b_1)
+λ1(a1x1+x2+x3−b1)(8)
+
λ
2
(
x
1
+
a
2
x
2
−
b
2
)
(9)
\tag{9} +\quad\lambda_2(x_1+a_2x_2-b_2)
+λ2(x1+a2x2−b2)(9)
+
λ
3
(
−
a
3
x
3
+
b
3
)
(10)
\tag{10} +\quad\lambda_3(-a_3x_3+b_3)
+λ3(−a3x3+b3)(10)
可将该问题想象成一个“双人游戏”,包括一个“外场玩家”和一个“内场玩家”。外场玩家先行一步,给 λ 1 \lambda_1 λ1, λ 2 \lambda_2 λ2, λ 3 \lambda_3 λ3分别选择一些值(当然要满足那些特殊约束啦)。内场玩家在固定这些值后,给 x 1 x_1 x1, x 2 x_2 x2, x 3 x_3 x3选择一些值,使得目标函数最小化。内场玩家操作之后,外场玩家又会更新 λ 1 \lambda_1 λ1, λ 2 \lambda_2 λ2, λ 3 \lambda_3 λ3的值,使得内场玩家给的最小值尽可能大。
Step 5. 现在目标函数中有许多项形如
(
对
偶
变
量
)
∗
(
带
有
原
变
量
的
表
达
式
)
(对偶变量)*(带有原变量的表达式)
(对偶变量)∗(带有原变量的表达式) ,加上其他只与原变量有关的项。改写该目标函数,使得其包含一些项形如
(
原
变
量
)
∗
(
带
有
对
偶
变
量
的
表
达
式
)
(原变量)*(带有对偶变量的表达式)
(原变量)∗(带有对偶变量的表达式) ,加上其余只与对偶变量有关的项。
做完上述操作之后,得到:
max
λ
1
≥
0
,
λ
2
,
λ
3
≥
0
min
x
1
≥
0
,
x
2
≤
0
,
x
3
−
b
1
λ
1
−
b
2
λ
2
−
b
3
λ
3
\max_{\lambda_1 \geq 0, \lambda_2, \lambda_3 \geq 0}\quad\min_{x_1\geq0,x_2\leq0,x_3}-b_1\lambda_1-b_2\lambda_2-b_3\lambda_3
λ1≥0,λ2,λ3≥0maxx1≥0,x2≤0,x3min−b1λ1−b2λ2−b3λ3
+ x 1 ( a 1 λ 1 + λ 2 − v 1 ) (11) \tag{11} +\quad x_1(a_1\lambda_1+\lambda_2-v_1) +x1(a1λ1+λ2−v1)(11) + x 2 ( λ 1 + a 2 λ 2 − v 2 ) (12) \tag{12} +\quad x_2(\lambda_1+a_2\lambda_2-v_2) +x2(λ1+a2λ2−v2)(12) + x 3 ( λ 1 − a 3 λ 3 − v 3 ) (13) \tag{13} +\quad x_3(\lambda_1-a_3\lambda_3-v_3) +x3(λ1−a3λ3−v3)(13)
做这步操作的时候要十分谨慎,如果你弄错了一个符号,或者漏掉了任何一项,不仅最终的对偶结果会出错,并且会变得非常具有误导性、迷惑性。
Step 6. 移除形如 ( 原 变 量 ) ∗ ( 带 有 对 偶 变 量 的 表 达 式 ) (原变量)*(带有对偶变量的表达式) (原变量)∗(带有对偶变量的表达式) 的项,并按照下述规则添加新的约束条件:
- 表 达 式 ≥ 0 表达式\geq0 表达式≥0,如果该原变量是非负的
- 表 达 式 ≤ 0 表达式\leq0 表达式≤0,如果该原变量是非正的
- 表 达 式 = 0 表达式=0 表达式=0,如果该原变量是无限制的
这一步并不难记,因为它的原理非常直观。例如
(
11
)
(11)
(11)项:
x
1
(
a
1
λ
1
+
λ
2
−
v
1
)
.
x_1(a_1\lambda_1+\lambda_2-v_1).
x1(a1λ1+λ2−v1).
因为
x
1
≥
0
x_1\geq0
x1≥0,可以推出
a
1
λ
1
+
λ
2
−
v
1
≥
0
a_1\lambda_1+\lambda_2-v_1 \geq 0
a1λ1+λ2−v1≥0。为啥嘞?如果
a
1
λ
1
+
λ
2
−
v
1
≤
0
a_1\lambda_1+\lambda_2-v_1 \leq 0
a1λ1+λ2−v1≤0,那么内场玩家可以选择
x
1
→
+
∞
x_1\rightarrow + \infty
x1→+∞(也就是任意大),因此该目标函数的值就会变成$ -\infty
。
因
此
外
场
玩
家
若
想
最
大
化
内
场
玩
家
给
的
最
小
值
问
题
,
他
就
会
选
择
。因此外场玩家若想最大化内场玩家给的最小值问题,他就会选择
。因此外场玩家若想最大化内场玩家给的最小值问题,他就会选择\lambda_1
,
,
,\lambda_2
,
,
,\lambda_3
的
值
,
使
得
的值,使得
的值,使得a_1\lambda_1+\lambda_2-v_1 \geq 0
。
同
理
,
这
个
操
作
应
用
到
例
子
的
剩
余
两
项
中
。
外
场
玩
家
必
须
选
择
一
些
值
,
使
得
。 同理,这个操作应用到例子的剩余两项中。外场玩家必须选择一些值,使得
。同理,这个操作应用到例子的剩余两项中。外场玩家必须选择一些值,使得\lambda_1+a_2\lambda_2-v_2\leq 0
,
否
则
内
场
玩
家
可
以
通
过
选
择
,否则内场玩家可以通过选择
,否则内场玩家可以通过选择x_2 \rightarrow - \infty$,使得
x
2
(
λ
1
+
a
2
λ
2
−
v
2
)
x_2(\lambda_1+a_2\lambda_2-v_2)
x2(λ1+a2λ2−v2)
这项趋近于
−
∞
-\infty
−∞。最后,因为
x
3
x_3
x3是无限制的,唯一能使得
x
3
(
λ
1
−
a
3
λ
3
−
v
3
)
x_3(\lambda_1-a_3\lambda_3-v_3)
x3(λ1−a3λ3−v3)
不趋近于
−
∞
-\infty
−∞的方法,就是选择一些对偶变量值,使得
λ
1
−
a
3
λ
3
−
v
3
=
0
\lambda_1-a_3\lambda_3-v_3=0
λ1−a3λ3−v3=0。经过这些操作之后,我们有了一个船新版本的线性规划问题。注意到其中的原变量已经消失无踪了。
max
λ
1
≥
0
,
λ
2
,
λ
3
≥
0
−
b
1
λ
1
−
b
2
λ
2
−
b
3
λ
3
\max_{\lambda_1 \geq 0, \lambda_2, \lambda_3 \geq 0}-b_1\lambda_1-b_2\lambda_2-b_3\lambda_3
λ1≥0,λ2,λ3≥0max−b1λ1−b2λ2−b3λ3
s
.
t
.
a
1
λ
1
+
λ
2
−
v
1
≥
0
(14)
\tag{14} s.t.\quad a_1\lambda_1+\lambda_2-v_1 \geq 0
s.t.a1λ1+λ2−v1≥0(14)
λ
1
+
a
2
λ
2
−
v
2
≤
0
(15)
\tag{15} \lambda_1+a_2\lambda_2-v_2 \leq 0
λ1+a2λ2−v2≤0(15)
λ
1
−
a
3
λ
3
−
v
3
=
0
(16)
\tag{16} \lambda_1-a_3\lambda_3-v_3=0
λ1−a3λ3−v3=0(16)
Step 7. 如果在第一步时将问题改写成了最小化问题,那么现在将上一步得到的结果改写为最小化问题。否则跳过此步。
这个操作的结果如下。当然,约束条件可以移得更自然一些。
min
λ
1
≥
0
,
λ
2
,
λ
3
≥
0
b
1
λ
1
+
b
2
λ
2
+
b
3
λ
3
\min_{\lambda_1 \geq 0, \lambda_2, \lambda_3 \geq 0}b_1\lambda_1+b_2\lambda_2+b_3\lambda_3
λ1≥0,λ2,λ3≥0minb1λ1+b2λ2+b3λ3
s
.
t
.
a
1
λ
1
+
λ
2
≥
v
1
(17)
\tag{17} s.t.\quad a_1\lambda_1+\lambda_2 \geq v_1
s.t.a1λ1+λ2≥v1(17)
λ
1
+
a
2
λ
2
≤
v
2
(18)
\tag{18} \lambda_1+a_2\lambda_2 \leq v_2
λ1+a2λ2≤v2(18)
λ
1
−
a
3
λ
3
=
v
3
(19)
\tag{19} \lambda_1-a_3\lambda_3 = v_3
λ1−a3λ3=v3(19)
这就搞定了构造对偶问题的流程啦。作为练习,你可以把上述的对偶问题作为原问题,看能否还原回最初的那个问题。
3、重要结论
线性规划问题可以是无解的(infeasible),无界的(unbounded)或者存在有限最优解(finite optimum)。如果没有一个解可以满足所有的约束条件,称为无解。比如说,假设在原问题例
(
1
)
(1)
(1)中有
a
1
=
a
2
=
a
3
=
1
a_1=a_2=a_3=1
a1=a2=a3=1,且
b
1
=
−
1
b_1=-1
b1=−1,
b
2
+
b
3
≥
1
b_2+b_3\geq1
b2+b3≥1。很明显对于约束条件
(
2
-
4
)
(2\text{-}4)
(2-4)来说是无解的。(可解性只与约束条件有关,与目标函数无关。)
线性规划问题也可以是无界的。也就是说,对于最小化线性规划,任何一个可行解,都存在另一个可行解,且另一个解的目标函数值严格大于该解的。比如说,假设在例
(
1
)
(1)
(1)中有
a
1
=
a
2
=
1
a_1=a_2=1
a1=a2=1,
a
3
=
−
1
a_3=-1
a3=−1,且
b
1
=
b
2
=
b
3
=
0
b_1=b_2=b_3=0
b1=b2=b3=0,且最终目标函数中的因子都是正数:
v
1
,
v
2
,
v
3
>
0
v_1,v_2,v_3>0
v1,v2,v3>0。可以知道,对于任意
c
∈
R
c\in \mathbb{R}
c∈R,
c
(
0
,
0
,
1
)
c(0,0,1)
c(0,0,1)都是可行解。该目标函数值为
c
v
3
cv_3
cv3,我们可以通过使
c
→
+
∞
c\rightarrow+\infty
c→+∞来让目标函数值任意大。理论上说,即使这个问题有很多的可行解,它也不存在最优解。
. | 有穷最优解 | 无界的 | 无解的 |
---|---|---|---|
有穷最优解 | 可能 | 不可能 | 不可能 |
无界的 | 不可能 | 不可能 | 可能 |
无解的 | 不可能 | 可能 | 可能 |
表
1
:
原
问
题
和
对
偶
问
题
可
能
存
在
的
组
合
情
况
表1:原问题和对偶问题可能存在的组合情况
表1:原问题和对偶问题可能存在的组合情况
如果一个问题是可解的且有界的,那么它就存在一个非无穷的最优解(finite optimum)(该解可能不唯一)。表1列举了原问题和对偶问题在可解性上的关系。特别注意到,如果原问题是无界的,那么它的对偶问题就是无解的。如果对偶问题是无界的,那么原问题就是无解的。但也有可能两个问题都是无解的。
原问题的目标函数的最优值记为
V
P
V_P
VP,对偶问题的最优值记为
V
D
V_D
VD。线性规划的主要结论如下。
Theorem 1 (Strong duality) 如果一个线性规划问题有最优解,那么它的对偶问题也有,且
V
P
=
V
D
V_P=V_D
VP=VD。
这个结论与原问题和对偶问题的值有关,而与它们的解无关。下一个结论参照了例
(
1
)
(1)
(1),当然它也能直接应用到其他线性规划问题上。
Theorem 2 (Complementary slackness) 令
(
x
1
,
x
2
,
x
3
)
(x_1, x_2, x_3)
(x1,x2,x3) 和
(
λ
1
,
λ
2
,
λ
3
)
(\lambda_1, \lambda_2, \lambda_3)
(λ1,λ2,λ3) 分别为原问题和对偶问题的解,如果它们是最优解的话,当且仅当:
λ
1
(
a
1
x
1
+
x
2
+
x
3
−
b
1
)
=
0
λ
2
(
x
1
+
a
2
x
2
−
b
2
)
=
0
λ
3
(
−
a
3
x
3
+
b
3
)
=
0
\lambda_1(a_1x_1+x_2+x_3-b_1)=0 \\ \lambda_2(x_1+a_2x_2-b_2)=0 \\ \lambda_3(-a_3x_3+b_3)=0 \\
λ1(a1x1+x2+x3−b1)=0λ2(x1+a2x2−b2)=0λ3(−a3x3+b3)=0
且
x
1
(
a
1
λ
1
+
λ
2
−
v
1
)
=
0
x
2
(
λ
1
+
a
2
λ
2
−
v
2
)
=
0
x
3
(
λ
1
−
a
3
λ
3
−
v
3
)
=
0
x_1(a_1\lambda_1+\lambda_2-v_1)= 0 \\ x_2(\lambda_1+a_2\lambda_2-v_2)= 0 \\ x_3(\lambda_1-a_3\lambda_3-v_3)=0 \\
x1(a1λ1+λ2−v1)=0x2(λ1+a2λ2−v2)=0x3(λ1−a3λ3−v3)=0
这些约束被称作complementary slackness conditions(互补松弛条件)。其中,前三个约束可以从
(
8
-
10
)
(8\text{-}10)
(8-10)中得出,后三个可以从
(
11
-
13
)
(11\text{-}13)
(11-13)中得出。也就是说,在构造对偶问题的过程中,得到了这么一个副产品——互补松弛条件。
这个互补松弛条件有时会写作另一种形式。比如,我们可以将
λ
1
(
a
1
x
1
+
x
2
+
x
3
−
b
1
)
=
0
\lambda_1(a_1x_1+x_2+x_3-b_1)=0
λ1(a1x1+x2+x3−b1)=0
写作
λ
1
>
0
⇒
a
1
x
1
+
x
2
+
x
3
−
b
1
=
0.
\lambda_1>0\Rightarrow a_1x_1+x_2+x_3-b_1=0.
λ1>0⇒a1x1+x2+x3−b1=0.
或者等价于(取逆否)
a
1
x
1
+
x
2
+
x
3
−
b
1
<
0
⇒
λ
1
=
0.
a_1x_1+x_2+x_3-b_1<0\Rightarrow \lambda_1=0.
a1x1+x2+x3−b1<0⇒λ1=0.
当有原问题的最优解时,互补松弛条件定义了一个系统或多项式去解出、或识别其对偶问题的最优解(后者解同样需要满足对偶可行约束),反之亦然。
4、译者记
本文写作的最初目的是练习 LaTeX \LaTeX LATEX的公式输入,但在写作的过程中我深刻感受到,翻译文献实在不是简单的事情,那些大牛的论文被翻译成中文真的要且看且珍惜(相信文学作品的翻译更是如此)。这篇笔记的原文是哥伦比亚大学一门课的笔记课件,它没有从数学理论的方面去阐述线性规划的对偶是什么、怎么求,而是用一个简洁易懂的例子来讲解整个构造过程和性质(有另一篇笔记讲解了更一般性的线性规划构造对偶问题)。下一步是理解拉格朗日对偶性的构造和理论证明,似乎离ADMM又近一步了!😃