Operations Research课程之带约束的非线性规划(凸分析|Lagrange松弛|Lagrange对偶|KKT条件)

目录

1.凸分析

1.1 为什么需要凸分析

1.2 凸分析相关概念

1.3 凸规划定义

1.4 单变量NLP凸分析 

1.5 多变量NLP凸分析

2.拉格朗日松弛

2.1 拉格朗日函数

2.2 拉格朗日对偶

2.2.1 弱对偶性 

2.2.2 凸性

2.2.3 强对偶性

2.2.4 与LP对偶关系

3.KKT条件 

3.1 KKT介绍

3.2 KKT举例


来源:Coursera课程/Operations Research (3): Theory week5/6

课程前言:

运筹学包括三个部分:模型,算法和理论,大部分场景下,理论(theory)是关于最优性条件(optimality conditions),求解实际问题需要建立模型,求解模型需要使用算法,而理论能帮助开发更好的算法

(1)最优性条件

  • 线性规划:对偶性
  • 整数规划:全单模矩阵
  • 带约束的非线性规划:拉格朗日和KKT条件✅

博客Operations Research课程之非线性规划(梯度下降|牛顿法|Gurobi+Python)中提到的梯度下降和牛顿法适用于无约束的非线性规划,对于带约束的非线性规划问题,本文首先介绍凸规划,然后介绍两种工具:Lagrangian relaxation和 KKT condition

1.凸分析

1.1 为什么需要凸分析

与LP问题相比,NLP更困难

  • 在NLP中,一个局部最小(最优)不总是全局最小(最优),如左图所示,x1是局部最小但是不是全局最小
  • 在有最优解NLP中,可能不存在极点最优解(extreme point),如右图所示,最优解是(2,2)但是极点是(0,4)和(4,0)

没有人能开发有效的算法来解决通用NLP,为了更容易求解NLP(找到一个全局最优解),我们希望NLP有以下特征:

  • 我们希望局部最优就是全局最优
  • 我们希望保证有极点最优解(当存在一个最优解时)

了解这些特征,就需要了解凸分析(convex analysis) 

1.2 凸分析相关概念

(1)凸集convex set

定义1(凸集convex set)

凸集中任意两点的连线也在集合内,如左图所示,右图不是凸集 

(2) 凸函数convex functio

 定义2(凸函数convex function)

 凸函数有一个上升曲线,任意两点连线上某点的取值要大于实际取值,如左图所示,右图不是凸函数

(3) 凹函数concave function

 定义3(凹函数concave function)

上面红色框的是凸集和凸函数,其中凸函数最后一个是三维,画图会发现一个碗的形状,因此是凸函数。 

(4)全局最优与局部最优

命题1(凸函数的全局最优性global optimality)

(5)极点与最优解

命题2

对任何在凸可行域上有全局最小的凹函数,全局最小是一个极点

1.3 凸规划定义

根据上述两个命题可知,如果想在凸可行域F上最小化函数f

  • 如果函数f是凸的,就搜索一个局部最小
  • 如果函数f是凹的,就搜索F中的极点

对于LP问题,有两个重要特征

因此我们可以用贪婪搜索关注极点,从而找到最优解,这也是单纯形法的思想,单纯形法通过不断搜索更好的基本可行解(极点)来寻找最优解。

定义4(凸规划convex program CP)

如果一个NLP的可行域是凸的并且目标函数在可行域上也是凸的,那么这个NLP是CP问题

根据定义4可得命题5 

命题5

1.4 单变量NLP凸分析 

前面定义了凸性和凸规划的概念,在给定一个函数后,我们需要知道它是不是凸的,比较简单的函数可以通过凸函数定义来证明,但是复杂的函数是不能直接看出的,首先针对单变量NLP

单变量NLP凸分析条件

其中条件2称为FOC(first order condition),对所有函数,FOC都是局部最优的必要条件,对于凸函数,FOC还是全局最优的充分条件。求解NLP问题,凸分析对于寻找局部最优或全局最优是非常关键的。以库存控制中的EOQ经济订货批量模型为例说明对于单变量NLP的凸分析过程

1.5 多变量NLP凸分析

 在Operations Research课程之非线性规划中介绍过梯度和Hessian矩阵

对于多变量NLP,其凸性理论和单变量类似

多变量NLP凸分析条件

 有一个关键概念,条件1中的半正定(positive semi-definite PSD)

半正定(positive semi-definite PSD)

下面举例说明多变量NLP凸分析及求解过程

虽然不能有效的解决通类NLP问题(general NLP),但是求解CP问题还是存在一些有效的算法,对于CP类的NLP,可以结合凸分析使用上述1.4和1.5节中的方法,如果FOC难以直接求解,还可以使用牛顿法和梯度下降,但是这些方法都只适用于无约束,接下来介绍求解带约束的非线性凸规划问题用到的方法:拉格朗日松弛和KKT条件

2.拉格朗日松弛

2.1 拉格朗日函数

对于带约束的非线性规划问题,当约束难处理时,最直观的方法是先忽略这些约束,求解问题找到最优解,如果满足约束就是原问题的最优解,如果不满足约束只能寻找一个最近的可行解。很显然这种方法有缺陷。现在换一种思路:不是直接忽略所有约束,而是允许违反约束,但是尽量保证可行性。

拉格朗日松弛将约束条件通过拉格朗日乘子结合到目标函数中,其核心是奖励可行性(reward feasibility)和惩罚不可行(penalize infeasibility)。注意拉格朗日乘子也可以为负,但是后面表达式也要变化,只要两者乘积能表示核心即可。下面是一个简单的转化例子

2.2 拉格朗日对偶

2.2.1 弱对偶性 

弱对偶性:拉格朗日松弛能提供原始NLP一个bound

回想LP及其对偶问题:任何可行的对偶解都能为原始LP提供一个bound,通过寻找对偶最优解能为原始LP提供最紧的bound,这和拉格朗日松弛为原始NLP提供bound类似,因此最小化拉格朗日函数也称为拉格朗日对偶

拉格朗日对偶除了具有弱对偶性,还有一些其它需要探讨的性质:

  • 拉格朗日函数的凸性
  • 强对偶性
  • LP对偶和拉格朗日对偶的关系

2.2.2 凸性

拉格朗日对偶是凸的

无论原始NLP凸性如何,拉格朗日对偶NLP都是凸的,因此可以用数值算法比如梯度下降求解,这个关键性质正是拉格朗日对偶在求解带约束非线性规划问题的优势

2.2.3 强对偶性

拉格朗日对偶的强对偶性

2.2.4 与LP对偶关系

LP对偶是拉格朗日对偶的一种特例

3.KKT条件 

3.1 KKT介绍

KKT条件根据三位学者命名,全称Karush-Kuhn-Tucker conditions,用于判断带约束的非线性规划的某个解是否是最优解候选,注意此处适用于满足正则条件(regular NLP),KKT条件的证明可自寻其它资料,KKT条件使用到了2.1节拉格朗日函数的概念

KKT条件对于NLP只是必要条件,但是对CP是必要且充分条件

对于一般的非线性规划问题,最优解一定满足KKT,但是满足KKT的不一定是最优解。如果这个非线性规划问题属于凸规划,那么满足KKT条件的解就是全局最优解。 

3.2 KKT举例

在KKT条件下能帮助为带约束的非线性规划问题找到一些候选解,比较这些解再寻找全局最优。

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

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

相关文章

Redis 管道(Pipeline)是什么?有什么用?

目录 1. redis 客户端-服务端模型的不足之处 2. redis 管道是什么?有什么好处? 3. 管道的使用场景 4. 管道使用的注意事项 1. redis 客户端-服务端模型的不足之处 众所周知,redis 是一个客户端-服务端的模型设计,客户端向服务…

Qt的信号与槽机制底层原理

Qt的信号与槽机制是Qt框架的核心特性之一,它允许对象之间进行解耦通信。信号(Signal)是一个类成员函数,当特定事件发生时,信号会被自动触发。槽(Slot)也是一个类成员函数,它可以被信…

上海网站建设如何做

上海是中国最繁华的城市之一,作为全国的经济、文化和科技中心,网站建设在上海变得越来越重要。如何做好上海网站建设,让网站更加吸引人,成为企业和个人宣传自身的重要平台呢? 首先,要有清晰的定位和目标。在…

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-BiLSTM时间序列预测,贝叶斯优化Transfor…

Zoom视颊会议软件使用

GPT-3.5 (OpenAI) Zoom是一款极受欢迎的视频会议软件。使用Zoom可以方便地进行视频会议、远程授课、在线研讨会等活动。以下是Zoom的使用步骤: 1. 下载Zoom客户端 可以在Zoom官网上下载对应平台的Zoom客户端。下载并完成安装后,双击打开客户端。 2. 创建…

【AI】ChatTTS实现文本转语音

最近有时间继续研究一下各种有趣的开源项目,一个叫ChatTTS的项目吸引了我的注意,这个项目可以把文本转换成语音,配合gpt生成文本,可以直接用于生产有声书作品了,这可以说是直接的生产力项目了。 项目对显存的要求不高&…

el-table 树状表格查询符合条件的数据

需要对el-table的树状表格根据输入机构名称&#xff0c;筛选出符合条件的数据&#xff0c;可用如下方法&#xff1a; 页面内容如下&#xff1a; <el-input v-model"ogeName" placeholder"请输入机构名称"><el-table :data"list" row…

Git 操作补充:cherry-pick、变基

1. 挑选提交合并 git cherry-pick 对于多分支的代码库&#xff0c;将代码从一个分支转移到另一个分支是一种常见的需求&#xff0c;这可以分成两种情况&#xff1a;一种情况是&#xff0c;你需要另一个分支的所有代码变动&#xff0c;那么就采用 git merge&#xff1b;另一种情…

如何准确测量 Android 应用中 Activity 和 Fragment 的启动时间

如何准确测量 Android 应用中 Activity 和 Fragment 的启动时间 在 Android 应用开发中&#xff0c;了解每个 Activity 和 Fragment 的启动时间对于性能优化至关重要。本文将介绍几种方法来准确测量 Activity 和 Fragment 的启动时间&#xff0c;并提供实际操作步骤&#xff0…

Spark SQL----内置函数JSON Functions

Spark SQL----内置函数JSON Functions JSON Functions 例子&#xff1a; -- from_json SELECT from_json({"a":1, "b":0.8}, a INT, b DOUBLE); --------------------------- |from_json({"a":1, "b":0.8})| -----------------------…

c++之auto

auto auto与for结合begin(),end()说明 auto c11标准引入auto类型说明符必须有初始值通过初始值来推断变量的类型 #include<cstdio> using namespace std; int main(){int v1 10;auto v2 v1;printf("v2%d\n",v2);double v310.5;auto v4 v3;printf("v4…

SF-HCI-SAP问题收集17:值映射布尔型EC数据

Complacency is the enemy of study 学习的敌人是自己的满足。 SAP SuccessFactors Employee Central 到 SAP ERP 的员工主数据复制 successfactor employee center主数据同步&#xff0c;一直以来排错比较难&#xff0c;难的地方是这个提示消息比较隐晦&#xff0c;而且同步的…

数据结构与算法学习(1)

#学习自用# 算法性能分析 时间复杂度O() 时间复杂度就是算法计算的次数。 for(int i0;i<n;i) {ans; } ans; 这串代码时间复杂度为O(n)&#xff0c;实际时间复杂度为O(n1)。如果把i改为i2&#xff0c;时间复杂度仍然为为O(n)&#xff0c;实际时间复杂度变为O(n/2 1)。时…

云原生技术架构详解

云原生技术最全详解(图文全面总结) 容器技术 容器技术&#xff1a;是将应用程序、及其所有依赖项&#xff0c;打包到一个独立的、可移植的容器中。 如下图所示: 容器技术的实现&#xff0c;最典型的就是以Docker为代表的。 如下图所示&#xff1a; 主要解决&#xff1a; 1、…

AI常见名词盘点(持续更新)

目录 知识库 知识库的定义 知识库的分类 AI知识库的特点 小结 Embedding 向量化表示 维度降低 语义关系 小结 提示词工程&#xff08;Prompt Engineering&#xff09; 定义 目的与应用 关键性质 工程化思想 应用示例 小结 RAG 检索增强生成 定义与重要性 RA…

Ubuntu设置nacos开机以单机模式自启动

首先&#xff0c;需要安装jdk Ubuntu 安装JDK 创建Systemd服务单元文件 sudo vim /etc/systemd/system/nacos.service按i进入编辑模式&#xff0c;写入下面信息 [Unit] Descriptionnacos server Afternetwork.target[Service] Typeforking Environment"JAVA_HOME/opt/j…

Java8 - Optional 处理可能为空值的容器类

1. 创建一个 Optional 对象 Optional.of、Optional.ofNullable 、Optional.empty是Optional类的三个静态方法&#xff0c;用于创建Optional对象。 1. Optional.of 方法 Optional.of 方法用于创建一个包含非空值的Optional对象&#xff0c;如果传入的值为null&#xff0c;则会…

Kafka集群安装部署

简介 Kafka是一款分布式的、去中心化的、高吞吐低延迟、订阅模式的消息队列系统。 同RabbitMQ一样&#xff0c;Kafka也是消息队列。不过RabbitMQ多用于后端系统&#xff0c;因其更加专注于消息的延迟和容错。 Kafka多用于大数据体系&#xff0c;因其更加专注于数据的吞吐能力…

用freertos后NVIC里系统时钟部分报错,如何解决?

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

百日筑基第十天-重温Spring

百日筑基第十天-重温Spring Spring AOP 也就是 Aspect-oriented Programming&#xff0c;译为面向切面编程&#xff0c;是计算机科学中的一个设计思想&#xff0c;旨在通过切面技术为业务主体增加额外的通知&#xff08;Advice&#xff09;&#xff0c;从而对声明为**“切点”…