本文来自 矩阵分析与应用,第二版
。
约束优化算法的标准处理方式是将其转化为无约束优化算法,有三种常见的转化方式,分别是lagrangian乘子法,罚函数法以及增广lagrangian乘子法(lagrangian乘子法+罚函数法)。
下面分别介绍罚函数法。
罚函数法
罚函数法是一种被广泛采用的约束优化方法,其基本原理是:通过罚函数与/或障碍函数,将约束优化问题变成一反映原目标函数和约束条件的合成函数的无约束极小化。
考虑约束优化问题
min
f
0
(
x
)
s
.
t
.
f
i
(
x
)
⩾
0
,
i
=
1
,
⋯
,
m
;
h
j
(
x
)
=
0
,
j
=
1
,
⋯
,
q
(8)
\begin{aligned} \min & f_0(\boldsymbol{x})\\ \mathrm{s.t.}&f_i(\boldsymbol{x})\geqslant0,i=1,\cdots,\boldsymbol{m}; \\ &~h_j(\boldsymbol{x})=0,j=1,\cdots,q \tag{8} \end{aligned}
mins.t.f0(x)fi(x)⩾0,i=1,⋯,m; hj(x)=0,j=1,⋯,q(8)
式中
x
∈
F
⊆
S
⊆
R
n
\boldsymbol{x}\in\mathcal{F}\subseteq\mathcal{S}\subseteq\mathbb{R}^n
x∈F⊆S⊆Rn ,且
F
\mathcal{F}
F表示变元向量
x
\boldsymbol{x}
x的可行集,
S
\mathcal{S}
S代表整个搜索空间。
将约束优化问题变为无约束优化问题有两种惩罚方式。
第1种方式使用加性罚函数项
L
(
x
)
=
{
f
0
(
x
)
,
x
∈
F
f
0
(
x
)
+
p
(
x
)
,
其他
(9)
L(\boldsymbol{x})=\begin{cases}f_0(\boldsymbol{x}),&\boldsymbol{x}\in\mathcal{F}\\f_0(\boldsymbol{x})+p(\boldsymbol{x}),&\text{其他}\end{cases} \tag{9}
L(x)={f0(x),f0(x)+p(x),x∈F其他(9)
其中
p
(
x
)
p(\boldsymbol{x})
p(x)称为罚函数(penalty function)。如果变元
x
\boldsymbol{x}
x没有违背可行集
F
\mathcal{F}
F的约束,罚函数
p
(
x
)
=
0
p(\boldsymbol{x}) = 0
p(x)=0,否则
p
(
x
)
>
0
p(\boldsymbol{x})>0
p(x)>0
第2种方式使用乘性罚函数项
L
(
x
)
=
{
f
0
(
x
)
,
x
∈
F
f
0
(
x
)
p
(
x
)
,
其他
(10)
L(\boldsymbol{x})=\begin{cases}f_0(\boldsymbol{x}),&\boldsymbol{x}\in\mathcal{F}\\f_0(\boldsymbol{x})p(\boldsymbol{x}),&\text{其他}\end{cases} \tag{10}
L(x)={f0(x),f0(x)p(x),x∈F其他(10)
其中
p
(
x
)
=
1
p(\boldsymbol{x}) = 1
p(x)=1,若
x
\boldsymbol{x}
x没有脱离可行集
F
\mathcal{F}
F;否则
p
(
x
)
>
1
p(\boldsymbol{x})>1
p(x)>1
通常多采用加性惩罚方式。
罚函数有时被称为惩罚。罚函数的主要性质是:若
p
1
(
x
)
p_1(\boldsymbol{x})
p1(x)是对闭集
F
1
\mathcal{F}_1
F1的惩罚,
p
2
(
x
)
p_2 (\boldsymbol{x})
p2(x)是对闭集
F
2
\mathcal{F}_2
F2的惩罚,则
p
1
(
x
)
+
p
2
(
x
)
p_1 (\boldsymbol{x}) + p_2 (\boldsymbol{x})
p1(x)+p2(x)是对交集
F
1
∩
F
2
\mathcal{F}_1 \cap \mathcal{F}_2
F1∩F2的惩罚。
令
F
=
{
x
∈
R
n
∣
f
i
(
x
)
⩾
0
,
i
=
1
,
⋯
,
m
}
\mathcal{F}=\{x\in\mathbb{R}^n|f_i(x)\geqslant0,i=1,\cdots,m\}
F={x∈Rn∣fi(x)⩾0,i=1,⋯,m}
则下列函数是闭集
F
\mathcal{F}
F上的罚函数:
- 二次罚函数
p ( x ) = ∑ i = 1 m ( max { 0 , − f i ( x ) } ) 2 (11) p(\boldsymbol{x})=\sum_{i=1}^m(\max\{0,-f_i(\boldsymbol{x})\})^2 \tag{11} p(x)=i=1∑m(max{0,−fi(x)})2(11) - 非平滑罚函数
p ( x ) = ∑ i = 1 M max { 0 , − f i ( x ) } (12) p(\boldsymbol{x})=\sum_{i=1}^M\max\{0,-f_i(\boldsymbol{x})\} \tag{12} p(x)=i=1∑Mmax{0,−fi(x)}(12)
罚函数将原始约束优化问题变换成无约束优化问题
min
x
∈
S
L
ρ
(
x
)
=
f
0
(
x
)
+
ρ
⋅
p
(
x
)
(13)
\min_{\boldsymbol{x}\in\mathcal{S}}L_{\rho}(\boldsymbol{x})=f_{0}(\boldsymbol{x})+\rho\cdot p(\boldsymbol{x}) \tag{13}
x∈SminLρ(x)=f0(x)+ρ⋅p(x)(13)
式中,系数
ρ
\rho
ρ为惩罚参数,通过对罚函数
p
(
x
)
p(\boldsymbol{x})
p(x)的加权,体现惩罚的力度。转换后的优化问题式(13)常称为原约束优化问题的辅助优化问题。
下面分三种情况加以讨论。
1. 等式约束优化的罚函数法
先考虑等式约束优化问题
min
f
0
(
x
)
s
.
t
.
h
j
(
x
)
=
0
,
j
=
1
,
⋯
,
q
(14)
\begin{aligned} \min & f_0(\boldsymbol{x})\\ \mathrm{s.t.} &~h_j(\boldsymbol{x})=0,j=1,\cdots,q \tag{14} \end{aligned}
mins.t.f0(x) hj(x)=0,j=1,⋯,q(14)
定义函数
p
(
x
)
=
∑
i
=
1
q
∣
h
i
(
x
)
∣
2
(15)
p(\boldsymbol{x})=\sum_{i=1}^{q}|h_{i}(\boldsymbol{x})|^{2} \tag{15}
p(x)=i=1∑q∣hi(x)∣2(15)
显然,这一函数具有以下性质
p
(
x
)
{
=
0
,
h
i
(
x
)
=
0
,
i
=
1
,
⋯
,
q
>
0
,
h
i
(
x
)
≠
0
,
i
=
1
,
⋯
,
q
(16)
p(x)\begin{cases}=0,&h_i(\boldsymbol{x})=0,\boldsymbol{i}=1,\cdots,q\\>0,&h_i(\boldsymbol{x})\neq0,\boldsymbol{i}=1,\cdots,q\end{cases} \tag{16}
p(x){=0,>0,hi(x)=0,i=1,⋯,qhi(x)=0,i=1,⋯,q(16)
这表明,
p
(
x
)
p(\boldsymbol{x})
p(x)是等式约束优化问题式(14)的罚函数,因为它对满足等式约束条件的点
x
\boldsymbol{x}
x无任何影响,而对违反等式约束条件的点予以惩罚。
2. 不等式约束优化的罚函数法
再考虑只有不等式约束的优化问题
min
f
0
(
x
)
s
.
t
.
f
i
(
x
)
⩾
0
,
i
=
1
,
⋯
,
m
;
(17)
\begin{aligned} \min & f_0(\boldsymbol{x})\\ \mathrm{s.t.}&f_i(\boldsymbol{x})\geqslant0,i=1,\cdots,\boldsymbol{m}; \tag{17} \end{aligned}
mins.t.f0(x)fi(x)⩾0,i=1,⋯,m;(17)
不等式约束优化问题式(17)的罚函数分为以下两大类:
- 外罚函数
罚函数取
p
(
x
)
=
∑
i
=
1
m
(
max
{
0
,
−
f
i
(
x
)
}
)
τ
(18)
p(\boldsymbol{x})=\sum_{i=1}^m(\max\{0,-f_i(\boldsymbol{x})\})^\tau \tag{18}
p(x)=i=1∑m(max{0,−fi(x)})τ(18)
式中
τ
\tau
τ常取1或2。这种函数对违背不等式约束的点即可行集外部的所有点进行惩罚,称为外罚函数(exterior penalty function)。
- 内罚函数
罚函数取
p
(
x
)
=
∑
i
=
1
m
1
f
i
(
x
)
或
p
(
x
)
=
∑
i
=
1
m
1
f
i
(
x
)
log
(
f
i
(
x
)
)
(19)
p(x)=\sum_{i=1}^m\frac1{f_i(x)}\\ \text{或}\quad p(x)=\sum_{i=1}^m\frac1{f_i(x)}\log(f_i(x)) \tag{19}
p(x)=i=1∑mfi(x)1或p(x)=i=1∑mfi(x)1log(fi(x))(19)
这种罚函数相当于在可行集边界
bnd
(
F
)
\text{bnd}(\mathcal{F})
bnd(F)上树立起一道围墙,对于企图从可行集内
int
(
F
)
\text{int}(\mathcal{F})
int(F)穿越到可行集边界
bnd
(
F
)
\text{bnd}(\mathcal{F})
bnd(F)的点
x
\boldsymbol{x}
x进行阻挡,故称为内罚函数(interior penalty function),也称障碍函数(barrier function)。
一连续函数
ϕ
(
x
)
\phi(\boldsymbol{x})
ϕ(x)称为具有非空内集的闭集
F
=
int
(
F
)
\mathcal{F} = \text{int}(\mathcal{F})
F=int(F)上的障碍函数,若
ϕ
(
x
)
{
=
0
,
x
∈
int
(
F
)
→
∞
,
x
→
bnd
(
F
)
(20)
\phi(x)\begin{cases}=0,&x\in\operatorname{int}(\mathcal{F})\\\rightarrow\infty,&x\rightarrow\operatorname{bnd}(\mathcal{F})\end{cases} \tag{20}
ϕ(x){=0,→∞,x∈int(F)x→bnd(F)(20)
障碍函数有时简称为障碍。
与罚函数类似,障碍函数的主要性质是:
- 若 ϕ 1 ( x ) \phi_1(\boldsymbol{x}) ϕ1(x)是对闭集 F 1 \mathcal{F}_1 F1的障碍, ϕ 2 ( x ) \phi_2(\boldsymbol{x}) ϕ2(x)是对闭集 F 2 \mathcal{F}_2 F2的障碍,则 ϕ 1 ( x ) + ϕ 2 ( x ) \phi_1(\boldsymbol{x}) + \phi_2(\boldsymbol{x}) ϕ1(x)+ϕ2(x)是对 F 1 ∩ F 2 \mathcal{F}_1 \cap \mathcal{F}_2 F1∩F2的障碍。
令
F
=
{
x
∈
R
n
∣
f
i
(
x
)
⩾
0
;
i
=
1
,
⋯
,
m
}
s
t
r
i
c
t
(
F
)
=
{
x
∈
R
n
∣
f
i
(
x
)
>
0
;
i
=
1
,
⋯
,
m
}
\begin{align*} \text{F}& =\{x\in\mathbb{R}^n\mid f_i(x)\geqslant0;i=1,\cdots,m\} \tag{21} \\ \mathbf{strict}(\mathcal{F})& =\{\boldsymbol{x}\in\mathbb{R}^n\mid f_i(\boldsymbol{x})>0;i=1,\cdots,m\} \tag{22} \end{align*}
Fstrict(F)={x∈Rn∣fi(x)⩾0;i=1,⋯,m}={x∈Rn∣fi(x)>0;i=1,⋯,m}(21)(22)
分别代表不等式约束函数的可行区和严格可行区。
下面是闭集
F
\mathcal{F}
F上的几种典型障碍函数:
- 幂函数障碍函数(power-function barrier function)
ϕ ( x ) = ∑ i = 1 m 1 ( f i ( x ) ) p , p ⩾ 1 \phi(\boldsymbol{x}) = \sum_{i=1}^{m}\frac{1}{(f_{i}(\boldsymbol{x}))^{p}},p\geqslant1 ϕ(x)=∑i=1m(fi(x))p1,p⩾1
- 对数障碍函数(logarithmic barrier function)
ϕ ( x ) = 1 f i ( x ) ∑ i = 1 m log ( f i ( x ) ) , p ⩾ 1 \phi(\boldsymbol{x}) = \frac{1}{f_{i}(\boldsymbol{x})} \sum_{i=1}^{m} \log(f_{i}(\boldsymbol{x})),p\geqslant1 ϕ(x)=fi(x)1∑i=1mlog(fi(x)),p⩾1
- 指数障碍函数(exponential barrier function)
ϕ ( x ) = ∑ i = 1 m exp ( 1 f i ( x ) ) \phi(\boldsymbol{x})=\sum_{i=1}^{m}\exp\left(\frac{1}{f_{i}(\boldsymbol{x})}\right) ϕ(x)=∑i=1mexp(fi(x)1)
特别地,
p
=
1
p=1
p=1的幂函数障碍函数
ϕ
(
x
)
=
1
f
i
(
x
)
∑
i
=
1
m
log
(
f
i
(
x
)
)
\phi(\boldsymbol{x}) = \frac{1}{f_{i}(\boldsymbol{x})} \sum_{i=1}^{m} \log(f_{i}(\boldsymbol{x}))
ϕ(x)=fi(x)1∑i=1mlog(fi(x)) 称为逆障碍函数,它是Carroll于1961年提出的;而
ϕ
(
x
)
=
μ
∑
i
=
1
m
1
log
(
f
i
(
x
)
)
(23)
\phi(\boldsymbol{x}) = \mu \sum_{i=1}^{m} \frac1{\log(f_{i}(\boldsymbol{x}))} \tag{23}
ϕ(x)=μi=1∑mlog(fi(x))1(23)
称为经典Fiacco-McCormick对数障碍函数,是Fiacco于McCormick于1968年在他们著名的开创性著作中提出的。其中,
μ
\mu
μ为障碍参数。
采用外罚函数和内罚函数的优化方法分别为外罚函数法和内罚函数法,它们之间的比较如下:
- (1)外罚函数法常称罚函数法;内罚函数法习惯称障碍函数法,简称障碍法。罚函数 1 f i ( x ) \frac 1 {f_i(\boldsymbol{x})} fi(x)1和 1 f i ( x ) log f i ( x ) \frac 1 {f_i(\boldsymbol{x})} \log f_i(\boldsymbol{x}) fi(x)1logfi(x)分别称为逆障碍函数和对数障碍函数。
- (2)外罚函数法对可行集以外的所有点进行惩罚,求出的解满足全部不等式约束条件 f i ( x ) ≤ 0 , i = 1 , … , m f_i(\boldsymbol{x})\leq 0,i=1,…,m fi(x)≤0,i=1,…,m,是不等式约束优化问题的精确解,因而是一种最优设计方案;而内罚函数法或障碍法阻挡了可行集边界的点,得到的解只满足严格不等式 f i ( x ) > 0 , i = 1 , … , m f_i(\boldsymbol{x})>0,i=1,…,m fi(x)>0,i=1,…,m,是原始优化问题的近似解,因而是一种次优设计方案。
- (3)外罚函数法可以用不可行点启动,通常收敛慢;而内罚函数法要求初始点是可行内点,其选择比较困难,但却具有很好的收敛和逼近性能。
在进化计算中,通常采用外罚函数法,因为内罚函数法要求的可行初始点搜索往往是 NP难题。工程设计人员尤其是过程控制人员偏爱使用内罚函数法,因为这种方法可以使设计者观察到“优化过程中在可行集内的设计点所对应的目标函数值的变化情况”而这是外罚函数法无法提供的。
3. 等式和不等式约束优化的混合罚函数法
对于标准形式的不等式约束优化问题式(8),可行集定义为满足所有不等式和等式约束的点集
F
=
{
x
∣
f
i
(
x
)
⩽
0
,
i
=
1
,
⋯
,
m
;
h
i
(
x
)
=
0
,
i
=
1
,
⋯
,
q
}
(24)
{\mathcal F}=\{\boldsymbol{x}|f_{i}(\boldsymbol{x})\leqslant0,i=1,\cdots,m;h_{i}(\boldsymbol{x})=0,i=1,\cdots,q\} \tag{24}
F={x∣fi(x)⩽0,i=1,⋯,m;hi(x)=0,i=1,⋯,q}(24)
既满足严格不等式约束
f
i
(
x
)
<
0
f_i(\boldsymbol{x})<0
fi(x)<0,又同时满足等式约束
h
i
x
)
=
0
h_i\boldsymbol{x})=0
hix)=0的点集
relint
(
F
)
=
{
x
∣
f
i
(
x
)
<
0
,
i
=
1
,
⋯
,
m
;
h
i
(
x
)
=
0
,
i
=
1
,
⋯
,
q
}
(25)
\operatorname{relint}(\mathcal{F})=\{\boldsymbol{x}|f_i(\boldsymbol{x})<0,i=1,\cdots,m;h_i(\boldsymbol{x})=0,i=1,\cdots,q\} \tag{25}
relint(F)={x∣fi(x)<0,i=1,⋯,m;hi(x)=0,i=1,⋯,q}(25)
称为相对可行内点集(relative feasible interior set)或相对严格可行集(relative strictly feasible set)。相对可行内点集的点称为相对内点法。可行集与相对可行内点集的差集
F
\
relint
(
F
)
\mathcal{F} \backslash \operatorname{relint}(\mathcal{F})
F\relint(F)称为相对可行集边界(relative boundary of the feasible set)。
综合等式约束优化问题和只有不等式约束优化问题的罚函数法,很容易得到同时有等式和不等式约束的优化问题式(8)的混合罚函数法:
-
(1)混合外罚函数法
min x f 0 ( x ) + ρ 1 ∑ i = 1 m ( max { 0 , f i ( x ) } ) 2 + ρ 2 ∑ i = 1 q ∣ h i ( x ) ∣ 2 (26) \min_{\boldsymbol{x}}f_{\mathbf{0}}(\boldsymbol{x})+\rho_{1}\sum_{i=1}^{\boldsymbol{m}}\left(\max\{0,f_{i}(\boldsymbol{x})\}\right)^{2}+\rho_{2}\sum_{i=1}^{\boldsymbol{q}}|h_{i}(\boldsymbol{x})|^{2} \tag{26} xminf0(x)+ρ1i=1∑m(max{0,fi(x)})2+ρ2i=1∑q∣hi(x)∣2(26) -
(2)混合内罚函数法
min
x
f
0
(
x
)
+
ρ
1
∑
i
=
1
m
1
−
f
i
(
x
)
log
(
−
f
i
(
x
)
)
+
ρ
2
∑
i
=
1
q
∣
h
i
(
x
)
∣
2
(27)
\min_{\boldsymbol{x}}f_0(\boldsymbol{x})+\rho_1\sum_{i=1}^{\boldsymbol{m}}\frac{1}{-f_i(\boldsymbol{x})}\log(-f_i(\boldsymbol{x}))+\rho_2\sum_{i=1}^{\boldsymbol{q}}|h_i(\boldsymbol{x})|^2 \tag{27}
xminf0(x)+ρ1i=1∑m−fi(x)1log(−fi(x))+ρ2i=1∑q∣hi(x)∣2(27)
从以上定义知,混合外罚函数法惩罚的是可行集
F
\mathcal{F}
F以外的点即不可行集里的点,而混合内部罚函数法惩罚的则是相对可行内集以外的点。因此,混合外罚函数法可以用不可行点启动,而混合内罚函数通常则需要用相对内点启动。
在罚函数的严格分类的意义上,上述各种罚函数属"死亡"惩罚(death penalty),即通过惩罚函数
p
(
x
=
+
∞
)
p(\boldsymbol{x} = + \infty)
p(x=+∞) 完全排除非可行解点
x
∈
S
\
F
\boldsymbol{x}\in S \backslash F
x∈S\F(搜索空间S与可行集的差集)。如果可行搜索空间是凸的或者是整个搜索空间的合理部分,这种罚函数法可以工作得很好。然而,对于遗传算法和进化计算,很多问题的可行集和不可行集的边界是未知的,因此很难确定可行集的精确位置。在这些情况下,常采用其他的罚函数:静态惩罚(static penalties)、动态惩罚(dynamic penalties)、退火惩罚(annealing penalties)自适应惩罚(adaptive penalties)和协同进化惩罚(co-evolutionary penalties)。
思维导图
罚函数法
│
├── 定义
│ └── 通过罚函数或障碍函数将约束优化问题转化为无约束极小化问题
│
├── 约束优化问题形式
│ └── min f_0(x) subject to f_i(x) ≥ 0, i=1,...,m; h_j(x) = 0, j=1,...,q
│
├── 罚函数法种类
│ ├── 加性罚函数项
│ │ └── L(x) = f_0(x) + p(x) if x ∉ F, else f_0(x)
│ │
│ └── 乘性罚函数项
│ └── L(x) = f_0(x)p(x) if x ∉ F, else f_0(x)
│
├── 罚函数的选择
│ ├── 二次罚函数
│ ├── 非平滑罚函数
│ └── 转换成无约束优化问题:min L_ρ(x) = f_0(x) + ρ·p(x)
│
├── 罚函数法详细讨论
│ ├── 等式约束优化的罚函数法
│ │ └── p(x) = ∑|h_i(x)|²
│ │
│ ├── 不等式约束优化的罚函数法
│ │ ├── 外罚函数
│ │ └── 内罚函数
│ │
│ └── 等式和不等式约束优化的混合罚函数法
│ ├── 混合外罚函数法
│ └── 混合内罚函数法
│
└── 特点和应用场景
├── 外罚函数法 vs 内罚函数法
└── 罚函数法在进化计算和工程设计中的应用