【基础还得练】 KKT 条件

  • 优秀教程-真正理解拉格朗日乘子法和 KKT 条件: link
  • 优秀教程-最优化(6):一般约束优化问题的最优性理论: link

KKT条件(Karush-Kuhn-Tucker条件)是非线性规划中的一组必要条件,在某些情况下也是最优解的充分条件。它是对拉格朗日乘数法的推广,适用于有约束的优化问题。以下是详细公式和解释:


问题形式

考虑如下非线性优化问题:

minimize  f ( x ) , x ∈ R n \text{minimize } f(x), \quad x \in \mathbb{R}^n minimize f(x),xRn

约束条件:

  1. 等式约束:
    h i ( x ) = 0 , i = 1 , … , m h_i(x) = 0, \quad i = 1, \ldots, m hi(x)=0,i=1,,m

  2. 不等式约束:
    g j ( x ) ≤ 0 , j = 1 , … , p g_j(x) \leq 0, \quad j = 1, \ldots, p gj(x)0,j=1,,p

这里:

  • f ( x ) f(x) f(x) 是目标函数;
  • h i ( x ) h_i(x) hi(x) 是等式约束函数;
  • g j ( x ) g_j(x) gj(x) 是不等式约束函数。

KKT条件

KKT条件包括以下几个部分:

1. 可行性条件

变量 x ∗ x^* x 必须满足约束条件:
h i ( x ∗ ) = 0 , i = 1 , … , m h_i(x^*) = 0, \quad i = 1, \ldots, m hi(x)=0,i=1,,m
g j ( x ∗ ) ≤ 0 , j = 1 , … , p g_j(x^*) \leq 0, \quad j = 1, \ldots, p gj(x)0,j=1,,p

2. 拉格朗日函数

定义拉格朗日函数:
L ( x , λ , μ ) = f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 p μ j g j ( x ) \mathcal{L}(x, \lambda, \mu) = f(x) + \sum_{i=1}^m \lambda_i h_i(x) + \sum_{j=1}^p \mu_j g_j(x) L(x,λ,μ)=f(x)+i=1mλihi(x)+j=1pμjgj(x)
其中:

  • λ i \lambda_i λi 是等式约束的拉格朗日乘数;
  • μ j \mu_j μj 是不等式约束的拉格朗日乘数( μ j ≥ 0 \mu_j \geq 0 μj0)。
3. 一阶必要条件(梯度条件)

在最优解处,拉格朗日函数对 x x x 的梯度为零:
∇ x L ( x ∗ , λ ∗ , μ ∗ ) = ∇ f ( x ∗ ) + ∑ i = 1 m λ i ∗ ∇ h i ( x ∗ ) + ∑ j = 1 p μ j ∗ ∇ g j ( x ∗ ) = 0 \nabla_x \mathcal{L}(x^*, \lambda^*, \mu^*) = \nabla f(x^*) + \sum_{i=1}^m \lambda_i^* \nabla h_i(x^*) + \sum_{j=1}^p \mu_j^* \nabla g_j(x^*) = 0 xL(x,λ,μ)=f(x)+i=1mλihi(x)+j=1pμjgj(x)=0

4. 互补松弛条件

对于每个不等式约束:
μ j ∗ g j ( x ∗ ) = 0 , j = 1 , … , p \mu_j^* g_j(x^*) = 0, \quad j = 1, \ldots, p μjgj(x)=0,j=1,,p
这表示如果某个不等式约束 g j ( x ) g_j(x) gj(x) 未达到边界(即 g j ( x ∗ ) < 0 g_j(x^*) < 0 gj(x)<0),那么对应的拉格朗日乘数 μ j ∗ \mu_j^* μj 必须为 0;反之,如果 g j ( x ∗ ) = 0 g_j(x^*) = 0 gj(x)=0,那么 μ j ∗ ≥ 0 \mu_j^* \geq 0 μj0

5. 拉格朗日乘数非负性

对于不等式约束,拉格朗日乘数必须非负:
μ j ∗ ≥ 0 , j = 1 , … , p \mu_j^* \geq 0, \quad j = 1, \ldots, p μj0,j=1,,p


总结公式

KKT条件可以总结为如下形式:
(1) 可行性条件:  h i ( x ∗ ) = 0 , g j ( x ∗ ) ≤ 0 (2) 梯度条件:  ∇ f ( x ∗ ) + ∑ i = 1 m λ i ∗ ∇ h i ( x ∗ ) + ∑ j = 1 p μ j ∗ ∇ g j ( x ∗ ) = 0 (3) 互补松弛:  μ j ∗ g j ( x ∗ ) = 0 (4) 非负性:  μ j ∗ ≥ 0 \begin{aligned} &\text{(1) 可行性条件: } & h_i(x^*) &= 0, & g_j(x^*) &\leq 0 \\ &\text{(2) 梯度条件: } & \nabla f(x^*) + \sum_{i=1}^m \lambda_i^* \nabla h_i(x^*) + \sum_{j=1}^p \mu_j^* \nabla g_j(x^*) &= 0 \\ &\text{(3) 互补松弛: } & \mu_j^* g_j(x^*) &= 0 \\ &\text{(4) 非负性: } & \mu_j^* &\geq 0 \end{aligned} (1) 可行性条件(2) 梯度条件(3) 互补松弛(4) 非负性hi(x)f(x)+i=1mλihi(x)+j=1pμjgj(x)μjgj(x)μj=0,=0=00gj(x)0


适用条件

KKT条件成立需要一定的假设,例如约束的正则性(满足线性独立约束限定条件或Slater条件)。当这些假设成立时:

  • 如果 f ( x ) f(x) f(x) h i ( x ) h_i(x) hi(x) g j ( x ) g_j(x) gj(x) 是凸函数,KKT条件是充分条件。
  • 对一般优化问题,KKT条件是必要条件。

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

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

相关文章

使用 Webpack 优雅的构建微前端应用❕

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

Boost之log日志使用

不讲理论&#xff0c;直接上在程序中可用代码&#xff1a; 一、引入Boost模块 开发环境&#xff1a;Visual Studio 2017 Boost库版本&#xff1a;1.68.0 安装方式&#xff1a;Nuget 安装命令&#xff1a; #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

【Python】使用匿名函数Lambda解析html源码的任意元素(Seleinium ,BeautifulSoup皆适用)

一直都发现lambda函数非常好用&#xff0c;它可以用简洁的方式编写小函数&#xff0c;无需写冗长的过程就可以获取结果。干脆利落&#xff01; 它允许我们定义一个匿名函数&#xff0c;在调用一次性的函数时非常有用。 最近整理了一些&#xff0c;lambda函数结合BeautifulSou…

互联网路由架构

大家觉得有意义和帮助记得及时关注和点赞!!! 本书致力于解决实际问题&#xff0c;书中包含大量的架构图、拓扑图和真实场景示例&#xff0c;内容全面 且易于上手&#xff0c;是不可多得的良心之作。本书目的是使读者成为将自有网络集成到全球互联网 领域的专家。 以下是笔记内…

【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理

前言 Flutter端在处理网络请求的时候&#xff0c;最常用的库当然是Dio了&#xff0c;那么在改造成web端的时候&#xff0c;最先处理的必然是网络请求&#xff0c;否则没有数据去处理驱动实图渲染。 官方链接 pub https://pub.dev/packages/diogithub https://github.com/c…

项目上传到gitcode

首先需要在个人设置里面找到令牌 记住自己的账号和访问令牌&#xff08;一长串&#xff09;&#xff0c;后面git要输入这个&#xff0c; 账号是下面这个 来到自己的仓库 #查看远程仓库&#xff0c;是不是自己的云仓库 git remote -v # 创建新分支 git checkout -b llf # 三步…

【Git学习】windows系统下git init后没有看到生成的.git文件夹

[问题] git init 命令后看不到.git文件夹 [原因] 文件夹设置隐藏 [解决办法] Win11 win10

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了&#xff0c;后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)

优美的排列 题目解析 算法原理 解法 &#xff1a;暴搜 决策树 红色剪枝&#xff1a;用于剪去该节点的值在对应分支中&#xff0c;已经被使用的情况&#xff0c;可以定义一个 check[ ] 紫色剪枝&#xff1a;perm[i] 不能够被 i 整除&#xff0c;i 不能够被 per…

视频会议是如何实现屏幕标注功能的?

现在主流的视频会议软件都有屏幕标注功能&#xff0c;屏幕标注功能给屏幕分享者讲解分享内容时提供了极大的方便。那我们以傲瑞视频会议&#xff08;OrayMeeting&#xff09;为例&#xff0c;来讲解屏幕标注是如何实现的。 傲瑞会议的PC端&#xff08;Windows、信创Linux、银河…

改进爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一种局部搜索算法,它结合了随机性和贪婪搜索的特点,是对爬山算法(Hill Climbing Algorithm)的一种变体或扩展。与传统的爬山法不同,PHC不是总是选择最优的邻居作为下一步的移动,而是以一定的概率选择最优邻居,同时以一…

Unity中实现人物残影效果

今天火柴人联盟3公测了&#xff0c;看到一个残影的效果&#xff0c;很有意思&#xff0c;上网查询了一下实现方式&#xff0c; 实现思路&#xff1a; 将角色的网格复制出来&#xff0c;然后放置到新建的物体的MeshFilter组件上&#xff0c;每隔几十毫秒在玩家的位置生成一个&a…

C#实现调用DLL 套壳读卡程序(桌面程序开发)

背景 正常业务已经支持 读三代卡了&#xff0c;前端调用医保封装好的服务就可以了&#xff0c;但是长护要读卡&#xff0c;就需要去访问万达&#xff0c;他们又搞了一套读卡的动态库&#xff0c;为了能够掉万达的接口&#xff0c;就需要去想办法调用它们提供的动态库方法&…

菜鸟带新鸟——基于EPlan2022的部件库制作(3D)

设备逻辑的概念&#xff1a; 可在布局空间 中和其它对象上放置对象。可将其它对象放置在 3D 对象上。已放置的对象分到组件的逻辑结构中。 将此属性的整体标识为设备逻辑。可使用不同的功能创建和编辑设备逻辑。 设备的逻辑定义 定义 / 旋转 / 移动 / 翻转&#xff1a;组…

小程序基础 —— 07 创建小程序项目

创建小程序项目 打开微信开发者工具&#xff0c;左侧选择小程序&#xff0c;点击 号即可新建项目&#xff1a; 在弹出的新页面&#xff0c;填写项目信息&#xff08;后端服务选择不使用云服务&#xff0c;开发模式为小程序&#xff0c;模板选择为不使用模板&#xff09;&…

Markdown语法字体字号讲解

学习目录 语法详解改变字体样式[电脑要自带该样式字体]改变局部字号全局字体字号的设置使用场景及应用实例 > 快来试试吧&#x1f603; &#x1f447; &#x1f447; &#x1f448;点击该图片即可跳转至Markdown学习网站进行 Markdown语法字体字号讲解&#x1f448;点击这里…

day21——web自动化测试(3)Unittest+Selenium实战小案例

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 今日目标&#xff1a; 1、UnitTest框架 2、UnitTest 核心用例 2.1 TestCase 2.2 TestSuite 2.3 TestRunner 2.4 TestLoader 2.5 TestLoader 与 TestSuite的区别 2.6 Fixture 3、断言 3.1 1230…

ADC(二):外部触发

有关ADC的基础知识请参考标准库入门教程 ADC&#xff08;二&#xff09;&#xff1a;外部触发 1、TIM1的CC1事件触发ADC1DMA重装载2、TIM3的TRGO事件(的更新事件)触发ADC1DMA重装载3、TIM3的TRGO事件(的捕获事件)触发ADC1DMA重装载4、优化TIM3的TRGO事件(的捕获事件)触发ADC1D…

几个支持用户名密码的代理链工具: glider, gost, proxychains+microsocks

几个支持用户名密码的代理链工具: glider, gost, proxychainsmicrosocks gost -L:7777 -Fsocks5://192.168.2.20:7575 -Fsocks5://user:passwd1.1.1.1:10086 -Dgost&#xff1a;(https://github.com/ginuerzh/gost) 参考 https://www.quakemachinex.com/blog/279.html