罚函数、增广拉格朗日函数


[toc]

罚函数

罚函数法定义:将约束最优化问题转化为无约束最优化问题去求解

等式约束问题

对于约束问题

定义罚函数为

其中$\large{\sigma}$是惩罚因子,$\large{F(x,\sigma)}$是罚函数,$\large{\sigma{P(x)}}$是惩罚项

该罚函数的特点:对非可行点,当$\large\sigma$变大时,惩罚项在罚函数的比重加大,对罚函数求极小相当于使极小值点向可行域靠近。简单的说就是只要你没得到可行解,惩罚项就会越来越大,对罚函数求极小就会迫使所求的x点向极小值点靠近来让惩罚项下降

不等式约束问题

对于约束问题

当$\large h_i(x)\geq0$时,惩罚项为0;当x不在可行域时,$\large h_i(x)<0$,所以我们用$\large{min\{h_i(x),0\}}$来分辨x是否在可行域。如果不在,我们还需要加大惩罚因子

所以我们定义惩罚项为$\large P(x)=\sigma{\sum_{i\in{I}}[min\{h_i(x),0\}]}^2$,

一般形式约束问题

对于约束问题

则罚函数为$\large{P(x)=\sum_i[g_i(x)]^2 + \sum_j[min\{0,h_j(x)\}]^2}$

特别注意:惩罚因子是充分大的数,拉格朗日乘子是一个确定的参数,意义不一样

增广拉格朗日

定义:增广拉格朗日就是在拉格朗日函数上增加一个惩罚项

等式约束

其增广拉格朗日函数为:$\large{\phi(x,\lambda,\sigma)=f(x)+\lambda^T{g(x)}+\frac{1}{2}\sigma{g^T(x)g(x)}}$,其中惩罚因子前的1/2只是为了求导方便

令$\large{\nabla_x\phi(x_k,\lambda_k,\sigma_k)}=0$

得到

其中对惩罚项的导数为

令$\large{\lambda_{k+1}=\lambda_k+\sigma_kg(x_k)}$,得到$\large{\nabla_xf(x_k)+\lambda_{k+1}\nabla_x{g^T(x_k)}=0}$

不等式约束

引入松弛变量a,使得$\large{h_i(x)-a=0}(a\ge0)$

则原问题化为

消除松弛变量a,得到

当x确定时,求a的最小值,此时与a无关的因为不会影响可以忽略掉

当$\large{\sigma{h_i(x)}+\lambda\ge0}$时,也就是$\large{a={h_i(x)}+\frac{\lambda}{\sigma}}$,带入(2)式得到

当$\large{\sigma{h_i(x)}+\lambda<0}$时,$\large{a=0}$,带入(2)式,得到

综上所述:

最后令梯度为0就能求得最优解