基于黄金莱维引导机制的阿基米德优化算法(MSAOA)-附代码

news2024/11/23 10:38:19

基于黄金莱维引导机制的阿基米德优化算法(MSAOA)

文章目录

  • 基于黄金莱维引导机制的阿基米德优化算法(MSAOA)
    • 1.阿基米德优化算法
    • 2. 改进阿基米德优化算法
      • 2.1 变区间初始化策略
      • 2.2 黄金莱维引导机制
      • 2.3 自适应波长算子
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要:针对标准阿基米德优化算法(AOA)在求解优化问题时存在全局探索能力弱、收敛速度慢和求解精度低等问题,提出一种多策略阿基米德优化算法(MSAOA)。首先,利用变区间初始化策略,使得初始种群尽可能地靠近全局最优解,从而提高初始解的质量;其次,提出黄金莱维引导机制,以提高算法在迭代后期的种群多样性;最后,在维持种群多样性的前提下,引入自适应波长算子,以达到提高算法搜索效率的目的。

1.阿基米德优化算法

基础阿基米德优化算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/119999874

2. 改进阿基米德优化算法

2.1 变区间初始化策略

初始化种群的好坏一定程度上决定了算法的性能, 初始 种群在解空间中的细微不同,都可能影响算法进化方向。 A O A \mathrm{AOA} AOA 的初始种群在搜索空间中随机产生, 导致初始种群分 布不均匀, 搜索范围有限。为了解决以上问题, 获得好的初 始种群, 本文利用变区间初始化策略来提取搜索空间中有用 信息以保证种群向全局最优解靠近。
对于优化问题:
min ⁡ f ( t ) , t i ∈ [ L B i , U B i ] ; i ∈ 1 , 2 , ⋯   , n (13) \min f(t), t_i \in\left[L B_i, U B_i\right] ; i \in 1,2, \cdots, n\tag{13} minf(t),ti[LBi,UBi];i1,2,,n(13)
式中: L B L B LB (Lower Bound) 表示搜索空间中的搜索下限; U B U B UB (Upper Bound) 表示搜索空间中的搜索上限。变区间初始化策略对就是通过不断缩短 [ L B , U U B ] [\boldsymbol{L B}, U \boldsymbol{U B}] [LB,UUB], 将初始种群逼近到式 (13) 中近似最优解的附近。
首先在中间取一个中点 l \boldsymbol{l} l
l = L B + 0.5 ( U B − L B ) (14) \boldsymbol{l}=\boldsymbol{L B}+0.5(\boldsymbol{U B}-\boldsymbol{L} B) \tag{14} l=LB+0.5(UBLB)(14)
生成两个个体:
{ x 1 = ( a ) x 2 = ( b ) (15) \left\{\begin{array}{l} x_1=(a) \\ x_2=(b) \end{array}\right.\tag{15} {x1=(a)x2=(b)(15)
式中 a \boldsymbol{a} a b \boldsymbol{b} b 分别为:
{ a = L B + rand ⁡ ( l − L B ) b = l + rand ⁡ ( U B − l ) (16) \left\{\begin{array}{l} \boldsymbol{a}=\boldsymbol{L} \boldsymbol{B}+\operatorname{rand}(\boldsymbol{l}-\boldsymbol{L} \boldsymbol{B}) \\ \boldsymbol{b}=\boldsymbol{l}+\operatorname{rand}(\boldsymbol{U} \boldsymbol{B}-\boldsymbol{l}) \end{array}\right.\tag{16} {a=LB+rand(lLB)b=l+rand(UBl)(16)
计算 f ( x 1 ) f\left(\boldsymbol{x}_1\right) f(x1) f ( x 2 ) f\left(\boldsymbol{x}_2\right) f(x2) 并比较它们大小, 若 f ( x 1 ) > f ( x 2 ) f\left(x_1\right)>f\left(\boldsymbol{x}_2\right) f(x1)>f(x2), 则有 x ∗ ∈ [ l , U B ] \boldsymbol{x}^* \in[\boldsymbol{l}, \boldsymbol{U B}] x[l,UB], 从而将潜在的最优解位置收缩到 [ l , U B ] [\boldsymbol{l}, U \boldsymbol{B}] [l,UB] 内 ; 然 后依次迭代,不断缩短搜索区间, 并将搜索空间 [ L B , U B ] [\boldsymbol{L B}, U \boldsymbol{B}] [LB,UB] 分 割成 n − 1 n-1 n1 个子区间, 把初始种群聚集到问题(13)的最优解 附近。

2.2 黄金莱维引导机制

其次, 本文引人正弦函数与单位圆之间的关系 [ 19 ] { }^{[19]} [19], 使得 种群能遍历正弦函数上的所有点, 即单位圆上的所有点。个 体位置更新公式为:
X new  t + 1 = X t × ∣ sin ⁡ ( R 1 ) ∣ + R 2 × sin ⁡ ( R 1 ) × s ⊕  dis  (19) \begin{aligned} & \boldsymbol{X}_{\text {new }}^{t+1}=X^t \times\left|\sin \left(R_1\right)\right|+R_2 \times \sin \left(R_1\right) \times s \oplus \text { dis } \end{aligned}\tag{19} Xnew t+1=Xt×sin(R1)+R2×sin(R1)×s dis (19)

 dis  = ∣ θ 1 × X best  t − θ 2 × X i t ∣ (20) \begin{aligned} & \text { dis }=\left|\theta_1 \times X_{\text {best }}^t-\theta_2 \times X_i^t\right| \end{aligned}\tag{20}  dis = θ1×Xbest tθ2×Xit (20)

式中: R 1 ∈ [ 0 , 2 π ] R_1 \in[0,2 \pi] R1[0,2π] 的随机数, R 1 R_1 R1 和莱维步长 s s s 共同决定搜索半 径; R 2 ∈ [ 0 , π ] R_2 \in[0, \pi] R2[0,π] 的随机数,决定个体的位置更新方向; θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 是 引人的黄金分割系数 τ \tau τ, 其目的是缩小搜索空间, 使得算法 在每次迭代都会对能产生优秀解的区域进行充分搜索,从而 加快了算法收敛速度。公式中具体参数表达式如下所示:
{ θ 1 = − π + 2 π × ( 1 − τ ) θ 2 = − π + 2 π × τ τ = ( 5 − 2 ) / 2 (21) \left\{\begin{array}{l} \theta_1=-\pi+2 \pi \times(1-\tau) \\ \theta_2=-\pi+2 \pi \times \tau \\ \tau=(\sqrt{5}-2) / 2 \end{array}\right.\tag{21} θ1=π+2π×(1τ)θ2=π+2π×ττ=(5 2)/2(21)
最后, 虽然对目标个体使用黄金莱维引导机制, 能让算 法跳出局部最优,但并不能保证新的个体位置优于原目标个 体位置, 因此在引导机制后加人贪婪机制, 通过比较个体位 置更新前后个体适应度后再决定是否更新目标位置, 以保留 适应度较好的个体。贪婪机制具体操作表达式如下:
X i t + 1 = { X i t + 1 ,  fit  ( X i t + 1 ) > f i t ( X new  t + 1 ) X new  t + 1 ,  fit  ( X i t + 1 ) ⩽  fit  ( X new  t + 1 ) (22) X_i^{t+1}= \begin{cases}X_i^{t+1}, & \text { fit }\left(X_i^{t+1}\right)>f i t\left(X_{\text {new }}^{t+1}\right) \\ X_{\text {new }}^{t+1}, & \text { fit }\left(X_i^{t+1}\right) \leqslant \text { fit }\left(X_{\text {new }}^{t+1}\right)\end{cases}\tag{22} Xit+1={Xit+1,Xnew t+1, fit (Xit+1)>fit(Xnew t+1) fit (Xit+1) fit (Xnew t+1)(22)

2.3 自适应波长算子

受到浸泡在液体中运动物体会导致水平面发生波动现 象启发, 本文提出了自适应波长算子: 达到自身平衡(适应度 较好) 的个体, 引起波动较小, 从而具有较长的波长; 还远末 达到自身平衡(适应度较差) 的个体运动会引起的较大波动, 从而具有较短的波长。
A O A \mathrm{AOA} AOA 中, 由于缺乏多样性的操作, 当 A O A \mathrm{AOA} AOA 进化到一定 的程度时, 导致 AOA 很难从自身适应度获取收益。因此结 合浸泡在液体中运动物体的物理现象, 本文提出自适应波长 算子增强个体学习效率, 提高算法寻优精度。
λ i = α − ( f ( X i ) − f min ⁡ + ε ) / ( f max ⁡ − f min ⁡ + ε ) (23) \lambda_i=\alpha^{-\left(f\left(X_i\right)-f_{\min }+\varepsilon\right) /\left(f_{\max }-f_{\min }+\varepsilon\right)}\tag{23} λi=α(f(Xi)fmin+ε)/(fmaxfmin+ε)(23)
式中: λ i \lambda_i λi 表示第 i i i 个体运动引起的波长系数; f ( X i ) f\left(X_i\right) f(Xi) 表示当前 迭代中第 i i i 个个体的适应度值; f min ⁡ f_{\min } fmin f max  f_{\text {max }} fmax  分别表示当前迭代 中最优适应度值和最差适应度值; α \alpha α 为衰减因子, ε \varepsilon ε 为一个非 常小的有理数, 以防止分母为 0 的情况。最后将自适应波长 系数融合到密度因子, 得到新密度因子更新公式为:
d i l + 1 = 1.5 × exp ⁡ ( ( t max  − t ) / t max  ) − λ i ( t / t max ⁡ ) (24) d_i^{l+1}=1.5 \times \exp \left(\left(t_{\text {max }}-t\right) / t_{\text {max }}\right)-\lambda_i\left(t / t_{\max }\right)\tag{24} dil+1=1.5×exp((tmax t)/tmax )λi(t/tmax)(24)
式中 d i t + 1 d_i^{t+1} dit+1 表示在 t + 1 t+1 t+1 代中第 i i i 个个体的密度因子。新的密度 因子的大小会根据个体自身适应度动态变化: 适应度接近最 优适应度的个体, A O A \mathrm{AOA} AOA 保持原来的密度因子的性质; 而适应 度较差的个体, 密度因子接近最大值, 使当前个体拥有较长 的步长, 快速向最优解靠近。

在这里插入图片描述

3.实验结果

在这里插入图片描述

4.参考文献

[1]陈俊,何庆,李守玉.基于黄金莱维引导机制的阿基米德优化算法[J].计算机应用,2022,42(09):2807-2815.

5.Matlab代码

6.Python代码

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

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

相关文章

什么是接口测试?怎么做接口测试?Apifox 教你做!

目录 前言: 一、什么是接口测试? 二、接口测试的步骤 三、接口测试工具的选择 四、总结 前言: 随着互联网和移动互联网的发展,企业面对着越来越庞大和复杂的系统和数据接口。在这种情况下,手动测试不再能够满足测…

修复uproject右键菜单完全解决方案办法

在你电脑中找到UnrealVersionSelector通常和epiclauncher是同一个根目录 epiclauncher路径是:D:\MyEpic\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe UnrealVersionSelector.exe的路径是:D:\\MyEpic\\Epic Games\\Launcher\\Engine\\Binaries\\Win64\\Un…

探索新科技:3DVR电子楼书引领视觉体验革命

导语: 近年来,科技的迅猛发展引领着我们进入一个全新的数字化时代。在这个时代,虚拟现实和电子书成为了许多领域的热门话题。 接下来,让我们一起探索一个引人注目的技术创新,将虚拟现实和电子书完美结合的3DVR电子楼书…

python基本语法知识(二)

杂项 如果一个制表符/t不能对齐,可以多加几个; 只有将字典转换为字符串的时候才会保留字典的value,转成集合、列表、元组、都会丢失value 函数 例子1: str1 "hello world" # 函数定义 def my_len(data):count 0f…

基于 Ray 的大规模离线推理

本文整理自字节跳动基础架构资深研发工程师王万兴在火山引擎开发者社区 Meetup 中的分享。大模型离线推理,是指在具有数十亿或数千亿参数的大规模模型上进行分布式推理的过程。相较于常规模型推理,在模型切分、数据处理和数据流、提升 GPU 利用率方面面临…

ROCK PI S音频开发(一)系统准备

1、连接WIFI sudo nmcli r wifi on sudo nmcli dev wifi sudo nmcli dev wifi connect "SSID" password "PASSWORD" 2、更新源 sudo apt-get update sudo apt-get install git wget export DISTROfocal-stable wget -O - apt.radxa.com/$DISTRO/publ…

PHP快速实战20-PHP7中的垃圾回收机制与原理讲解

文章目录 前言PHP垃圾回收实现的原理垃圾回收机制引用计数循环垃圾收集 实现原理 总结 前言 本文已收录于PHP全栈系列专栏:PHP快速入门与实战 在计算机程序中,垃圾回收指的是一种自动管理内存的技术。在程序执行过程中,分配给它的内存会随着…

2023年软件测试趋势?测试人的发展前景?“我“到底该如何走...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 现在开始学习软件…

NetSuite 中国财务常用报表功能包

目录 1.致谢 2.功能说明 2.1 概述 2.2 报表说明 3.安装 4.操作指南 4.1 CLR_资产负债表 4.2 CLR_资产负债表(期初/发生/结余) 4.3 CLR_利润表 4.4 CLR_利润表季报 4.5 CLR_现金流量表 4.6 CLR_现金流量表季报 4.7 CLR_总账 4.8 CLR_序时账…

《消息队列高手课》课程学习笔记(八)

如何实现高性能的异步网络传输? **异步与同步模型最大的区别是,同步模型会阻塞线程等待资源,而异步模型不会阻塞线程,它是等资源准备好后,再通知业务代码来完成后续的资源处理逻辑。**这种异步设计的方法,…

深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

分类目录:《深入理解深度学习》总目录 《深入理解深度学习——注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson 核回归》中使用了高斯核来对查询和键之间的关系建模。式中的高斯核指数部分可以视为注意力评分函数&a…

Spark笔记

DBeaver数据库连接器 Download | DBeaver Community shell命令 bin/spark-submit –class cn.edu.ncut.sparkcore.wordcount.Test03_WordCount_cluster –deploy-mode cluster –master yarn ./sparkcore-1.0-SNAPSHOT.jar 10 血缘关系查看 toDebugString()&#xff1a…

深入篇【Linux】学习必备:【文本编辑器】vim的基本介绍及使用

深入篇【Linux】学习必备:【文本编辑器】vim的基本介绍及使用 Ⅰ.vim基本简介Ⅱ.vim的基本操作⏰【命令模式下】1.移动光标2.复制删除粘贴3.替换更改4.撤销指令 ⏰【底行模式下】1.查找字符2.保存退出3.查看所有模式 Ⅲ.简单vim配置1.配置文件位置2.使用插件 Ⅰ.vim…

前后端交互三、Ajax加强

零、文章目录 前后端交互三、Ajax加强 1、XMLHttpRequest的基本使用 (1)什么XMLHttpRequest XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,通过它,可以请求服务器上的数据资源。jQuery 中的…

力扣 209. 长度最小的子数组

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target。 找出该数组中满足其和大于等于 target 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例 1: 输入:target 7, nums [2,3,1…

Servlet详解

目录 一. Servlet介绍 1.1 概念 2.2 Servlet架构 二. 创建一个Servlet程序 2.1 创建一个Maven项目 2.2 引入 jar 包 2.3 创建目录 2.4 编写代码 2.5 打包程序 2.6 部署程序 2.7 验证程序 三. Servlet常用API 3.1 HttpServlet 3.2 HttpServletRequest 3.2 HttpServlet…

深入了解SSM框架(案例(SSM+Jsp) + 详细分析 + 思维导图)

1.Spring Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。 Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个…

swagger 接口测试,用 python 写自动化时该如何处理?

在使用Python进行Swagger接口测试时,可以使用requests库来发送HTTP请求,并使用json库和yaml库来处理响应数据。以下是一个简单的示例代码: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站百万播…

vim编辑器基本使用

一、写在前面 今天在练习git相关操作时,无意间发现当你使用commit命令提交代码时,忘记添加备注信息会自动进入一个奇怪的模式,按esc键亦或是ctrlC都无法退出,这个奇怪的模式也就是vim编辑器。如下图: vim是一种文本…

前端工程化-VUE

前端工程化-VUE Vue-cliNode.js1.什么是Node.js2.Node.js的安装 高效的开发离不开基础工程的搭建。本章主要介绍如何使用Vue进行实际SPA项目的开发,这里使用的是目前热门的JavaScript应用程序模块打包工具Webpack,进行模块化开发、…