拉格朗日乘数法(Lagrange Multiplier Method)基本思想
作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。
如何将一个含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题?拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n个变量分别求偏导对应了n个方程,然后加上k个约束条件(对应k个拉格朗日乘子)一起构成包含了(n+k)变量的(n+k)个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。

维基百科:最优化解

绿线标出的是约束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)达到极值时g(x,y)−c等于零。
min( F(x,λ) )取得极小值时其导数为0,即▽f(x)+▽∑ni=λihi(x)=0,也就是说f(x)和h(x)的梯度共线。
简言之,在F(x,λ)取得最优化解时,即F(x,λ)取极值(导数为0,▽[f(x,y)+λ(g(x,y)−c)]=0)时,f(x)与g(x) 梯度共线,此时就是在条件约束g(x)下,f(x)的最优化解。

例子

给定椭球,式子如下所示。求这个椭球的内接长方体的最大体积。

这个问题实际上就是条件极值问题,即在题目条件 下,求解 f(x,y,z)=8xyz的最大值。

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

接着,要对**F(x,y,z,λ)**求偏导得到

联立前三个方程得到:bx=ay、az=cx,带入第四个方程求解得到

最后,带回原式求解得到最大值,如下所示。

Python求解

题目同刚刚所求解的例子。

from scipy.optimize import minimize
import numpy as np
e = 1e-10 # 非常接近0的值
fun = lambda x : 8 * (x[0] * x[1] * x[2]) # f(x,y,z) =8 *x*y*z
cons = ({'type': 'eq', 'fun': lambda x: x[0]**2+ x[1]**2+ x[2]**2 - 1}, # x^2 + y^2 + z^2=1{'type': 'ineq', 'fun': lambda x: x[0] - e}, # x>=e等价于 x > 0{'type': 'ineq', 'fun': lambda x: x[1] - e},{'type': 'ineq', 'fun': lambda x: x[2] - e})
x0 = np.array((1.0, 1.0, 1.0)) # 设置初始值
res = minimize(fun, x0, method='SLSQP', constraints=cons)
print('最大值:',res.fun)
print('最优解:',res.x)
print('迭代终止是否成功:', res.success)
print('迭代终止原因:', res.message)

运行结果如下:

参考教程:https://www.cnblogs.com/maybe2030/p/4946256.html

拉格朗日乘数法及python实现拉格朗日乘数法相关推荐

  1. 拉格朗日乘数法及python实现

    在数学最优问题中,拉格朗日乘数法(以数学家约瑟夫·路易斯·拉格朗日命名)是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法.这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n ...

  2. 【建模算法】变异系数法(Python实现)

    [建模算法]变异系数法(Python实现) 变异系数法是根据统计学方法计算得出系统各指标变化程度的方法,是直接利用各项指标所包含的信息,通过计算得到指标的权重,因此是一种客观赋权的方法. ​ 变异系数 ...

  3. 凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)

    凸优化学习 我们前面说过,拉格朗日法在实际中应用不大.为什么呢?因为 α \alpha α的取值很难取,这就导致拉格朗日法鲁棒性很低,收敛很慢,解很不稳定.于是就有了今天的增广拉格朗日法和ADMM. ...

  4. 函数插值的python实现——拉格朗日、牛顿插值

    函数插值的python实现--拉格朗日.牛顿插值 1. 拉格朗日(Larange)插值 实现代码 2. 牛顿(Larange)插值 2.1 牛顿插值多项式的基本形式 2.2 牛顿均差插值多项式 (1) ...

  5. 【数值分析】python实现拉格朗日插值

    基于python实现拉格朗日插值,可自定义节点数量n. 一.拉格朗日插值公式 二.python代码 import matplotlib.pyplot as plt import numpy as np ...

  6. python实现双向最大匹配法

    python实现双向最大匹配法 CSDN小马哥 于 2019-01-08 21:01:29 发布 2776  收藏 3 文章标签: python 中文分词技术 双向最大匹配法 自然语言处理 版权 -- ...

  7. 组合赋权法之python

    目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...

  8. df满足条件的值修改_如何用python实现熵值法求指标权重(实例)

    权重是指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度,倾向于贡献度或重要性.而在我们的数据分析过程中,倘若各个 ...

  9. 建模笔记——熵值法熵权法(python)

    熵值法&熵权法-python实现 时隔老久,重新整理一下笔记.仅供个人自学使用,读者自行参考 Reference: 存了不知道多久的本地文件 司守奎,python数学实验与建模,2020 ht ...

最新文章

  1. Android开发环境部署:JDK+Android Studio
  2. Google地图搜索的触角伸向月球
  3. 并查集类的c++封装,比较union_find algorithm四种实现方法之间的性能差别
  4. Linq To Sql 练习
  5. 计算机怎么隐藏桌面图标,怎么隐藏电脑界面右下角的几个图标?(看图)
  6. 【基础知识】 之 Binary Search Tree 二叉搜索树
  7. Python pip 国内镜像大全及使用办法
  8. [蓝桥杯2015决赛]分机号-枚举(水题)
  9. windows 根据端口杀死进程
  10. Eclipse中,查找文件后(使用ctrl shift R/T),如何关联到文件所在目录(查看文件所在的目录结构)。
  11. 【工具】Get Data-获取论文图片中数据的工具
  12. 宝藏世界中什么叫服务器中断了,《宝藏世界》Trove无法登陆解决方法
  13. php 微信支付 回调处理,TP微信支付(回调处理)
  14. 勒让德多项式(Legendre Polynomials)推导
  15. Python基础语法函数——经典函数实例
  16. Symbian知识汇集
  17. c++11 入门基础
  18. Android简单适配9.0~12.0
  19. Python写一个简洁拼写检查器
  20. 智慧城市在发展过程中,最好就业的工作岗位?

热门文章

  1. [附源码]java+ssm计算机毕业设计基于web的服装设计系统的设计与实现hn9pb(源码+程序+数据库+部署)
  2. Java Swing详细操作
  3. Cobalt Strike 注入msf会话
  4. java okhttp3 使用_Java发送http请求方法之OkHttp3
  5. 详解EIP-4361:什么是以太坊登录|Tokenview
  6. 举例说明strcmp的用法
  7. 基于51单片机汽车胎压温度监测报警系统(程序+仿真+原理图+元件清单)
  8. 小红星歌唱组合 听妈妈讲那过去的事情 伴奏
  9. P1295 棋子移动
  10. 2016年12月29日