05 内点法

61 阅读2分钟

内点法

前面的梯度下降和newton法都是针对无约束的,那么对于有约束的凸优化问题,怎么搞?内点法,对于一般的LP和QP效果都不错

所谓内点,就是指迭代的点在约束的内部的方法。

障碍函数法

考虑凸优化问题

minf0(x)s.t.fi(x)0Ax=b\min f_0(x) \\ s.t. f_i(x) \le 0 \\ Ax=b

所有函数都是二阶可导的凸函数。首先把不等约束条件干掉,引入惩罚函数,即在优化目标中加入I(u)I_-(u),他的思路是如果u0u\le 0,那么满足约束不应该影响优化,而如果超过0那应该非常巨大从而惩罚优化目标。

但是为了保证可导,惩罚函数采用如下近似log(u)/t-\log(-u)/t,t越大越陡峭。此时优化问题变成了

minf0(x)+ilog(fi(x))/tAx=b\min f_0(x) + \sum_i -\log(-f_i(x))/t \\ Ax=b

此时,每确定一个t,就能求出一个严格可行的解(严格可行是因为log\log的定义域不能取0)。这一系列的解x(t)x^*(t)称为central path。

根据KKT条件,这些最优解满足

tf0(x(t))+i1fi(x(t))fi(x(t))+ATv=0t\nabla f_0(x^*(t))+\sum_i \frac{1}{-f_i(x^*(t))}\nabla f_i(x^*(t))+A^Tv=0

f0(x(t))+i1tfi(x(t))fi(x(t))+ATv/t=0\nabla f_0(x^*(t))+\sum_i \frac{1}{-tf_i(x^*(t))}\nabla f_i(x^*(t))+A^Tv/t=0

从形式上,如果令λi(t)=1tfi(x(t)),v=v/t\lambda_i^*(t)=\frac{1}{-tf_i(x^*(t))}, v^*=v/t,那么就恰好是不带惩罚函数的那个最原始问题的拉格朗日函数L=0\nabla L=0的方程。而此时x的取值刚好是x(t)x^*(t),所以x(t)x^*(t)带入时的L函数就是infL\inf L,因此λ,v\lambda^*, v^*是最原始问题dual问题的可行解。所以把λi,v\lambda_i^*,v^*带入原始问题的gg函数,即L(x(t),λi(t),v)L(x^*(t), \lambda_i^*(t), v^*)λ\lambda^*刚好消去了不等约束的函数,后面那一项始终为0,所以g=f0(x(t))m/tg=f_0(x^*(t))-m/t(m是不等约束的个数)

由弱对偶性:g=f0(x(t))m/tpg=f_0(x^*(t))-m/t\le p^*,因此f0(x(t))qm/tf_0(x^*(t))-q^*\le m/t。随着不断迭代,可以得到最优解。

实际算法就是从一个初始t>0t>0开始。不断增长t=ut,每确定一个t就求一次,内部一般用newton法求解,u的典型值在10~20,t的典型值在1-5。u越大,t增长的数量少,但是内层newton迭代多,所以也是一个tradeoff。

原始对偶法

对于线性问题

mincTxs.t.Ax=b,x0\min c^T x \\ s.t. Ax=b, x \ge 0

其对偶问题为

minbTvAvT+λ+c=0λ0\min -b^T v \\ Av^T+\lambda +c =0 \\ \lambda \ge 0

KKT条件为

ATv+λ+c=0Ax=bλx=0λ0x0A^Tv +\lambda + c=0 \\ Ax=b \\ \lambda x=0 \\ \lambda \ge 0 \\ x \ge 0

上述方程组因为λx\lambda x这个二次项存在,所以需要用newton法求,但直接求约束太强了,所以松弛λx=0\lambda x=0的条件,为λx=μ\lambda x=\mu,然后逐步减少μ\mu。这个方法不是每确定一个μ\mu就重新求一次,而是每迭代一次就更换一个μ\mu,然后重新求方程组。

这个方法的原理就是从L=cxxiλivT(Axb)L=c^x-\sum x_i\lambda_i-v^T(Ax-b)来看,控制第二项为μ\mu逐渐减小。其实有μ=m/t\mu=m/t,都是对偶间隙。