拉格朗日乘子法及其对偶问题和KKT条件
如何理解拉格朗日乘子法?
拉格朗日乘子法使用条件_拉格朗日乘子法的优点
拉格朗日乘子法使用条件_拉格朗日乘子法的优点
在求解化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。 在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。
一般情况下,化问题会碰到一下三种情况:
(1)无约束条件
这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。
(2)等式约束条件
使用拉格朗日乘子法。
当 个等式约束, 时,求 的解。——这就是原问题
等价表达式为:
——这就是原问题
其中, 表示化,可能是最小化min,或化max; 表示subject to ,“受限于”的意思; 为目标函数(不是原问题,不是原函数); 是约束项。写成约束的形式更专业,但是还是题目描述的好理解。
拉格朗日乘子法定义:对于目标函数 以及 个约束条件 ,拉格朗日乘子法为每个约束条件添加一个“乘子” :
(1)如果对目标函数求最小化即
那么得到拉格朗日函数:
其中
(2)如果对目标函数求化即
那么得到拉格朗日函数:
其中
上面两种情况是可以通过对 和 取负互相转换。下面只就第(1)种情况进行讨论。
上面两种情况用拉格朗日乘子法对偶问题来解释。
对于种情况,如果对目标函数求最小化即 是凹函数,那么对 求最小值等同于 ,而 可分为两部分,部分即目标函数 ,第二部分为带有“乘子” 的约束部分;容易看出部分不包含 ,所以 也可以分成两部分优化:
基于公式(1),可以用 来表示 ,那么拉格朗日函数 就变成了一个关于 的函数,记为: ——该函数就是拉格朗日函数的对偶函数。所谓对偶函数就是求拉格朗日函数的解 等价于求对偶函数的解 ,求得 之后基于公式(1),就可以求得 。
对对偶函数求解,也是对 求偏导,并令其为0:
...
最终我们可以得到对偶函数的 个解 ,进而得到拉格朗日函数的解 ,再将 带入目标函数 即可得到 的解。
由求带约束的目标函数的解 求拉格朗日函数的解 求拉格朗日函数的对偶函数的解,再将解回溯回去。
练一练:已知 ,求 的值?
上面的问题,可以写成
思路:基本不等式、三角换元都太麻烦。用拉格朗日乘子法(也叫拉格朗日乘数法)来解决。
将等式约束下的目标函数转化成拉格朗日函数:
这里只有一个约束项。
要求解 的解,即对 求偏导,并使结果为0:
可以求得
也就是说当 时,目标函数 取得值,即
利用GeoGebra 软件进行验证,如图所示:
(3)不等式约束条件
当 个不等式约束, 时,求 的最小值。
等价表达式为:
采用拉格朗日乘子为每一个不等式约束分配一个“乘子” ,于是有拉格朗日函数:
其中不等式约束的“乘子”” 。
KKT条件是说, 的解 一定同时满足如下条件:
要同时满足第6、7个条件,那么就是要么 ,要么 ,或 和 都为0——这就是KKT所带来的重要结论。
练一练:
1、将上面的约束项变形如下:
2、拉格朗日函数为:
化拉格朗日函数
对 求偏导:
那么
对 求偏导:
那么
将 带入到 中得到的是之关于 的函数 ,该函数是 的对偶函数。
(4)既有等式约束条件又有不等式约束条件
使用拉格朗日乘子法结合KKT条件。
当 个等式约束, ; 个不等式约束, 时,求 的最小值。
等价表达式为:
采用拉格朗日乘子为每一个等式约束分配一个“乘子” ,也为每一个不等式约束分配一个“乘子” ,于是有拉格朗日函数:
其中等式约束的“乘子”” ;不等式约束的“乘子” 。
KKT条件是说, 的解 一定满足如下条件:
拉格朗日算子和乘子法是啥
声明:词条人人可编辑,创建、修改和认证均免费
详情
拉格朗日乘子法
基本的拉格朗日乘子法就是求函数f(x1,x2,...)在约束条件g(x1,x2,...)=0下的极值的方法。
其主要思想是将约束条件函数与原函数联立,从而求出使原函数取得极值的各个变量的解。
中文名
拉格朗日乘子法
外文名
Lagrange multiplier
别名
拉格朗日乘数法
主要思想
引入一个新的参数λ
求的内容
极值
定义
对于具有l个等式约束的n维优化问题
,把原目标函数 改造成为如下形式的新的目标函数
式中的 就是原目标函数 的等式约束条件,而待定系数 称为拉格朗日乘子。这种方法称为拉格朗日乘子法。
在极值点处,有 和 ,共有n+l个方程,足以算出这n+l个变量,此法也称为升维法。[1]
基本原理
拉格朗日乘子法是一种经典的求解条件极值的解析方法,可将所有约束的优化模型问题转化为无约束极值问题的求解。一般带不等式约束的化问题求解如下式:
拉格朗日乘子法是用于变量无关的是常数 分别乘各约束函数 并与目标函数相加得到如下的拉格朗日函数: ,式中: 为自变量; 为拉格朗日乘子量; 为松弛变量。
则 在 处取极值的必要条件为: ,依据上式求得 即为解。[2]
计算过程
1.设需要求极值的目标函数(objective function)为f(x,y),限制条件为φ(x,y)=M
2.设
3.定义一个新函数
4.用偏导数方法列出方程:
5.求出x,y,λ的值,代入即可得到目标函数的极值[1]
关键参数含义
(1) 是由参数M所引起的约束条件变化时,对目标函数值影响的度量;或者说表示了值的“灵敏度”。
(2)当约束条件M增加一个单位时,目标函数值f将近单位。
(3)在经济学上参数 表示产品或资源M增加一个单位时,所带来的效益f,常称为“边际效益”或“临界值”,在商业经营决策中很有用处。[3]
直观意义
引理一
如果函数 是光滑的,并且 是 的一个正则点(即 ),那么, 垂直于过 的 的等值线。[4]
引理二
在等值面 上的每个正则点 ,向量 垂直于等值面,并且这个向量是[4]的(不计其某一常数倍)。
定理
设 在曲面S: 上的点 有(小)值,并且 不是 的临界点(g
拉格朗日乘子法和KKT条件
首先,拉格朗日乘子法和kkt条件都是解决数学中化问题的方法。什么时候会用到这种方法呢?
比如,求解函数 ,直接求 关于x的一阶导数,让一阶导数为0,便得到 取最小值时的解为1。但要是x有限制条件呢?那么就会用到上面的两种方法。
一、限制条件为等式
这是一个有等式约束的优化问题,如果不借助其他工具是不是很难求解,尤其是 或g(x,y)都比较复杂的情况下。拉格朗日乘子法将这个问题转化成了无约束问题,那么就可以用求偏导的方法去求解。拉格朗日函数为:
求 分别关于 的偏导(没有找到偏导符号,用d代替):
通过求解 的偏导数为0,便可获得 取极值时的解。
那么为什么这样做呢?即 取极值时的解是否就是 的解呢?其实在等式约束条件这里是非常容易理解的,因为 的后半分 恒等于0,那么自然 和 的解是一致的。
从另一个角度来看,下图是对原问题的几何描述,只有当 和 的切线重合的时候,原问题能够取得解。那么在切点的梯度有
那么限制条件为不等式呢?下面来看
二、限制条件为不等式
当解问题是:
那么如果同样用拉格朗日函数将上述有约束问题化解为无约束问题,是否可以直接通过求 分别关于 的偏导,令偏导数为0来获得解呢?是不能。为什么不能呢?看下图就明白了:
所以我们采用广义拉格朗日乘子法,先求 关于乘子的,再求关于x,y的最小。原始问题的拉格朗日函数为:
这个问题很难求解,所以想要将问题转化为原问题的对偶问题:
那么原问题和对偶问题的解是否等价呢?
所以这里我们引入KKT条件, 同时是原始问题和对偶问题的解的充分必要条件就是满足以下条件:
当 满足上述的kkt条件时,对偶问题的解就是原始问题的解。当约束如图1所示,那么 ;当约束如图2所示,实际上约束已经不起作用,那么 。
拉格朗日乘数法
拉格朗日乘子法(又称为拉格朗日乘数法),就是求函数f(x1,x2,...)在(9x1,x2,...)=0的约束条件下的极值的方法。其主要思想是引入一个新的参数λ(即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。前提是:只有当目标函数为凸函数时,使用这两种方法才保证求得的是解
根据拉格朗日函数L=z+λ(x+y-230)=[2x+3y-(8x^2-12xy+3y^2+2x+3y)]+λ(x+y-230)
分别对x,y求偏导,联立两个偏导函数都等于0的方程,求出x,y值,进而带入函数求值即可
拉格朗日乘子法和KKT条件
拉格朗日乘子法要解决的就是有 等式 限制条件的凸优化问题。形式如下:
例如:
令令 导数为0,得到:
求解出x, y, z即为解,同时也会求出λ,但是没什么用。
关于拉格朗日乘子法的直观理解网上已经有很多解释了,此处仅简要描述。如下图中的f和g,虚线为f的等高线,g限制条件,可以看出,f一定是在和g相切的地方取到(小)值,所以两者在此处的梯度方向相同,仅相一个比例因子(即公式中的λ)。
注意g(x)=0是一条曲线,如果有多个限制条件则有多条曲线,此时将g(x)看做一个函数,则g(x)=0是g的一个等高线,函数与等高线垂直的方向一定是增加最快的方向,即梯度方向。f和g梯度方向一样,所以有:
然后再外加一个所求的点一定在曲线g上的方程(即F(x)对λ的导数为0),以上公式和拉格朗日乘子法得出的公式是等价的。
拉格朗日乘子法仅适用于等式约束条件,那如果约束条件为不等式怎么办呢?
答: 当约束条件为不等式时候,结合KKT条件,依然可以用拉格朗日乘子法求解,实际上KKT条件可以把不等式约束转化为等式约束。即,KKT条件求解的问题的形式为:
待续。。。
条件极值拉格朗日乘数法
条件极值拉格朗日乘数法
该方法只是利用:如果一个函数可导,并且在某一点取极值,在这一点的导数必定为零。这只是一个必要条件,而不是充分条件。
所以拉格朗日乘子法,在设计的时候,都会只能解出来的驻点,写的时候只需要加上一句话,由实际意义得这个问题有值或者是最小值,这个点就是值点或者是最小点。
如果解出来多个导数等于0的点,这个时候只需相互比较大小就可以了。
求函数f(x,y,z)在条件φ(x,y,z)=0下的极值。
方法(步骤)是:
1、做拉格朗日函数L=f(x,y,z)+λφ(x,y,z),λ称拉格朗日乘数;
2、求L分别对x,y,z,λ求偏导,得方程组,求出驻点P(x,y,z);
如果这个实际问题的或最小值存在,一般说来驻点只有一个,于是最值可求。
条件极值问题也可以化为无条件极值求解,但有些条件关系比较复杂,代换和运算很繁,而相对来说“拉格朗日乘数法”不需代换,运算简单一点,这就是优势。
条件极值是限制在一个子流形上的极值,条件极值存在时无条件极值不一定存在,即使存在二者也不一定相等。
设在约束条件之下求函数的极值。满足约束条件的点是函数的条件极值点,且在该点函数满足隐函数存在条件时, 由方程定隐函数 ,于是点就是一元函数的极限点。
拉格朗日乘子法
拉格朗日乘子法是一种寻找多元函数在一组约束下的极值方法。
上图中
与椭圆体相交平面上直线 如果高度上没有限制那么 就形成一个面,这个面与椭圆体相交可以表示为 ,我们就可以在这个曲线找到最小值。然后我们可以将这等高线投影到二维平面上来简化问题
在上图中,我们可以推断出其实最小(或值)就位于限制条件g(x,y)和方程f(x,y)等号线相切的位置。而且有共同切线的斜率,那么他们法线方向是 成比例 的。这个比例系数就是拉格朗日乘子
我们现在来简单推导一下,这里将 y 表示为对于 x 的函数,那么就有 y(x),然后分别带入下面两个方程就得到。
下面我么这个两个方程都对x 进行偏微分,通过链式法则我们就得到下面式子
因为我们知道他们斜率是成比例的,所有就可以得到这样结论,这就是拉格朗日乘子法,其中 就是乘子
我们就可以利用这个三个条件来求在有限制条件下方程极值问题
设 ,在 的条件限制下有极值。
利用上面知识来求极值
然后他们带入到 得到
那么结果就是最小值和值分别是 5 和 -5