KT 很简单,口诀记心端,等式求最优,不等式验证——小飞打油
以后每期尝试编一句口诀,帮助大家记忆,可以是打油诗,也可以是类似“奇变偶不变,符号看象限”的口诀,如果编的不好,也欢迎大家评论区帮我指正,感谢~。
一、前沿:什么是KKT
KKT条件(Karush–Kuhn–Tucker conditions)是最优化(特别是非线性规划)领域最重要的成果之一,是判断某点是极值点的必要条件。
可理解好它需要用到梯度、松弛变量、对偶理论等知识,因此我也深知,想讲好KKT条件是具有一定难度的。
我尝试分两部分讲解,第一部分侧重于理论部分,第二部分给出运用KKT条件进行数值和符号运算的Matlab代码。基于此,大家可以非常方便地应用于自己的论文写作。
在介绍KKT条件之前,先补充些基础知识。
1. 何谓最优化问题:
要选择一组参数(变量),在满足一定的限制条件(约束)下,使设计指标(目标)达到最优值。
根据定义,请问前两期的古诺模型和Stackelberg模型是最优化问题吗?答案是肯定的,只不过它们均没有约束,直接对决策变量求导便能得到最优值。
进一步,根据有无约束以及约束特征,可以将最优化问题分为以下三类,每类问题的求解方法也紧跟着列出。
2. 最优化问题分类:
无约束优化问题 :直接求导、最速下降法、共轭梯度法、牛顿法等;
等式约束优化问题:拉格朗日(Lagrange)乘数法;
不等式约束优化问题 :KKT条件。
大家做科研时也要分清楚自己的问题属于哪一类,然后运用对应的求解方法。
以上知识点在本科的《运筹学》和《高等数学》课程中均学过。前两类相对简单,如果需要,欢迎评论或者后台告知我,以后专门出几期讲解。
至于KKT条件,我深知大家会被课本上复杂的数学公式劝退,即使考前重温,过段时间又会忘。
所以,本文不先从那些复杂公式入手,而是以我的理解,带大家一起探索下Karush–Kuhn–Tucker这三个人,是如何发现并总结出KKT条件的。
我写的每篇文章都尽力做到让大家读完后能有“这也不难嘛”的感受,也希望读完本文后,能永久记住(即使忘了也能重新推导出来)KKT条件。
注:以下默认大家已了解拉格朗日乘数法(知道其数学形式就行,不用知道原理)
二、KKT条件理论部分
该部分先介绍KKT条件的核心思想,即λg(X*)=0公式的由来;再解释为什么课本上的数学公式长那样,最后再针对性地给出一些补充说明和数学证明。
1. KKT条件核心思想
时光倒流,假设你是还没提出KKT条件的Karush本人,面对不等式约束优化问题,会如何思考呢?
先观察下仅含有一个不等式约束的优化问题:
注:如果是最大化问题,即 maxf(X),约束改写为 g(X)≥0的形式(原因后文会解释)。
既然默认还不知道KKT条件,所以目前咱么还不会解决该问题。但不急,想想咱们会啥?会求求导数,同时也会等式约束下的拉格朗日乘数法啊。
一步步来,先对f(X)函数求导吧(若X多维则是求梯度),即先不考虑g(X)≤0这个约束。
毕竟求导或求梯度,Karush和你都是会的。此时会得到“使f(X)取最小值时的最优X*”,进一步,如果将其值X*带入约束g(X),无非就以下三种情况。
(1)g(X*)<0
那正好满足约束,X*就是我们要找的最优解。
猛然发现,此时该约束完全不起作用啊(称为不起作用约束),毕竟我们计算X*时压根都没考虑它。
(2)g(X*)=0
也就是最优解X*正好也让约束取了等号。
这咱们也熟啊,这不转化为含有等式约束的优化问题了嘛。如何求解?拉格朗日乘数法啊,安排~
(3)g(X*)>0
显然此时的X*不满足约束,应舍弃。
但这并没有结束,我们需要给出一个解,那此时大家觉得X*会在哪?很简单,无非又变回了情形(1)或(2)。
综上,我们只需要分情况讨论清楚若g(X*)<0和若g(X*)=0时,应该如何求解即可。
一通分析下来,大家或许此时感觉自己好像已经会了,不就是:
若g(X*)<0,约束不起作用,该问题转化为 无约束优化问题求解;
若g(X*)=0,引入拉格朗日乘子λ,采用 拉格朗日乘数法求解嘛,其间,构造的 拉格朗日函数如下(这是拉格朗日乘数法的知识,不了解的同学可以自行简单重温下)。
理确实是这么个理,但人家数学家追求的是能否有个统一的形式来求解?这样分类讨论可不那么高大上啊。
既然都已经引进拉格朗日乘子λ了,那也得想办法使得在g(X*)<0情形下,也要与λ有点关系。
考虑到若g(X*)<0,此时该约束不起作用,而已经构造好的拉格朗日函数中又有λ,怎么办?
很简单,让拉格朗日函数中的λ=0即可!此时拉格朗日函数可不就简化为L(x, λ)=f(X)了嘛。此时对L(x, λ)求导(等价于对f(X)求导)时既不用管约束,也没有λ的干扰,简直完美。
汇总一下就是:
(1)若g(X*)=0,引入拉格朗日乘子λ,并要求λ≥0;
(2)若g(X*)<0,要求λ=0。
那怎么统一呢?数学家灵魂附体!脑袋一拍,含泪发现,这不就可以采用λg(X*)=0的形式统一了嘛。
恭喜你,你代替Karush本人提出了λg(X*)=0!而这,就是KKT条件的精髓。
是不是有点难以置信,但确实,KKT条件的核心思想和公式其实已经讲完了。
不复杂吧,基础思想确实是很简单的,毕竟早在1939年,Karush在其硕士学位论文里就已经给出了KKT条件。硕士生啊,哎,差距。
2. KKT条件的数学公式
掌握了思想,便可以更好地看懂课本上的公式了。
还是由简到难,先给出仅含有一个不等式约束的KKT条件。
这里还需要借助上一部分给出的拉格朗日函数来理解。
简单分析公式(1)-(4)可知:
式(1):对拉格朗日函数求梯度(若X一维就是求导),其中,下三角表示梯度;
式(2):核心公式,要么λ=0,要么g(X*)=0(此处要求两者不能同时为0);
式(3):拉格朗日乘子λ必须是正的(下一部分的图示法有证明);
式(4):原问题自己的约束。
可见,式(1)和(2)都是等式,可以帮助我们求最优X*和λ,因为式(2)要分类讨论,所以可能存在多个X*和λ;式(3)和(4)主要起验证作用,帮助我们排除掉一些不满足式(3)和(4)的X*和λ。
具体地,在应用KKT条件计算时,通常也是分类讨论后先求解X*和λ,再验证