拉格朗日乘数法模拟器 返回
数值分析

拉格朗日乘数法模拟器

一个可视化工具,展示在等式约束下优化目标函数的"拉格朗日乘数法"。改变目标函数系数、约束条件、最小化/最大化选项,可实时看到目标函数等高线与约束曲线相切的最优点、拉格朗日乘数 λ 和灵敏度(影子价格)。

参数设置
目标函数系数 a(f = a·x² + b·y²)
x² 方向的权重。越大 x 方向越陡峭
目标函数系数 b(f = a·x² + b·y²)
y² 方向的权重。越大 y 方向越陡峭
约束条件
优化应遵循的等式约束曲线 g(x,y)=0
约束常数 c
直线的截距和,或圆的半径常数
优化方向
目标函数是最小化还是最大化
计算结果
最优解 x*
最优解 y*
目标函数最优值 f*
拉格朗日乘数 λ
约束残差 g(x*,y*)
灵敏度 df*/dc(=λ 验证)
等高线与约束曲线 — 切点与梯度向量

同心椭圆为目标函数 f 的等高线,粗曲线为约束 g=0。在最优点,等高线与约束曲线相切,∇f(黄)和 ∇g(蓝)平行。

约束上的目标函数 f
最优值 f* vs 约束常数 c(斜率 = λ
理论与主要公式

$$\nabla f=\lambda\,\nabla g,\qquad g(x,y)=0$$

约束优化的条件。在最优点,目标函数 f 的梯度 ∇f 与约束 g 的梯度 ∇g 平行,比例系数为拉格朗日乘数 λ。联立求解此方程与约束 g=0。

$$\lambda=\frac{d f^\star}{dc}\quad(\text{约束放松的灵敏度·影子价格})$$

乘数 λ 是约束常数 c 放松一个单位时最优值 f* 的变化率。表示资源增加一个单位时目标函数改善的程度,称为"影子价格"。

$$f=a x^{2}+b y^{2},\qquad x^\star=\frac{b c}{a+b},\;\; y^\star=\frac{a c}{a+b}\;\;(\text{直线约束})$$

目标函数及直线约束 x+y=c 下的最优解。f* = abc²/(a+b),λ = 2abc/(a+b)。在最优点,f 的等高线与约束曲线相切。

拉格朗日乘数法概述

🙋
我听过"拉格朗日乘数法"这个名字,但它究竟是干什么的?
🎓
粗略地说,它是"在约束条件下求函数最大最小值的工具"。普通的优化问题中,对导数求零即可找到最优点。但现实问题通常有约束——比如"预算有限"或"材料总量固定"等等。这些约束是等式形式。当有约束时,导数为零的点(无约束最优点)通常会违反约束。这时就要用到这个方法。
🙋
有约束的话为什么普通方法不行?从图上看,椭圆的中心和直线是分开的。
🎓
正是这样。椭圆是目标函数 f 的"等高线",中心是无约束最小点。但如果必须在直线 x+y=c 上移动,就到不了中心。那直线上哪个点最好呢?诀窍是找"等高线与直线约束相切的点"。如果不相切,沿着直线移动还能达到更小的等高线。切点就是无法改善的地方——也就是最优点。
🙋
明白了!相切和 ∇f = λ∇g 这个式子是怎么联系起来的?
🎓
梯度向量 ∇f 总是垂直于等高线,∇g 总是垂直于约束曲线。等高线与约束曲线相切的话,两条曲线在该点有相同的切线。垂直方向也自然对齐了。换句话说,∇f 和 ∇g 是平行的。平行意味着可以用某个数 λ 来表示:∇f = λ∇g。这个 λ 就是"拉格朗日乘数"。之后只需联立这个方程和约束 g=0 就能求出最优点。看左边的图,黄色和蓝色箭头应该会重叠。
🙋
我之前把 λ 当成计算过程中出现的谜一样的字母。它有意义吗?
🎓
这是最有趣的部分。λ 表示的是"稍微放松约束后最优值能获益多少"。用式子说就是 λ = df*/dc。经济学上称为"影子价格"。比如说,能多用 1kg 材料的话,利润会增加多少?答案就是 λ。所以 λ 大的约束是"放松它最划算"的信号,是设计改进的线索。右下的图表可以验证 f* 的斜率与 λ 一致。
🙋
最后问一个。约束改成"圆"或选"最大化"时答案会变。要注意什么?
🎓
好问题。直线约束无限延伸,所以碗型的 f 在直线上有最小值但没有最大值。选"直线+最大化"的话 f* 就是无穷大——这是正确行为,表示最大化不可行。反过来,圆是有界闭合曲线,既有最大值也有最小值。圆的情况会出现两组候选点 (±c,0) 和 (0,±c),最小化时选较小的,最大化时选较大的。约束的"形状"改变了答案的个数,这是关键点。

常见问题

拉格朗日乘数法是在等式约束 g(x,y)=0 下最大化或最小化目标函数 f(x,y) 的方法。使用约束时,仅将梯度设置为零是不够的,因为无约束最优点通常违反约束。拉格朗日乘数法利用几何事实:在最优点处,f 的等高线与约束曲线相切,即两者梯度同向。通过引入未知标量 λ(拉格朗日乘数),联立求解 ∇f = λ∇g 和约束 g=0,得到最优解。
λ 不仅是计算的辅助变量,而且具有明确的物理和经济意义。λ 等于约束放松时最优值的变化率,即 df*/dc,被称为"影子价格"。它表示将资源增加一个单位时目标函数的改善程度。在本工具的直线约束 x+y=c 中,dfStar/dc = 2abc/(a+b) 与乘数 λ 严格一致,结果卡片可以确认这一一致性。
考虑在约束曲线 g=0 上移动时优化 f。若 f 的梯度 ∇f 在约束曲线切线方向上有任何分量,就可以沿该方向移动以进一步改善 f。只有当 ∇f 垂直于切线时才无法改善,即当 ∇f 沿约束曲线法线方向(∇g 的方向)时。因此在最优点,∇f 和 ∇g 共线,可写为 ∇f = λ∇g。图中 f 的等高线与约束曲线相切的点体现了这一点。
目标函数 f = a·x² + b·y² 是向上凸的"碗型",在直线 x+y=c 上只有一个驻点(最小值)。由于直线无限延伸,沿直线增大 x(或减小 x)会使 f 任意增大,不存在有限的最大值。本工具在直线约束+最大化时显示 f* 为无穷大(∞),明确表示最大化不可行。而圆约束是有界闭合曲线,同时存在最大值和最小值。

现实应用

结构优化与设计:"在保持重量恒定的条件下最大化刚度"、"在允许应力约束下最小化截面"等设计问题正是约束优化的典型。在桁架拓扑优化和形状优化中,常在体积约束或应力约束下最小化目标函数(合规性或质量)。此时每个约束对应的拉格朗日乘数指出:若该约束稍微放松,设计会改善多少,提供了定量的设计改进建议。

有限元法与支配方程的推导:FEM 理论的基础——变分原理本身就是约束优化问题。在非压缩流动或接触问题中,"非压缩条件"和"无穿透条件"作为等式/不等式约束加入,其乘数恰好对应物理量(压力或接触力)。混合有限元法中的压力场就是体积守恒约束的拉格朗日乘数。理解乘数的物理意义,能深刻认识为什么需要这样的定式化。

经济学与运筹学:预算约束下效用最大化、资源约束下利润最大化这些消费者和生产计划问题都是约束优化的典范。这里乘数被称为"影子价格",指额外获得一单位该资源时目标函数的增长量。线性规划的对偶变量同样遵循这一思想,直接指导了哪个约束值得放松这样的决策。

机器学习与统计:支持向量机通过约束优化的形式进行间隔最大化,其对偶问题的乘数决定了支持向量。正则化(如岭回归)等价于"参数范数不超过某值"的约束,正则化系数扮演了乘数的角色。在最大似然估计加约束的场景中,同样的框架适用,使拉格朗日乘数法成为应用数学的通用语言。

常见误解与注意事项

一个重大陷阱是认为"求解 ∇f = λ∇g 得到的点一定是最优解"。这个条件只是最优点需要满足的必要条件,而非充分条件。满足条件的点(驻点)可能是最小值、最大值,甚至鞍点。本工具的圆约束中会出现两组候选点,只有比较它们的目标函数值才能判断大小关系。实务中需要验证二阶条件(带边框的Hessian矩阵符号),或对所有驻点的目标函数值进行比较。

其次,"不关心 λ 的符号和大小"也是常见错误。λ 就是灵敏度 df*/dc,符号有意义:λ 为正表示放松约束会增大最优值,λ 为负表示会减小。在最小化问题中,λ 较小的约束"放松也获益不大",可以作为设计自由度处理;λ 较大的约束是"瓶颈所在"的信号。当约束是不等式时,不起作用(不束缚)的约束乘数为零——这就是KKT条件的互补性。忽视 λ 等于抛弃了最宝贵的设计信息。

最后,"不检查约束的正则性(梯度非零)"也会出问题。拉格朗日乘数法隐含假设最优点处 ∇g ≠ 0。若在某点 ∇g = 0,则 ∇f = λ∇g 不成立,乘数无法定义。多约束相交的点或约束曲线有尖点的地方会出现约束规范性破裂(constraint qualification violation)。标准手法失效,需要重新定式化或调整约束尺度来避开这类奇异点,才能稳定求解。

使用指南

  1. 定义目标函数系数 a 和 b,建立二次型目标函数 f(x,y) = a·x² + b·y² + c·xy 的参数。
  2. 设置等式约束条件 g(x,y) = 0,例如生产成本约束"2x + 3y = 12"等实际条件,通过调整 bNum 和 bRange 来改变约束系数。
  3. 运行模拟后,验证最优解 (x*,y*)、目标函数最优值 f*、拉格朗日乘数 λ,并通过约束灵敏度 df*/dc 评估约束变化的影响。

具体计算示例

假设汽车车架设计的质量最小化问题。目标函数 f(x,y) = 2x² + 3y² - xy(单位:kg),约束条件 2x + 3y = 60(单位:mm),拉格朗日函数展开为 L = 2x² + 3y² - xy - λ(2x + 3y - 60)。求得最优解 x* = 10.8mm、y* = 12.8mm、最优质量 f* = 145.6kg、拉格朗日乘数 λ = 8.4kg/mm,表明放松约束 1mm 可削减质量 8.4kg。

工程应用的注意点