内点法
前面的梯度下降和newton法都是针对无约束的,那么对于有约束的凸优化问题,怎么搞?内点法,对于一般的LP和QP效果都不错
所谓内点,就是指迭代的点在约束的内部的方法。
障碍函数法
考虑凸优化问题
minf0(x)s.t.fi(x)≤0Ax=b
所有函数都是二阶可导的凸函数。首先把不等约束条件干掉,引入惩罚函数,即在优化目标中加入I−(u),他的思路是如果u≤0,那么满足约束不应该影响优化,而如果超过0那应该非常巨大从而惩罚优化目标。
但是为了保证可导,惩罚函数采用如下近似−log(−u)/t,t越大越陡峭。此时优化问题变成了
minf0(x)+i∑−log(−fi(x))/tAx=b
此时,每确定一个t,就能求出一个严格可行的解(严格可行是因为log的定义域不能取0)。这一系列的解x∗(t)称为central path。
根据KKT条件,这些最优解满足
t∇f0(x∗(t))+i∑−fi(x∗(t))1∇fi(x∗(t))+ATv=0
即
∇f0(x∗(t))+i∑−tfi(x∗(t))1∇fi(x∗(t))+ATv/t=0
从形式上,如果令λi∗(t)=−tfi(x∗(t))1,v∗=v/t,那么就恰好是不带惩罚函数的那个最原始问题的拉格朗日函数∇L=0的方程。而此时x的取值刚好是x∗(t),所以x∗(t)带入时的L函数就是infL,因此λ∗,v∗是最原始问题dual问题的可行解。所以把λi∗,v∗带入原始问题的g函数,即L(x∗(t),λi∗(t),v∗),λ∗刚好消去了不等约束的函数,后面那一项始终为0,所以g=f0(x∗(t))−m/t(m是不等约束的个数)
由弱对偶性:g=f0(x∗(t))−m/t≤p∗,因此f0(x∗(t))−q∗≤m/t。随着不断迭代,可以得到最优解。
实际算法就是从一个初始t>0开始。不断增长t=ut,每确定一个t就求一次,内部一般用newton法求解,u的典型值在10~20,t的典型值在1-5。u越大,t增长的数量少,但是内层newton迭代多,所以也是一个tradeoff。
原始对偶法
对于线性问题
mincTxs.t.Ax=b,x≥0
其对偶问题为
min−bTvAvT+λ+c=0λ≥0
KKT条件为
ATv+λ+c=0Ax=bλx=0λ≥0x≥0
上述方程组因为λx这个二次项存在,所以需要用newton法求,但直接求约束太强了,所以松弛λx=0的条件,为λx=μ,然后逐步减少μ。这个方法不是每确定一个μ就重新求一次,而是每迭代一次就更换一个μ,然后重新求方程组。
这个方法的原理就是从L=cx−∑xiλi−vT(Ax−b)来看,控制第二项为μ逐渐减小。其实有μ=m/t,都是对偶间隙。