关于Karush-Kuhn-Tucker(KKT)条件的分析
KKT条件是约束优化中非常关键的条件,与算法的设计和收敛性分析息息相关。
1. 拉格朗日乘子
我们以一类简单的问题做为讨论KKT条件的序言。一般来说,任何有个元素的变量和个等式约束的优化问题可以写成
接下来的讨论中,我们将假设问题中所涉及的任何函数都是可微的,并且这些结果的大多数都存在次梯度版本。
这个问题的拉格朗日松弛为:
这里的个新的被称为拉格朗日乘子(在线性规划中,这些是对偶变量)。我们可以把这看作是消除了约束,但是给目标增加了惩罚成本。如果任一项,我们就会产生一个单位的惩罚成本。如果仔细选择这个惩罚成本,松弛问题的解将与原问题的解完全相同。
1.1 推导
我们推导二维问题的拉格朗日乘子法
是水平集(无数条等值线)上特殊的一条曲线,即可行域。我们可以将二维平面上的水平集以及的水平集想象成参数曲线。我们的目标是在曲线上找到到达可能的最低水平集的点.想象:沿着走,观察的值是如何变化的。为了使到达最小,在这条曲线上必须有某个点,它的值暂时不会改变。这种情况的发生可能有两个原因:要么与的等式线相切,要么本身变平了(梯度为0)。为了检查是否与的等值线相切(在处),由于梯度与的等值线相互正交。如果与的等值线相切,则意味着的梯度应该是的梯度的标量倍,即应该有一个常数,使得
这个条件对是平坦的也成立,因为此时可以用。现在我们只是找到了某个点是原问题的一个最优解的必要条件
且
这两个条件分别是稳定性和可行性。
我们将这些合并到一个方程中,定义拉格朗日函数
求解
这封装了我们对解的稳定性和可行性的要求。类似地,可以把这个结论推广到一般的情形。
2. KKT条件
KKT条件是拉格朗日乘子法的推广,它给出了包含等式约束和不等式约束系统的最优性的一组必要条件。假设我们有一个涉及个等式约束,个不等式约束的优化问题。这样的问题具有一般的形式
同样地,我们通过消除约束,并且为每个约束添加惩罚成本来形成一个松弛问题
现在,每一个等式约束有一个乘子, 每个不等式约束都有一个乘子,这些乘子被称为KKT乘子。
拉格朗日乘子法的许多推理在这里仍然适用。我们可以将上面的目标定义为拉格朗日函数我们发现最优性的必要条件包括:(稳定性),(等式约束的可行性);然而这里我们没有必要让,因为它为,这就强迫,只给了我们部分解。因此,我们不能简单地说,我们需要额外的信息来确定乘子组的值。
注意到,在前一节中,没有对的符号添加约束。我们将会发现,在不等式约束的情形,的符号非常重要,所以要非常小心。
2.1 推导
从考虑简化的二维系统开始
只涉及不等式约束。同样地,我们可以想象:在平面上的水平集,约束定义了平面内的一个区域。最优解有两种可能:要么它完全位于可行域内部,此时且处于极值;要么它位于边界上,此时,且的边界与的等值线相切。
如果最优解出现在,则不等式约束对问题没有影响,可以忽略;否则,。在这两种情况下,对某个必须满足约束,即要么,在这种情况下,的值无关紧要;要么,在这种情况下,必须等于,这就是互补松弛条件。
然而,我们必须考虑的正负号。我们的目标是能够使用这个变量做为松弛问题的目标的一部分
和前面一样,最优性需要这个表达式在处是平稳的,如果我们有
则这是正确的。把它重新排列,得到
回想一下,函数的梯度是目标函数值上升最快的方向。对于,由于区域的边界是由确定,而内部是由定义,这意味着我们沿着的梯度方向向可行域内部移动时,必须减小,即的梯度应该指向区域外。这与的梯度方向是相反的。所以和,k=1,2 必有相反的符号。故总是正的。
同时,我们还要注意到,对于, 的梯度应该指向区域的外部,那么与有相同的方向,这将迫使。我们把这个做为一个替代约束,但是按照惯例,我们仍然要求,并且简单地改变拉格朗日中惩罚项的符号,得到
2.2 一般的结果
它的KKT条件是任何最优解必须满足的一组必要条件。具体地,必须存在乘子和满足下列条件;
(1) 稳定性
如果 minimization
如果 maximization
(2)原始可行性
(3)对偶可行性
(4)互补松弛条件
注意:这并不适用于所有规划,这意味着存在某些优化问题,其中对于给定的最优解,不存在任何满足KKT条件的乘子和。为了使解存在,,和必须满足一定的正则性条件。已知有几大类约束总是满足这些条件。
(1)如果所有的和都是仿射的,我们就自动有了正则性。
(2)满足Slater条件的函数,它要求是凸规划的。
(3)对于满足连续可微的正则性条件的凸规划,KKT条件是全局最优解的充分必要条件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!