【优化】拉格朗日(Lagrange)乘子法超简说明
2017-02-19 21:34
316 查看
本文不做数学推导,从物理意义上讲解拉格朗日乘子法。
max f(x,y), s.t.g(x,y)=0
用下图表示这个问题。f(x)参数在二维平面内,其本身是一个曲面,用等高线(蓝色)表示。g(x)=0是二维平面内的一条曲线(红色)。
我们要找g(x,y)=0上的一个点,其位于f(x,y)最大的等高线上。
找到g(x,y)=0上的一点,这一点处g(x,y)=0和该点f(x,y)的等高线相切。
可以用反例直观地理解。如果g(x,y)=0和该点f(x,y)等高线相交(黑点),如下图:
g(x,y)=0能够延伸到等高线f(x,y)=d更大的一侧。这个区域内的解(灰点),同样满足g(x,y)=0,但f(x,y)更大。
找到g(x,y)=0上的一点,这一点g(x,y)=0和f(x,y)=d的梯度共线。
我们可以把这句话拆分成三个条件:
g(x,y)=0
∂f(x,y)∂x=λ∂g(x,y)∂x
∂f(x,y)∂y=λ∂g(x,y)∂y
三个方程,三个未知数,这样实际就可以求解了。
不过,为了记忆简洁,同时方便计算机运算,我们还可以把三式合为一式:
L(x,y,λ)=f(x,y)−λg(x,y)
∇L(x,y,λ)=0
其中∇表示对三个参数求导。其中λ称为拉格朗日乘子,L称为拉格朗日函数。
原问题
我们要解决带有等式约束的最优化问题。为方便书写,以二维函数为例:max f(x,y), s.t.g(x,y)=0
用下图表示这个问题。f(x)参数在二维平面内,其本身是一个曲面,用等高线(蓝色)表示。g(x)=0是二维平面内的一条曲线(红色)。
我们要找g(x,y)=0上的一个点,其位于f(x,y)最大的等高线上。
问题转换
Step 1
求解上述问题等价于:找到g(x,y)=0上的一点,这一点处g(x,y)=0和该点f(x,y)的等高线相切。
可以用反例直观地理解。如果g(x,y)=0和该点f(x,y)等高线相交(黑点),如下图:
g(x,y)=0能够延伸到等高线f(x,y)=d更大的一侧。这个区域内的解(灰点),同样满足g(x,y)=0,但f(x,y)更大。
Step 2
更进一步,这一条件等价于:找到g(x,y)=0上的一点,这一点g(x,y)=0和f(x,y)=d的梯度共线。
我们可以把这句话拆分成三个条件:
g(x,y)=0
∂f(x,y)∂x=λ∂g(x,y)∂x
∂f(x,y)∂y=λ∂g(x,y)∂y
三个方程,三个未知数,这样实际就可以求解了。
不过,为了记忆简洁,同时方便计算机运算,我们还可以把三式合为一式:
L(x,y,λ)=f(x,y)−λg(x,y)
∇L(x,y,λ)=0
其中∇表示对三个参数求导。其中λ称为拉格朗日乘子,L称为拉格朗日函数。
求解
通过∇L=0可以求解出若干组参数,分别代入f(x,y),找出值最大的一组,即为所求。相关文章推荐
- 拉格朗日插值法在数据分析中的应用——Python插值scimpy,lagrange
- Spark on yarn配置项说明与优化整理
- 拉格朗日(lagrange)插值计算
- 通用权限管理系统组件V3.8功能改进说明 - 对用户表BaseUser的拆分优化
- MySQL索引优化实例说明
- Oracle PL/SQL 优化与调整 – PL/SQL Native Compilation 说明
- 第121课:Spark Streaming性能优化:通过摄像头图像处理案例来说明Spark流处理性能评估新方法及性能调优参数调试
- redis优化配置和redis.conf说明
- GCC优化选项的说明
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(四)--PoiExportUtil架构设计篇与功能说明
- 通往性能优化的JOIN方法说明
- Oracle - SQL 优化 -------- > SET AUTOTRACE 中Statistics(统计信息)说明
- Mysql参数配置优化说明
- hbase优化相关参数说明
- lucene_indexWriter说明、索引库优化
- MySQL 数据库优化的具体方法说明
- 通往性能优化的天堂-地狱 JOIN方法说明
- 实例说明optimize table在优化mysql时很重要
- Oracle PL/SQL 优化与调整 – PL/SQL Native Compilation 说明
- 数值优化(Numerical Optimization)学习系列-惩罚和增广拉格朗日方法(Augmented Lagrangian Methods)