运筹说 第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.mfbz.cn/a/326653.html

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

相关文章

C++六大组件之一:仿函数

场景一&#xff1a; 与其过多叙述定义&#xff0c;不如在下面一个场景中来理解仿函数&#xff1a; #include<iostream> using namespace std; template<class T> void bubbles_sort(T* arr,int size) //冒泡排序 {for (int i 0; i < size - 1; i){for (int j…

测试 ASP.NET Core 中间件

正常情况下&#xff0c;中间件会在主程序入口统一进行实例化&#xff0c;这样如果想单独测试某一个中间件就很不方便&#xff0c;为了能测试单个中间件&#xff0c;可以使用 TestServer 单独测试。 这样便可以&#xff1a; 实例化只包含需要测试的组件的应用管道。发送自定义请…

从源码中分析SDS相较于C字符串的优势

文章目录 前言Type && EncodingsdsencodingcreateStringObjectcreateEmbeddedStringObject总结 createRawStringObject总结 createStringObjectFromLongDouble总结 createStringObjectFromLongLongWithOptions总结 相关操作sdscatlen总结 阈值44sds VS C字符串 前言 从…

数据完整性

数据完整性 一、实验目的 掌握使用SQL语句CREATE TABLE定义约束的方法。掌握使用SQL语句ALTER TABLE增加或删除约束的方法。了解约束的各种类型。掌握使用SQL语句CREATE TRIGGER创建触发器的方法。掌握引发触发器的方法。掌握使用SQL语句DROP TRIGGER删除触发器的方法。 二、…

扫雷游戏【可展开一片,超详细,保姆级别,此一篇足够】

一、C语言代码实现的扫雷游戏的运行 C语言实现扫雷 二、扫雷游戏的分析与设计 1.扫雷游戏的界面设计 在玩家玩扫雷的时候&#xff0c;它会给你一个二维的棋盘&#xff08;下面的讲解都以9x9规格为例子&#xff09;&#xff0c;然后点击你想排查的坐标&#xff0c;若不是雷的&…

KubeSphere 核心实战之一【在kubesphere平台上部署mysql】(实操篇 1/3)

文章目录 1、登录kubesphere平台2、kubesphere部署应用分析2.1、工作负载2.2、服务2.3、应用路由2.4、任务2.5、存储与配置2.6、部署应用三要素 3、部署mysql3.1、mysql容器启动实例3.2、mysql部署分析3.3、创建mysql的配置3.4、创建mysql的数据卷pvc3.5、创建mysql工作负载3.6…

MySQL之导入导出远程备份(详细讲解)

文章目录 一、Navicat导入导出二、mysqldump命令导入导出2.1导出2.2导入&#xff08;使用mysqldump导入 包含t_log表的整个数据库&#xff09; 三、LOAD DATA INFILE命令导入导出3.1设置;3.2导出3.3导入(使用单表数据导入load data infile的方式) 四、远程备份4.1导出4.2导入 一…

市场下行,中国半导体进口数量、金额双双两位数锐减 | 百能云芯

根据中国海关总署最新统计&#xff0c;2023年中国累计进口集成电路&#xff08;半导体晶圆&#xff09;数量为4795亿颗&#xff0c;较2022年下降10.8%&#xff1b;而进口金额为3494亿美元&#xff0c;下降15.4%。这一数据显示&#xff0c;中国半导体进口在数量和金额两方面均出…

第十三课:eNSP BGP协议教程

系列文章目录 第一课&#xff1a;eNSP第一个网络拓扑配置教程 第二课&#xff1a;eNSP vlan网络拓扑图配置教程 第三课&#xff1a;eNSP WIFI网络拓扑配置教程 第四课&#xff1a;eNSP 路由器路由配置拓扑教程 第五课&#xff1a;eNSP DHCP拓扑配置教程 第六课&#xff1…

林江院长:让斜视的孩子改“斜”归正,“正视”未来

读写时跳行、不敢和别人对视、拍照时不敢看镜头......这些不便是不少斜视患儿每天都在经历的日常。 斜视是目前儿童常见的眼科疾病之一&#xff0c;该眼病不仅给孩子的外在形象带来影响&#xff0c;更重要的是会影响双眼视功能及身心健康&#xff0c;其危害不容小觑。 7岁男孩晓…

Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件

Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具&#xff0c;它可以帮助用户通过网络连接到其他计算机&#xff0c;实现远程控制和操作。 软件下载&#xff1a;Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议&#xff0c;包括 …

Python高级编程之IO模型与协程

更多Python学习内容&#xff1a;ipengtao.com 在Python高级编程中&#xff0c;IO模型和协程是两个重要的概念&#xff0c;它们在处理输入输出以及异步编程方面发挥着关键作用。本文将介绍Python中的不同IO模型以及协程的概念、原理和用法&#xff0c;并提供丰富的示例代码来帮助…

SyntaxError: invalid syntax. Perhaps you forgot a comma?解决办法

Bug分析 1.错误解释2. 示例 1.错误解释 这个错误提示“SyntaxError: invalid syntax. Perhaps you forgot a comma?”表明你的代码中存在语法错误&#xff0c;可能是缺少了一个逗号。 在Python中&#xff0c;逗号用于分隔列表、元组和字典中的元素。如果在创建这些数据结构时…

使用dataframe_image将dataframe表格转为图片

安装方法&#xff1a;pip install dataframe-image 这个库可以将dataframe的表格转换为图片格式&#xff0c;比起数字&#xff0c;图片的格式在手机上会更清晰的看清楚数据及对应行列 示例程序 import numpy as np import pandas as pd import dataframe_imagedef main():my…

OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换[一]

前言 在现代工业自动化领域&#xff0c;OPC UA&#xff08;开放性生产控制和统一架构&#xff09;是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用&#xff0c;帮助读者更好地理解这一概念。 一、OPC UA的定义 OPC UA全称为“开放性生产控制和统一…

Spring基础属性一览:注释、对象装配、作用域、生命周期

在Spring中想要更简单的存储和读取对象的核心是使用注解&#xff0c;也就是我们接下来要学的Spring中相关注解。 之前我们存储Bean时&#xff0c;需要在自己添加的配置文件中添加一行bean才行&#xff1a; 而现在我们只需要一个注解就可以替代之前要写的一行配置的繁琐了。 …

基于域账户及西门子simatic logon的集中权限管理的实现(二)

上次我们完成了域环境及simatic logon服务器的搭建&#xff0c;今天我们将在wincc及HMI上进行组态&#xff0c;实现用域账户进行登录。 3.WINCC用户管理组态引文&#xff1a;博途工控人平时在哪里技术交流博途工控人社群 3.1 首先将要安装WINCC的服务器加入域。 3.2 在wincc…

springboot实现黑名单和白名单功能

题外话 关于黑名单和白名单功能&#xff0c;我觉得可以直接用linux服务器的iptables或nftables来实现黑名单和白名单功能。这两个工具都是Linux系统上用于配置防火墙规则的命令行工具。 iptables&#xff1a; 描述&#xff1a; iptables 是一个用于配置IPv4数据包过滤规则的工具…

Netty开篇——NIO章中(四)

通道(Channel) Channel类似于流&#xff0c;有些区别 同时进行读写&#xff0c;而流只能读或者只能写实现异步读写数据可以从缓冲读数据&#xff0c;也可以写数据到缓冲 Channel在 NIO 中是一个接口:public interface Channel extends Closeable{} 常用的Channel类有:FileChan…

【昕宝爸爸小模块】深入浅出之JDK21 中的虚拟线程到底是怎么回事(二)

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…
最新文章