运筹说 第97期|非线性规划-一维搜索

第二节 一维搜索

通过上期学习,大家已经了解了非线性规划的基本内容,那么如何求解一个非线性规划问题呢?本期小编就带大家来学习用于求解单变量无约束极值问题的方法——一维搜索,该方法也是后面求解更复杂问题的基础。

一、引入

1.定义

得到当前迭代点 后,按某种规则确定一个方向 ,再从 出发,沿方向 在直线(或射线)上求目标函数的极小点,从而得到 的后继点 。重复上述做法,直至求得问题的解。此处求目标函数在直线上的极小点,称为一维搜索(线性搜索)。

一维搜索是针对单变量函数进行的,也是多变量函数最优化的基础。

2.分类

一维搜索主要分为两类,这两类方法求得的极小点均为近似值,具体如下:

(1)试探法:按某种方式寻找一系列的试探点,根据试探点来确定极小点。(斐波那契、0.618)

(2)函数逼近法(插值法):用某种较简单的曲线逼近原来的函数曲线,通过求逼近函数的极小点来估计目标函数的极小点。(牛顿法、割线法)

一维搜索的方法很多,这里仅介绍试探法中的斐波那契(Fibonacci)法和0.618法,这两种方法仅需计算函数值,不必计算函数的导数。

二、斐波那契法(分数法)

1.概述

是区间] 上的单变量下单峰函数,它在该区间上有唯一极小点t*。函数在t*左边严格下降,在右边严格上升。若在此区间内任取两点 ,且 ,并计算函数值 ,则可能存在以下两种情况:

(1)如果 ,那么极小值则存在于 区间内。

(2)如果 ,那么极小值存在于 内。

这说明,只要在搜索区间 内取两个不同点并算出它们的函数值加以比较,即可把包含极小点的区间由 缩小为 。这时,如要继续缩小搜索区间 ,就只需在新的区间内再取一点算出其函数值并加以比较即可。显而易见,如果区间越小,则越能接近函数的极小点,但同时,要求计算的次数会越多。那么计算n次能把区间缩小到什么程度呢?怎么使搜索最快呢?或者说,计算n次能把至多多大的原区间缩小为长度为1个单位的区间呢?

我们用 来表示计算n次,就能使最大为 的区间缩短为1个单位长度,明显,如果我们只摆了一个点进去,没有比较,也就无法判断。因此

当n=2时,我们摆了两个点进去,这时候搜索的范围就缩小了一半。比如说搜索区间为[0,2],我们选择一个点为1-ε ,ε另一个点为1+ε 这里的ε 为一个很小的正数。再仿照前面的方法比较他们的函数值。也就是,如果1-ε 的函数值小一点,极小值就存在于[0,1+ε ].之间,如果1+ ε 的函数值小一点,则极小值就存在于[1-ε ,1]之间。因为这个ε 认为是任意小的正数。所以这个原来为2的区间,就被缩短成了搜索区间长度趋近为1,因此可得F2=2

用上述类似分析方法可得:

下图示出了这三种情况,图中红色小圆圈中的数字表示选取这个试点的先后顺序,数字表示该点在区间里的位置。

这个序列服从一个一般递推公式:

由上面的讨论可知,计算n次函数值所能得到的最大缩短率(缩短后的区间长度与原区间长度之比)为1/Fn 。要想把区间a0,b0 的长度缩δ短为原来区间长度的δδ<1 )倍或更小,即缩短后的区间长度

只要n足够大,能使下式成立即可:

上式中δ 为区间缩短的相对精度。

有时给出区间缩短的绝对精度:

显然相对精度与绝对精度的关系:

2.步骤

现将斐波那契法缩短区间的步骤总结如下:

(1)根据缩短率δ (已知),算出Fn (Fn ),根据斐波那契数表确定最小的n

(2)选取前两个试点的位置,如下图。

t1=a0+Fn-2Fnb0-a0=b0+Fn-1Fna0-b0

t1'=a0+Fn-1Fnb0-a0

3计算函数值,并比较大小:

 f(t1) <f(t1')  ,则取a1 =a0 ,b1=t1' ,t2'=t1 ,并令

f(t1)≥f(t1') ,则取a1 =t1 ,b1=b0 ,t2=t1' ,并令

(4)计算f(t2) 或f(t2') ,像(3)进行一步一步的迭代,计算试点的公式一般为:

其中k=1,2, …, n-1

(5)当 k=n-1  时,

t

此时,无法通过两点的函数值大小来确定最终区间。取

tn-1' =an-2 +(12+ε )(bn-2 -an-2)=  12an-2+bn-2 +ε (bn-2 - an-2 )

其中,ε 为任意小的数;选取ftn-1 f(tn-1') ,较小者作为近似极小值,对应的点为近似极小点;最终区间为[an-2 ,tn-1' ]或者[tn-1bn-2 ]。

3.例题求解

接下来我们使用斐波那契法来求解下面这个例题吧。

例题5:试用斐波那契法求函数 的近似极小点和近似极小值,要求缩短后的区间不大于区间[-1,3]的0.08倍。

解:函数 在此区间上为严格凸函数。为了进行比较,给出其精确解为:

(1)已知

查表可得n=6。 根据公式可求:

由于 所以取

(2)已知 可得:

由于ft2 >ft2'=1.751 ,所以取

(3)已知 可得:

由于ft3' >ft3  =  1.751 ,所以取

(4)已知 可得:

由于ft4 >ft4'  =  1.751 ,所以取

现令 ,则

所以取  由于 ,因此,以t5 为近似极小值点,近似极小值为1.751。

缩短后的区间长度为0.545-0.231=0.314,0.314/4=0.0785<0.08

三、0.618法(黄金分割法)

1.概述

接下来,我们继续介绍另一种经典的一维搜索方法——0.618法。由上节的论述可知,当用斐波那契法以n个试点来缩短某一区间时,区间长度的第一次缩短率为Fn-1Fn ,其后各次分别为

现将以上数列分为奇数项 和偶数项 ,可以证明,这两个数列收敛于同一个极限0.618033988741。

以不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,就得到了0.618法。可以把这个方法看成是斐波那契法的近似,它比较容易实现,效果也很好,因而更易于为人们所接受。

用 0.618法计算 n个试点的μ函数值,把原区间a0,b0 连续缩短n-1 次,由于每次的缩短率均相同,为μ ,故最后的区间长度为

0.618法是一种等速对称消去区间的方法,每次的试点均取在区间相对长度的 0.618和0.382处。

2.例题求解

例题:用0.618法求函数  在区间[0,3]上的极大点,要求缩短后和区间长度不大于原区间长度的10%。

解:已知  a1=0,b0=3 ,计算第一次缩短时两个点的位置:

计算函数值ft1 和ft1' :

因为 ,且题目要求计算区间内的极大点,因此取:

通过第一次计算得到了a1 、b1 与t2 的值,因此还需计算t2' :

在上述的计算中已知 ,因此还需计算ft2' :

因为 ,因此取:

通过第二次计算得到了a2 、b2 与t3' 的值,因此还需计算t3 :

在上述的计算中已知 ,因此还需计算ft3 :

ft3=t32=1.5842=0.792

因为f ,因此取:

通过第三次计算得到了a3b3 与t4 的值,因此还需计算t4' :

在上述的计算中已知ft4=ft3'=0.927 ,因此还需计算ft4' :

ft4'=-t4'+3=-2.022+3=0.978

因为ft4<ft4' ,因此取:

a4=t4=1.854,b4=b3=2.292,t5=t4'=2.022

通过第四次计算得到了a4b4 与t5 的值,因此还需计算t5' :

t5'=a4+0.618b4-a4=1.854+0.618*2.292-1.854=2.125

在上述的计算中已知ft5=ft4'=0.978 ,因此还需计算ft5' :

ft5'=-t5'+3=-2.125+3=0.875

因为ft5>ft5' ,因此取:

a5=a4=1.854,b5=t5'=2.125

此时我们将缩短区间长度与原区间长度进行对比可得:

2.125-1.8543-0=0.2713=0.090<0.100

即缩短后区间长度小于原区间长度的10%,因此可以终止计算,从而得到近似极大点为t5=2.022 ,近似极大值为ft5=0.978 。

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

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

相关文章

FinalShell连接虚拟机2024/1/16

目录 1.右键虚拟机桌面空白处&#xff0c;选择打开终端&#xff0c;在终端中输入ifconfig命令&#xff0c;查看Linux系统的IP地址&#xff1a;复制。 2.打开FinalShell,点击&#xff08;1&#xff09;号文件夹打开连接管理器&#xff0c;点击&#xff08;2&#xff09;号选择…

Angular系列教程之zone.js和NgZone

文章目录 什么是zone.jsZone的工作原理Zone的常见用途NgZone&#xff1a;Angular中的zone.js使用NgZone使用NgZone执行代码使用NgZone外部检测 结论 什么是zone.js 在Angular中&#xff0c;zone.js是一个非常重要的库&#xff0c;它为我们提供了一种跟踪和管理异步操作的机制。…

vue中引入sass、scss

常规步骤 1. 创建项目 使用vue cli 脚手架工具创建项目 vue create xxxx2. 创建全局样式文件 全局样式变量 路径&#xff1a;/assets/styles/variables.scss //flex 布局变量 $--flex-direction: ("row", "column"); $--flex-position: ("start"…

排序嘉年华———归并排序

文章目录 一.归并是什么&#xff1f;题目一&#xff1a;合并有序数组题目二&#xff1a;合并有序链表 二.归并排序1.递归式归并2.非递归式的归并排序 一.归并是什么&#xff1f; 相信朋友们应该做过一类题&#xff0c;合并两个有序数组&#xff0c;在链表里也有合并两个单链表…

liunx安装redis

安装redis 1.向Xftp7上传Redis压缩包 进行解压&#xff1a;tar -zxvf redis-6.0.8.tar.gz 解压后预编译&#xff1a; cd redis-6.0.8 make 创建文件: mkdir -p /opt/redis 安装到指定目录: make install PREFIX/opt/redis 进入安装文件 bin 目录:cd /opt/redis/bin ./redis-se…

Angular系列教程之依赖注入详解

文章目录 引言依赖注入基础依赖注入的基本概念依赖注入的原理 依赖注入实践依赖注入注意事项 引言 Angular作为一款流行的前端框架&#xff0c;提供了许多优秀的功能和特性&#xff0c;其中之一就是依赖注入&#xff08;Dependency Injection&#xff09;。依赖注入是一种设计…

IP定位技术在网络安全行业的探索

随着互联网的普及和深入生活&#xff0c;网络安全问题日益受到人们的关注。作为网络安全领域的重要技术&#xff0c;IP定位技术正逐渐成为行业研究的热点。本文将深入探讨IP定位技术在网络安全行业的应用和探索。 一、IP定位技术的概述 IP定位技术是通过IP地址来确定设备地理位…

Github 2FA验证的解决方法

当前使用GitHub需要启用 2FA 验证&#xff0c;也就是除了账号密码外还有一个实时码&#xff0c;需要额外输入这个正确的实时码才能开启 2FA 验证和后续登陆。 浏览器插件 这是目前我在使用的方法。在浏览器中添加一个叫做Authenticator的插件&#xff0c;传送地址&#xff1a;…

单表查询 -- MySQL(3)

目录 题目&#xff1a; 创建表&#xff1a; 问题&#xff08;17个&#xff09;&#xff1a; 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工资和最低工资。 5、列出职工…

5 个被低估的开源项目

文章目录 1.集算器 -数据处理2. Firecamp - 邮递员替代方案3.Keploy——后端 测试4. Hanko - 密钥验证5. Zrok - Ngrok 类固醇 长话短说 本文列出了五个不太受欢迎的优秀项目&#xff0c;您应该尝试一下。&#x1f525; 这些工具旨在改进数据处理、API 开发、后端测试、身份验…

GO——gin中间件和路由

中间件 参考&#xff1a;https://learnku.com/articles/66234 结构 中间件是函数中间件函数被放在调用链上调用链的末尾是路由path对应的函数 执行过程 net/http包调用到gin的serverHTTP 参考&#xff1a;go/pkg/mod/github.com/gin-gonic/ginv1.7.7/gin.go:506 通过path找到…

MacOS系统 安装ZooKeeper 和常见问题解决

安装ZooKeeper 和 常见问题 一、安装和启动二、常见问题和解决2.1 配置文件在哪&#xff1f;2.2 安装路径在哪&#xff1f;2.3 如果不想后台运行zookeeper&#xff0c;用完就关&#xff0c;省资源&#xff0c;可以的&#xff01;2.4 启动时&#xff0c;报错2.4 启动/停止使用 z…

MySQL基础笔记(6)函数

函数&#xff1a;是指一段可以直接被另一段程序调用的程序或者代码~&#xff08;MySQL内置&#xff09; 一.字符串函数 trim不能去除中间的空格~ select concat(jsl,1325): 执行如上的代码&#xff0c;返回字符串"jsl1325"。 select lower(JSL); 执行如上的代码&…

深度学习基础知识整理

自动编码器 Auto-encoders是一种人工神经网络&#xff0c;用于学习未标记数据的有效编码。它由两个部分组成&#xff1a;编码器和解码器。编码器将输入数据转换为一种更紧凑的表示形式&#xff0c;而解码器则将该表示形式转换回原始数据。这种方法可以用于降维&#xff0c;去噪…

C++入门案例——通讯录管理系统 控制台项目

前言 C入门案例——通讯录管理系统 & 控制台项目 目录 前言总体概览实体类设计显示页面和退出系统 添加联系人逻辑拆解相关代码 显示联系人逻辑拆解相关代码 根据名字删除联系人逻辑拆解相关代码 根据名字查找联系人逻辑拆解相关代码 修改联系人逻辑拆解相关代码 清空所有…

鸿蒙ArkTS的起源和简介

theme: lilsnake 1、引言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;Huawei进一步推出了ArkTS。 从最初的基础的逻辑交互能力&#xff0c;到具备类型系统的高效工程开发能力&#xff0c;再到融合声明式UI、多维状态管理等丰富的应用开发能力&#xff0c;共同…

ASP.NET Core列表增删改查

前置要求&#xff1a; 1. vueelement-plus实现前端静态页面 HelloWorld.vue <template><h2>hello界面</h2><div class"tableList"><!-- 搜索框 --><el-row :gutter"20"><el-col :span"8"><!-- 搜…

Linux系统资源分析手段:CPU,内存,磁盘与网络IO的瓶颈定位

前言&#xff1a;性能分析手段的应用场景 用于优化&#xff1a; 在程序编码完成后&#xff0c;我们通常要对自己编写的工具进行功能测试与性能分析。 用于监控&#xff1a; 在观察某个系统的运行情况时&#xff0c;需要观察系统内多个中间件及组件的资源占用情况。 用于测试…

tcpdump常用参数以及wireshark密文解密

tcpdump常用参数以及wireshark密文解密 文章目录 一、tcpdump命令和常用参数二、在wireshark中协议解析 tcpdump常用参数 一、tcpdump命令和常用参数 tcpdump常用命令&#xff1a;tcpdump -i eth0 src host 11.6.224.1 and udp port 161 -s 0 -w 161.pcap &#xff08;161为sn…

C盘满了,我用什么思路清理?

20240115 上周六同事传了一个很大的虚拟机给我&#xff0c;C盘就红了 虽然是飞秋选错了存储文件的路径&#xff0c;但后来忘了&#xff0c;就开始毫无目的删除文件&#xff0c;过程中会有没有权限删除的&#xff0c;这样还是没有改善。 咨询了公司IT技术人员&#xff0c; 告…