乘子法时针对外部罚函数法的改进方法,由于外部罚函数法随着罚因子的增大,增广目标函数的Hesse矩阵条件数会逐渐增大,从而导致在实际计算中,数值计算的稳定性也会变得越来越差,难以精确求解。乘子法改由在约束问题的Lagrange函数中加入相应的惩罚,使得在求解无约束问题时,罚因子不必趋于无穷大就能求到约束问题的最优解,而且数值计算的稳定性也能得到很好的保证。
等式约束
等式约束的H乘子法
H乘子法全称为Hesternes乘子法。
首先考虑如下的等式约束问题(用向量形式进行表示)
mins.t.f(x)h(x)=0}(1)
其中
f,h 时二次连续可微函数,设
D={x|h(x)=0} ,即
D 表示容许集。
那么问题(1)的Lagrange函数为
L(x,λ)=f(x)−λTh(x)(2)
假设
x∗ 时问题(1)的极小点,
λ∗ 时相应的Lagrange乘子,那么必有
∇xL(x∗,λ∗)=∇f(x∗)−∇h(x∗)λ∗=0(3)
∇λL(x∗,λ∗)=h(x∗)=0(4)
对于
∀x∈D 都有
h(x)=0 ,因此
f(x∗)=L(x∗,λ∗)≤L(x,λ∗)=f(x)(5)
所以问题(1)可以等价为
mins.t.L(x,λ∗)h(x)=0}(6)
也就是说我们可以通过公式(6)来求解问题(1)。公式(6)的增广目标函数为
F(x,λ∗,μ)=L(x,λ∗)+μh(x)Th(x)(7)
但是我们知道公式(7)中的
λ∗ 其实时未知的。而乘子法的基本思想就是在求解
x∗ 的同时,通过迭代的方法,同时求解出
λ∗ 。
首先需要明确的是,使用乘子法求解问题(1)时的增广目标函数是
F(x,λ,μ)=f(x)−λTh(x)+μh(x)Th(x)(8)
下面我们会直接给出一些引理和定理,不会对引理和定理进行证明。
引理1 设 U 是 n×n 对称矩阵, H 是 n×l 矩阵,如果满足 HTx=0 的所有非零向量 x 都有 xTUx>0 ,那么一定存在非负数 μ∗ ,当 μ≥μ∗ 时,使得矩阵 U+μHHT 在 Rn 上都正定。
定理2 在约束问题(1)中,如果最优解 x∗∈Rn 和Lagrange乘子 λ∗∈Rl 满足二阶充分条件(见最优性条件的定理2),那么就存在非负数 μ∗ ,使得当 μ≥μ∗ 时, x∗ 也是 F(x,λ∗,μ) 的严格局部极小点。
该定理表明,对公式(6)使用外部罚函数法的时候,只要罚因子不小于某一个潜在的非负数,就能保证 F(x,λ∗,μ) 的(局部)极小点恰是(1)的(局部)极小点。
现在求解以(8)为目标函数的无约束极小化问题。
minF(x,λ,μ)(9)
定理3 设对于给定的参数
λ 和
μ ,
x∗ 是公式(9)的最优解,那么
x∗ 是问题(1)的最优解,且
λ 为相应的Lagrange乘子向量
λ∗ 的充要条件是
h(x∗)=0 ,即
x∗∈D 。
定理2结合定理3说明:如果恰好选取参数
λ 为
λ∗ ,选择
μ≥μ∗ ,然后求解公式(9)而得出的最优解
x∗ 恰好是问题(1)的容许点,那么
x∗ 就是问题(1)的最优解。
算法:等式约束问题的H乘子法
已知:目标函数 f(X) ,等式约束函数 h1(x),h2(x),...,hl(x) ;终止限 ϵ ;常数 θ∈(0,1)
(1)选定初始点 x0 ,乘子向量的初始估计 λ1 ,初始罚因子 μ ,罚因子的放大系数 c(>1) ,置 k=1
(2)以 xk−1 为初始点,求解无约束问题 minxF(x,λk,μ)
(3)若 ||h(xk)||≤ϵ ,则打印 xk ,停止;否则,转(4)
(4)若 ||h(xk)||/||h(xk−1)||≤θ ,则转(5);否则,置 μ=cμ ,然后转(5)
(5)计算 λk+1=λk−2μh(xk) ;置 k=k+1 ,转(2)。
通过以上算法我们知道, λ∗ 是通过迭代求出的,迭代公式为
λk+1=λk−2μh(xk)
,此迭代公式的推导如下。
对于给定的
λ=λk ,设
xk 是公式(9),即
minxF(x,λk,μ)(10)
的极小点,那么应有
∇xf(xk,λk,μ)=∇f(xk)−∇h(xk)[λk−2μh(xk)]=0(11)
问题(1)的最优点
x∗ 处,应有
∇xL(x∗,λ∗)=∇f(x∗)−∇h(x∗)λ∗=0(12)
若设
∇h(x∗) 是满秩矩阵,则使用最小二乘法,由上式可以求出
λ∗=[∇h(x∗)T∇h(x∗)]−1∇h(x∗)T∇f(x∗)
且若
xk→x∗ ,则当
k 充分大时,
∇h(xk) 也将是满秩矩阵,于是,再次使用最小二乘法,由公式(11)又可以得到
λk−aμh(xk)=[∇h(xk)T∇h(xK)]−1∇h(xk)T∇f(xk)
比较以上两个式子克制,当
xk→x∗ 时,
λk−2μh(xk)→λ∗ ,所以有理由采用迭代公式
λk+1=λk−2μh(xk)
等式约束的P乘子法
P乘子法全称为Powell乘子法,与H乘子法的差别时它对每一个约束使用了不同的罚因子。P乘子法的增广目标函数为
F(x,λ,μ)=f(x)−∑i=1lλihi(x)+∑i=1lμih2i(x)(13)
算法:等式约束的P乘子法
已知:目标函数 f(x) ,等式约束函数 h1(x),h2(x),...,hl(x) ;终止限 ϵ ;常熟 θ∈(0,1)
(1)选定初始点 x0 ,乘子向量的初始估计 λ1 ,初始罚因子向量 μ1 ,罚因子的放大系统 c ;置 k=1
(2)以 xk−1 为初始点,求解以公式(13)为目标函数的极小化问题
minF(x,λk,μk)
设其极小点为
xk
(3)若
||h(xk)||<ϵ ,则打印
xk ,停止;否则转(4)
(4)对
j=1,2,...,l ,一次判别
|hi(xk)hj(xk−1)|<θ 是否成立:若成立,则置
μ(k+1)j=μ(k)j ;否则,置
μ(k+1)j=cμ(k)j ,直至判别结束,然后转(5)
(5)对
j=1,2,...,l 一次计算
λ(k+1)j=λ(k)j−2μ(k+1)jhj(xK) ;置
k+k+1 ,转(2)
计算实践证明,P乘子法比H乘子法效果好。
不等式约束
这里将介绍Rockafellar乘子法,他是把H乘子法巧妙的用到不等式约束问题上而得到的求解仅含不等式约束问题的一种方法。
考虑不等式约束问题
mins.t.f(x)si(x)≥0i=1,2,...,m}(14)
引入辅助变量
z1,z2,...,zm ,把公式(14)转换为等式约束问题
mins.t.f(x)si(x)−z2i=0i=1,2,...,m}(15)
这时可以使用P乘子法求解(15),其增广目标函数为
F~(x,z,v,μ)=f(x)−∑i=1mvi[si(x)−z2i]+μ∑i=1m[si(x)−z2i]2(16)
求
F~ 的极小点,由于变量
x,z 独立,所以求
F~ 的极小可分步进行,即
minx,zF~(x,z,v,μ)=minx{minzF~(x,z,v,μ)}
实际上,
F~ 关于
z 的绩效可以用
x,v,μ 显示表出,因此将(14)的增广目标函数定义为
F(x,v,μ)=minzF~(x,z,v,μ)=f(x)+∑i=1mminzi{−vi[si(x)−z2i]+μ[si(x)−z2i]2}(17)
用解析法求解(17),令
∇zF~(x,z,v,μ)=0
即
vizi−2μ[si(x)−z2i]zi=0i−1,2,...,m
经整理得
zi[2μz2i−(zμsi(x)−vi)]=0i=1,2,...,m(18)
由(18),对
i=1,2,...,m 有
z2i={0si(x)−vi2μ若2μsi(x)−vi≤0若2μsi(x)>0
因此
si(x)−z2i={sx(x)vi2μ若si(x)≤vi2μ若si(x)>vi2μ
进而
−vi[si(x)−z2i]+μ[si(x)−z2i]2$=⎧⎩⎨−visi(x)+μs2i(x)−v2i2μ+μ[vi2μ]2当si(x)≤vi2μ当si(x)>vi2μ=⎧⎩⎨μ[si(x)−vi2μ]2−v2i4μ当si(x)≤vi2μ当si(x)>vi2μi=14μ{[max(0,vi−zμsi(x))]2−v2i}
带回到(17)中,得到
F(x,v,μ)=f(x)+14μ∑i=1m{[max{0,vi−2μsi(x)}]2−v2i}
乘子迭代公式为
vk+1=vk$−2μ[s(xk)−z2k]=max{0,vk−2μs(xk)}
即
vk+1i=max{0,v(k)i−2μsi(xk)}i=1,2,...,m
终止准则为
⎛⎝⎜∑i=1m⎡⎣min⎧⎩⎨si(xk),v(k)i2μ⎫⎭⎬⎤⎦1/2⎞⎠⎟<ϵ
一般约束
对于一般约束问题
mins.t.f(x)si(x)≥0i=1,2,...,mhj(x)=0j=1,2,...,l
可以得到增广目标函数为
F(x,v,λ,μ)=f(x)+14μ∑i=1m{[max{0,vi−zμsi(x)}]2}−∑j=1lλjhi(x)+μ∑j=1l[hj(x)]2(19)
乘子迭代公式为
⎧⎩⎨v(k+1)i=max{0,v(k)−2μsi(xk)i}i=1,2,...,mλ(k+1)j=λ(k)j−2μhj(xk)j=1,2,...,l(20)
其中
λj 代表的是第
j 个等式约束所对应的Lagrange乘子,
vi 代表的是第
i 个不等式约束所对应的Lagrange乘子,显然,
vi≥0
算法:一般约束问题的H乘子法
已知:目标函数 f(x) ,不等式约束函数 s1(x),...,sm(x) ,等式约束函数 h1(x),...,hl(x) ;终止限 ϵ ;尝试 θ∈(0,1) ,设中驰判别函数为
ϕk=⎛⎝∑i=1m⎡⎣min⎧⎩⎨si(xk),v(k)i2μ⎫⎭⎬⎤⎦2+∑j=1l[hj(xk)]2⎞⎠1/2
(1)选定初始点
x0 ,乘子向量初始估计
v1 和
λ1 ,初始罚因子
μ ,罚因子方法系数
c(>1) ;计算
ϕ0 ;置
k=1
(2)以
xk−1 为初始点,求解
minxF(x,vk,λk,μ)
设
xk 为其极小点。
(3)计算
ϕk ,若
ϕk<ϵ ,则输出
xk ,停止;否则,转(4)
(4)若
ϕk/phi(k−1)≤θ ,则转(5);否则,置
μ=cμ ,转(5)
(5)按公式(20)计算乘子
v(k+1)i,...,v(k+1)m,λ(k+1)1,...,λ(k+1)l ,置
k=k+1 ,转(2)