拉格朗日函数并没有“消灭约束”,而是把“是否违反约束”转化成了 “代价惩罚” 。
对于原问题,其约束可以看作一种“硬性约束”,如果不满足就直接不可行
mins.t.f0(x)gi(x)≤0,i=1,…,mhj(x)=0,j=1,…,p
引入拉格朗日乘子 λi≥0 (这个大于等于零很关键) 和 μj ,构造拉格朗日函数,约束不再显式限制 x,x 可以是任意的(无约束)
但:如果违反约束 → 代价 L 会变大
L(x,λ,μ)=f0(x)+i=1∑mλigi(x)+j=1∑pμjhj(x)
约束被吸收为惩罚,关键在于 λi≥0 和 μj , μj 没有符号限制
对于不等式约束 gi(x)≤0 ,分情况如下:
- 满足约束
- gi(x)≤0 → λigi(x)≤0 → L(x,λ,μ)≤f0(x)
- 约束满足时,拉格朗日函数的值不会超过原问题的目标函数值。
- 不满足约束
- gi(x)>0 → λigi(x)>0 → L(x,λ,μ)>f0(x)
- 约束违反时,拉格朗日函数的值会超过原问题的目标函数值。
对于等式约束 hj(x)=0,分情况如下:
- 满足约束
- hj(x)=0 → μjhj(x)=0 → L(x,λ,μ)=f0(x)
- 约束满足时,拉格朗日函数的值等于原问题的目标函数值。
- 不满足约束
- hj(x)>0 令 μj>0 → μjhj(x)>0 → L(x,λ,μ)>f0(x)
- hj(x)<0 令 μj<0 → μjhj(x)>0 → L(x,λ,μ)>f0(x)
- 约束违反时,无论 hj(x) 是正还是负,只要 μj 的符号与 hj(x) 的符号相同,拉格朗日函数的值都会超过原问题的目标函数值。
这里还有一种理解思路:

“原问题最优解 + 对偶结构成立”的必要条件:KKT 条件#
KKT 条件是优化问题为 强对偶问题 的必要条件。KKT条件不是“拉格朗日函数最优的条件”,而是“原问题最优解必须满足的一组( x∗,λ∗,μ∗ )条件
是一个必要条件(在一定条件下也是充分条件)”。
对于如下形式的优化问题:
原问题:
mins.t.f(x)gi(x)≤0,i=1,…,mhj(x)=0,j=1,…,p对偶问题:
λ,μmaxs.t.xminL(x,λ,μ)λi≥0,i=1,…,m以及拉格朗日函数:
L(x,λ,μ)=f(x)+i=1∑mλigi(x)+j=1∑pμjhj(x)KKT 条件包括五个子条件,分成三个部分:
原问题可行条件{gi(x∗)≤0,i=1,…,mhj(x∗)=0,j=1,…,p对偶问题可行条件{∇xL(x∗,λ∗,μ∗)=0λi∗≥0,i=1,…,m互补松弛条件{λi∗gi(x∗)=0,i=1,…,m互补松弛条件的直观理解:对于每个不等式约束 gi(x)≤0,要么约束是紧的(gi(x∗)=0),此时对应的拉格朗日乘子 λi∗ 可以是正的;要么约束是松的(gi(x∗)<0),此时对应的拉格朗日乘子 λi∗ 必须为零。
什么时候KKT是“充要条件”#
在原问题是凸优化且满足Slater条件时,它是充要条件。
凸优化要求
- 目标函数 f(x) 是凸函数。
- 不等式约束函数 gi(x) 是凸函数。
- 等式约束函数 hj(x) 是仿射函数(即线性函数)。
Slater条件要求存在一个 x 使得 gi(x)<0 对所有 i 都成立(注意是严格小于),并且 hj(x)=0 对所有 j 都成立。