【最优化方法】精确一维搜索方法

文章目录

  • 0.618 法
    • 示例
  • Newton 法
    • 示例

0.618 法

0.618 法是一种一维线性搜索的算法,也称为黄金分割法(Golden Section Method)。它是一种迭代方法,用于确定目标函数在一个区间上的最小值。

以下是 0.618 法的基本步骤:

  1. 选取初始数据,确定初始搜索区间 [ a 0 , b 0 ] [a_0,b_0] [a0,b0] 和精度要求 δ > 0 \delta>0 δ>0. 计算最初两个试探点 λ 0 , μ 0 \lambda_0,\mu_0 λ0,μ0​,
    λ 0 = a 0 + 0.382 ( b 0 − a 0 ) , \lambda_0=a_0+0.382(b_0-a_0), λ0=a0+0.382(b0a0), μ 0 = a 0 + 0.618 ( b 0 − a 0 ) . \mu_0=a_0+0.618(b_0-a_0). μ0=a0+0.618(b0a0).

    • 计算 φ ( λ 0 ) \varphi(\lambda_0) φ(λ0) φ ( μ 0 ) \varphi(\mu_0) φ(μ0),令 k = 0. k=0. k=0.
  2. 比较目标函数值。

    • φ ( λ k ) > φ ( μ k ) \varphi(\lambda_k)>\varphi(\mu_k) φ(λk)>φ(μk),转步 3;否则转步 4.
  3. b k − λ k ⩽ δ b_k-\lambda_k\leqslant\delta bkλkδ,则停止计算,输出 μ k \mu_k μk​;否则,令
    a k + 1 : = λ k , b k + 1 : = b k , λ k + 1 : = μ k a_{k+1}:=\lambda_{k},\:b_{k+1}:=b_{k},\:\lambda_{k+1}:=\mu_{k} ak+1:=λk,bk+1:=bk,λk+1:=μk φ ( λ k + 1 ) : = φ ( μ k ) , μ k + 1 : = a k + 1 + 0.618 ( b k + 1 − a k + 1 ) . \varphi(\lambda_{k+1}):=\varphi(\mu_{k}),\:\mu_{k+1}:=a_{k+1}+0.618(b_{k+1}-a_{k+1}). φ(λk+1):=φ(μk),μk+1:=ak+1+0.618(bk+1ak+1).

    • 计算 φ ( μ k + 1 ) \varphi(\mu_{k+1}) φ(μk+1),转步 5.
  4. μ k − a k ⩽ δ \mu_k - a_k\leqslant\delta μkakδ,则停止计算,输出 λ k \lambda_k λk;否则,令
    a k + 1 : = a k , b k + 1 : = μ k , μ k + 1 : = λ k , a_{k+1}:=a_k,~b_{k+1}:=\mu_k,~\mu_{k+1}:=\lambda_k, ak+1:=ak, bk+1:=μk, μk+1:=λk, φ ( μ k + 1 ) : = φ ( λ k ) , λ k + 1 : = a k + 1 + 0.382 ( b k + 1 − a k + 1 ) . \varphi(\mu_{k+1}):=\varphi(\lambda_{k}),\:\lambda_{k+1}:=a_{k+1}+0.382(b_{k+1}-a_{k+1}). φ(μk+1):=φ(λk),λk+1:=ak+1+0.382(bk+1ak+1).

    • 计算 φ ( λ k + 1 ) \varphi(\lambda_{k+1}) φ(λk+1),转步 5.
  5. k : = k + 1 k:=k+1 k:=k+1,转步 2.

0.618 法的优点之一是,每次迭代都将搜索区间缩小为当前区间的 0.618 倍,因此可以很快地接近最小值。此方法通常适用于连续单峰函数的最小值搜索问题。

示例

0.618 法解下述函数,搜索区间宽度到 ε = 0.5 \varepsilon = 0.5 ε=0.5.
min ⁡ t ≥ 0 φ ( t ) = t 3 − 2 t + 1 \min_{t≥0}\:\varphi(t)=t^3-2t+1 t0minφ(t)=t32t+1
根据经验,选择初始搜索区间为 [ 0 , 3 ] [0, 3] [0,3](单谷区间).

计算过程:
a λ μ b φ ( λ ) φ ( μ ) 0 0 1.146 1.854 3 0.2131 3.6648 1 0 0.708 1.146 1.854 − 0.0611 0.2131 2 0 0.438 0.708 1.146 0.2082 − 0.0611 3 0.438 0.708 0.876 1.146 − 0.0611 − 0.0798 \begin{array}{|r|r|r|r|r|r|r|r|}\hline&a&\lambda&\mu&b&\varphi(\lambda)&\varphi(\mu)\\\hline0&0&1.146&1.854&3&0.2131&3.6648\\\hline1&0&0.708&1.146&1.854&-0.0611&0.2131\\\hline2&0&0.438&0.708&1.146&0.2082&-0.0611\\\hline3&0.438&0.708&0.876&1.146&-0.0611&-0.0798\\\hline\end{array} 0123a0000.438λ1.1460.7080.4380.708μ1.8541.1460.7080.876b31.8541.1461.146φ(λ)0.21310.06110.20820.0611φ(μ)3.66480.21310.06110.0798
最后输出 t = μ 3 = 0.876 t = \mu_3 = 0.876 t=μ3=0.876.

Newton 法

一维线性搜索是在优化算法中常用的一种方法,用于确定在给定搜索方向上的合适步长,使得目标函数在该方向上能够有明显的下降。Newton法(牛顿法)是一种使用二阶导数信息的优化方法,它在一维线性搜索中也可以应用。下面是一维线性搜索的 Newton 法的基本步骤:

  1. 选择初始点 x 0 x_0 x0 在搜索方向上选择一个初始点。

  2. 计算目标函数的一阶和二阶导数:

    • 计算目标函数 f ( x ) f(x) f(x) 在当前点 x k x_k xk 的一阶导数 f ′ ( x k ) f'(x_k) f(xk) 和二阶导数 f ′ ′ ( x k ) f''(x_k) f′′(xk)
  3. 计算搜索步长:

    • 计算一维搜索的步长 t k t_k tk,通常使用牛顿法的更新公式:
      t k = − f ′ ( x k ) f ′ ′ ( x k ) t_k = -\frac{f'(x_k)}{f''(x_k)} tk=f′′(xk)f(xk)
  4. 更新当前点:

    • 使用步长 t k t_k tk 更新当前点: x k + 1 = x k + t k x_{k+1} = x_k + t_k xk+1=xk+tk
  5. 重复迭代:

    • 重复步骤 2-4,直到满足停止条件,例如梯度足够小或达到最大迭代次数。

需要注意的是,上述步骤中的计算是在一维搜索方向上进行的,因此 f ′ ( x k ) f'(x_k) f(xk) f ′ ′ ( x k ) f''(x_k) f′′(xk) 分别是一维的梯度和二阶导数。在牛顿法中,使用二阶导数信息可以更准确地确定搜索步长,因此相较于一些基于一阶导数信息的方法,牛顿法可能在一维搜索中更快地收敛。

总的来说,一维线性搜索的 Newton 法是一种有效的优化方法,特别适用于目标函数具有二阶导数信息的情况。

示例

Newton 法求 min ⁡ φ ( t ) = ∫ 0 t arctan ⁡ x d x \min\:\varphi(t)=\int_0^t \arctan x\:dx minφ(t)=0tarctanxdx 的最优解.

解:
φ ′ ( t ) = arctan ⁡ t , 1 φ ′ ′ ( t ) = 1 + t 2 , t k + 1 = t k − φ ′ ( t k ) 1 φ ′ ′ ( t k ) \varphi^{\prime}(t)=\arctan t,\:\frac{1}{\varphi^{\prime\prime}(t)}=1+t^{2},\:t_{k+1}=t_{k}-\varphi^{\prime}(t_{k})\frac{1}{\varphi^{\prime\prime}(t_{k})} φ(t)=arctant,φ′′(t)1=1+t2,tk+1=tkφ(tk)φ′′(tk)1
选择 t 1 = 1 t_1=1 t1=1,开始计算,搜索精度取 ε = 0.01 \varepsilon=0.01 ε=0.01.
k t k φ ′ ( t k ) 1 / φ ′ ′ ( t k ) 1 1 0.7854 2 2 − 0.5708 − 0.5187 1.3258 3 0.1169 0.1164 1.0137 4 − 0.0011 − 0.0011 \begin{array}{|r|r|r|r|r|}\hline k&t_k&\varphi^{\prime}(t_k)&1/\varphi^{\prime\prime}(t_k)\\\hline1&1&0.7854&2\\\hline2&-0.5708&-0.5187&1.3258\\\hline3&0.1169&0.1164&1.0137\\\hline4&-0.0011&-0.0011&\\\hline\end{array} k1234tk10.57080.11690.0011φ(tk)0.78540.51870.11640.00111/φ′′(tk)21.32581.0137
最后输出 t k = − 0.0011 t_k=-0.0011 tk=0.0011.

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

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

相关文章

Access数据库C#读写验证

1、数据库简介 Access数据库是一个相当古老的文件型数据库,主打一个简单方便,没有复杂的安装过程,没有庞大的后端管理,整个数据库就是一个文件。可以像普通文件一样复制和修改,可以同时读写。 在小型系统中&#xff0c…

子组件如果向父组件传递数据是怎么做到

在 Vue.js 中&#xff0c;子组件向父组件传递数据可以通过自定义事件来实现。子组件可以通过 $emit 方法触发一个自定义事件&#xff0c;并且可以传递数据给父组件。 下面是一个示例&#xff0c;演示了子组件向父组件传递数据的过程&#xff1a; <!-- ParentComponent.v…

Xgboost分类模型的完整示例

往期精彩推荐 数据科学知识库机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据处理详细教程 定义问题 UCI的蘑菇数据集的主要目的是为了分类任务&#xff0c;特别是区分蘑菇是可食用还是有毒。这个数据集包含了蘑菇的各种特征&#xff0c;如…

【读书笔记】网空态势感知理论与模型(四)

一个网空态势感知整合框架 1. 引言 网空态势感知过程可以看作包含态势观察、态势理解和态势预测3个阶段。 态势观察&#xff1a;提供环境中相关元素的状态、属性和动态信息。 态势理解&#xff1a;包括人们如何组合、解释、存储和留存信息。 态势预测&#xff1a;对环境&a…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:外层作用域和非局部变量]

分类目录&#xff1a;《系统学习Python》总目录 我们在某些情况下可能想要共享全局状态。如果我们真的想要每个函数都有自己的计数器&#xff0c;要么像前面的文章那样使用类&#xff0c;要么使用Python3.X中的闭包函数&#xff08;工厂函数&#xff09;和nonlocal语句。由于这…

浪潮软件开发校招面试一面凉经

本文介绍2024届秋招中&#xff0c;浪潮通信信息系统有限公司的软件开发工程师岗位一面的面试基本情况、提问问题等。 10月投递了浪潮通信信息系统有限公司的软件开发工程师岗位&#xff0c;并不清楚所在的部门。目前完成了一面&#xff0c;在这里记录一下一面经历。 首先&#…

听GPT 讲Rust源代码--library/alloc

File: rust/library/alloc/benches/slice.rs 在Rust源代码中&#xff0c;rust/library/alloc/benches/slice.rs文件的作用是对&[T]类型&#xff08;切片类型&#xff09;进行性能基准测试。该文件包含了对切片类型的一系列操作的基准测试&#xff0c;例如切片迭代、切片排序…

【Python百宝箱】音律编织:Python语音合成库的技术交响曲

未来声音的奇妙之旅&#xff1a;深度学习与云端语音服务的交汇 前言 在当今数字化时代&#xff0c;语音合成技术在各个领域的应用日益广泛&#xff0c;从辅助技术到娱乐媒体&#xff0c;都展现出巨大的潜力。本文将带您深入了解语音合成的世界&#xff0c;从简单易用的库如py…

0101包冲突导致安装docker失败-docker-云原生

文章目录 1 前言2 报错3 解决结语 1 前言 最近在学习k8s&#xff0c;前置条件就是要安装指定版本的docker&#xff0c;命令如下 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.62 报错 file /usr/libexec/docker/cli-plugins/docker-buildx fr…

微信多商户商城小程序/公众号/h5/app/社区团购/外卖点餐/商家入驻/在线客服/知识付费/商品采集

多个源码二开合一!!包含:多商户商城/社区团购/外卖点餐/在线客服/知识付费/投票 。。。等等!!! 前台可自定义装修!!装修成为如下程序 1、小程序,公众号,h5,app多端合一 2、用户论坛 积分签到 3、知识付费、题库管理、课程设置 4、同城配送,配送员设置 5、餐饮…

用 print 太慢了!强烈推荐这款Python Debug工具~

作为程序员&#xff0c;我们都深知调试&#xff08;Debug&#xff09;在编程过程中的重要性。 然而&#xff0c;使用传统的"print"语句进行调试可能效率较低&#xff0c;今天&#xff0c;笔者将推荐一款独具一格的Python调试工具——Reloadium。 Reloadium为IDE添加…

sparkstreamnig实时处理入门

1.2 SparkStreaming实时处理入门 1.2.1 工程创建 导入maven依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.12</artifactId><version>3.1.2</version> </dependency> <dependency…

C++初阶——基础知识(内联函数)

目录 1.内联函数 内联函数的示例代码 1.内联函数 是一种 C 中的函数定义方式&#xff0c;它告诉编译器在每个调用点上插入函数体的副本&#xff0c;而不是像普通函数那样在调用时跳转到函数体所在的地址执行。这样可以减少函数调用的开销&#xff0c;提高程序的执行效率。 …

从入门到精通,30天带你学会C++【第十天:猜数游戏】

目录 Everyday English 前言 实战1——猜数游戏 综合指标 游玩方法 代码实现 最终代码 试玩时间 必胜策略 具体演示 结尾 Everyday English All good things come to those who wait. 时间不负有心人 前言 今天是2024年的第一天&#xff0c;新一年&#xff0c;新…

深入理解和运用C语言中的Break语句

各位少年 尊敬的读者们&#xff0c; 在C语言编程中&#xff0c;控制程序流程是我们编写高效代码的关键。今天&#xff0c;我们将一起探讨一种能够立即终止循环或开关语句的关键字——Break。 一、理解Break语句 Break关键字在C语言中用于立即退出当前的循环&#xff08;如f…

【网络】修改网口名字|网络设备|网口管理

目录 系统的网口(网络设备)命名规则 修改网口(网络设备)命名 永久修改 临时修改 使用传统eth0、eth1的命名方式 注意事项 系统的网口(网络设备)命名规则 ens35f0 这个名称是基于 Linux 的网络接口命名规则生成的。 在较新的 Linux 发行版中&#xff0c;网络接口的命名规…

LC106. 从中序与后序遍历序列构造二叉树

参考&#xff1a;代码随想录 class Solution {Map<Integer,Integer> map ;public TreeNode buildTree(int[] inorder, int[] postorder) {map new HashMap<>();for(int i 0 ; i < inorder.length; i ){map.put(inorder[i],i);}return findNode(inorder,0,inor…

计算机毕业设计——springboot养老院管理系统 养老院后台管理

1&#xff0c;绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院&#xff0c;经过我们前期的调查&#xff0c;院方大部分工作采用手工操作方式,会带来工作效率过低&#xff0c;运营成本过大的问题。 院方可用合理的较少投入取得更好…

声明式导航传参详情

1 动态路由传参 路由规则path ->/article/:aid 导航链接 <router-link to"/article/1">查看第一篇文章</router-link> 组件获取参数: this.$route.params.aid 如果想要所有的值&#xff0c;就用this. $route. params 注意&#xff1a;这两个必须匹配…

Spring Cloud Function SpEL注入漏洞(CVE-2022-22963)分析

一、概述 2022年3月24日&#xff0c;Pivotal修补了Spring Cloud Function中一个关键的服务器端代码注入漏洞&#xff08;Spring表达式语言注入&#xff09;&#xff0c;该漏洞有可能导致系统被攻击。Spring是一种流行的开源Java框架&#xff0c;该漏洞与另一个相关的远程代码执…