如何解决 Multi-Variable Constrained Optimization?
一种方法是把一个 Constrained Porblems 转化成 a sequence of Unconstrained Problems → Sequential Unconstrained Minimization Techniques (SUMT).
另一种方法是在迭代过程中直接将约束纳入考量,于是迭代结束时约束满足且为最小值点 → Primal Methods
Converting Methods: Exterior Penalty Function Method
我们在原 objective function f 上加上 penalty function P,构造出新目标函数 ϕ
ϕ(x,rp)=f(x)+rpP(x)其中 rp 是 penalty 的系数用以控制 penalty 的强度。我们令 P 采取下面这样的形式
P(x)=j=1∑m[max(0,gj(x))]2+k=1∑lhk2(x)
为什么 hk2(x) 是平方项?
因为我们想让 hk(x) 保持严格为 0,小于 0 和大于 0 在平方之后都会变成 >0 的值,这样就可以优化了。
为什么 [max(0,gj(x))]2 要取 max?为什么要取平方?
取 max 是因为 gj(x)≤0 是不等式约束,只要在 gj(x)>0 时才会产生 penalty,所以需要和 0 取 max.
取平方是因为考虑 x=x0 使得 gj(x0)=0,我们发现在这一个点 max(0,gj(x)) 这个函数是不可导的,所以加上平方之后在该点处就可导了。
迭代策略
rp 的选取
如果 rp 较小,很有可能 ϕ() 取到最小值的解不满足约束条件;但是如果 rp 太大,也会造成数值计算困难等问题
这个 Method 先从较小的 rp(0) 初值开始,优化函数 ϕ(x,rp(0)) 在下一步迭代开始时,rp 会乘上一个倍率
rp(t+1)←γrp(t)然后去优化函数 ϕ(x,rp(t+1)). 重复迭代直到相邻两次迭代得到的最小值小于误差,并且每一个约束是否被满足(需要小于给定误差)
f(x(t+1))−f(x(t))<ϵfgj(x)≤ϵg∣hk(x)∣≤ϵh Generalized Reduced Gradient (GRG) Method
使用 slack variable 将不等式约束转化为等式约束,于是约束可以表示成如下的形式
gj(x)+sj=0,hk(x)=0,xil≤xi≤xiu,sj≥0,j∈[1,m]k∈[1,l]i∈[1,n]j∈[1,m]
和 Lagrange 方法不同,我们添加的不是 sj2 项而是 sj 项,而且额外添加 sj≥0 约束
更进一步地,我们把 sj 也看作是 x 的一部分,sj≥0 视作 0≤sj≤∞,那么 gj(x)+sj=0 也可以看作是 h(x′)=0,于是上面的约束可以写成
hk(x)=0,xil≤xi≤xiu,k∈[1,m+l]i∈[1,n+m]m+l 个等式可以消除 m+l 个变量,于是还剩下 (n+m)−(m+l)=n−l 个独立变量 (non-basic variables),我们令 non-basic 的为 y,basic 的为 z,故
x={yz}所以这个问题对于 y 来说就变成了 unconstrained problem(只有定义域约束,可以在优化过程中直接检查解的合法性)。我们从 initial point 开始,保证每一步移动都在 feasible region 内即可。
梯度推导
每一步的移动既要满足在定义域内,又要满足保持 hk(x)=0. 而在曲线上移动一小段距离即为
Δhk(x)=∇hk(x)TΔx代入 x=[yz]T 并对两部分分别求偏导
⟹∇yhk(x)TΔy+∇zhk(x)TΔz=0所以一共有 m+l 个这样的矩阵等式,可以合并为一个等式
⟹AΔy+BΔzΔz=0=−B−1AΔy所以 f(x) 的变化量为
f(x)=∇f(x)Δx=∇yf(x)TΔy+∇zf(x)TΔz=∇yf(x)TΔy−∇zf(x)TB−1AΔy=(∇yf(x)T−∇zf(x)TB−1A)Δy=(∇yf(x)−(B−1A)T∇zf(x))TΔy=(dydf(x))TΔy其中 dydf(x) 是一个记号,称为 Generalized reduced gradient.