拉格朗日乘数法_拉格朗日乘数法是求边界点吗

拉格朗日乘数法_拉格朗日乘数法是求边界点吗原文地址:https://www.cnblogs.com/maybe2030/p/4946256.html阅读目录1.拉格朗日乘数法的基本思想 2.数学实例 3.拉格朗日乘数法的基本形态 4.拉格朗日乘数法与KKT条件   拉格朗日乘数法(LagrangeMultiplierMethod)之前听数学老师授课的时候就是一知半解,现在越发感觉拉格朗日乘数法应用的广泛性,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

原文地址:https://www.cnblogs.com/maybe2030/p/4946256.html

阅读目录

 

  拉格朗日乘数法(Lagrange Multiplier Method)之前听数学老师授课的时候就是一知半解,现在越发感觉拉格朗日乘数法应用的广泛性,所以特意抽时间学习了麻省理工学院的在线数学课程。新学到的知识一定要立刻记录下来,希望对各位博友有些许帮助。

回到顶部

1. 拉格朗日乘数法的基本思想

  作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。

  如何将一个含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题?拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n个变量分别求偏导对应了n个方程,然后加上k个约束条件(对应k个拉格朗日乘子)一起构成包含了(n+k)变量的(n+k)个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。

  解决的问题模型为约束优化问题:

  min/max a function f(x,y,z), where x,y,z are not independent and g(x,y,z)=0.

  即:min/max f(x,y,z)

    s.t. g(x,y,z)=0

回到顶部

2. 数学实例

  首先,我们先以麻省理工学院数学课程的一个实例来作为介绍拉格朗日乘数法的引子。

  【麻省理工学院数学课程实例】求双曲线xy=3上离远点最近的点。

  解:

  首先,我们根据问题的描述来提炼出问题对应的数学模型,即:

  min f(x,y)=x2+y2(两点之间的欧氏距离应该还要进行开方,但是这并不影响最终的结果,所以进行了简化,去掉了平方)

  s.t. xy=3.

  根据上式我们可以知道这是一个典型的约束优化问题,其实我们在解这个问题时最简单的解法就是通过约束条件将其中的一个变量用另外一个变量进行替换,然后代入优化的函数就可以求出极值。我们在这里为了引出拉格朗日乘数法,所以我们采用拉格朗日乘数法的思想进行求解。

  我们将x2+y2=c的曲线族画出来,如下图所示,当曲线族中的圆与xy=3曲线进行相切时,切点到原点的距离最短。也就是说,当f(x,y)=c的等高线和双曲线g(x,y)相切时,我们可以得到上述优化问题的一个极值(注意:如果不进一步计算,在这里我们并不知道是极大值还是极小值)。

拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  现在原问题可以转化为求当f(x,y)和g(x,y)相切时,x,y的值是多少?

  如果两个曲线相切,那么它们的切线相同,即法向量是相互平行的,▽f//▽g.

  由▽f//▽g可以得到,▽f=λ*▽g。

  这时,我们将原有的约束优化问题转化为了一种对偶的无约束的优化问题,如下所示:

  原问题:min f(x,y)=x2+y2              对偶问题:由▽f=λ*▽g得,

      s.t. xy=3                                       fx=λ*gx,

                                                                     fy=λ*gy,

                                                                          xy=3.

                  约束优化问题                                   无约束方程组问题

  通过求解右边的方程组我们可以获取原问题的解,即

  2x=λ*y

  2y=λ*x

  xy=3

  通过求解上式可得,λ=2或者是-2;当λ=2时,(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3)),而当λ=-2时,无解。所以原问题的解为(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3))。

  通过举上述这个简单的例子就是为了体会拉格朗日乘数法的思想,即通过引入拉格朗日乘子(λ)将原来的约束优化问题转化为无约束的方程组问题。

回到顶部

3. 拉格朗日乘数法的基本形态

   求函数拉格朗日乘数法_拉格朗日乘数法是求边界点吗在满足拉格朗日乘数法_拉格朗日乘数法是求边界点吗下的条件极值,可以转化为函数拉格朗日乘数法_拉格朗日乘数法是求边界点吗的无条件极值问题。

即等式约束条件

 

         min f(x,y)    

          s.t. g(x,y) = c

  我们可以画图来辅助思考。

拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  绿线标出的是约束g(x,y)=c的点的轨迹。蓝线是f(x,y)的等高线。箭头表示斜率,和等高线的法线平行。

     分析:从梯度的方向上来看,显然有d1>d2。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有这条约    束,f(x,y)的最小值应该会落在最小那圈等高线内部的某一点上。而现在加上了约束,最小值点应该在哪里呢?显然应该是在f(x,y)的等高线正好和约束线相切的位置,因为如果只是相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值。

 

     如果我们对约束也求梯度∇g(x,y),则其梯度如图中绿色箭头所示。很容易看出来,要想让目标函数f(x,y)的等高线和约束相切,则他们切点的梯度一定在一条直线上(f和g的斜率平行)。

  也即在最优化解的时候:∇f(x,y)=λ(∇g(x,y)-C)    (其中∇为梯度算子; 即:f(x)的梯度 = λ* g(x)的梯度,λ是常数,可以是任何非0实数,表示左右两边同向。)

      即:▽[f(x,y)+λ(g(x,y)−c)]=0 , λ≠0

  一旦求出λ的值,将其套入下式,易求在无约束极值和极值所对应的点。

  F(x,y)=f(x,y)+λ(g(x,y)−c)

  新方程F(x,y)在达到极值时与f(x,y)相等,因为F(x,y)达到极值时g(x,y)−c总等于零。

  上述式子取得极小值时其导数为0,即▽f(x)+▽∑λigi(x)=0,也就是说f(x)和g(x)的梯度共线。

 简单的说,在F(x,λ)取得最优化解的时候,即F(x,λ)取极值(导数为0,▽[f(x,y)+λ(g(x,y)−c)]=0)的时候,f(x)与g(x) 梯度共线,此时就是在条件约束g(x)下,f(x)的最优化解。

  题目1:

  给定椭球

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  求这个椭球的内接长方体的最大体积。这个问题实际上就是条件极值问题,即在条件   

    拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  下,求拉格朗日乘数法_拉格朗日乘数法是求边界点吗的最大值。

  当然这个问题实际可以先根据条件消去拉格朗日乘数法_拉格朗日乘数法是求边界点吗,然后带入转化为无条件极值问题来处理。但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。通过拉格朗日乘数法将问题转化为

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  对拉格朗日乘数法_拉格朗日乘数法是求边界点吗求偏导得到

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  联立前面三个方程得到拉格朗日乘数法_拉格朗日乘数法是求边界点吗拉格朗日乘数法_拉格朗日乘数法是求边界点吗,带入第四个方程解之

      拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  带入解得最大体积为

      拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  拉格朗日乘数法对一般多元函数在多个附加条件下的条件极值问题也适用。

  题目2:

  题目:求离散分布的最大熵。

  分析:因为离散分布的熵表示如下

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

     而约束条件为

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

     要求函数拉格朗日乘数法_拉格朗日乘数法是求边界点吗的最大值,根据拉格朗日乘数法,设

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

     对所有的拉格朗日乘数法_拉格朗日乘数法是求边界点吗求偏导数,得到

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

     计算出这拉格朗日乘数法_拉格朗日乘数法是求边界点吗个等式的微分,得到

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

     这说明所有的拉格朗日乘数法_拉格朗日乘数法是求边界点吗都相等,最终解得

     拉格朗日乘数法_拉格朗日乘数法是求边界点吗

     因此,使用均匀分布可得到最大熵的值。

回到顶部

4. 拉格朗日乘数法与KKT条件

  我们上述讨论的问题均为等式约束优化问题,但等式约束并不足以描述人们面临的问题,不等式约束比等式约束更为常见,大部分实际问题的约束都是不超过多少时间,不超过多少人力,不超过多少成本等等。所以有几个科学家拓展了拉格朗日乘数法,增加了KKT条件之后便可以用拉格朗日乘数法来求解不等式约束的优化问题了。

  首先,我们先介绍一下什么是KKT条件。

  KKT条件是指在满足一些有规则的条件下, 一个非线性规划(Nonlinear Programming)问题能有最优化解法的一个必要和充分条件. 这是一个广义化拉格朗日乘数的成果. 一般地, 一个最优化数学模型的列标准形式参考开头的式子, 所谓 Karush-Kuhn-Tucker 最优化条件,就是指上式的最优点x∗必须满足下面的条件:

  1). 约束条件满足gi(x∗)≤0,i=1,2,…,p, 以及,hj(x∗)=0,j=1,2,…,q    (h(x) =0;

  2). ∇f(x∗)+∑i=1μi∇gi(x∗)+∑j=1λj∇hj(x∗)=0, 其中∇为梯度算子; (L(a, b, x)对x求导为零;

  3). λj≠0且不等式约束条件满足μi≥0,μigi(x∗)=0,i=1,2,…,p。 (a*g(x) = 0;

  KKT条件第一项是说最优点x∗必须满足所有等式及不等式限制条件, 也就是说最优点必须是一个可行解, 这一点自然是毋庸置疑的. 第二项表明在最优点x∗, ∇f必须是∇gi和∇hj的线性組合, μi和λj都叫作拉格朗日乘子. 所不同的是不等式限制条件有方向性, 所以每一个μi都必须大于或等于零, 而等式限制条件没有方向性,所以λj没有符号的限制, 其符号要视等式限制条件的写法而定.

  为了更容易理解,我们先举一个例子来说明一下KKT条件的由来。

  let L(x,μ)=f(x)+∑k=1μkgk(x),其中μk≥0,gk(x)≤0

  ∵μk≥0 gk(x)≤0  =>  μg(x)≤0

  ∴maxμL(x,μ)=f(x)                  (2)

  ∴minxf(x)=minxmaxμL(x,μ)     (3)

  maxμminxL(x,μ)=maxμ[minxf(x)+minxμg(x)]=maxμminxf(x)+maxμminxμg(x)=minxf(x)+maxμminxμg(x)

  又∵μk≥0, gk(x)≤0

  拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  ∴maxμminxμg(x)=0, 此时μ=0 or g(x)=0.

  ∴maxμminxL(x,μ)=minxf(x)+maxμminxμg(x)=minxf(x)      (4)

  此时μ=0 or g(x)=0.

  联合(3),(4)我们得到minxmaxμL(x,μ)=maxμminxL(x,μ), 亦即

   拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  minxmaxμL(x,μ)=maxμminxL(x,μ)=minxf(x)

  我们把maxμminxL(x,μ)称为原问题minxmaxμL(x,μ)的对偶问题,上式表明当满足一定条件时原问题、对偶的解、以及minxf(x)是相同的,且在最优解x∗处μ=0 or g(x∗)=0。把x∗代入(2)得maxμL(x∗,μ)=f(x∗),由(4)得maxμminxL(x,μ)=f(x∗),所以L(x∗,μ)=minxL(x,μ),这说明x∗也是L(x,μ)的极值点,即

  拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  最后总结一下:

  拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  KKT条件是拉格朗日乘子法的泛化,如果我们把等式约束和不等式约束一并纳入进来则表现为:

  拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  注:x,λ,μ都是向量。

  拉格朗日乘数法_拉格朗日乘数法是求边界点吗

  表明f(x)在极值点x∗处的梯度是各个hi(x∗)和gk(x∗)梯度的线性组合。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/200772.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MyBatis模糊查询的4种实现方式

    MyBatis模糊查询的4种实现方式1、根据姓名模糊查询员工信息1.1、方式一步骤一:编写配置文件步骤二:测试步骤三:分析此种方式需要在调用处手动的去添加“%”通配符。1.2、方式二说明:使用方式一可以实现模糊查询,但是有一点不方便的地方就是:在测试类中,调用selectList()方法传参时需要调用者手动的添加%号通配符,显然是麻烦的,能否在映射配置文件中直接将%号写好呢?有的朋友可能会这么想,好办,直接在配置文件中这么写:形如1:测试后发现,程序会报错,原因是:缺少单引号。这…

    2022年10月28日
  • 常见电容器图片_电容分类图片-各种电容器图片[通俗易懂]

    常见电容器图片_电容分类图片-各种电容器图片[通俗易懂]《电容分类图片-各种电容器图片》由会员分享,可在线阅读,更多相关《电容分类图片-各种电容器图片(7页珍藏版)》请在人人文库网上搜索。1、电容分类图片-各种电容器图片第1幅图1胆电容。图2灯具电容器。图3MKPH电容。图4MET电容。图5,10PEI电容,图6,胆贴片电容。图7MPE电容。图8贴片电容。图11轴向电解电容器。图12MPP电容第2幅图1PPN电容。图2PET电容…

  • Maven项目报错:“ SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder ”解决办法「建议收藏」

    Maven项目报错:“ SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder ”解决办法「建议收藏」运行Maven项目时,控制台出现如下图所示的报错信息:问题分析:根据报错提示,我们可以知道出错的原因是“加载类文件org.slf4j.impl.StaticLoggerBinder时失败”,而出错的地方主要是在于slf4j的jar包。官网给出的解决思路如下:Thiserrorisreportedwhentheorg.slf4j.impl.StaticLoggerBinder…

    2022年10月30日
  • latex输入希腊字母_LaTeX绝对值

    latex输入希腊字母_LaTeX绝对值

  • 卡方线性趋势检验_spss 卡方的线性趋势检验如何做?[通俗易懂]

    卡方线性趋势检验_spss 卡方的线性趋势检验如何做?[通俗易懂]Analyze—DescriptiveStatistics-Crosstabs过程,分别放入两个变量,然后在Statistics过程中勾上Chi-squrae,完成后会出现卡方独立性检验结果,其中有Linear-by-LinearAssociation一项,应该就是你所谓的卡放线性趋势检验。不过你的数据格式:阶段恶性正常111426281473182175是这样的话是没法直接在…

  • volatile禁止指令重排序_volatile int

    volatile禁止指令重排序_volatile intvolatile禁止指令重排JMM要求有序性计算机在执行程序时,为了提高性能,编译器和处理器常常会做指令重排,一把分为以下3种单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致.(单线程不用关心指令重排)处理器在进行重新排序是必须要考虑指令之间的数据依赖性多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程使用的变量能否保持一致性是无法确定的,结果无法预测源码写的顺序不见得和编译的指令顺序一样例子1比如源码如下publicvoidmySort(){intx

    2022年10月18日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号