https://blog.csdn.net/lijil168/article/details/69395023
http://www.math.ubc.ca/~israel/m340/kkt2.pdf
http://www2.imm.dtu.dk/courses/02711/lecture3.pdf
http://www.onmyphd.com/?p=kkt.karush.kuhn.tucker
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。
一般情况下,最优化问题会碰到一下三种情况:
(1)无约束条件
这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。
(2)等式约束条件
使用拉格朗日乘子法。
当个等式约束,时,求的最优解。——这就是原问题
等价表达式为:
——这就是原问题
其中,表示最优化,可能是最小化min,或最大化max;表示subject to ,“受限于”的意思;为目标函数(不是原问题,不是原函数);是约束项。写成约束的形式更专业,但是还是题目描述的好理解。
拉格朗日乘子法定义:对于目标函数以及个约束条件,拉格朗日乘子法为每个约束条件添加一个“乘子”:
(1)如果对目标函数求最小化即
那么得到拉格朗日函数:
其中
(2)如果对目标函数求最大化即
那么得到拉格朗日函数:
其中
上面两种情况是可以通过对和取负互相转换。下面只就第(1)种情况进行讨论。
上面两种情况用拉格朗日乘子法对偶问题来解释。
对于第一种情况,如果对目标函数求最小化即是凹函数,那么对求最小值等同于,而可分为两部分,第一部分即目标函数,第二部分为带有“乘子”的约束部分;容易看出第一部分不包含,所以也可以分成两部分优化:
基于公式(1),可以用来表示,那么拉格朗日函数就变成了一个关于的函数,记为:——该函数就是拉格朗日函数的对偶函数。所谓对偶函数就是求拉格朗日函数的最优解等价于求对偶函数的最优解,求得之后基于公式(1),就可以求得。
对对偶函数求最优解,也是对求偏导,并令其为0:
...
最终我们可以得到对偶函数的个最优解,进而得到拉格朗日函数的最优解,再将带入目标函数即可得到的最优解。
由求带约束的目标函数的最优解 求拉格朗日函数的最优解求拉格朗日函数的对偶函数的最优解,再将最优解回溯回去。
练一练:已知,求的最大值?
上面的问题,可以写成
思路:基本不等式、三角换元都太麻烦。用拉格朗日乘子法(也叫拉格朗日乘数法)来解决。
将等式约束下的目标函数转化成拉格朗日函数:
这里只有一个约束项。
要求解的最优解,即对求偏导,并使结果为0:
可以求得
也就是说当时,目标函数取得最大值,即
利用GeoGebra 软件进行验证,如图所示:
(3)不等式约束条件
当个不等式约束,时,求的最小值。
等价表达式为:
采用拉格朗日乘子法会为每一个不等式约束分配一个“乘子”,于是有拉格朗日函数:
其中不等式约束的“乘子””。
KKT条件是说,的最优解一定同时满足如下条件:
要同时满足第6、7个条件,那么就是要么,要么,或和都为0——这就是KKT所带来的重要结论。
练一练:
1、将上面的约束项变形如下:
2、拉格朗日函数为:
最优化拉格朗日函数
对求偏导:
那么
对求偏导:
那么
将带入到中得到的是之关于的函数,该函数是的对偶函数。
(4)既有等式约束条件又有不等式约束条件
使用拉格朗日乘子法结合KKT条件。
当个等式约束,;个不等式约束,时,求的最小值。
等价表达式为:
采用拉格朗日乘子法会为每一个等式约束分配一个“乘子”,也为每一个不等式约束分配一个“乘子”,于是有拉格朗日函数:
其中等式约束的“乘子””;不等式约束的“乘子”。
KKT条件是说,的最优解一定满足如下条件: