Lagrange Multipliers 拉格朗日乘数法(含 KKT 条件)

最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值,一般情况下,最优化问题一般分为三种情况:

(1)无约束条件

对于无约束条件的优化问题中,如果一个函数 f 是凸函数,那么可以直接通过 f(x) 的梯度等于 0 来求得全局极小值点。

为了避免陷入局部最优,人们尽可能使用凸函数作为优化问题的目标函数。

凸集定义:欧式空间中,对于集合中的任意两点的连线,连线上任意一点都在集合中,我们就说这个集合是凸集。

凸函数定义:对于任意属于 [0,1] 的 a 和任意属于凸集的两点 x, y,有 f( ax + (1-a)y ) <= a * f(x) +(1-a) * f(y),几何上的直观理解就是两点连线上某点的函数值,大于等于两点之间某点的函数值。凸函数的任一局部极小点也是全局极小点

半正定矩阵的定义:特征值大于等于 0 的实对称矩阵。

半正定矩阵的充要条件:行列式( n 阶顺序主子式)等于 0,行列式的 i 阶顺序主子式>=0,i 从 1 到 n-1

凸函数的充要条件:如果 f(x) 在开凸集 S 上具有二阶连续偏导数,且 f(x) 的海塞矩阵(二阶偏导的矩阵)在 S 上处处半正定,则 f(x) 为 S 上的凸函数。

(2)等式约束条件

解决方法就是拉格朗日乘数法,下面就用例子引出这个方法。

在这里插入图片描述

假设我们想要求一个多元函数 f(x,y)=x2yf(x,y) = {x^2}yf(x,y)=x2y 的最大值,将其可视化如上图所示,是一个蓝色的类似于马鞍的曲面。但同时我们约束 x2+y2=1{x^2} + {y^2} = 1x2+y2=1,反映到函数曲面上就是红色的曲线,求 f(x,y)f(x,y)f(x,y) 的最大值也就是求红色曲线上最高的点。

在这里插入图片描述

我们可以用等高线来描述函数 f(x,y)=x2yf(x,y) = {x^2}yf(x,y)=x2y,每一条等高线就是函数取同一个值的点的连线,例如下面分别为 x2y=1{x^2}y = 1x2y=1x2y=0.1{x^2}y = 0.1x2y=0.1 的等高线:

在这里插入图片描述

在这里插入图片描述

显然,x2y=1{x^2}y = 1x2y=1 与红色圆不相交,说明它不满足 x2+y2=1{x^2} + {y^2} = 1x2+y2=1 的约束条件。x2y=0.1{x^2}y = 0.1x2y=0.1 虽然与红色圆相交了,但我们希望找到最大的值,使得函数 f(x,y)=x2yf(x,y) = {x^2}yf(x,y)=x2y 与红色圆是正好相切的。我们可以把约束条件当作是函数 g(x,y)=x2+y2g(x,y) = {x^2} + {y^2}g(x,y)=x2+y2 的一条等高线,则画出两个函数 f 与 g 的等高线与梯度如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据梯度向量的性质可知,梯度向量是垂直于等高线的,在两个函数 f 和 g 相切的位置,两者的等高线在切点处是重合的,因此 f 和 g 在切点处的梯度向量 ∇f\nabla ff∇g\nabla gg 方向相同,只有大小上的不同,两者的比值用系数 λ 表示,被称为拉格朗日乘数

在这里插入图片描述

在这里插入图片描述

如果分别求出 f 和 g 的梯度向量 ∇f\nabla ff∇g\nabla gg,代入到 ∇f=λ∇g\nabla f = \lambda \nabla gf=λg 中,可以得到两个方程,再加上约束条件,共三个方程,可以求解三个变量 x、y 和 λ,过程如下:

在这里插入图片描述

下面再引出拉格朗日函数,实际上就只是在写法上更为紧凑而已

在这里插入图片描述

假设我们想求函数 R(x,y)=x2eyyR(x,y) = {x^2}{e^y}yR(x,y)=x2eyy 的最大值,约束条件为函数 B(x,y)=x2+y2=bB(x,y) = {x^2} + {y^2} = bB(x,y)=x2+y2=b,所谓的拉格朗日函数就是 L(x,y,λ)=R(x,y)−λ(B(x,y)−b)L(x,y,\lambda ) = R(x,y) - \lambda (B(x,y) - b)L(x,y,λ)=R(x,y)λ(B(x,y)b)

在这里插入图片描述

之所以这么做,是因为对 L(x,y,λ)L(x,y,\lambda )L(x,y,λ) 求梯度 ∇L\nabla LL 再令它等于 0 的话,就能得到三条方程,实际上就是基于 ∇R=λ∇B\nabla R = \lambda \nabla BR=λB 和初始条件得到的那三条方程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯-代码-数字三角形

一:题目 二:代码 #include <iostream> #include<vector> using namespace std; int main() {/**思路:1.确定dp数组的定义以及下标的含义dp[i][j] 表示的是一条路径到达下标i和j时&#xff0c;的最大值 2.确定dp数组的状态转移公式我们当前位置的最大值其实是由右上…

ABP VNext从单体切换到微服务

注&#xff1a;此处的微服务只考虑服务部分&#xff0c;不考虑内外层网关、认证等。ABP VNext从单体切换到微服务&#xff0c;提供了相当大的便利性&#xff0c;对于各模块内部不要做任何调整&#xff0c;仅需要调整承载体即可。ABP can help you in that point by offerring a…

dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用

在前面几篇博客告诉大家如何部署 GTK 应用&#xff0c;此时的应用是特别弱的&#xff0c;大概只是到拖控件级。尽管和 WinForms 一样也能写出特别强大的应用&#xff0c;但是为了提升一点开发效率&#xff0c;咱开始使用 xaml 神器写界面。本文告诉大家如何在 UOS 国产系统上&a…

赛码-编程题-打字

一:题目 二&#xff1a;上码 #include<bits/stdc.h> using namespace std;int main() {int n;vector<int> v1;cin >> n;for(int i 0; i < n; i) {string str;int count 0;cin >> str;for (int j 0; j < str.size(); j) {int num int(str[j]…

Python 中的 with 语句用法和 Pytorch 中的 with torch.no_grad() 解析

Python 中的 with 语句适用于对资源进行访问的场合&#xff0c;确保不管使用过程中是否发生异常都会执行必要的“清理”操作&#xff08;异常处理&#xff09;&#xff0c;释放资源&#xff0c;比如文件使用后自动关闭&#xff0f;线程中锁的自动获取和释放等。例如下面是文件读…

遍历 Dictionary,你会几种方式?

一&#xff1a;背景 1. 讲故事昨天在 StackOverflow 上看到一个很有趣的问题&#xff0c;说: 你会几种遍历字典的方式&#xff0c;然后跟帖就是各种奇葩的回答&#xff0c;挺有意思&#xff0c;马上就要国庆了&#xff0c;娱乐娱乐吧&#xff0c;说说这种挺无聊的问题?????…

PyTorch 中各种操纵维度的函数比较 view() reshape() squeeze() unsqueeze() flatten()

首先&#xff0c;假设我们有一个三行四列的张量 X&#xff1a; view() 和 reshape() 函数都可以指定并改变张量的维度&#xff0c;它们本质上是相同的&#xff0c;只有两点区别&#xff1a; 1、view() 函数返回的是原始张量的视图&#xff0c;而 reshape() 函数返回的是原始张…

.NET Core 下的 API 网关

网关介绍网关其实就是将我们写好的API全部放在一个统一的地址暴露在公网&#xff0c;提供访问的一个入口。在 .NET Core下可以使用Ocelot来帮助我们很方便的接入API 网关。与之类似的库还有ProxyKit&#xff0c;微软也发布了一个反向代理的库YARP。关于网关的介绍不多说了&…

leetcode剑指 Offer 29. 顺时针打印矩阵

一&#xff1a;题目 二:上码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {//判空处理 否则会出现空指针异常if(matrix.size() 0 || matrix[0].size() 0){return {};}int m matrix.size();// 行int n matrix[0].…

VS也可以这样进行快捷安装

前言记录带新人的那些事&#xff0c;主要是一些工作技巧上的分享部门老大&#xff1a;阿元&#xff0c;明天有几个实习生新人开发来入职&#xff0c;你负责带一下他们阿元&#xff1a;明天吗&#xff1f;哦&#xff0c;好的&#xff0c;顺便问下&#xff1a;男的女的&#xff1…

蓝桥杯-卡片-填空题

一:题目 二:思路 1是最快消耗完的计算1的个数即可 三&#xff1a;上码 #include <iostream> using namespace std; int main() {int ans 0;int count 0;for(int i 1; i < 20000; i) {string str to_string(i);// cout << str << endl;for(int j …

跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义

前言随着前后端分离开发模式的流行&#xff0c;接口对接、联调成为常事&#xff0c;前端同事会经常问&#xff1a;我需要调哪个接口&#xff1f;这个接口数据格式是啥&#xff1f;条件都传啥&#xff1f; 对于一些紧急接口可能会采取沟通对接&#xff0c;然后补文档&#xff0c…

由浅入深,带你搞懂 Pytorch 中的张量 tensor 是什么

目录1、tensor 是什么&#xff1f;2、tensor 的三个属性2.1 Rank 秩2.2 Axis&#xff08;复数 为 Axes&#xff09; 轴2.3 Shape 形状3、Pytorch 中 torch.Tensor 的三个属性3.1 torch.dtype3.2 torch.device3.3 torch.layout4、创建张量的两种方法4.1 从现有数据创建张量4.2 凭…

蓝桥杯-排序-填空题

一:题目 二:上码 #include <iostream> using namespace std; int main() {// 请在此输入您的代码/**/**冒泡排序中:我们考虑到最坏的情况,那就是全都是逆序 那么就需要交换 N(N-1)/2; 那么100次 最起码需要 15个字符&#xff0c;而15个字符完全逆序的话 需要交换 105次…

打造钉钉事件分发平台之钉钉审批等事件处理

前言上讲和上上讲我们说到了钉钉的审批和钉钉通讯录的一个简单示例&#xff0c;这次我们讲下如何快速打造一个自己的钉钉事件分发平台。让你能够通过监听用户在钉钉上的操作&#xff0c;然后进行对应的业务处理&#xff0c;比如钉钉流程审批完后业务处理、通讯录员工增加后对应…

Pytorch 中 Dataset 和 DataLoader,以及 torchvision 的 datasets 完全理解

目录1、torch.utils.data.Dataset()2、torch.utils.data.Sampler()3、torch.utils.data.DataLoader()4、torchvision.datasets.ImageFolder()5、例子 torchvision.datasets.FashionMNIST()1、torch.utils.data.Dataset() 首先最基础的&#xff0c;是 torch.utils.data.Dataset…

蓝桥杯-成绩分析-编程题

一:题目 二&#xff1a;上码 #include<bits/stdc.h> using namespace std;int main() {int n;cin >> n;vector<int> v(n,0);for (int i 0; i < n; i) {cin >> v[i];}sort(v.begin(),v.end());double sum accumulate(v.begin(),v.end(),0);double…

BeetleX框架详解-小结

到这里BeetleX组件代码讲解完成了&#xff0c;由于组件只封装了TCP基础通讯的功能&#xff0c;因此在内容上并不会有太多&#xff1b;通以上内容相信对BeetleX的设计有一定的了解&#xff0c;在使用上也更加容易。要点Socket对象应用SocketAsyncEventArgs对象应用线程池的应用与…

深度学习入门笔记 —— 循环神经网络 RNN

首先&#xff0c;明确 RNN 的主要任务是用于文本分类&#xff0c;而解决文本分类任务最经典的模型是词袋模型&#xff08;Bag-of-Words Model&#xff09;&#xff0c;如图所示&#xff0c;输入是三个句子&#xff0c;词袋模型首先要定义一个词汇表 vocabulary&#xff0c;里面…

深圳店匠笔试题-4.01

一:题目类型 10个选择10个填空2道编程题 二&#xff1a;编程题 1&#xff1a;34 在排序数组中查找元素的第一个和最后一个位置 class Solution { public:/**思路:1.分为两种情况 那就是该元素是存在于排序数组当中,该元素不存在该排序数组当中。2.如果元素是存在于排序数组当…