拉格朗日乘子法

拉格朗日乘子法

flyfish

拉格朗日乘子法是一种用于求解带约束优化问题的强有力工具。它通过引入新的变量(拉格朗日乘子),将带约束的优化问题转换为无约束的优化问题,从而简化问题的求解过程。

假设我们有一个优化问题:
min ⁡ f ( x ) \min f(x) minf(x)
subject to  g i ( x ) = 0 ,   i = 1 , … , m \text{subject to } g_i(x) = 0, \, i = 1, \ldots, m subject to gi(x)=0,i=1,,m其中, f ( x ) f(x) f(x) 是目标函数, g i ( x ) g_i(x) gi(x) 是等式约束条件。

“subject to”

在优化问题中,“subject to” 这部分用于引入约束条件。它表示在优化过程中,不仅需要找到使目标函数 f ( x ) f(x) f(x) 达到最优值的 x x x ,还需要确保这个 x x x 满足特定的约束条件。约束条件可以是等式或不等式。
例如,考虑以下优化问题:
min ⁡ f ( x , y ) = x 2 + y 2 \min f(x, y) = x^2 + y^2 minf(x,y)=x2+y2
subject to  x + y = 1 \text{subject to } x + y = 1 subject to x+y=1这里,“subject to” 表示在优化目标函数 x 2 + y 2 x^2 + y^2 x2+y2 的过程中,必须满足约束条件 x + y = 1 x + y = 1 x+y=1

为了求解这个问题,我们引入拉格朗日乘子 λ i \lambda_i λi,构造拉格朗日函数: L ( x , λ ) = f ( x ) + ∑ i = 1 m λ i g i ( x ) L(x, \lambda) = f(x) + \sum_{i=1}^{m} \lambda_i g_i(x) L(x,λ)=f(x)+i=1mλigi(x)
在这个函数中:

  • x x x 是原始问题的变量。

  • λ i \lambda_i λi 是拉格朗日乘子,对应于每一个约束 g i ( x ) = 0 g_i(x) = 0 gi(x)=0

  • L ( x , λ ) L(x, \lambda) L(x,λ) 是拉格朗日函数,它将目标函数 f ( x ) f(x) f(x) 和约束条件 g i ( x ) g_i(x) gi(x) 结合起来。
    通过对拉格朗日函数 L ( x , λ ) L(x, \lambda) L(x,λ) 求偏导数并设为零,我们可以得到一组方程,这些方程包括目标函数的梯度和约束条件的梯度:
    ∂ L ∂ x = ∇ f ( x ) + ∑ i = 1 m λ i ∇ g i ( x ) = 0 \frac{\partial L}{\partial x} = \nabla f(x) + \sum_{i=1}^{m} \lambda_i \nabla g_i(x) = 0 xL=f(x)+i=1mλigi(x)=0
    ∂ L ∂ λ i = g i ( x ) = 0 ,   i = 1 , … , m \frac{\partial L}{\partial \lambda_i} = g_i(x) = 0, \, i = 1, \ldots, m λiL=gi(x)=0,i=1,,m解这些方程可以得到 x x x λ i \lambda_i λi 的值。

简单例子

假设我们有以下优化问题:
min ⁡ f ( x , y ) = x 2 + y 2 \min f(x, y) = x^2 + y^2 minf(x,y)=x2+y2
subject to  g ( x , y ) = x + y − 1 = 0 \text{subject to } g(x, y) = x + y - 1 = 0 subject to g(x,y)=x+y1=0这个问题的目标是找到 x x x y y y 的值,使得 x 2 + y 2 x^2 + y^2 x2+y2 最小,并且满足约束条件 x + y = 1 x + y = 1 x+y=1
我们构造拉格朗日函数:
L ( x , y , λ ) = x 2 + y 2 + λ ( x + y − 1 ) L(x, y, \lambda) = x^2 + y^2 + \lambda (x + y - 1) L(x,y,λ)=x2+y2+λ(x+y1)
对拉格朗日函数求偏导数并设为零:
∂ L ∂ x = 2 x + λ = 0 \frac{\partial L}{\partial x} = 2x + \lambda = 0 xL=2x+λ=0
∂ L ∂ y = 2 y + λ = 0 \frac{\partial L}{\partial y} = 2y + \lambda = 0 yL=2y+λ=0
∂ L ∂ λ = x + y − 1 = 0 \frac{\partial L}{\partial \lambda} = x + y - 1 = 0 λL=x+y1=0
解这组方程,我们得到:
2 x + λ = 0 2x + \lambda = 0 2x+λ=0
2 y + λ = 0 2y + \lambda = 0 2y+λ=0
x + y − 1 = 0 x + y - 1 = 0 x+y1=0从前两个方程,我们得到 x = y x = y x=y。将其代入第三个方程: x + x − 1 = 0 x + x - 1 = 0 x+x1=0
2 x = 1 2x = 1 2x=1
x = 1 2 ,   y = 1 2 x = \frac{1}{2}, \, y = \frac{1}{2} x=21,y=21

代码解释

目标函数的等高线图和约束条件的直线
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize

# 目标函数
def objective(vars):
    x, y = vars
    return x**2 + y**2

# 约束条件
def constraint(vars):
    x, y = vars
    return x + y - 1

# 定义等高线图的网格范围
x = np.linspace(-1, 2, 400)
y = np.linspace(-1, 2, 400)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2

# 绘制等高线图
plt.contour(X, Y, Z, levels=20, cmap='viridis')
plt.colorbar()

# 绘制约束条件的直线
x_line = np.linspace(-1, 2, 400)
y_line = 1 - x_line
plt.plot(x_line, y_line, 'r--', label='x + y = 1 (constraint)')

# 求解优化问题
x0 = [0, 0]
con = {'type': 'eq', 'fun': constraint}
solution = minimize(objective, x0, constraints=con)
x_opt, y_opt = solution.x

# 绘制最优解
plt.scatter([x_opt], [y_opt], color='red', zorder=5)
plt.text(x_opt, y_opt, f'Optimal: ({x_opt:.2f}, {y_opt:.2f})', color='red')

# 设置图例和标题
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Optimization with Constraint: Minimize $x^2 + y^2$ subject to $x + y = 1$')
plt.grid(True)

plt.show()

几何解释

从几何上看,拉格朗日乘子法利用了目标函数的等高线与约束条件的曲线(或曲面)之间的关系。在最优解处,目标函数的等高线(或等值面)与约束条件的曲线(或曲面)相切。也就是说,在最优解处,目标函数的梯度 ∇ f ( x ) \nabla f(x) f(x) 与约束条件的梯度 ∇ g i ( x ) \nabla g_i(x) gi(x) 之间是线性相关的。这意味着存在一组拉格朗日乘子 λ i \lambda_i λi,使得: ∇ f ( x ) + ∑ i = 1 m λ i ∇ g i ( x ) = 0 \nabla f(x) + \sum_{i=1}^{m} \lambda_i \nabla g_i(x) = 0 f(x)+i=1mλigi(x)=0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/783884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构--二叉树相关例题4

运用到malloc函数,因为之前忘记它的使用方法,因此附加一个 动态内存管理(前面内容中有讲解过)的知识点 1.二叉树遍历 //二叉树遍历 //属于IO类型题有输入有输出//因为输入包括1行字符串,长度不超过100,所以…

复合机器人:手脚眼脑的完美结合

在现代工业制造的舞台上,复合机器人如同一位精密而高效的工匠,以其独特的手脚眼脑,正深刻改变着传统的生产方式。这些机器人不仅仅是机械臂的简单延伸,它们汇聚了先进的机械结构、智能的感知系统、精密的控制技术和灵活的思维能力…

VBA-计时器的数据进行整理

对计时器的数据进行整理 需求原始数据程序步骤VBA程序结果 需求 需要在txt文件中提取出分和秒分别在两列 原始数据 数据结构 计次7 00:01.855 计次6 00:09.028 计次5 00:08.586 计次4 00:08.865 计次3 00:07.371 计次2 00:06.192 计次1 00:05.949 程序步骤 1、利用Trim()去…

# Redis 入门到精通(一)数据类型(1)

Redis 入门到精通(一)数据类型(1) 一 、Redis 入门到精通 基本介绍 1、Redis 基础 ( windows 环境 ) redis 入门数据类型通用命令Jedis 2、Redis 高级 ( linux 环境 ) 持久化redis.conf 配置事务集群 3、Redis 应用 ( linux…

浏览器控制台打印日志的方法汇总

目录 console.table用法 打印数组 打印对象 打印数组对象 打印数组对象里的指定字段 console.count用法 不传参打印 传参打印 console.warn用法 打印文本 打印对象 console.error用法 打印文本 打印对象 console.assert用法 打印文本 打印对象 consol…

HCIA综合实验

学习新思想,争做新青年。今天学习的是HCIA综合实验! 实验拓扑 实验需求 总部: 1、除了SW8 SW9是三层交换机,其他交换机均为2层交换机。 2、GW为总部的出口设备,使用单臂路由技术,VLAN10,20,100的网关都在GW…

写一个函数,返回参数二进制中 1 的个数

代码要求 输入一个整数n,输出该数32位二进制中为1的个数(包括最高位的符号位),其中负数用补码表示 如:输入:15 (15的二进制表示:0000 1111) 输出:4 代码实…

生成式人工智能:开发者的得力助手还是职业威胁?

在过去的几年里,生成式人工智能(AIGC)在软件开发领域引发了广泛关注。AI工具在代码生成、错误检测、自动化测试等方面的应用,正在迅速改变开发者的工作方式。AI究竟是在帮助开发者提高效率,还是在逐渐取代他们&#xf…

开个技术外挂|用技术轻松实现GPU显卡冷却风扇噪声控制

GPU显卡冷却风扇噪声分析 游戏玩家可能有这样的体验:当显卡卖力工作的时候,明显感觉到从机箱传来的噪声变大了。这是因为系统监测到芯片有过热风险,从而自动提升了冷却风扇的转速。 如下图所示,当GPU显卡处于 20C 时,风…

文心一言 VS 讯飞星火 VS chatgpt (298)-- 算法导论22.1 2题

二、给定一棵有 7 个结点的完全二叉树的邻接链表,请给出等价的邻接矩阵表示。这里假设结点的编号为从 1~7 。如果要写代码,请用go语言。 文心一言: 在Go语言中,表示一棵完全二叉树的邻接矩阵首先需要理解完全二叉树的性质&#…

Python 处理Excel 文件, openpyxl 库的使用:

下载&#xff1a; pip install openpyxl 基本使用&#xff1a; 新建一个Excel 工作簿&#xff1a; 使用openpyxl 需要先导入一个Workbook 类&#xff0c; 使用它可以创建一个Workbook<工作簿>对象&#xff0c; 也就是创建一个Excel表文件&#xff0c; web.active 可用来…

数据结构——二叉树之c语言实现堆与堆排序

目录 前言&#xff1a; 1.二叉树的概念及结构 1.1 特殊的二叉树 1.2 二叉树的存储结构 1.顺序存储 2.链式存储 2. 二叉树的顺序结构及实现 2.1 堆的概念 ​编辑 2.2 堆的创建 3.堆的实现 3.1 堆的初始化和销毁 初始化&#xff1a; 销毁&#xff1a; 插入&…

C-10 凸包

凸包 数学定义 平面的一个子集S被称为是凸的&#xff0c;当且仅当对于任意两点A&#xff0c;B属于S&#xff0c;线段PS都完全属于S过于基础就不详细介绍了 凸包的计算 github上找到了别人的代码&#xff0c;用4种方式实现了凸包的计算&#xff0c;把他放在这里链接地址htt…

LibreOffice的国内镜像安装地址和node.js国内快速下载网站

文章目录 1、LibreOffice1.1、LibreOffice在application-conf.yml中的配置2、node.js 1、LibreOffice 国内镜像包网址&#xff1a;https://mirrors.cloud.tencent.com/libreoffice/libreoffice/ 1.1、LibreOffice在application-conf.yml中的配置 jodconverter:local:enable…

平安消保在行动 | 守护每一个舒心笑容 不负每一场双向奔赴

“要时刻记得以消费者为中心&#xff0c;把他们当做自己的朋友&#xff0c;站在他们的角度去思考才能更好地解决问题。” 谈及如何成为一名合格的消费者权益维护工作人员&#xff0c;平安养老险深圳分公司负责咨诉工作的庞宏霄认为&#xff0c;除了要具备扎实的专业技能和沟通…

安全及应用(更新)

一、账号安全 1.1系统帐号清理 #查看/sbin/nologin结尾的文件并统计 [rootrootlocalhost ~]# grep /sbin/nologin$ /etc/passwd |wc -l 40#查看apache登录的shell [rootrootlocalhost ~]# grep apache /etc/passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin#改变…

const 修饰不同内容区分

1.修饰局部变量 const int a 1;int const a 1; 这两种是一样的 注意&#xff1a; const int b; 该情况下编译器会报错&#xff1a;常量变量"b”需要初始值设定项 将一个变量没有赋初始值直接const修饰后&#xff0c;在以后时无法更改内容的。 2.修饰常量字符串 a.…

算法题:用JS实现删除链表的倒数第N个节点

学习目标&#xff1a; 删除链表的倒数第N个节点 leetcode原题链接 学习内容&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点 示例 1: 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2: 输入&a…

基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】

往期精品导航 基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9pyside的安检仪x光危险物物品检测&#xff08;有ui&#xff09;基于YOLOv9的PCB板缺陷检测 前言 高压输电线绝缘子是电力输送系统中关键的组成部分&#xff0c;负责防止电流泄露&…

Trinity:转录组从头组装

安装 #下载安装包 wget -c https://github.com/trinityrnaseq/trinityrnaseq/releases/download/Trinity-v2.15.1/trinityrnaseq-v2.15.1.FULL.tar.gztar -xzvf trinityrnaseq-v2.15.1.FULL.tar.gz cd trinityrnaseq-v2.15.1 make make plugins #安装依赖 mamba install -c bio…