有约束的优化问题求解——Karush-Kuhn-Tucker (KKT)条件


前言:由于本科学习的数理知识较为基础,没有涉及到优化问题相关知识,在遇到优化问题时,满脸问号这是个啥子嘞?相信很多小伙伴也有和我一样的感受。在网上一顿神搜索,又查阅了相关的书籍,终于有了一点感悟。由于网上相关的知识较为零碎,我将其整理了一下,一是作为学习笔记,二是方便后面的小伙伴们学习。

Karush-Kuhn-Tucker (KKT)条件是非线性规划(nonlinear programming)最佳解的必要条件。KKT条件将Lagrange乘数法(Lagrange multipliers)所处理涉及等式的约束优化问题推广至不等式。在实际应用上,KKT条件(方程组)一般不存在代数解,许多优化算法可供数值计算选用。

1.等式约束优化问题

给定一个目标函数,在满足约束条件的前提下,使得目标函数有最小值。这个约束优化问题记为:

此时Lagrange乘数法是等式约束优化问题的典型解法,定义Lagrangian函数为

Lagrange乘数法将原本的约束优化问题转换成等价的无约束优化问题:

最优解的必要条件:

求解以上n+1个方程组,可得到在约束条件下的目标函数的最优解以及乘子的值。

2.不等式约束优化问题

接下来我们将约束等式推广到不等式的条件下,可得到新的问题:

约束不等式称为原始可行性(primal feasibility),为满足约束条件的最佳解,分开两种情况讨论:

这两种情况的最佳解具有不同的必要条件。

整合上述两种情况,最佳解的必要条件包括Lagrangian函数的定常方程式、原始可行性、对偶可行性,以及互补松弛性。

KKT条件包括:

3.不等式约束与等式约束的优化问题

对于上面的等式约束结果与不等式约束结果可推广至多个约束等式与约束不等式的情况。考虑标准约束优化问题(或称非线性规划):

定义Lagrangian 函数:

则KKT条件包括:

4.对于求最大值的情况补充

由于最优化问题的标准形式是以目标函数的最小值形式,如果要求目标函数的最大值时,需要做一点变换。

preview

无论求最大值和最小值都需要引入拉格朗日乘子,求最小值时把约束条件写成小于等于0的形式,求最大值时把约束条件写成大于等于0的形式。在对于求解约束条件是变量的正负数约束的一类问题,可以不需要引入拉格朗日乘子,直接用KKT条件进行求解。例如:

求解目标函数最大值,即KKT条件为:

5.具体算例

考虑这个问题:

经过以上的整理以及算例分析,相信小伙伴们都可以很好的理解KKT条件啦。

6.参考

部分内容转载来自:https://zhuanlan.zhihu.com/p/38163970

李学文 闫桂峰 李庆娜:《最优化方法》