来源:https://zhuanlan.zhihu.com/p/26514613
0.什么是KKT条件
本文从本科高数(微积分)中的有条件极值的Lagrange乘数法入手,一步步推导到KKT条件. 但在讲述推导过程之前,我想先给出KKT条件:
对于具有等式和不等式约束的一般优化问题
KKT条件给出了判断是否为最优解的必要条件,即:
1. 等式约束优化问题(Lagrange乘数法)
对于这部分内容,其实本科高数课程中已学过,因此本文直接给出结论,并补充一些我的理解与总结,它能帮助理解不等式约束中的一些内容,具体的推导过程在同济7版的高数下册(P.116-118)中已写的较详细。
所谓的等式约束优化问题是指
我们令,函数称为Lagrange函数,参数称为Lagrange乘子.
再联立方程组:,
得到的解为可能极值点,由于我们用的是必要条件,具体是否为极值点需根据问题本身的具体情况检验. 这个方程组称为等式约束的极值必要条件.
上式我们对个和个分别求偏导,回想一下在无约束优化问题中,我们根据极值的必要条件,分别令,求出可能的极值点. 因此可以联想到:等式约束下的Lagrange乘数法引入了个Lagrange乘子,或许我们可以把也看作优化变量(就叫做优化变量). 相当于将优化变量个数增加到个,与一视同仁,均为优化变量,均对它们求偏导.
2. 不等式约束优化问题
以上我们讨论了等式约束的情形,接下来我们来介绍不等式约束的优化问题.我们先给出其主要思想:转化的思想——将不等式约束条件变成等式约束条件.具体做法:引入松弛变量.松弛变量也是优化变量,也需要一视同仁求偏导.
具体而言,我们先看一个一元函数的例子:
(注:优化问题中,我们必须求得一个确定的值,因此不妨令所有的不等式均取到等号,即的情况.)
对于约束和,我们分别引入两个松弛变量和,得到和.注意,这里直接加上平方项、而非、,是因为和这两个不等式的左边必须加上一个正数才能使不等式变为等式.若只加上和,又会引入新的约束和,这不符合我们的意愿.
由此我们将不等式约束转化为了等式约束,并得到Lagrange函数
我们再按照等式约束优化问题(极值必要条件)对其求解,联立方程
(注:这里的,先承认,我们待会再解释!(先上车再买票,手动斜眼)实际上对于不等式约束前的乘子,我们要求其大于等于0)
得出方程组后,便开始动手解它. 看到第3行的两式和比较简单,我们就从它们入手吧~
对于,我们有两种情况:
情形1:
此时由于乘子,因此与其相乘为零,可以理解为约束不起作用,且有.
情形2:
此时且 ,可以理解为约束起作用,且有.
合并情形1和情形2得:,且在约束起作用时,;约束不起作用时,.
同样地,分析,可得出约束起作用和不起作用的情形,并分析得到.
由此,方程组(极值必要条件)转化为
这是一元一次的情形.类似地,对于多元多次不等式约束问题
我们有
上式便称为不等式约束优化问题的KKT(Karush-Kuhn-Tucker)