对非线性规划来说,大多数情况下我们是不可能无限制求其理想情况下的最优值的,总是存在一些约束生成了一部分可行解域。从机器学习上来说,我们的可行解域就被限制住了,直接求解起来事实上是有一定困难的,我们更希望求解的是无约束的优化问题,就衍生出拉格朗日乘子法。拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有n+k个变量的无约束优化问题。总的思想是**将等式约束条件代入目标函数,把约束优化问题转化为无约束优化问题。
一、等式约束的最优化模型
等式约束问题
minimizexf(x) subject to gi(x)=0,i=1,2,⋯,m

假设优化变量是x1和x2,图中的蓝色虚线是目标函数f(x1,x2)的等高线,其中d1>d2>d3,绿线代表了约束条件 h(x1,x2)= 0。这个优化问题的解x∗1和x∗2 一定满足h(x∗1,x∗2)=0,所以解 x∗1和x∗2一定在绿线上。我们可以看到,绿线和三条等高线都有交点,而我们要求的是能使目标函数最小的点,那么绿线上的那个点才是优化问题的解呢?
我们来看绿线和蓝色等高线的关系,绿线和某条蓝色等高线可能相交、相切或者没有交点。没有交点当然就代表没有解啦。如果相交的话,说明绿线上存在点在这条等高线的内部和外部,也就说明存在点使得目标函数的值更大或者更小,所以相交的情况也不会是优化问题的可行解。所以就只剩下了相切的情况,可能会是优化问题可行解。如果代表约束条件的绿线和某条蓝色等高线相切,那么它们的切线相同,且法向量是相互平行的,这样就可以得到:
∇xf(x)+λ∇xh(x)=0
即目标函数和约束条件中的函数关于x的偏导数的方向是平行的,这就是拉格朗日函数L(x,λ) 求解无约束优化问题的数学基础。
二、等式约束求解示例
目标函数f(x)=x1+x2,等式约束h(x)=x21+x22−2=0,求解极值点。
f(x)在二维平面上的等高线就是一条条斜率相同的直线,h(x)=0在二维平面上的等高线就是一个圆,如图所示:

可以明显的看出,在圆圈h(x)的限制下,直线f(x)的最小值为-2,在左下角直线x1+x2=2x和圆的交点上。
不考虑圆h(x)的限制时,f(x)要得到极小值,需要往f(x)的负梯度(下降最快的方向)方向走,如下左图蓝色箭头。
如果考虑圆h(x)的限制,要得到极小值,需要沿着圆的切线方向走,如下右图红色粗箭头。注意这里的方向不是h(x)的梯度,而是正交于h(x)的梯度,h(x)梯度如下右图的红色细箭头。在极小值点,f(x)和h(x)的等高线是相切的。
负梯度 |
正梯度 |
 |
 |
三、拉格朗日乘数法
作拉格朗日函数
L(x,λ)=f(x)+m∑i=1λihi(x)
拉格朗日定理(一阶必要条件):假设 x∗ 是上述等式约束优化问题的局部极小值点,若向量组
∇gi(x∗)(i=1,2,...,m)
线性无关,则存在乘子向量 λ∗,使得 ∇xL(x∗,λ∗)=0,即
∇f(x∗)+m∑i=1λ∗i∇gi(x∗)=0
上式为拉格朗日定理,描述了具有等式约束的优化问题取极小值的一阶必要条件,也就是通常所说的KKT条件。
当目标函数和约束条件的二阶连续可微时,我们还可以使用Lagrange函数的海塞矩阵来判断极值是否为极小值。Lagrange函数的二阶充分条件在实际问题中有着广泛的应用。例如,在机器学习中,我们经常需要求解带有约束条件的优化问题,例如支持向量机和逻辑回归。使用Lagrange函数的二阶充分条件可以帮助我们判断模型的最优解是否为极小值,从而提高模型的准确性和稳定性。
三、实例
例1:给定椭球 x2a2+y2 b2+z2c2=1 ,求这个椭球的内接长方体的最大体积。
这个问题实际上就是条件极值问题,即在条件 x2a2+y2 b2+z2c2=1 下求 f(x,y,z)=8xyz 的最大 值。
当然这个问题实际可以先根据条件消去 z ,然后带入转化为无条件极值问题来处理。但是有时候这样 做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。通过拉格朗日乘数法将问题转化 为:
L(x,y,z,λ)=f(x,y,z)+λg(x,y,z)=8xyz+λ(x2a2+y2 b2+z2c2−1)
对L (x,y,z,λ) 求偏导:
∂xL(x,y,z,λ)∂x=8yz+2λxa2=0∂xL(x,y,z,λ)∂y=8xz+2λyb2=0∂xL(x,y,z,λ)∂z=8xy+2λzc2=0∂xL(x,y,z,λ)∂λ=x2a2+y22 b2+z2c2−1=0 最终得到 x=√33a,y=√33 b,z=√33c 最大体积为 Vmax=f(√33a,√33 b,√33c)=8√39abc
例2:求解下面非线性规划。
minf(X)=x12−x1x2+x22−10x1−4x2+60s.t.h(X)=x1+x2−8=0
解:构造拉格朗日函数
L(X,λ)=f(X)+λh(X)=x12−x1x2+x22−10x1−4x2+60+λ(x1+x2−8)
求其一阶偏导数,令其等于零,联立解方程组
∂L∂x1=2x1−x2+λ−10=0
∂L∂x2=−x1+2x2+λ−4=0
∂L∂λ=x1+x2−8=0
得
X1∗=5,X2∗=3,λ∗=3
由于f(X)的海塞矩阵
H(X)=(2−1−12)
为正定矩阵,所以f(X)为凸函数,因此该问题有唯一全局极小最优解,就是上面求出的解,目标函数值为17。
例3:求解下面非线性规划
max(f(x,y,z)=x+y+zs.t.g(x,y,z)=x2+y2+z2−1=0
解: 构造拉格朗日函数
L(x,y,z,λ)=f(x,y,z)−λ⋅g(x,y,z)
其中 λ 是拉格朗日乘数。
求解拉格朗日函数对自变量 (x,y,z) 和拉格朗日乘数 λ 的偏导数,并令它们等于零**,得到下面方程。
∂L∂x=1−2λ⋅x=0
∂L∂y=1−2λ⋅y=0
∂L∂z=1−2λ⋅z=0
∂L∂λ=−(x2+y2+z2−1)=0
解上述方程,得到自变量和拉格朗日乘数的取值。
从上面的偏导数方程中,我们可以得到:
x=12λ,y=12λ,z=12λ
将 x,y,z 的表达式代入 λ 的方程中,解得:
(12λ)2+(12λ)2+(12λ)2=1
将自变量和拉格朗日乘数的取值代入拉格朗日函数,得到最大值。
x=y=z=12√3,λ=√36
f(12√3,12√3,12√3)=32√3
参考文献
- 简说拉格朗日乘数法
- 【最优化导论】仅含等式约束的优化问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!