罚函数
罚函数法是一种广泛采用的约束优化方法,有时也称为惩罚,其基本原理是通过采用罚函数或障碍函数,将约束条件整合进优化目标中去。考虑约束优化问题:
min
f
(
x
)
s
.
t
.
f
i
(
x
)
≥
0
,
i
=
1
,
⋯
,
m
;
h
j
(
x
)
=
0
,
j
=
1
,
⋯
,
q
(1)
\min f(x)\\ s.t.\ f_i(x)\ge0,i=1,\cdots,m;h_j(x)=0,j=1,\cdots,q \tag{1}
minf(x)s.t. fi(x)≥0,i=1,⋯,m;hj(x)=0,j=1,⋯,q(1)
我们用
F
F
F表示
x
x
x的可行域,用
S
S
S表示整个搜索空间。有两种添加惩罚项的方法,一种是加性,即在
x
x
x脱离可行域的时候给
f
(
x
)
f(x)
f(x)加上一个大于0的项
p
(
x
)
p(x)
p(x),另一种是乘性,即在
x
x
x脱离可行域的时候给
f
(
x
)
f(x)
f(x)乘一个大于1的项
p
(
x
)
p(x)
p(x)。通常采用的还是加性罚函数,将原始约束优化问题转变成无约束优化问题:
min
x
∈
S
L
p
(
x
)
=
f
(
x
)
+
ρ
⋅
p
(
x
)
\min_{x\in S}L_p(x)=f(x)+\rho \cdot p(x)
x∈SminLp(x)=f(x)+ρ⋅p(x)
这里
ρ
\rho
ρ为惩罚参数。
对于等式约束,可以定义罚函数
p
(
x
)
=
∑
i
=
1
q
∣
h
i
(
x
)
∣
2
p(x)=\sum_{i=1}^q|h_i(x)|^2
p(x)=i=1∑q∣hi(x)∣2
它对满足等式约束的
x
x
x无影响,对违反等式约束的
x
x
x施加惩罚。
对于不等式约束,可以定义两类罚函数,外罚函数和内罚函数。外罚函数例如:
p
(
x
)
=
∑
i
=
1
m
(
max
{
0
,
−
f
i
(
x
)
}
)
r
p(x)=\sum_{i=1}^m(\max \{0,-f_i(x)\})^r
p(x)=i=1∑m(max{0,−fi(x)})r
r
r
r可取1或2。外罚函数对所有违背不等式约束的点进行惩罚。
内罚函数例如
p
(
x
)
=
∑
i
=
1
m
1
f
i
(
x
)
p(x)=\sum_{i=1}^m\frac{1}{f_i(x)}
p(x)=i=1∑mfi(x)1
或
p
(
x
)
=
∑
i
=
1
m
1
f
i
(
x
)
l
o
g
(
f
i
(
x
)
)
p(x)=\sum_{i=1}^m\frac{1}{f_i(x)}log(f_i(x))
p(x)=i=1∑mfi(x)1log(fi(x))
内罚函数对“企图”不满足不等式约束的点进行惩罚,也称为障碍函数。
外罚函数对可行域之外的所有点进行惩罚,是不等式约束优化问题的精确解,是最优设计方案;而内罚函数阻挡了可行边界的点,得到的解只满足严格不等式
f
i
(
x
)
>
0
f_i(x)>0
fi(x)>0,是一种次优解。外罚函数可以用不可行点启动,收敛慢,内罚函数的启动点必须是可行点,选择起来存在困难,但是收敛比较快。结合等式约束的罚函数,得出同时有等式和不等式约束的混合罚函数法:
(1)混合外罚函数法
min
x
f
(
x
)
+
ρ
1
∑
i
=
1
m
(
max
{
0
,
−
f
i
(
x
)
}
)
2
+
ρ
2
∑
i
=
1
q
∣
h
i
(
x
)
∣
2
\min_x f(x)+\rho_1\sum_{i=1}^m(\max \{0,-f_i(x)\})^2+\rho_2 \sum_{i=1}^q|h_i(x)|^2
xminf(x)+ρ1i=1∑m(max{0,−fi(x)})2+ρ2i=1∑q∣hi(x)∣2
(2)混合内罚函数法
min
x
f
(
x
)
+
ρ
1
∑
i
=
1
m
1
f
i
(
x
)
+
ρ
2
∑
i
=
1
q
∣
h
i
(
x
)
∣
2
\min_xf(x)+\rho_1\sum_{i=1}^m\frac{1}{f_i(x)}+\rho_2 \sum_{i=1}^q|h_i(x)|^2
xminf(x)+ρ1i=1∑mfi(x)1+ρ2i=1∑q∣hi(x)∣2
增广Lagrangian乘子法
基于Lagrangian乘子法的对偶上升法的主要缺点是:(1)只有当约束优化目标具有局部凸结构的时候,对偶的无约束问题才是良好定义的,
λ
\lambda
λ的更新才是有意义的;(2)Lagrangian目标函数的收敛比较费时,因为Lagrangian乘子
λ
\lambda
λ的更新是一种上升迭代,只能适度地加速收敛。
罚函数的不足在于收敛慢,大的惩罚参数容易引起转化后的无约束问题的病态,从而造成算法的数值不稳定性。
将两种方法结合起来的增广Lagrangian乘子法是能够减缓二者缺点的一种简单有效的途径。
对于公式
(
1
)
(1)
(1)的问题,记
h
(
x
)
=
[
h
1
(
x
)
,
⋯
,
h
q
(
x
)
]
T
h(x)=[h_1(x),\cdots,h_q(x)]^T
h(x)=[h1(x),⋯,hq(x)]T,对Lagrangian目标函数
L
(
x
,
λ
)
L(x,\lambda)
L(x,λ)添加罚函数组成
L
ρ
L_{\rho}
Lρ:
L
ρ
=
f
(
x
)
+
λ
T
h
(
x
)
+
ρ
ϕ
(
h
(
x
)
)
=
f
(
x
)
+
∑
i
=
1
q
λ
i
h
i
(
x
)
+
ρ
∑
i
=
1
q
ϕ
(
h
(
x
)
)
L_{\rho}=f(x)+\lambda^Th(x)+\rho \phi(h(x))\\ =f(x)+\sum_{i=1}^q\lambda_ih_i(x)+\rho\sum_{i=1}^q\phi(h(x))
Lρ=f(x)+λTh(x)+ρϕ(h(x))=f(x)+i=1∑qλihi(x)+ρi=1∑qϕ(h(x))
这就是增广Lagrangian乘子法。可以看出,若
ρ
=
0
\rho=0
ρ=0,增广Lagrangian乘子法退化为Lagrangian乘子法;若
λ
=
0
\lambda=0
λ=0,增广Lagrangian乘子法退化为标准罚函数法。
求解
L
ρ
L_{\rho}
Lρ的对偶上升法由以下两个更新组成:
x
k
+
1
=
arg min
x
L
ρ
(
x
,
λ
k
)
λ
k
+
1
=
λ
k
+
ρ
k
∇
λ
L
ρ
(
x
k
+
1
,
λ
k
)
x_{k+1}=\argmin_xL_\rho(x,\lambda_k)\\ \lambda_{k+1}=\lambda_k+\rho_k \nabla_\lambda L_\rho(x_{k+1},\lambda_k)
xk+1=xargminLρ(x,λk)λk+1=λk+ρk∇λLρ(xk+1,λk)
上式中的
ρ
k
∇
λ
L
ρ
(
x
k
+
1
,
λ
k
)
\rho_k \nabla_\lambda L_\rho(x_{k+1},\lambda_k)
ρk∇λLρ(xk+1,λk)是
L
ρ
(
x
k
+
1
,
λ
k
)
L_\rho(x_{k+1},\lambda_k)
Lρ(xk+1,λk)关于
λ
\lambda
λ的梯度。
特别地,若公式
(
1
)
(1)
(1)中的等式约束为仿射函数
h
(
x
)
=
A
x
−
b
h(x)=Ax-b
h(x)=Ax−b,罚函数
ϕ
(
h
(
x
)
)
=
1
2
∥
A
x
−
b
∥
2
2
\phi(h(x))=\frac{1}{2}\|Ax-b\|_2^2
ϕ(h(x))=21∥Ax−b∥22,则增广Lagrangian函数为:
L
ρ
(
x
,
λ
)
=
f
(
x
)
+
λ
T
(
A
x
−
b
)
+
ρ
2
∥
A
x
−
b
∥
2
2
L_\rho(x,\lambda)=f(x)+\lambda^T(Ax-b)+\frac{\rho}{2}\|Ax-b\|_2^2
Lρ(x,λ)=f(x)+λT(Ax−b)+2ρ∥Ax−b∥22
相应的对偶上升法的更新公式为:
x
k
+
1
=
arg min
x
L
ρ
(
x
,
λ
k
)
λ
k
+
1
=
λ
k
+
ρ
k
(
A
x
k
+
1
−
b
)
x_{k+1}=\argmin_xL_\rho(x,\lambda_k)\\ \lambda_{k+1}=\lambda_k+\rho_k(Ax_{k+1}-b)
xk+1=xargminLρ(x,λk)λk+1=λk+ρk(Axk+1−b)
增广Lagrangian乘子法相比于Lagrangian乘子法的优点是,不要求
f
(
x
)
f(x)
f(x)具有局部凸结构,因此适用范围更广。
本文主要来自张贤达《矩阵分析与优化(第二版)》4.7.3节。有一个地方我有点不明白,书里面前面讲标准Lagrangian乘子法和对偶上升法 f ( x ) f(x) f(x)的时候要求 f ( x ) f(x) f(x)是凸函数,这里怎么变成说是“局部凸结构”了?