约束规划——拉格朗日乘数法
拉格朗日乘数法
拉格朗日乘数法的基本思想
拉格朗日乘数法(Lagrange Multiplier Method)是一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。
如何将一个含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题?拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n个变量分别求偏导对应了n个方程,然后加上k个约束条件(对应k个拉格朗日乘子)一起构成包含了(n+k)变量的(n+k)个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。
解决的问题模型为约束优化问题:
min/maxf(x,y,z)min/max f(x,y,z)min/maxf(x,y,z)
s.t.s.t.s.t. g(x,y,z)=0g(x,y,z)=0g(x,y,z)=0
数学实例
首先,我们先以麻省理工学院数学课程的一个实例来作为介绍拉格朗日乘数法的引子。求双曲线xy=3上离远点最近的点。
解:首先,我们根据问题的描述来提炼出问题对应的数学模型,即:
minf(x,y)=x2+y2min f(x,y)=x^2+y^2minf(x,y)=x2+y2
s.t.s.t.s.t. xy=3xy=3xy=3
(两点之间的欧氏距离应该还要进行开方,但是这并不影响最终的结果,所以进行了简化,去掉了平方)
根据上式我们可以知道这是一个典型的约束优化问题,其实我们在解这个问题时最简单的解法就是通过约束条件将其中的一个变量用另外一个变量进行替换,然后代入优化的函数就可以求出极值。我们在这里为了引出拉格朗日乘数法,所以我们采用拉格朗日乘数法的思想进行求解。
我们将x2+y2=cx^2+y^2=cx2+y2=c的曲线族画出来,如下图所示,当曲线族中的圆与xy=3xy=3xy=3曲线进行相切时,切点到原点的距离最短。也就是说,当f(x,y)=cf(x,y)=cf(x,y)=c的等高线和双曲线g(x,y)g(x,y)g(x,y)相切时,我们可以得到上述优化问题的一个极值(注意:如果不进一步计算,在这里我们并不知道是极大值还是极小值)。
现在原问题可以转化为求当f(x,y)和g(x,y)相切时,x,y的值是多少?
如果两个曲线相切,那么它们的切线相同,即法向量是相互平行的: ▽f//▽g▽f//▽g▽f//▽g
由▽f//▽g▽f//▽g▽f//▽g可以得到,▽f=λ▽g▽f=λ▽g▽f=λ▽g。
这时,我们将原有的约束优化问题转化为了一种无约束的优化问题,如下所示:
原问题(约束优化问题):
minf(x,y)=x2+y2min f(x,y)=x^2+y^2minf(x,y)=x2+y2
s.t.s.t.s.t. xy=3xy=3xy=3
无约束方程组问题:
由▽f//▽g▽f//▽g▽f//▽g可以得到
∂f∂x=λ∂g∂x\frac{\partial f}{\partial x} =λ \frac{\partial g}{\partial x}∂x∂f=λ∂x∂g
∂f∂y=λ∂g∂y\frac{\partial f}{\partial y} =λ \frac{\partial g}{\partial y}∂y∂f=λ∂y∂g
xy=3xy=3xy=3
通过求解上面的无约束方程组我们可以获取原问题的解:
2x=λy2x=\lambda y2x=λy
2y=λx2y = \lambda x2y=λx
xy=3xy=3xy=3
通过求解上式可得,λ=2λ=2λ=2或者是−2-2−2:
当λ=2λ=2λ=2时,(x,y)=(3,3)(x,y)=(\sqrt3, \sqrt3)(x,y)=(3,3)或者(−3,−3)(-\sqrt3, -\sqrt3)(−3,−3),
当λ=−2λ=-2λ=−2时,无解。
所以原问题的解为(x,y)=(3,3)(x,y)=(\sqrt3, \sqrt3)(x,y)=(3,3)或者(−3,−3)(-\sqrt3, -\sqrt3)(−3,−3)。
通过举上述这个简单的例子就是为了体会拉格朗日乘数法的思想,即通过引入拉格朗日乘子λ\lambdaλ将原来的约束优化问题转化为无约束的方程组问题。
拉格朗日乘数法的基本形态
求函数f(x,y)f(x,y)f(x,y)在满足g(x,y)=cg(x,y)=cg(x,y)=c下的条件极值,可以转化为函数L(x,y,λ)=f(x,y)+λ(g(x,y)−c)L(x,y,\lambda)=f(x,y)+\lambda (g(x,y)-c)L(x,y,λ)=f(x,y)+λ(g(x,y)−c)的无条件极值问题。
我们可以画图来辅助思考。
绿线标出的是约束g(x,y)=c的点的轨迹。蓝线是f(x,y)的等高线。箭头表示斜率,和等高线的法线平行。
从图上可以直观地看到在最优解处,f和g的斜率平行。
▽[f(x,y)+λ(g(x,y)−c)]=0,λ≠0▽[f(x,y)+λ(g(x,y)−c)]=0, λ≠0▽[f(x,y)+λ(g(x,y)−c)]=0,λ=0
一旦求出λ的值,将其套入下式,易求在无约束极值和极值所对应的点。
L(x,y)=f(x,y)+λ(g(x,y)−c)L(x,y)=f(x,y)+λ(g(x,y)−c)L(x,y)=f(x,y)+λ(g(x,y)−c)
新方程F(x,y)F(x,y)F(x,y)在达到极值时与f(x,y)f(x,y)f(x,y)相等,因为L(x,y)L(x,y)L(x,y)达到极值时g(x,y)−cg(x,y)−cg(x,y)−c总等于零。
例1
给定椭球x2a2+y2b2+z2c2=1\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1a2x2+b2y2+c2z2=1,求这个椭球的内接长方体的最大体积。
这个问题实际上就是条件极值问题,即在条件 x2a2+y2b2+z2c2=1\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1a2x2+b2y2+c2z2=1下求f(x,y,z)=8xyzf(x,y,z)= 8xyzf(x,y,z)=8xyz的最大值。
当然这个问题实际可以先根据条件消去zzz,然后带入转化为无条件极值问题来处理。但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。通过拉格朗日乘数法将问题转化为:
L(x,y,z,λ)=f(x,y,z)+λg(x,y,z)=8xyz+λ(x2a2+y2b2+z2c2−1)L(x,y,z,\lambda)=f(x,y,z)+\lambda g(x,y,z)=8xyz+\lambda(\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}-1)L(x,y,z,λ)=f(x,y,z)+λg(x,y,z)=8xyz+λ(a2x2+b2y2+c2z2−1)
对L(x,y,z,λ)L(x,y,z,\lambda)L(x,y,z,λ)求偏导:
∂xL(x,y,z,λ)∂x=8yz+2λxa2=0\frac{\partial xL(x,y,z,\lambda)}{\partial x} =8yz+\frac{2\lambda x}{a^2}=0∂x∂xL(x,y,z,λ)=8yz+a22λx=0
∂xL(x,y,z,λ)∂y=8xz+2λyb2=0\frac{\partial xL(x,y,z,\lambda)}{\partial y} =8xz+\frac{2\lambda y}{b^2}=0∂y∂xL(x,y,z,λ)=8xz+b22λy=0
∂xL(x,y,z,λ)∂z=8xy+2λzc2=0\frac{\partial xL(x,y,z,\lambda)}{\partial z} =8xy+\frac{2\lambda z}{c^2}=0∂z∂xL(x,y,z,λ)=8xy+c22λz=0
∂xL(x,y,z,λ)∂λ=x2a2+y2b2+z2c2−1=0\frac{\partial xL(x,y,z,\lambda)}{\partial \lambda} =\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}-1=0∂λ∂xL(x,y,z,λ)=a2x2+b2y2+c2z2−1=0
最终得到x=33a,y=33b,z=33cx=\frac{\sqrt 3}{3}a,y=\frac{\sqrt 3}{3}b,z=\frac{\sqrt 3}{3}cx=33a,y=33b,z=33c
最大体积为Vmax=f(33a,33b,33c)=839abcV_{max}=f(\frac{\sqrt 3}{3}a,\frac{\sqrt 3}{3}b,\frac{\sqrt 3}{3}c)=\frac{8\sqrt 3}{9}abcVmax=f(33a,33b,33c)=983abc
多约束的拉格朗日乘数法
上面我们讨论的都是单约束的拉格朗日乘数法,当存在多个等式约束时(其实不等式约束也是一样的),我们进行一些推广:
min/maxf(x,y,z)min/max f(x,y,z)min/maxf(x,y,z)
s.t.s.t.s.t. gi(x,y,z)=0,i=1,2,...,Ng_i(x,y,z)=0, i = 1,2,...,Ngi(x,y,z)=0,i=1,2,...,N
多约束拉格朗日乘数法的函数表达形式为:
L(x,y,z,λ)=f(x,y,z)+ΣiNλigi(x,y,z)L(x,y,z,\lambda)=f(x,y,z)+\Sigma_i^N\lambda_ig_i(x,y,z)L(x,y,z,λ)=f(x,y,z)+ΣiNλigi(x,y,z)
广义拉格朗日乘数法(Generalized Lagrange multipliers)
以上我们的拉格朗日乘数法解决了等式约束的最优化问题,但是在存在不等式的最优化问题,因此学者提出了广义拉格朗日乘数法,用与解决含有不等式约束的最优化问题。
首先,我们先一般化我们的问题:
minx,y,zf(x,y)min_{x,y,z}f(x,y)minx,y,zf(x,y)
s.t.s.t.s.t. gi(x,y)≤0,i=1,2,...,Ng_i(x,y)\le0,i=1,2,...,Ngi(x,y)≤0,i=1,2,...,N
hi(x,y)=0,i=1,2,...,Mh_i(x,y)=0,i=1,2,...,Mhi(x,y)=0,i=1,2,...,M
类似于拉格朗日乘数法,我们用αi\alpha_iαi和βi\beta_iβi作为不等式约束和等式约束的拉格朗日乘子,得出如下:
L(x,y,α,β)=f(x,y)+ΣiNαigi(x,y)+ΣiMβihi(x,y)L(x,y,\alpha,\beta)=f(x,y)+\Sigma_i^N\alpha_ig_i(x,y)+\Sigma_i^M\beta_ih_i(x,y)L(x,y,α,β)=f(x,y)+ΣiNαigi(x,y)+ΣiMβihi(x,y)
KKT
KKT条件(Karush–Kuhn–Tucker conditions)指出,当满足以下几个条件的时候,其解是问题最优解的候选解(摘自wikipedia)。
1、Stationarity(稳定性)
对于最小化问题就是:
▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0▽f(x,y)+\Sigma_i^N\alpha_i▽g_i(x,y)+\Sigma_i^M\beta_i▽h_i(x,y)=0▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0
对于最大化问题就是:
▽f(x,y)−(ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y))=0▽f(x,y)-(\Sigma_i^N\alpha_i▽g_i(x,y)+\Sigma_i^M\beta_i▽h_i(x,y))=0▽f(x,y)−(ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y))=0
2、Primal feasibility(原始可行性)
gi(x,y)≤0,i=1,2,...,Ng_i(x,y)\le0,i=1,2,...,Ngi(x,y)≤0,i=1,2,...,N
hi(x,y)=0,i=1,2,...,Mh_i(x,y)=0,i=1,2,...,Mhi(x,y)=0,i=1,2,...,M
3、Dual feasibility(对偶可行性)
αi≥0,i=1,2,...,N\alpha_i\ge0,i=1,2,...,Nαi≥0,i=1,2,...,N
4、Complementary slackness(互补松弛)
αigi(x,y)=0,i=1,2,...,N\alpha_ig_i(x,y)=0,i=1,2,...,Nαigi(x,y)=0,i=1,2,...,N
其中的Stationarity(稳定性)与我们的拉格朗日乘数法的含义是相同的,就是梯度共线的意思;而Primal feasibility(原始可行性)条件就是主要约束条件,自然是需要满足的;有趣的和值得注意的是Dual feasibility(对偶可行性)和Complementary slackness(互补松弛),接下来我们探讨下这两个条件,以及为什么不等式约束会多出这两个条件。
为了接下来的讨论方便,我们将N设为3,并且去掉等式约束,这样我们的最小化问题的广义拉格朗日函数就变成了:
L(x,y,α,β)=f(x,y)+Σi3αigi(x,y)L(x,y,\alpha,\beta)=f(x,y)+\Sigma_i^3\alpha_ig_i(x,y)L(x,y,α,β)=f(x,y)+Σi3αigi(x,y)
绘制出来的示意图如下所示:
其中di>djd_i>d_jdi>dj,当I>jI>jI>j,而蓝线为最优化寻路过程。
让我们仔细观察式子αi≥0\alpha_i\ge0αi≥0和αigi(x,y)=0\alpha_ig_i(x,y)=0αigi(x,y)=0,我们不难发现,因为αi≤0,gi(x,y)≤0\alpha_i\le0, g_i(x,y)\le0αi≤0,gi(x,y)≤0,而αigi(x,y)=0\alpha_ig_i(x,y)=0αigi(x,y)=0,所以αi\alpha_iαi和gi(x,y)g_i(x,y)gi(x,y)之中必有一个为0。
我们从上面的示意图入手理解并且记好公式▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0▽f(x,y)+\Sigma_i^N\alpha_i▽g_i(x,y)+\Sigma_i^M\beta_i▽h_i(x,y)=0▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0。
让我们假设初始化一个点A, 这个点A明显不处于最优点,也不在可行域内,可知g2(x,y)>0g_2(x,y)>0g2(x,y)>0,违背了gi(x,y)≤0g_i(x,y)\le0gi(x,y)≤0,为了满足约束αigi(x,y)=0\alpha_ig_i(x,y)=0αigi(x,y)=0,有α2=0\alpha_2=0α2=0,导致αi▽gi(x,y)=0\alpha_i▽g_i(x,y)=0αi▽gi(x,y)=0
而对于i=1,3i=1,3i=1,3,因为满足约束条件而且g1(x,y)≠0,g3(x,y)≠0g_1(x,y)≠0,g_3(x,y)≠0g1(x,y)=0,g3(x,y)=0,所以α1=0,α3=0\alpha_1=0,\alpha_3=0α1=0,α3=0。这样我们的式子▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0▽f(x,y)+\Sigma_i^N\alpha_i▽g_i(x,y)+\Sigma_i^M\beta_i▽h_i(x,y)=0▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0就只剩下∇f(x,y)∇f(x,y)∇f(x,y)
因此对着∇f(x,y)∇f(x,y)∇f(x,y)进行优化,也就是沿着f(x,y)f(x,y)f(x,y)梯度方向下降即可,不需考虑其他的条件(因为还完全处于可行域之外)。因此,A点一直走啊走,从A到B,从B到C,从C到D,这个时候因为D点满足g2(x,y)=0g_2(x,y)=0g2(x,y)=0,因此α2>0\alpha_2>0α2>0
,所以α2∇g2(x,y)≠0\alpha_2∇g_2(x,y)≠0α2∇g2(x,y)=0,因此▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0▽f(x,y)+\Sigma_i^N\alpha_i▽g_i(x,y)+\Sigma_i^M\beta_i▽h_i(x,y)=0▽f(x,y)+ΣiNαi▽gi(x,y)+ΣiMβi▽hi(x,y)=0就变成了∇f(x,y)+α2∇g2(x,y)∇f(x,y)+\alpha_2∇g_2(x,y)∇f(x,y)+α2∇g2(x,y)
所以在优化下一个点E的时候,就会考虑到需要满足约束g2(x,y)≤0g_2(x,y)≤0g2(x,y)≤0的条件,朝着向g2(x,y)g_2(x,y)g2(x,y)减小,而且f(x,y)f(x,y)f(x,y)减小的方向优化。因此下一个优化点就变成了E点,而不是G点。因此没有约束的情况下其优化路径可能是A→B→C→D→G→H,而添加了约束之后,其路径变成了A→B→C→D→E→F。
这就是为什么KKT条件引入了Dual feasibility(对偶可行性)和Complementary slackness(互补松弛),就是为了在满足不等式约束的情况下对目标函数进行优化。让我们记住这个条件,因为这个条件中某些αi=0\alpha_i=0αi=0的特殊性质,将会在SVM中广泛使用,而且正是这个性质定义了支持向量(SV)。
参考文献
最优化方法:拉格朗日乘数法
拉格朗日乘数法和KKT条件的直观解释
约束规划——拉格朗日乘数法相关推荐
- 不等式约束的拉格朗日乘数法_Abaqus血管支架仿真|接触约束执行方式
根据支架的建模基础.几何和网格划分.单元选择.材料和截面属性.分析步设置.载荷接触和约束.收敛调整,以及后处理.参数优化等内容.接着Abaqus血管支架仿真|建模基础.Abaqus血管支架仿真|几何和 ...
- 拉格朗日乘数法的原理,我用10幅图把它讲清楚了
机器学习是一个目标函数优化问题,给定目标函数f,约束条件会有一般包括以下三类: 仅含等式约束 仅含不等式约束 等式和不等式约束混合型 当然还有一类没有任何约束条件的最优化问题 关于最优化问题,大都令人 ...
- 拉格朗日乘数法(一种寻找变量受一个或多个条件所限制的多元函数的极值的方法)
拉格朗日乘数法 在数学最优问题中,拉格朗日乘数法(以数学家约瑟夫·路易斯·拉格朗日命名)是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法.这种方法将一个有n 个变量与k 个约束条件的最优化问 ...
- BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】
题目链接 BZOJ 题解 拉格朗日乘数法 拉格朗日乘数法用以求多元函数在约束下的极值 我们设多元函数\(f(x_1,x_2,x_3,\dots,x_n)\) 以及限制\(g(x_1,x_2,x_3,\ ...
- 从拉格朗日乘数法到KKT条件
从拉格朗日乘数法到KKT条件 最近看论文遇到了Karush–Kuhn–Tucker (KKT)条件,想搞清楚这是个什么东东,因此就把这个东西认真学习一下并且分享出来,希望对大家有用.学习KKT就不得不 ...
- 拉格朗日乘数法 —— 通俗理解
拉格朗日乘数法(Lagrange Multiplier Method)在数学最优问题中,是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法.记得以前大学高数.数模等课程多次提到过,在求解最有问 ...
- 数学基础知识总结 —— 9. 什么是拉格朗日乘数法(Lagrange Multiplier,有约束条件的多元函数求极值)
文章目录 定义 理解「拉格朗日乘数法」 一些例题 定义 拉格朗日乘数法(Lagrange multiplier,以数学家约瑟夫·拉格朗日命名),在数学中的最优化问题中,是一种寻找多元函数在其变量受到一 ...
- [Math Algorithm] 拉格朗日乘数法
https://www.cnblogs.com/maybe2030/p/4946256.html 阅读目录 1. 拉格朗日乘数法的基本思想 2. 数学实例 3. 拉格朗日乘数法的基本形态 4. 拉格朗 ...
- 拉格朗日乘数法及python实现
在数学最优问题中,拉格朗日乘数法(以数学家约瑟夫·路易斯·拉格朗日命名)是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法.这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n ...
最新文章
- Django--django安装和HTTP协议
- Android 实现ListView的A-Z字母排序
- html图片分四面切割播,CSS3切割轮播图
- python设计报告的前言怎么写_2017实习报告前言怎么写
- dataframe scala 修改值_【Spark学习笔记】 Scala DataFrame操作大全
- Zabbix监控Oracle 连接数
- msys2 pacman 安装 删除等常见命令汇总
- 使用express 代理图片下载
- paip.手机电话本备份导入到pc管理attilax总结
- Java八股文(高阶)背诵版
- 纤亿通解读—光纤通信系统工作原理
- Bandizip如何加密档案内文件名(让别人无法预览)
- SVN提交文件失败:系统找不到指定路径
- 农历数据html,农历公历数据sql,包含闰月数据,天干地支,风水等数据.sql
- 解决jupyter notebook :No module named ‘tensorflow‘ 及python.exe无法找到入口问题及500 : Internal Server Error
- android 实现重力感应,Android重力感应实现方式是怎样实现的?
- centos7分区挂载大容量数据盘
- 翻译: Github Copilot 可以创作艺术吗?
- Linux常用命令——hostid命令
- 新版电商运营学习路线图(全套视频笔记素材合集)