本文中我们考虑如下有约束的一般优化问题的求解方法:
mins. t. f(x)ci(x)=0,i∈E={1,2,…,l}ci(x)≤0,i∈I={l+1,l+2,…,l+m}x∈Rn
其中,可行域
D
记为:
D={x|ci(x)=0,i∈E;ci(x)≤0,i∈I;x∈Rn}
求解约束优化问题要比求解无约束优化问题复杂困难得多。一般来说,求解约束优化问题的方法大致分两类:一类是此文中介绍的直接求解法,另一类是本文中即将介绍的罚函数法。
罚函数法是利用目标函数
f(x)
和约束函数
c(x)
,构造具有惩罚性质的函数
P(x)=P¯(f(x),c(x))
,使得原约束优化问题转化为求
P(x)
最优解的无约束优化问题。以下讨论中,我们假设所有函数都是连续的。
外罚函数法
外罚函数是一类不可行点的方法,其基本思想是:在求解约束优化的问题时,通过对不可行的迭代点施加惩罚,并随着迭代点的进展,增大惩罚量,迫使迭代点逐步向可行域靠近。
等式约束的优化问题
minf(x),x∈Rns. t. ci(x)=0,i=1,2,…,l
记
P~(x)=∑i=1l|ci(x)|β,β≥1
定义如下形式的外罚函数
P(x,σ)=f(x)+σP~(x)=f(x)+σ∑i=1l|ci(x)|β,β≥1
其中
σ>0
是一个参数。显然,当
x
为可行点时,
P~(x)=0
;当
x
不是可行点时
P~(x)>0
,于是
P(x,σ)>f(x)
。特别的,随着
σ
增大,
P(x)
也在增大。所以,要使
P(x,σ)
取到极小值,
P~(x)
应充分小,即
P(x,σ)
的极小点应充分逼近可行域。于是,上述等式约束优化问题转化为无约束优化的问题
minx{P(x,σ)=f(x)+σP~(x)}
通常取
β=2
。
例 1:求解下列约束优化问题
min{f(x)=x1+x2}s. t. c(x)=x2−x21=0
解:构造外罚函数
P(x,σ)=x1+x2+σ(x2−x21)2
利用解析法求解
∂P∂x1=1−4σx1(x2−x21),∂P∂x2=1+2σ(x2−x21)
令
∇xP(x,σ)=0
得到
x1(σ)=−12,x2(σ)=14−12σ
再令
σ→+∞
得
x(σ)=(−12,14)T=x∗P(x(σ),σ)=−14=f(x∗)
不等式约束的优化问题
我们考虑如下不等式约束的优化问题
minf(x),x∈Rns. t. ci(x)≤0,i=1,2,…,l
记
P~(x)=∑i=1l[max(0,ci(x))]α,α≥1
定义如下形式的外罚函数
P(x,σ)=f(x)+σ∑i=1l[max(0,ci(x))]αα≥1
此时的外罚函数性质与上一节类似,通常取
α=2
。
一般约束的优化问题
考虑一般的约束优化问题
mins. t. f(x)ci(x)=0,i∈E={1,2,…,l}ci(x)≤0,i∈I={L+1,l+2,…,l+m}x∈Rn
记
P~(x)=∑i=1l|ci(x)|β+∑i=1l[max(0,ci(x))]α,α≥1,β≥1
类似地,定义如下形式的外罚函数
P(x,σ)=f(x)+∑i=1l|ci(x)|β+∑i=1l[max(0,ci(x))]α,α≥1,β≥1
上述罚函数性质与之前的讨论类似。可见,外罚函数的最优解在
σ→+∞
的过程中一直在可行域外部取点,直到趋近最优解
x∗
。所以之中方法为外罚函数法,简称外点法;
P(x,σ)
为外罚函数,或叫增广目标函数,
σ
为惩罚因子,
P~(x)
为惩罚项。
对于比较复杂的约束,通常采用迭代的方法:
- 给定初始点
x0
,设
ϵ>0,c>1
为给定实数,选择序列
{σk}
,使得
σk→+∞
,令
k=1
;
- 以
xk−1
为初始点,求解无约束优化问题
min{P(x,σk)=f(x)+σkP~(x)}
得到最优解
xk
。
- 若
σkP~(xk)<ϵ
,则停止迭代,
xk
作为原问题的最优解;否则,令
σk+1=cσk
,
k:=k+1
,转至步骤2。
对于外罚函数的算法收敛性与外罚函数的病态性质这里不作讨论。 使用外罚函数法时,选取
σ1
过大,或者
σk
增长过快可以使算法快速收敛,但很难精确地求解相应的无约束极小问题;反之,可以使求得
P(x,σk+1)
的极小点变得容易,但收敛太慢。通常取
σk=0.1×2k−1
。
内罚函数法
在外罚函数法中,近似最优解一般只能近似地满足约束条件,对于某些实际问题这样的近似最优解释不可接受的。内罚函数法是一类保持严格可行性的方法。其基本思想是:严格要求迭代点在可行域内移动,当迭代点接近可行域边界时,有无穷大的障碍,迫使迭代点返回可行域的内部。
考虑不等式约束的优化问题,可行域内部记为:
D0={x∈Rn|ci(x)<0,i=1,2,…,l}
记
B(x)=−∑i=1lln(−ci(x))
定义如下形式的内罚函数:
P(x,r)=f(x)+rB(x)=f(x)−r∑i=1lln(−ci(x))
其中
r>0
是一参数。
显然,当
x
在可行域内部,
B(x)
为一正数,当
r
趋近于
0
时,
P(x,r)
的极小点就会趋近于优化问题的极小点。至少有一个
ci(x)
趋于
0
时,会导致
B(x)
剧烈增大,迫使极小点落在可行域的内部。于是,原优化问题就转化为一下形式的优化问题:
minP(x,r),x∈Rns. t. ci(x)<0,i=1,2,…,l
注意使用内罚函数时,可行域由
D
变成
D0
。内罚函数法简称内点法,
B(x)
为对数障碍函数。(这里不介绍倒数障碍函数,因其用得不多性质也不佳)
例 2:用内罚函数法求解约束问题
min{f(x)=x21+2x22}s. t. x1+x2−1≥0
解:构造内罚函数
P(x(r),r)=x21+2x22−rln(x1+x2−1)
利用解析法:
∇xP(x(r),r)=(2x1−rx1+x2−1,4x2−rx1+x2−1)T=0
得
x(r)=(1+1+3r−−−−−√3,1+1+3r−−−−−√6)T
令
r→0
,则
x(r)→x∗=(23,13)T,P(x(r),r)→f(x∗)=23
下面给出内罚函数法的算法,此处同样不讨论其收敛性和病态性质。
- 给定初始点
x0∈D0
,设
ϵ>0,0<c<1
为给定实数,选择正值序列
{rk}
使
rk→0
,令
k=1
。
- 以
xk−1
为初始点,求解约束优化问题
min{P(x,rk)=f(x)+rkB(x)}s. t. x∈D0
得到最优解
xk
。
- 若
rkB(xk)<ϵ
, 则停止迭代,
xk
作为原问题的最优解;否则,令
rk+1=crk
,
k:=k+1
,转至步骤2。
注意由于可行域发生了变化,内罚函数法不能处理等式约束问题。
乘子法
内外罚函数法的主要缺点是当罚函数中的
σ→+∞
或者
r→0
时,其Hesse矩阵出现病态,给无约束问题的数值求解带来很大困难。为克服这一缺点,本节介绍乘子法。乘子法的原理与二阶充分条件与Lagrange函数的性质有关,时间问题这里不做详细推导,仅给出定理。
等式约束问题的乘子法
定理:
设
x∗
,
λ∗
满足约束问题
minf(x),x∈Rns. t. ci(x)=0,i=1,2,…,l
的二阶充分条件,则存在
σ∗>0
,使当
σ≥σ∗
时,
x∗
是无约束问题
min{ϕ(x,λ∗,σ)=f(x)+∑i=1lλ∗ici(x)+σ2∑i=1lc2i(x)}
的严格局部解。反之,若
xk
是
ϕ(x,λ∗,σk)
的极小点,并且
c(xk)=0
,则
xk
是上述约束问题的最优解。
ϕ(⋅)
被称为增广Lagrange函数或乘子罚函数,
λ∗
实际上是最优解
x∗
处的Lagrange乘子。我们可以通过取一个适当大的
σ
,然后调整
λ
使它逐渐趋近于
λ∗
,就能得到约束问题的最优解,这是乘子法的基本思想。
下面给出具体迭代算法:
- 给定初始点
x0
,设初始乘子
λ1
,精度要求为
ϵ
,放大系数为
c
,选择序列
{σk}
,使
σk→+∞
,令
k=1
。
- 以
xk−1
为初始点,求解无约束优化问题
minxϕ(x,λk,σk)
得到最优解
xk
。
- 若
[∑li=1c2i(xk)]12≤ϵ
,则停止迭代,得到近似解
xk
;否则,转到步骤4。
- 令
λk+1i=λki+σkci(xk)
,
k:=k+1
,转到步骤2。
只有不等式约束时的乘子法
现在我们考虑只有不等式约束的问题:
minf(x),x∈Rns. t. ci(x)≤0,i=1,2,…,l
利用等式约束的结果,引入
松弛变量
zi
,将上述问题转化为等式约束问题
minf(x),x∈Rns. t. ci(x)+z2i=0,i=1,2,…,l
由于变量增加了,因此问题的维度由
n+l
变成
n¯+2l
。这使得问题变得复杂。为了克服此问题,我们可以先关于
z
求极小
z¯
,再将其代入原问题。此处同样不讨论具体细节。
下面给出具体算法:
- 给定初始点
x0
,设初始乘子
λ1
,精度要求
ϵ
,放大系数为
c
,选择序列
{σk}
,使
σk→+∞
,令
k=1
。
- 以
xk−1
为初始点,求解无约束规划问题:
minxϕ(x,λk,σk)
得到最优解
xk
。
- 若
{∑li=1[max(ci(xk),−λkiσk)]2}12≤ϵ
,则停止迭代,得近似解
xk
;否则,转至步骤4。
- 令
λk+1i=max{0,λki+σkci(xk)},k:=k+1
,转至步骤2。
一般问题的乘子法求解
对于一般约束优化问题:
mins. t. f(x)ci(x)=0,i∈E={1,2,…,l}ci(x)≤0,i∈I={l+1,l+2,…,l+m}x∈Rn
乘子罚函数为
ϕ(x,λ,σ)=f(x)+∑i=1lλici(x)+σ2∑i=1lc2i(x)+12σ∑i=l+1l+m{[max(0,λi+σci(x))]2−λ2i}
其乘子迭代公式为:
λk+1i=λki+σkci(xk),λk+1i=max{0,λki+σkci(xk)},i=1,2,…,li=l+1,l+2,…,l+m
终止准则为:
⎧⎩⎨∑i=1lc2i(xk)+∑i=l+1l+m[max(ci(xk),−λkiσk)]2⎫⎭⎬12≤ϵ
关于Lagrange乘子法更一般的介绍可参考此文。