拉格朗日乘子法
一、直观理解:用「价格」把等式约束折进目标里
拉格朗日乘子法处理带等式约束的优化:在 上最小化 。几何图像是:目标等高面与约束曲面相切时,二者的法向平行,即
(多个约束时, 落在约束梯度张成的空间里。)
称为拉格朗日乘子,可理解为约束的影子价格:约束右端微扰时,最优值如何变化。把约束「卖」进目标,形成拉格朗日函数:
通过 把有约束问题转化为(通常更大的)非线性方程组。这是经典解析法,也是理解 KKT、对偶与 fmincon 输出的基础。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 等式约束光滑优化;需要解析推导最优性条件;经济学/力学中的约束极值;低维可手算或符号计算;为数值算法提供理论起点。 |
| 核心优点 | 几何意义清晰;乘子有解释;与对偶理论衔接;是 KKT 在「无不等式」时的特例。 |
| 局限与缺点 | 不等式约束需 KKT/松弛;得到的是必要条件,需二阶判定;非线性方程组可能多解;高维手算不可行。 |
使用前确认:
- 约束是否全为等式、是否独立(约束规范);
- 是否连续可微;
- 需要解析解还是为数值方法服务;
- 有不等式时是否应直接用 KKT 专页方法。
三、核心原理:驻点条件与乘子含义
1. 问题形式
2. 拉格朗日函数
一阶必要条件(在约束规范下):存在 使
即
3. 几何解释
在可行曲面切空间内,目标不能再下降: 必须与所有可行切向正交,因而由约束法向线性表出。
4. 乘子的灵敏度
在正则条件下,
若约束写成 的形式(记号因教材而异,报告时写清符号约定)。直观上: 大表示该约束「很紧很值钱」。
5. 二阶条件(简述)
在切空间 上,要求 (严格局部极小的充分条件)。仅 可能是极大或鞍点。
6. 与不等式、KKT 的衔接
不等式 引入乘子 与互补松弛 ,完整条件即 KKT。等式乘子 无非负限制。
四、关键决策
1. 约束是否冗余或相依
线性相关时,乘子可能不唯一或条件失效,需检查 LICQ 等约束规范。
2. 解析还是数值
二维一两个等式:可手算或 solve;一般情况:用 fmincon 并读取 lambda。
3. 符号约定
有人写 ,灵敏度符号会反。论文/报告中固定一种并前后一致。
4. 初值与多解
非线性驻点方程可能多个解,需结合二阶条件或目标值比较。
五、MATLAB 示例
例 1:经典问题 s.t.
解析最优为 , 相应可求。
% 数值:fmincon
fun = @(z) z(1)^2 + z(2)^2;
x0 = [0; 0];
Aeq = [1, 1];
beq = 1;
opts = optimoptions("fmincon", "Display", "iter");
[x, fval, ef, out, lambda] = fmincon(fun, x0, [], [], Aeq, beq, [], [], [], opts);
fprintf("x=(%.4f,%.4f), f=%.4f\n", x(1), x(2), fval);
disp("等式约束乘子 lambda.eqlin:");
disp(lambda.eqlin);
例 2:手写拉格朗日驻点(符号)
syms x y lam
f = x^2 + y^2;
g = x^2 + y - 1;
L = f + lam * g;
eqs = [diff(L, x); diff(L, y); g];
sols = solve(eqs, [x, y, lam], "Real", true);
X = double(sols.x);
Y = double(sols.y);
Lam = double(sols.lam);
F = X.^2 + Y.^2;
T = table(X, Y, Lam, F);
disp(T);
% 选目标最小者
[~, idx] = min(F);
fprintf("候选最优: (%.4f,%.4f), lam=%.4f, f=%.4f\n", ...
X(idx), Y(idx), Lam(idx), F(idx));
例 3:用 KKT/拉格朗日理解资源分配
(先忽略不等式,看等式乘子;若解在内部则自洽。)
fun = @(x) -(log(x(1)+1) + log(x(2)+1)); % 最小化负效用
x0 = [5; 5];
[x, fval, ef, out, lambda] = fmincon(fun, x0, [], [], [1 1], 10, [0;0], []);
fprintf("分配=(%.4f,%.4f), 效用=%.4f, 乘子=%.4f\n", ...
x(1), x(2), -fval, lambda.eqlin);
六、如何解释结果
应报告:
- 原问题目标与等式约束;
- 拉格朗日函数写法与符号约定;
- 驻点 与目标值;
- 乘子的灵敏度解释(结合业务单位);
- 二阶/边界检查:是否真为极小,是否需考虑不等式激活;
- 数值求解时的
exitflag与约束违反量 。
示例表述:「最优在资源恰好分尽时取得;等式乘子约 0.09,表示总预算再增加 1 个单位,最优效用大约提高 0.09。」
七、常见误区
1. 有不等式仍只用等式拉格朗日
边界最优时必须引入不等式乘子(KKT),否则会漏解。
2. 把 的每个解都当最小
可能是最大或鞍点,要比较目标或查二阶条件。
3. 约束梯度为零导致方法失效
如 在原点,规范条件不成立,需单独分析。
4. 乘子符号解释反了
先确认 还是 ,再谈「资源变贵」。
5. 高维硬符号求解
应数值优化 + 报告 lambda 结构体。
6. 忽略可行性
只满足 但不满足 的点无意义。
八、小结
拉格朗日乘子法的核心思想可以概括为:
构造 ,通过 与 刻画等式约束下的驻点;乘子给出约束的边际价值。
它是有约束非线性优化的理论入口,适合解析推导与解释灵敏度。实际大规模或含不等式问题时,应扩展到 KKT,并使用 fmincon 等数值方法,同时保留乘子的经济学/管理学解释。