运筹说 第105期 | 算法介绍之非线性规划

本期我们进行运筹学之非线性规划算法的讲解,我们将对非线性规划的基础知识进行一个简单的回顾,并介绍求解无约束极值问题和约束极值问题的MATLAB和Python相关代码,以帮助大家利用工具快速求解无约束极值问题和约束极值问题,做到事半功倍。由于篇幅有限,小编接下来只展示部分代码,小伙伴们可以关注“运筹说”公众号→后台回复“算法介绍之非线性规划”获取完整代码。话不多说,我们一起来看看吧!

一、基础知识

1、无约束极值问题

⭐问题描述

无约束极值问题可以表述为:

min fXXEn

迭代法大体分为两类:一类是要用到函数的一阶导数和(或)二阶导数,由于用到了函数的解析性质,故称为解析法;另一类在迭代过程中仅用到函数值,而不要求函数的解析性质,这类方法称为直接法。一般来说,直接法收敛速度较慢,只是在变量较少时才使用。因此下面介绍解析法中的两种算法:梯度法(最速下降法)和牛顿法

⭐梯度法

梯度法又名最速下降法,是一种用于求解最优化问题的迭代优化算法,是理解其他非线性优化问题方法的基础

基本思路:

通过不断地沿着目标函数的负梯度方向更新参数,以使目标函数值逐渐减小,最终达到局部或全局最小值。

算法基本步骤:

(1)给定初始点X(0) 和允许误差ε>0 ,令k : = 0。

(2)计算f(X(k)) 和∇(X(k)) ,若∥∇(X(k))∥2≤ε ,停止迭代,得近似极小点X(k) 和近似极小值f(X(k)) ;否则,转下一步。

(3)做一维搜索。

λk:minf(X(k)-λf(X(k))

并计算X(k+1)=X(k)-λkf(X(k)) ,然后令k : k+1,转回第(2)步。

求解流程:

⭐牛顿法

基本思想:

牛顿法可用于求解非正定二次函数的极小点,对于正定二次函数,迭代搜索方向就是指向其极小点的方向,因此,用牛顿法求解正定二次函数的无约束最优化问题,只需一次就可以得到最优解。

考虑正定二次函数

此处A 为对称正定阵,X∈Enc 为常数。

假定该函数的极小点是X* ,,则必有

从而AX*=-B 。另外,对任一点X(0)En ,函数在该点的梯度∇fX(0)=AX(0)+B 。消去B 就得到

fX(0)=AX(0)-AX*

由此可解出

这说明,对应正定二次函数,从任意近似点X(0) 出发,沿-A-1f(X0) 方向搜索,以1为步长,迭代一步即可达极小点。

牛顿法迭代步骤:

已知目标函数f(X) 及其梯度gX=f(X) ,Hessian矩阵,终止限ε1 ε2 ε3

1)选定初始点X0 ;计算f0=f(X0) g=g(X0) ,置k=0

2)计算GkX=2f(Xk)

3)由方程解GkPk=-gk ,解出Pk

4)计算Xk+1=Xk+Pk fk+1=f(Xk+1) gk+1=g(Xk+1)

5)判别终止准则是否满足:若满足,则输出最优解Xk+1 fk+1 停止;否则,置k=k+1 ,转(2)。

算法流程图:

算法对比:

2、约束极值问题

绝大多数实际问题都受到某些条件的限制,这些限制条件(约束)常给工作带来很大的困难。解决约束极值问题,可以考虑将约束极值问题转换为无约束极值问题,制约函数法就是通过构造某种制约函数,并将其加到非线性规划的目标函数上,从而将约束极值问题转换为无约束极值问题。下面介绍其中最基本的两种算法:罚函数法(也称外点法)和障碍函数法(也称内点法)。

罚函数法(外点法)

罚函数法的迭代步骤:

1)取第一个罚因子M1=1(例如说取),允许误差 ε>0 ,并令k : =1

2)求下述无约束极值问题的最优解:

min P(X,Mk)

极小值点为X(k)

3)若存在某一个j(1≤j≤l) ,

gj(X(k))>ε

或(和)存在某一个i(1im),

−|hi(X(k))|>ε

则取Mk+1>Mk,并令k : =k+1。然后,转回第(2)步。否则,停止迭代,得所要的点X(k)

⭐障碍函数法(内点法)

算法特点:

障碍函数法的一个重要特点,就是函数P(X,M)可在整个 En 空间内进行优化,可以任意选择初始点,这给计算带来了很大的方便。

如果要求每次的近似解都是可行解,以便观察目标函数值的改善情况;或者,如果目标函数在可行域外的性质比较复杂,甚至没有定义,这时就无法使用上面所述的罚函数了。

障碍函数法的迭代步骤:

1)取第一个障碍因子r1>0,允许误差ε>0,并令k:=1

2)构造障碍函数。

3)对障碍函数进行无约束极小化(注意,迭代点必须在R0内),设极小解为X(k)R0

4)检查是否满足收敛准则。

满足则停止迭代并得到所要的近似极小解X(k)。否则取rk+1<rk并令k:=k+1。然后,转回第(3)步继续迭代。

二、算法实现

1、梯度法

(1)例题介绍

用梯度法求解下列无约束非线性规划问题。

其中 ,要求选取初始点 。函数图像如下所示:

(2)代码实现

①MATLAB

代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

代码调用

代码运行及最终结果展示如下,x(1)代表了公式中的xx(2)代表了公式中的y,经过代码运行得出无约束非线性规划问题的最小值在x = 10,y = 10时取到,最小值f(x)为0,具体结果体现为无限接近0的数字。

(2)Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

代码调用

代码运行及最终结果展示如下经过代码运行得出无约束非线性规划问题的最小值在接近x = 10,y = 10时取到,最小值f(x)为0。

(3)可视化

 

2、牛顿法

(1)例题介绍

用梯度法求解下列无约束非线性规划问题。

其中 ,要求选取初始点 。函数图像如下所示:

(2)代码实现

①MATLAB

代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

代码调用

代码运行及最终结果展示如下,x(1)代表了公式中的x1,x(2)代表了公式中的x2,经过代码运行得出无约束非线性规划问题的最小值在x1 = 0,x2 = 0时取到,最小值f(x)为0,具体结果体现为x1,x2 f(x)都为无限接近0的数字。

②Python

代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

代码调用

代码运行及最终结果展示如下,经过代码运行得出无约束非线性规划问题的最小值在x = 0,y = 0时取到,最小值f(x)为0,具体结果体现为三者都为无限接近0的数字。

(3)可视化

3、罚函数法

(1)例题介绍

用罚函数法求解

(2)代码实现

①MATLAB

★ 代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

代码运行及最终结果展示如下,当M=0时,x(M)=0.5,当M=1时,x(M)=0.25,当M=10时,x(M)=0.045。

(2)Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。​​​​​​​

代码运行及最终结果展示如下,当M=0时,x(M)=0.5,当M=1时,x(M)=0.25,当M=10时,x(M)=0.045。

4、障碍函数法

(1)例题介绍

用障碍函数法求解

(2)代码实现

①MATLAB

★ 代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

★ 代码调用

代码运行及最终结果展示如下,当r=1时,x(r)=1,当x=0.1时,x(r)=0.316,当x=0.01时,x(r)=0.1。原约束问题极小点x*=0。

②Python

★ 代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

★ 代码调用

代码运行及最终结果展示如下,当r=1时,x(r)=1,当x=0.1时,x(r)=0.316,当x=0.01时,x(r)=0.1。原约束问题极小点x*=0。

三、参考资料

【非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)】

https://blog.csdn.net/qq_29831163/article/details/89483975

【梯度下降算法详解及Python实现.整理】

https://zhuanlan.zhihu.com/p/107782332

【牛顿法python 实现】

https://blog.csdn.net/Big_Pai/article/details/88540037

本期的内容就介绍到这里,想要进一步了解运筹学,关注本公众号,快快学起来吧!

作者 | 王连聚 齐涵

责编 | 刘文志

审核 | 徐小峰

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

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

相关文章

BGP综合

1、使用PreVal策略&#xff0c;确保R4通过R2到达192.168.10.0/24。 2、使用AS_Path策略&#xff0c;确保R4迪过R3到达192.168.11.0/24。 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24。 4、使用Local Preference策略&#xff0c;确保R1通过R2到达192.168.1.0…

Nacos注册中心客户端容灾

目前Nacos客户端有一个FailoverReactor来进行容灾文件的管理&#xff0c;可以通过在指定磁盘文件里写入容灾数据来进行客户端使用数据的覆盖。FailoverReactor目前会拦截Nacos客户端查询接口调用&#xff0c;以getAllInstances接口为例&#xff0c;目前FailoverReactor的工作流…

【Linux】浅谈信号量

文章目录 一、共享内存的弊端新概念引入 二、理解信号量原子性 tips&#xff1a;system V 是一套标准&#xff0c;共享内存&#xff0c;信号量&#xff0c;消息队列属于system V。 一、共享内存的弊端 进程A和进程B进行通信时&#xff0c;假如进程A向物理内存的共享区写入&quo…

深入浅出:HTTPS单向与双向认证及证书解析20231208

介绍: 网络安全的核心之一是了解和实施HTTPS认证。本文将探讨HTTPS单向认证和双向认证的区别&#xff0c;以及SSL证书和CA证书在这些过程中的作用&#xff0c;并通过Nginx配置实例具体说明。 第一部分&#xff1a;HTTPS单向认证 定义及工作原理&#xff1a;HTTPS单向认证是一…

前端:HTML+CSS+JavaScript实现轮播图2

前端&#xff1a;HTMLCSSJavaScript实现轮播图2 1. 和之前版本的区别2. 实现原理3. 针对上述的改进3. 参考代码 1. 和之前版本的区别 之前发布的那篇关于轮播图的文章在这&#xff1a;前端&#xff1a;HTMLCSSJavaScript实现轮播图&#xff0c;只能说存在问题吧&#xff01;比…

Redis KEY*模糊查询导致速度慢、阻塞其他 Redis 操作

Redis KEY*模糊查询导致交互速度慢、阻塞其他 Redis 操作 查询速度慢的原因 在Redis中&#xff0c;使用通配符 KEYS 命令进行键的模糊匹配&#xff08;比如 KEYS key*&#xff09;可能会导致性能问题&#xff0c;尤其是在数据集较大时。这是因为 KEYS 命令的实现需要遍历所有…

输入/输出控制详解(块、字符设备?程序控制?中断、DMA又是啥?)

输入/输出&#xff08;I/O&#xff09; 输入/输出&#xff08;I/O&#xff09;控制是计算机系统中的一个关键概念&#xff0c;涉及到计算机与外部设备之间的数据传输。计算机系统通过输入设备接收用户输入&#xff0c;通过输出设备向用户显示结果。输入/输出控制包括管理和协调…

1.查看表的基本结构,表的详细结构和修改表名

查看表的基本结构,表的详细结构和修改表名 1.查看数据表基本结构 有强迫症或健忘症的小伙伴们在建好数据库和表以后&#xff0c;通常会怀疑自己刚才是不是敲错了&#xff0c;怎么办&#xff1f;如果不是使用图形界面是不是就没法查看啦&#xff1f; 不存在的&#xff0c;这就…

PDF控件Spire.PDF for .NET【转换】演示:将 SVG 转换为 PDF

SVG 是一种矢量图形文件格式&#xff0c;用于创建可缩放且不损失质量的图像。然而&#xff0c;PDF由于支持高质量打印、加密、数字签名等功能&#xff0c;更适合共享和打印。将SVG转换为PDF可以保证图像在不同设备和环境下都有良好的显示效果&#xff0c;并更好地保护知识产权。…

【数据结构 — 排序 — 插入排序】

数据结构 — 排序 — 插入排序 一.排序1.1.排序的概念及其运用1.1.1排序的概念1.1.2排序运用1.1.3 常见的排序算法 二.插入排序2.1.直接插入排序2.1.1.算法讲解2.1.2.代码实现2.1.2.1.函数定义2.1.2.2.算法接口实现2.1.2.3.测试代码实现2.1.2.4.测试展示 2.2.希尔排序2.2.1.算法…

苹果IOS在Safari浏览器中将网页添加到主屏幕做伪Web App,自定义图标,启动动画,自定义名称,全屏应用pwa

在ios中我们可以使用Safari浏览自带的将网页添加到主屏幕上&#xff0c;让我们的web页面看起来像一个本地应用程序一样&#xff0c;通过桌面APP图标一打开&#xff0c;直接全屏展示&#xff0c;就像在APP中效果一样&#xff0c;完全体会不到你是在浏览器中。 1.网站添加样式 在…

Leetcode2477. 到达首都的最少油耗

Every day a Leetcode 题目来源&#xff1a;2477. 到达首都的最少油耗 解法1&#xff1a;贪心 深度优先搜索 题目等价于给出了一棵以节点 0 为根结点的树&#xff0c;并且初始树上的每一个节点上都有一个人&#xff0c;现在所有人都需要通过「车子」向结点 0 移动。 对于…

基于ResNet模型的908种超大规模中草药图像识别系统

中草药药材图像识别相关的实践在前文中已有对应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 《基于轻量级MnasNet模型开发构建40种常见中草药图像识别系统》 在上一篇文章中&…

操作系统 2-6 课后作业2.3:系统调用

第1关版本1内核执行的完整系统调用序列 任务描述 分析版本1内核&#xff0c;回答下列问题&#xff1a; 从系统开机直到输出第 4 个字符‘1’&#xff0c;系统依次执行了哪些系统调用&#xff1f;分别是在几号进程中执行的&#xff1f;&#xff08;对于一组连续出现的 0 号进程…

进程控制与原语

一、 进程的五种状态 在操作系统中&#xff0c;一个进程可以经历五种基本状态&#xff0c;这被称为进程的五种基本状态模型。这包括&#xff1a; 创建状态&#xff08;Create/New&#xff09;&#xff1a; 进程刚刚被创建&#xff0c;但还未被执行。在这个状态下&#xff0c;操…

JAVA 锁

乐观锁 乐观锁是一种乐观思想&#xff0c;即认为读多写少&#xff0c;遇到并发写的可能性低&#xff0c;每次去拿数据的时候都认为别人不会修改&#xff0c;所以不会上锁&#xff0c;但是在更新的时候会判断一下在此期间别人有没有去更新这个数据&#xff0c;采取在写时先读出…

CGAL的多边形曲面重建

1、介绍 该软件包实现了一种基于假设和选择的方法&#xff0c;用于从点云重建分段平面对象。该方法将从分段平面对象采样的无序点集作为输入。输出是对输入点集进行插值的紧凑且不透水的曲面网格。该方法假设提供了所有必要的主平面&#xff08;或者可以使用在形状检测中描述的…

如何使用玻璃材质制作3D钻石模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

MySQL 8 update语句更新数据表里边的数据

数据重新补充 这里使用alter table Bookbought.bookuser add userage INT after userphone;为用户表bookuser在userphone列后边添加一个类型为INT的新列userage。 使用alter table Bookbought.bookuser add sex varchar(6) after userage ;为用户表bookuser在userage 列后边添…

Hibernate 框架 (2023年架构师下半年案例分析题)

Hibernate 是一种对象和关系之间映射的框架&#xff0c;是 Java 应用和关系数据库之间的桥梁。它可以将数据库资源映射为一个或者多个 POJO。将面向数据库资源的各种业务操作以 POLO 的属性和方法的形式实现&#xff0c;使人们摆脱烦琐的 JDBC 代码&#xff0c;将精力更多地集中…