拉格朗日乘子法(有约束优化问题)
2015-10-26 21:13
267 查看
拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。前提是:只有当目标函数为凸函数时,使用这两种方法才保证求得的是最优解。
对于无约束最优化问题,有很多经典的求解方法,参见无约束最优化方法。
minf(x)(1) s.t.hi(x)=0i=1,2…n(2)
这里(1)是目标函数,(2)是约束条件。
min[f(x)+∑i=1nλihi(x)](3)
其中λi≠0,称为拉格朗日乘子。
下面就是求式(3)的最优值,可以通过对式(3)各个参数求导取零,联立等式进行求取,这个在高等数学里面有讲,但是没有讲为什么这么做就可以,下面将简要介绍其思想。
为什么要这么求能得到最优值?先说拉格朗日乘子法,设想我们的目标函数z=f(x),x是向量,z取不同的值,相当于可以投影在x构成的平面(曲面)上,即成为等高线,如下图,目标函数是f(x,y),这里x是标量,虚线是等高线,现在假设我们的约束g(x)=0,x是向量,在x构成的平面或者曲面上是一条曲线,假设g(x)与等高线相交,交点就是同时满足等式约束条件和目标函数的可行域的值,但肯定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值,如下图所示,即等高线和目标函数的曲线在该点的法向量必须有相同方向,所以最优值必须满足:f(x)的梯度 =a∗g(x)的梯度,a是常数,表示左右两边同向。这个等式就是式(3)对参数求导的结果。
对于无约束最优化问题,有很多经典的求解方法,参见无约束最优化方法。
拉格朗日乘子法
先来看拉格朗日乘子法是什么,再讲为什么。minf(x)(1) s.t.hi(x)=0i=1,2…n(2)
这里(1)是目标函数,(2)是约束条件。
s.t. = subject to,受限制于。利用拉格朗日乘子法,该问题可以转化为:
min[f(x)+∑i=1nλihi(x)](3)
其中λi≠0,称为拉格朗日乘子。
下面就是求式(3)的最优值,可以通过对式(3)各个参数求导取零,联立等式进行求取,这个在高等数学里面有讲,但是没有讲为什么这么做就可以,下面将简要介绍其思想。
为什么要这么求能得到最优值?先说拉格朗日乘子法,设想我们的目标函数z=f(x),x是向量,z取不同的值,相当于可以投影在x构成的平面(曲面)上,即成为等高线,如下图,目标函数是f(x,y),这里x是标量,虚线是等高线,现在假设我们的约束g(x)=0,x是向量,在x构成的平面或者曲面上是一条曲线,假设g(x)与等高线相交,交点就是同时满足等式约束条件和目标函数的可行域的值,但肯定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值,如下图所示,即等高线和目标函数的曲线在该点的法向量必须有相同方向,所以最优值必须满足:f(x)的梯度 =a∗g(x)的梯度,a是常数,表示左右两边同向。这个等式就是式(3)对参数求导的结果。
相关文章推荐
- MySQL 优化
- Google排名优化的几个影响因素
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 优化Ruby脚本效率实例分享
- Asp编码优化技巧
- 如何监测和优化OLAP数据库
- mysql -参数thread_cache_size优化方法 小结
- 详解mysql的limit经典用法及优化实例
- oracle数据库sql的优化总结
- SQL优化经验总结
- SQL优化技巧指南
- SQL Server优化50法汇总
- C++快速排序的分析与优化详解
- 手把手教你如何优化C语言程序
- mysql 分页优化解析
- 非常不错的MySQL优化的8条经验
- 优化Node.js Web应用运行速度的10个技巧
- JavaScript学习笔记(十七)js 优化