Karush-Kuhn-Tucker 条件

Karush-Kuhn-Tucker (KKT) 条件,是判断一个点是否为约束优化问题最优解的必要条件。对于你刚才问的凸二次规划,它甚至是充分必要条件——满足了 KKT,就找到了全局最优解。


1. 它解决什么问题?

一般优化问题形式:

最小化  f(x)
满足   g_i(x) ≤ 0  (i=1,...,m)   —— 不等式约束
       h_j(x) = 0  (j=1,...,l)   —— 等式约束

KKT 条件把有约束的优化问题,转化成一个方程组/不等式组的求解问题。如果候选点 x* 是局部最优解,并且满足一定的“正则性条件”,那么必然存在乘子 μ_iλ_j,使以下条件成立。


2. KKT 条件(四个部分)

① 稳定性条件(梯度条件)

拉格朗日函数对变量 x 的梯度为零:

∇f(x*) + Σ μ_i ∇g_i(x*) + Σ λ_j ∇h_j(x*) = 0

这是“在约束边界上,目标函数的负梯度方向必须落在约束梯度张成的锥里”的数学表达。简单理解:在约束包围下,没有可行的下降方向了。

② 原始可行性

g_i(x*) ≤ 0,   h_j(x*) = 0

点必须在可行域内,这是基本要求。

③ 对偶可行性(乘子符号)

对于不等式约束的乘子:

μ_i ≥ 0

它保证约束形成的“推”力是朝向可行域内部的,而不是反向。

④ 互补松弛条件

μ_i · g_i(x*) = 0  (对每个不等式约束 i)

这意味着:

  • 如果约束生效g_i(x*) = 0,处于边界),乘子 μ_i 可以 > 0。
  • 如果约束未生效g_i(x*) < 0,在内部),乘子 μ_i 必须等于 0

它把“哪些约束真正在起作用”这件事自动编码到了乘子里。


3. 对凸二次规划的特殊之处

凸二次规划:

最小化  (1/2)xᵀQx + cᵀx
满足    Ax ≤ b
  • 目标函数是凸的(Q 半正定),约束是线性的。
  • 线性约束自动满足正则性条件,因此 KKT 条件是最优解的充分必要条件
  • 直接写出它的 KKT 系统:
Qx* + c + Aᵀμ = 0        (稳定性)
Ax* ≤ b                  (原始可行性)
μ ≥ 0                    (对偶可行性)
μᵀ(b - Ax*) = 0          (互补松弛)

这是一个混合线性互补问题,也是内点法、增广拉格朗日法等算法实际求解的系统。


4. 直觉理解:互补松弛是关键

想象一个简单的二次规划:

最小化  x²
满足    x ≥ 1
  • 无约束时,最优解是 x = 0
  • 加了 x ≥ 1 约束后,最优解是 x* = 1,约束生效。
  • 拉格朗日函数:L = x² - μ(x - 1)
  • KKT 条件:
    • 稳定性:2x - μ = 0μ = 2
    • 原始可行性:x ≥ 1
    • 对偶可行性:μ = 2 ≥ 0
    • 互补松弛:μ(x - 1) = 2 × 0 = 0

如果约束改成 x ≥ -5(不生效),最优解就是 x* = 0

  • 稳定性:2x - μ = 0μ = 0
  • 互补松弛:μ(x + 5) = 0 × 5 = 0
  • 乘子 μ 自动归零,约束“隐身”。

KKT 条件的精髓正在于此:它用乘子和互补松弛条件,优雅地区分了“起作用”和“不起作用”的约束。

posted @ 2026-05-26 21:40  AceFenix  阅读(56)  评论(0)    收藏  举报