1.引言
书本上通常是给出最小化优化问题,KKT条件的表达形式。例如,在《凸优化》书籍1中,考虑的是最小化问题的标准形式,建模形式如下所示:
m
i
n
f
0
(
x
)
s
.
t
.
f
i
(
x
)
≤
0
:
λ
i
,
i
=
1
,
⋯
,
m
h
i
(
x
)
=
0
:
μ
i
,
i
=
1
,
⋯
,
p
x
∈
R
n
(1)
\begin{aligned} min \quad &f_0(x) \\ s.t. \quad &f_i(x) \le 0 : \lambda_i, i=1,\cdots,m \\ &h_i(x) = 0 : \mu_i,i=1,\cdots,p \\ &x \in R^n \end{aligned} \tag{1}
mins.t.f0(x)fi(x)≤0:λi,i=1,⋯,mhi(x)=0:μi,i=1,⋯,px∈Rn(1)
该优化问题的拉格朗日函数为:
L
(
x
,
λ
,
μ
)
=
f
0
(
x
)
+
∑
i
=
1
m
λ
i
f
i
(
x
)
+
∑
i
=
1
p
μ
i
h
i
(
x
)
(2)
L(x,\lambda,\mu)=f_0(x)+\sum_{i=1}^{m}\lambda_if_i(x)+\sum_{i=1}^{p}\mu_ih_i(x)\tag{2}
L(x,λ,μ)=f0(x)+i=1∑mλifi(x)+i=1∑pμihi(x)(2)
由此,凸问题的KKT条件如下所示:
f
i
(
x
~
)
≤
0
,
i
=
1
,
⋯
,
m
h
i
(
x
~
)
=
0
,
i
=
1
,
⋯
,
p
λ
i
~
≥
0
,
i
=
1
,
⋯
,
m
λ
i
~
f
i
(
x
~
)
=
0
,
i
=
1
,
⋯
,
m
∇
f
0
(
x
~
)
+
∑
i
=
1
m
λ
~
∇
f
i
(
x
~
)
+
∑
i
=
1
p
μ
~
i
∇
h
i
(
x
~
)
=
0
,
(3)
\begin{aligned} f_i(\tilde{x}) \le 0&, \quad i=1,\cdots,m \\ h_i(\tilde{x})=0& , \quad i=1,\cdots,p \\ \tilde{\lambda_i} \ge 0& , \quad i=1,\cdots,m \\ \tilde{\lambda_i}f_i(\tilde{x})=0&,\quad i=1,\cdots,m \\ \nabla f_0(\tilde{x}) + \sum^{m}_{i=1} \tilde{\lambda}\nabla f_i(\tilde{x})+\sum^p_{i=1}\tilde{\mu}_i\nabla h_i(\tilde{x})=0 &, \end{aligned} \tag{3}
fi(x~)≤0hi(x~)=0λi~≥0λi~fi(x~)=0∇f0(x~)+i=1∑mλ~∇fi(x~)+i=1∑pμ~i∇hi(x~)=0,i=1,⋯,m,i=1,⋯,p,i=1,⋯,m,i=1,⋯,m,(3)
前三项满足原对偶约束条件,第四项满足互补松弛约束,第五项拉格朗日函数在
x
~
\tilde{x}
x~处导数为零。该书籍提出,当原问题是凸问题时,满足KKT条件的点就是原问题和对偶问题的最优解。变量上标上波浪号,意思就是问题的最优解。
2.模型与方法
基于引言中所提出的模型与方法,接下来分析最大化问题的KKT条件该如何撰写。首先针对一个最大化优化问题,建立模型如下所示:
m
a
x
g
0
(
x
)
s
.
t
.
f
i
(
x
)
≤
0
:
λ
i
,
i
=
1
,
⋯
,
m
h
i
(
x
)
=
0
:
μ
i
,
i
=
1
,
⋯
,
p
x
∈
R
n
(4)
\begin{aligned} max \quad &g_0(x) \\ s.t. \quad &f_i(x) \le 0 : \lambda_i, i=1,\cdots,m \\ &h_i(x) = 0 : \mu_i,i=1,\cdots,p \\ &x \in R^n \end{aligned} \tag{4}
maxs.t.g0(x)fi(x)≤0:λi,i=1,⋯,mhi(x)=0:μi,i=1,⋯,px∈Rn(4)
求
g
0
(
x
)
g_0(x)
g0(x)最大的问题,即求
−
g
0
(
x
)
-g_0(x)
−g0(x)最小的问题,因此上述问题进行下列等效变换:
m
i
n
−
g
0
(
x
)
s
.
t
.
f
i
(
x
)
≤
0
:
λ
i
,
i
=
1
,
⋯
,
m
h
i
(
x
)
=
0
:
μ
i
,
i
=
1
,
⋯
,
p
x
∈
R
n
(5)
\begin{aligned} min \quad &-g_0(x) \\ s.t. \quad &f_i(x) \le 0 : \lambda_i, i=1,\cdots,m \\ &h_i(x) = 0 : \mu_i,i=1,\cdots,p \\ &x \in R^n \end{aligned} \tag{5}
mins.t.−g0(x)fi(x)≤0:λi,i=1,⋯,mhi(x)=0:μi,i=1,⋯,px∈Rn(5)
此时,拉格朗日函数表示为:
L
(
x
,
λ
,
μ
)
=
−
g
0
(
x
)
+
∑
i
=
1
m
λ
i
f
i
(
x
)
+
∑
i
=
1
p
μ
i
h
i
(
x
)
(6)
L(x,\lambda,\mu)=-g_0(x)+\sum_{i=1}^{m}\lambda_if_i(x)+\sum_{i=1}^{p}\mu_ih_i(x)\tag{6}
L(x,λ,μ)=−g0(x)+i=1∑mλifi(x)+i=1∑pμihi(x)(6)
因此,该最大化问题的拉格朗日函数为:
f
i
(
x
~
)
≤
0
,
i
=
1
,
⋯
,
m
h
i
(
x
~
)
=
0
,
i
=
1
,
⋯
,
p
λ
i
~
≥
0
,
i
=
1
,
⋯
,
m
λ
i
~
f
i
(
x
~
)
=
0
,
i
=
1
,
⋯
,
m
−
∇
g
0
(
x
~
)
+
∑
i
=
1
m
λ
~
∇
f
i
(
x
~
)
+
∑
i
=
1
p
μ
~
i
∇
h
i
(
x
~
)
=
0
,
(7)
\begin{aligned} f_i(\tilde{x}) \le 0&, \quad i=1,\cdots,m \\ h_i(\tilde{x})=0& , \quad i=1,\cdots,p \\ \tilde{\lambda_i} \ge 0& , \quad i=1,\cdots,m \\ \tilde{\lambda_i}f_i(\tilde{x})=0&,\quad i=1,\cdots,m \\ -\nabla g_0(\tilde{x}) + \sum^{m}_{i=1} \tilde{\lambda}\nabla f_i(\tilde{x})+\sum^p_{i=1}\tilde{\mu}_i\nabla h_i(\tilde{x})=0 &, \end{aligned} \tag{7}
fi(x~)≤0hi(x~)=0λi~≥0λi~fi(x~)=0−∇g0(x~)+i=1∑mλ~∇fi(x~)+i=1∑pμ~i∇hi(x~)=0,i=1,⋯,m,i=1,⋯,p,i=1,⋯,m,i=1,⋯,m,(7)
3.程序验证
撰写MATLAB程序,对结果进行数值上的验证。首先,构造一个最大优化问题:
m
a
x
2
x
1
+
x
2
s
.
t
.
x
1
+
x
2
≤
5
:
λ
x
1
+
2
x
2
+
5
=
0
:
π
(8)
\begin{aligned} max \quad &2x_1+x_2 \\ s.t. \quad &x_1+x_2 \le 5:\lambda \\ &x_1+2x_2+5=0 : \pi \end{aligned} \tag{8}
maxs.t.2x1+x2x1+x2≤5:λx1+2x2+5=0:π(8)
编写程序(Yalmip+Gurobi)进行计算(当然也能手算):
%% data
c = [2, 1]';
A = [1, 1]';
B = 5;
E = [1, 2]';
F = -5;
%% model
% varialble
x = sdpvar(2, 1, 'full');
% objective
obj = c'*x;
% constraint
constraints = [A'*x <= 5, E'*x == F];
%% solution
options = sdpsettings('solver', 'gurobi','verbose',2);
solution = optimize(constraints, -obj, options);
value(x);
得到结果
x
1
=
15
,
x
2
=
−
10
x_1=15, x_2 = -10
x1=15,x2=−10。
同时,按照上述方法写出该模型的KKT条件,如下所示:
−
2
+
λ
+
π
=
0
−
1
+
λ
+
2
π
=
0
λ
≥
0
x
1
+
x
2
≤
5
x
1
+
2
x
2
+
5
=
0
λ
(
x
1
+
x
2
−
5
)
=
0
(9)
\begin{aligned} -2+\lambda+\pi=&0 \\ -1+\lambda+2\pi=&0\\ \lambda \ge &0 \\ x_1+x_2 \le &5\\ x_1+2x_2+5=&0 \\ \lambda (x_1+x_2-5)=&0 \end{aligned} \tag{9}
−2+λ+π=−1+λ+2π=λ≥x1+x2≤x1+2x2+5=λ(x1+x2−5)=000500(9)
首先需要列出朗格朗日函数,这里比较简单就不列出了。可以算出
π
=
−
1
,
λ
=
3
,
x
1
=
15
,
x
2
=
−
10
\pi=-1,\lambda=3,x_1=15, x_2 = -10
π=−1,λ=3,x1=15,x2=−10,与问题原来的最优解相同。
4.总结
本文撰写了“如何写出最大化优化问题的KKT最优条件”的思路,并设计案例进行了数据上的验证。若有问题,还请批评指正。
5.参考文献
Stephen Boyd, Lieven Vandenberghe. Convex Optimization. ↩︎