基于自适应反馈调节因子的阿基米德优化算法(IAOA)-附代码

news2024/12/30 1:51:00

基于自适应反馈调节因子的阿基米德优化算法(IAOA)

文章目录

  • 基于自适应反馈调节因子的阿基米德优化算法(IAOA)
    • 1.阿基米德优化算法
    • 2. 改进阿基米德优化算法
      • 2.1 佳点集种群初始化
      • 2.2 自适应反馈调节因子
      • 2.3 莱维旋转变换策略
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要:针对基础阿基米德优化算法收敛速度慢、容易陷入局部最优的问题,文中提出了一种基于自适应反馈调节因子的阿基米德优化算法。首先,通过佳点集初始化种群,增强初始种群的遍历性,提高初始解的质量;其次,提出自适应反馈调节因子,平衡算法的全局探索与局部开发能力;最后,提出了莱维旋转变换策略,增加种群的多样性,以防止算法陷入局部最优。

1.阿基米德优化算法

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

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

2.1 佳点集种群初始化

初始种群在解空间中的细微不同都可能影响算法的进化方向,最后产生完全不同的最终结果。在初始化阶段, AOA容易受到随机的干扰,发生聚集现象。本文通过引入佳点集初始化方法,来拟提高算法在解空间上的遍历能力。

2.2 自适应反馈调节因子

在 AOA 迭代后期进行局部开发时, 根据位置更新式可知, 个体收敛于当前最优解的方式是直接跳跃到当前最优 位置附近, 而不是像粒子群优化算法那样向最优位置移动。 这是一种盲目跟进的行为, 导致 A O A \mathrm{AOA} AOA 极容易陷入局部最优。 又根据密度因子式 (7) 可知, 随着迭代次数的增加, 密度因子 会呈现从 1 到0线性递减的趋势。密度因子过小会导致个体 信息的缺失, 从而导致了种群多样性的减少。因此, 本文提出 了自适应反馆调节因子对算法进行改进。本文将种群进化成 功率 [ 23 ] { }^{[23]} [23] 以及个体归一化后的适应度作为反馈调节参数对密 度因子进行改进, 使得个体根据种群所处的实际环境以及自身的适应度动态调节, 具体操作如下。
以最小值问题为例, 个体 i i i 在第 t t t 次迭代中的成功值 S ( i , t ) S(i, t) S(i,t) 定义 为 :
S ( i , t ) = { 1 ,  fit  ( pbest ⁡ i ( t ) ) < f i t (  pbest  i ( t − 1 ) ) 0 ,  fit  ( pbest ⁡ i ( t ) ) =  fit  ( p  pbest  i ( t − 1 ) ) (10) S(i, t)= \begin{cases}1, & \text { fit }\left(\operatorname{pbest}^i(t)\right)<f i t\left(\text { pbest }^i(t-1)\right) \\ 0, & \text { fit }\left(\operatorname{pbest}^i(t)\right)=\text { fit }\left(p \text { pbest }^i(t-1)\right)\end{cases}\tag{10} S(i,t)={1,0, fit (pbesti(t))<fit( pbest i(t1)) fit (pbesti(t))= fit (p pbest i(t1))(10)
其中, phest i ( t ) { }^i(t) i(t) 表示迭代至第 t t t 次时, 个体 i i i 的历史最优位置; f i t f i t fit ( 火) 为适应度函数; 根据个体 i i i 的成功值 S ( i , t ) S(i, t) S(i,t), 种群的成 功率 ( P s ) \left(P_s\right) (Ps) 定义为个体历史最优位置对应的进化成功个体数占 种群大小的比例, 计算式如下:
P s ( t ) = 1 N ∑ i = 1 N S ( i , t ) (11) P_s(t)=\frac{1}{N} \sum_{i=1}^N S(i, t)\tag{11} Ps(t)=N1i=1NS(i,t)(11)
其中, N N N 为种群的大小。

在迭代初期, 个体广泛分布在解空间中, 进化成功的个体 相对较多, 种群进化成功率较高, 侧面说明最优个体的引领方 向正确。在迭代后期, 种群个体逐渐聚集, 若进化成功率降 低,则应该保留更多的个体信息来保证算法的局部开发能力。 将种群进化成功率 P s P_s Ps 和密度因子 d d d 结合, 动态反馈算法的进 化状态, 以此来平衡算法的全局开发能力。自适应反馈调节 因子如下:
d i t + 1 = 2 ∗ exp ⁡ ( t max ⁡ − t t max ⁡ ) − ( t t max ⁡ ) ∗ ( α ∗ P s ( t ) + β ∗ F i ) (12) d_i^{t+1}=2 * \exp \left(\frac{t_{\max }-t}{t_{\max }}\right)-\left(\frac{t}{t_{\max }}\right) *\left(\alpha * P_s(t)+\beta * F_i\right)\tag{12} dit+1=2exp(tmaxtmaxt)(tmaxt)(αPs(t)+βFi)(12)
其中, 参数 α \alpha α 表示种群进化成功率重要性系数, F i F_i Fi 定义为:
F i = λ − ( f ( X i ) − f min ⁡ + ε ) / ( f max ⁡ − f min ⁡ + ε ) (13) F_i=\lambda^{-\left(f\left(X_i\right)-f_{\min }+\varepsilon\right) /\left(f_{\max }-f_{\min }+\varepsilon\right)}\tag{13} Fi=λ(f(Xi)fmin+ε)/(fmaxfmin+ε)(13)
其中, F i F_i Fi 表示第 i i i 个个体归一化后的适应度系数; β \beta β 为该系数 的重要性系数; λ \lambda λ 为衰减因子; ε \varepsilon ε 为一个非常小的有理数, 以防 止分母为 0 的情况。自适应反馈调节因子会根据适应度的变 化情况动态调整大小, 若当前个体适应度接近最优适应度, 自 适应反馈调节因子会保持原来的密度因子的性质, 加快算法 的收敛速度。而适应度较差的个体, 其自适应调节因子接近 最大值, 保留了自身更多信息, 保证了算法的局部开发能力。

2.3 莱维旋转变换策略

在保持 A O A \mathrm{AOA} AOA 的种群多样性基础上, 为了提高个体的探 索能力, 避免在迭代后期出现种群陷入局部最优的现象, 本文 提出了莱维旋转变换策略。以莱维步长 [ 24 ] { }^{[24]} [24] 为半径、最优个体 为中心对个体进行旋转变换操作, 以提高种群的多样性和收 敛速度, 其中莱维旋转变换算子为:
x i t = x best  + s ∗ 1 n ∥ x i t ∥ 2 R r x i t (14) \boldsymbol{x}_i^t=\boldsymbol{x}_{\text {best }}+s * \frac{1}{n\left\|\boldsymbol{x}_i^t\right\|_2} \boldsymbol{R}_r \boldsymbol{x}_i^t \tag{14} xit=xbest +snxit21Rrxit(14)
其中, R r ∈ R n ∗ n \boldsymbol{R}_r \in \boldsymbol{R}_{n * n} RrRnn 是一个元素取值在 [ − 1 , 1 ] [-1,1] [1,1] 之间均匀分布的随 机矩阵; ∥ \| - ∥ \| 为向量 2 -范数; s s s 为结合莱维的旋转因子; 理 论上 [ 25 ] { }^{[25]} [25] 能将位置旋转到以 s s s 为半径的任何位置, 可用于控制 解的搜索范围, 其表达式为:
s = 0.01 ∗ μ ∣ ν ∣ 1 / β ( x i t − x best  ) (15) s=0.01 * \frac{\mu}{|\nu|^{1 / \beta}}\left(\boldsymbol{x}_i^t-\boldsymbol{x}_{\text {best }}\right)\tag{15} s=0.01ν1/βμ(xitxbest )(15)
σ μ = { Γ ( 1 + β ) ⋅ sin ⁡ ( π β 2 ) Γ [ ( 1 + β ) 2 ] β ⋅ 2 ( β − 1 ) 2 } 1 / β (16) \sigma_\mu=\left\{\frac{\Gamma(1+\beta) \cdot \sin \left(\frac{\pi \beta}{2}\right)}{\Gamma\left[\frac{(1+\beta)}{2}\right] \beta \cdot 2^{\frac{(\beta-1)}{2}}}\right\}^{1 / \beta}\tag{16} σμ= Γ[2(1+β)]β22(β1)Γ(1+β)sin(2πβ) 1/β(16)
其中, β \beta β 的取值会影响搜索半径的大小, β \beta β 的取值越大, 其局部 开放能力就越强 。

莱维旋转变换算子可以对个体以一定的角度进行旋转, 以最大限度地避免生成重复个体; 并且其结合莱维步长的短 距离步长和长距离步长相间的特点, 扩大群体的搜寻范围, 协 助算法在必要时跳出局部最优, 以提高算法的搜索性能。最 后, 为了兼顾种群搜索领域的广度与深度, 本文根据个体的适 应度值, 计算个体的进化概率, 如式 (17) 所示。个体的可行解 质量越差, 则该个体被选择进行莱维旋转变换操作的概率就 越大, 同时本文还采用贪婪选择更新解, 在保留优势个体的同 时兼顾个体的探索能力。
p i = f i t i ∑ i = 1 N f i t i (17) p_i=\frac{f i t_i}{\sum_{i=1}^N f i t_i}\tag{17} pi=i=1Nfitifiti(17)
其中, p i p_i pi 是选择概率; f i t i f i t_i fiti 的表达式为:
 fit  i = { 1 1 + f i , f i ⩾ 0 1 + ∣ f i ∣ , f i < 0 (18) \text { fit }_i= \begin{cases}\frac{1}{1+f_i}, & f_i \geqslant 0 \\ 1+\left|f_i\right|, & f_i<0\end{cases}\tag{18}  fit i={1+fi1,1+fi,fi0fi<0(18)
其中, f i f_i fi 为第 i i i 个个体的适应度值。

在这里插入图片描述

3.实验结果

在这里插入图片描述

4.参考文献

[1]陈俊,何庆,李守玉.基于自适应反馈调节因子的阿基米德优化算法[J].计算机科学,2022,49(08):237-246.

5.Matlab代码

6.Python代码

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

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

相关文章

软考A计划-试题模拟含答案解析-卷七

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

Maven学习笔记(单一架构案例)22版

第一节 创建工程&#xff0c;引入依赖 1 架构 ①架构的概念 『架构』其实就是『项目的结构』&#xff0c;只是因为架构是一个更大的词&#xff0c;通常用来形容比较大规模事物的结构。 ②单一架构 单一架构也叫『all-in-one』结构&#xff0c;就是所有代码、配置文件、各种…

基于hdoop的短视频用户画像研究_kaic

基于hadoop的短视频用户画像研究 摘 要 在这个互联网迅速发展的时代&#xff0c;网络和信息技术都跟上了时代的潮流&#xff0c;在互联网中的用户数据也出现了爆炸性的增长。用户的各种日常行为都通过互联网被记录下来&#xff0c;对于所有的互联网企业来说&#xff0c;想要从…

TCP报文中序列号的作用

TCP&#xff08;传输控制协议&#xff09;中的序列号用于标识TCP报文段中的数据部分。每个TCP报文段都包含一个序列号字段&#xff0c;该字段指示了报文段中第一个字节的序号。在后续的报文段中&#xff0c;序列号将递增&#xff0c;以指示下一个字节的序号。 TCP序列号是一个…

升级Springboot2.7.11之后内嵌tomcat启动成功, 但访问任何接口都是404

背景 最近项目在升级JDK17, 但原先低版本Springboot不能识别jdk17编译的字节码, 为了能够使用JDK17的语法, 因此对SpringBoot也做了升级, 直接升级到了SpringBoot 2.7.11版本. 对一些变更修改升级完成后, 本地启动服务运行, 一切正常!!! 于是发布到公司的容器环境运行, 发布平…

queue的常见接口说明(基于c++标准库的STL)

前言 队列是一种容器适配器&#xff0c;专门用于先进先出&#xff08;FIFO&#xff09;的操作中 &#xff0c;其容器从一端插入数据&#xff0c;从另一端取出数据。队列作为一种容器适配器实现&#xff0c;容器适配器即将特定的容器封装起来&#xff0c;queue提供一组特定的成员…

LBM-BGK计算泊肃叶流动

LBM在计算泊肃叶流动时&#xff0c;需要添加外力项&#xff0c;这部分网上没什么资料&#xff0c;仅有的资料也写的模糊不清&#xff0c;这里点名批评这个知乎博文。 有些地方字母都对不上。。。 本站上也有一篇博文&#xff0c;写的也比较一般&#xff0c;但是代码是多松弛MR…

测试C#分词工具jieba.NET(续2:其它用法)

jieba.NET除分词和关键词提取功能之外&#xff0c;还有一些其它用法&#xff0c;本文基于参考文献学习并记录。 设置停用词 提取关键词时&#xff0c;部分词语可能不重要或者并非所需的词语&#xff0c;此时可以通过设置停用词&#xff0c;在提取关键词时过滤掉指定的停用词。…

【笔记整理】图神经网络学习

【笔记整理】图神经网络学习 文章目录 【笔记整理】图神经网络学习一、GNN简介1、图结构 & 图基础算法1&#xff09;引言&#xff08;"非欧几何, 处理图数据的NN"&#xff09;2&#xff09;图基本概念 & 分类&#xff08;"邻接矩阵, 图结构分类"&a…

搭建springboot工程_学习笔记

2.搭建springboot环境 2.1 使用maven项目 在pox.xml文件中加入parent <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version></parent>在pom…

chatgpt赋能python:Python中8%3的运算:一种常见的数学问题

Python中8%3的运算&#xff1a;一种常见的数学问题 在Python中&#xff0c;8%3是一种常见的数学问题。在本文中&#xff0c;我们将介绍Python中的这种运算符以及它的用途。 什么是8%3&#xff1f; 百度百科给出的解释是&#xff1a; 求余运算符&#xff08;%&#xff09;用来…

为什么要“内卷”创始人?如何内卷?

受疫情影响&#xff0c;近几年各个行业都受到很大的冲击&#xff0c;同时有许多知识创业者反而逆势增长&#xff0c;这是为什么呢&#xff1f;因为有一个好的领导者&#xff01;一家企业的发展&#xff0c;和创始人的心力和决心紧密联系着&#xff0c;只有好的将军才能带领出好…

【社群运营】关于社群运营的一些学习和思考

社群运营 运营流程&#xff08;自己&#xff09;背景流程过去经验1.你觉得社群最重要的价值是什么&#xff1f;对个人对DW 2.学习社群组织好哪些环节你觉得非常重要&#xff1f;3.这些环节有没有比较好的运营经验/方法&#xff1f;价值共鸣情感共鸣精神共鸣 社群总结 运营流程&…

《数据库应用系统实践》------ 超市管理系统

系列文章 《数据库应用系统实践》------ 超市管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&#xff…

剑指 Offer 11. 旋转数组的最小数字解题思路

文章目录 题目解题思路优化 题目 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers &#xff0c;它原来是一个升序排列的数组&#xff0c;并按上述情形进行了一次旋转。请返回旋转数组的最小元素。…

直流电机 PID 开发指南学习笔记

直流电机 PID 开发指南 &#xff08;基于【平衡小车之家】直流电机 PID 学习套件 1.0&#xff09; 目录 1.位置闭环控制 1.1 理论分析 1.2 控制原理图 1.3 C 语言实现 1.4 参数整定 2.速度闭环控制 2.1 理论分析 2.2 控制原理图 2.3 C 语言实现 PID 调节器出现于上世…

keepalived脑裂后,近20min不能访问虚拟IP事故分析

问题现象和说明 真实的场景比较复杂&#xff0c;抽象起来可以用下面的图表示&#xff0c; #mermaid-svg-q8mZrLctqAENT1r0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-q8mZrLctqAENT1r0 .error-icon{fill:#5522…

【经验总结】浮点数double/float精度误差问题总结

现象 最近做的项目中经常会在C环境下和高精度的double浮点类型数据打交道 这些double类型数据精度级别可能到 pico级别(10^-12) 甚至 femto级别(10^-15),用来表示集成电路的一些微观属性 但是非常诡异的是&#xff0c;不知道为什么在对这些高精度的浮点数进行运算时&#xff…

RK3588平台开发系列讲解(工具篇)ADB的使用

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、连接设备1.1、USB 的方式1.2、网络的方式二、常用命令沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍ADB的使用。 一、连接设备 1.1、USB 的方式 主机通过 USB 连接设备,具体如何连接。 US…

chatgpt赋能python:Python中5%-3的用法介绍

Python中5%-3的用法介绍 在Python编程中&#xff0c;5%-3是一个常用的运算符&#xff0c;其作用是对5除以3取余数。在本文中&#xff0c;我将介绍5%-3的用法以及如何在Python编程中使用该运算符。 什么是5%-3运算符 5%-3运算符表示对5除以3取余数&#xff0c;余数为2。 5%-…