934 字
5 分钟
拉格朗日对偶和KKT 条件
2026-05-05
无标签

拉格朗日函数并没有“消灭约束”,而是把“是否违反约束”转化成了 “代价惩罚”

对于原问题,其约束可以看作一种“硬性约束”,如果不满足就直接不可行

minf0(x)s.t.gi(x)0,i=1,,mhj(x)=0,j=1,,p\begin{aligned} \min \quad & f_0(x) \\ \text{s.t.} \quad & g_i(x) \le 0, \quad i = 1, \dots, m \\ \quad & h_j(x) = 0, \quad j = 1, \dots, p\\ \end{aligned}

引入拉格朗日乘子 λi0\lambda_i \geq 0 (这个大于等于零很关键) 和 μj\mu_j ,构造拉格朗日函数,约束不再显式限制 xxxx 可以是任意的(无约束)

但:如果违反约束 → 代价 LL 会变大

L(x,λ,μ)=f0(x)+i=1mλigi(x)+j=1pμjhj(x)L(x, \lambda, \mu) = f_0(x) + \sum_{i=1}^m \lambda_i g_i(x) + \sum_{j=1}^p \mu_j h_j(x)

约束被吸收为惩罚,关键在于 λi0\lambda_i \geq 0μj\mu_j , μj\mu_j 没有符号限制

对于不等式约束 gi(x)0g_i(x) \le 0 ,分情况如下:

  1. 满足约束
    • gi(x)0g_i(x) \le 0λigi(x)0\lambda_i g_i(x) \le 0L(x,λ,μ)f0(x)L(x, \lambda, \mu) \le f_0(x)
    • 约束满足时,拉格朗日函数的值不会超过原问题的目标函数值。
  2. 不满足约束
    • gi(x)>0g_i(x) > 0λigi(x)>0\lambda_i g_i(x) > 0L(x,λ,μ)>f0(x)L(x, \lambda, \mu) > f_0(x)
    • 约束违反时,拉格朗日函数的值会超过原问题的目标函数值。

对于等式约束 hj(x)=0h_j(x) = 0,分情况如下:

  1. 满足约束
    • hj(x)=0h_j(x) = 0μjhj(x)=0\mu_j h_j(x) = 0L(x,λ,μ)=f0(x)L(x, \lambda, \mu) = f_0(x)
    • 约束满足时,拉格朗日函数的值等于原问题的目标函数值。
  2. 不满足约束
    • hj(x)>0h_j(x) > 0μj>0\mu_j > 0μjhj(x)>0\mu_j h_j(x) > 0L(x,λ,μ)>f0(x)L(x, \lambda, \mu) > f_0(x)
    • hj(x)<0h_j(x) < 0μj<0\mu_j < 0μjhj(x)>0\mu_j h_j(x) > 0L(x,λ,μ)>f0(x)L(x, \lambda, \mu) > f_0(x)
    • 约束违反时,无论 hj(x)h_j(x) 是正还是负,只要 μj\mu_j 的符号与 hj(x)h_j(x) 的符号相同,拉格朗日函数的值都会超过原问题的目标函数值。

这里还有一种理解思路: alt text

“原问题最优解 + 对偶结构成立”的必要条件:KKT 条件#

KKT 条件是优化问题为 强对偶问题 的必要条件。KKT条件不是“拉格朗日函数最优的条件”,而是“原问题最优解必须满足的一组( x,λ,μx^*, \lambda^*, \mu^* )条件

是一个必要条件(在一定条件下也是充分条件)”。

对于如下形式的优化问题:

原问题:

minf(x)s.t.gi(x)0,i=1,,mhj(x)=0,j=1,,p\begin{aligned} \min \quad & f(x) \\ \text{s.t.} \quad & g_i(x) \le 0, \quad i = 1, \dots, m \\ & h_j(x) = 0, \quad j = 1, \dots, p \end{aligned}

对偶问题:

maxλ,μminxL(x,λ,μ)s.t.λi0,i=1,,m\begin{aligned} \max_{\lambda, \mu} \quad & \min_x L(x, \lambda, \mu) \\ \text{s.t.} \quad & \lambda_i \ge 0, \quad i = 1, \dots, m \end{aligned}

以及拉格朗日函数:

L(x,λ,μ)=f(x)+i=1mλigi(x)+j=1pμjhj(x)L(x, \lambda, \mu) = f(x) + \sum_{i=1}^m \lambda_i g_i(x) + \sum_{j=1}^p \mu_j h_j(x)

KKT 条件包括五个子条件,分成三个部分:

原问题可行条件{gi(x)0,i=1,,mhj(x)=0,j=1,,p\text{原问题可行条件}\begin{cases} g_i(x^*) \le 0, \quad i = 1, \dots, m \\ h_j(x^*) = 0, \quad j = 1, \dots, p \end{cases}对偶问题可行条件{xL(x,λ,μ)=0λi0,i=1,,m\text{对偶问题可行条件}\begin{cases} \nabla_x L(x^*, \lambda^*, \mu^*) = 0 \\ \lambda_i^* \ge 0, \quad i = 1, \dots, m \end{cases}互补松弛条件{λigi(x)=0,i=1,,m\text{互补松弛条件}\begin{cases} \lambda_i^* g_i(x^*) = 0, \quad i = 1, \dots, m \end{cases}

互补松弛条件的直观理解:对于每个不等式约束 gi(x)0g_i(x) \le 0,要么约束是紧的(gi(x)=0g_i(x^*) = 0),此时对应的拉格朗日乘子 λi\lambda_i^* 可以是正的;要么约束是松的(gi(x)<0g_i(x^*) < 0),此时对应的拉格朗日乘子 λi\lambda_i^* 必须为零。

什么时候KKT是“充要条件”#

在原问题是凸优化且满足Slater条件时,它是充要条件。

凸优化要求

  • 目标函数 f(x)f(x) 是凸函数。
  • 不等式约束函数 gi(x)g_i(x) 是凸函数。
  • 等式约束函数 hj(x)h_j(x) 是仿射函数(即线性函数)。

Slater条件要求存在一个 xx 使得 gi(x)<0g_i(x) < 0 对所有 ii 都成立(注意是严格小于),并且 hj(x)=0h_j(x) = 0 对所有 jj 都成立。

拉格朗日对偶和KKT 条件
https://biscuit0613.github.io/posts/aimath/kkt-condition/
作者
Biscuit
发布于
2026-05-05
许可协议
CC BY-NC-SA 4.0