罚函数与增广Lagrangian乘子法

罚函数

罚函数法是一种广泛采用的约束优化方法,有时也称为惩罚,其基本原理是通过采用罚函数或障碍函数,将约束条件整合进优化目标中去。考虑约束优化问题:
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) xSminLp(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=1qhi(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=1m(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=1mfi(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=1mfi(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=1m(max{0,fi(x)})2+ρ2i=1qhi(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=1mfi(x)1+ρ2i=1qhi(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=1qλihi(x)+ρi=1qϕ(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)=Axb,罚函数 ϕ ( h ( x ) ) = 1 2 ∥ A x − b ∥ 2 2 \phi(h(x))=\frac{1}{2}\|Ax-b\|_2^2 ϕ(h(x))=21Axb22,则增广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(Axb)+2ρAxb22
相应的对偶上升法的更新公式为:
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+1b)
增广Lagrangian乘子法相比于Lagrangian乘子法的优点是,不要求 f ( x ) f(x) f(x)具有局部凸结构,因此适用范围更广。

本文主要来自张贤达《矩阵分析与优化(第二版)》4.7.3节。有一个地方我有点不明白,书里面前面讲标准Lagrangian乘子法和对偶上升法 f ( x ) f(x) f(x)的时候要求 f ( x ) f(x) f(x)是凸函数,这里怎么变成说是“局部凸结构”了?

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值