翻筋斗觅食策略改进灰狼算法

news2024/11/15 7:44:01

   

目录

一、动态扰动因子策略

二、翻筋斗觅食策略 

三、改进灰狼算法收敛曲线图


       灰狼优化算法(grey wolf optimization,GWO)存在收敛的不合理性等缺陷,目前对GWO算法的收敛性改进方式较少,除此之外,当GWO迭代至后期,所有灰狼个体都逼近\alpha狼、\beta狼、\delta狼,导致算法陷入局部最优。针对以上问题,提出了一种增强型的灰狼优化算法IGWO。首先引入一种扰动因子,平衡了算法的开采和勘探能力;其次引入翻筋斗觅食策略,在后期使其不陷入局部最优的同时也使得前期的群体多样性略有提升。对IGWO算法的寻优性能进行验证,结果表明IGWO算法在寻优性能上较GWO算法有明显优势。

一、动态扰动因子策略

       在原始GWO算法中,开采与勘探的过渡是由H决定的,也就是由收敛因子a决定。|H|>1时,狼群进行全局搜索,扩大勘探范围的同时增强其全局性;|H|<1时,狼群进行局部搜索,提高局部搜索效率。然而缺点是a的前半段与后半段下降幅度是相同的,导致无法在前期更好地全局搜索,而后期无法更有效地进行局部搜索,这在处理复杂优化问题时会显露弊端。大多数情况不能保证全局最优解在收敛的末端出现,会出现早熟收敛和后期陷入局部最优的情形。关于a的改进一般是变线性为非线性,使前期的a平稳过渡,增强全局勘探能力;后期a急速下降呈陡崖状,增强其局部开采能力。本文将引入新的动态扰动因子策略以确保精度,扰动因子E和更新后的H如式1所示。这里的H为灰狼算法中的A,\rho _{1}为灰狼算法中的r_{1}

式1 扰动因子E和更新后的H

 其中:randn代表服从高斯正态分布的随机数;ω代表某一常数,它决定了扰动因子峰值的位置。

         图1可以看出不同ω值的扰动因子振幅情况,振幅随着ω的增加而减小,最早出现较大振幅的是ω=2的扰动因子。

图1 不同ω值的扰动因子E振幅情况

       由于H值是位置更新的一部分,它不仅是全局和局部搜索转换的关键,而且还影响了算法的收敛性。具体来说,其数值越大、勘探越多,数值越小、开采越多。图 2 给出了随着迭代的更新H的变化。从图中可以看出,当ω=2时,|H|在迭代后期会突然大于1,且扰动因子的振幅较大,严重影响了收敛性;当ω=3时,扰动因子的振幅较小,后期跳出局部最优的能力会变弱,但是并不影响算法本身的性能;当ω=2.5时,可以看出收敛性略有提升。对比之下,若是优化一些包含局部最优的适应度函数,将ω设为3可能会降低精度,而将ω设为2,得到的结果与原算法相似,而将ω设为2.5可以提升算法的性能。

图2 不同w值下H的变化

二、翻筋斗觅食策略 

       由于灰狼优化算法后期易陷入局部最优,通过蝠鲼觅食会突然翻身捕捉浮游生物,引入较为新颖的翻筋斗觅食策略来改善GWO算法跳出局部最优的能力。这种捕猎行为,可以将猎物视为一个支点,每次捕猎将会更新到当前位置与对称于支点对面位置的某一位置,数学模型如下:

其中:S代表空翻因子,决定了翻到猎物对面的位置,取S=2x_{best}^{d}为猎物位置;N为狼群数量;d为维度;r_{1}r_{2}为两个在[0,1]的随机数。灰狼翻筋斗觅食示意图如图3所示。

图3 灰狼翻筋斗觅食示意图

        由图3可以看出,每一只灰狼移动的位置位于当前位置和对称于猎物位置的位置之间,在于寻求一个靠近最优解的更佳搜索域,随着个体位置与最优解之间的距离越来越小,当前位置的波动也会越来越小,最终每一只狼都将逼近最优解,搜索空间也会越来越小。因此,随着迭代次数的增加,翻筋斗觅食的范围也在自适应地减小。在每一次的迭代中,当前灰狼x_{i}^{d}(t)会与其跳跃支点后的灰狼进行适应度对比,如果此时已经陷入局部最优,则灰狼x_{i}^{d}(t)可能会被跳跃支点后的灰狼取代(取决于适应度值),而随着迭代的进行,被取代的概率就越大,跳出局部最优的效果就越明显。与反向学习策略不同的是,翻筋斗策略在更新位置时是围绕最优狼进行的,这使得算法具有更强的收敛性。

三、改进灰狼算法收敛曲线图

F1:

The best optimal value of the objective funciton found by GWO is : 3.061e-28
The best optimal value of the objective funciton found by IGWO is : 0

F7:

The best optimal value of the objective funciton found by GWO is : 0.0026498
The best optimal value of the objective funciton found by IGWO is : 0.0010795
 

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

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

相关文章

企业版:Select.PDF Library for .NET

HTML 到 PDF API SelectPdf提供了一个REST API&#xff0c;可用于通过我们的专用云服务将html转换为任何语言的pdf。 另存为 PDF 链接 以非常简单的方式将“转换为PDF”功能添加到您的网站或博客。只需添加一个指向您的网页的链接&#xff0c;您就完成了。 适用于 .NET 的 PD…

Redis 通用命令

通用命令介绍 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令&#xff0c;比如删除键、对键进行改名、判断键是否存在等。简单说&#xff0c;就是 keys 分类的命令&#xff0c;如下图。 上图中圈中的部分&#xff0c;就是所谓的通用的命令…

chatgpt赋能python:Python对于SEO的重要性:浏览网页的技术分析

Python对于SEO的重要性&#xff1a;浏览网页的技术分析 越来越多的网站需要搜索引擎优化&#xff08;SEO&#xff09;&#xff0c;以便他们的网站上的内容能够被更多人浏览与访问。这就要求我们使用一些工具和技术&#xff0c;例如Python&#xff0c;来帮助我们分析网页的技术…

通过调整图像hue值并结合ImageEnhance库以实现色调增强

前言 PIL库中的ImageEnhance类可用于图像增强&#xff0c;可以调节图像的亮度、对比度、色度和锐度。 通过RGB到HSV的变换加调整可以对图像的色调进行调整。 两种方法结合可以达到更大程度的图像色调增强。 调整hue值 __author__ TracelessLe __website__ https://blog…

linux 下查看 USB 设备

文章目录 前言目录内容详解usb11-0:1.01-1.1:1.0 结构图设备信息bDeviceClassversionbusnum & devnumdevbMaxPoweridVendor & idProductproductmanufacturerbcdDevicespeedueventbmAttributesdrivers_autoprobe 前言 在 sysfs 文件系统下&#xff0c;查看 USB 设备&am…

PaddleOCR #使用PaddleOCR进行光学字符识别(PP-OCR文本检测识别)

引言&#xff1a; PaddleOCR 是一个 OCR 框架或工具包&#xff0c;它提供多语言实用的 OCR 工具&#xff0c;帮助用户在几行代码中应用和训练不同的模型。PaddleOCR 提供了一系列高质量的预训练模型。这包含三种类型的模型&#xff0c;使 OCR 高度准确并接近商业产品。它提供文…

【Unity 2D AABB碰撞检测】铸梦之路

作者介绍&#xff1a;铸梦xy。IT公司技术合伙人&#xff0c;IT高级讲师&#xff0c;资深Unity架构师&#xff0c;铸梦之路系列课程创始人。 目录1.AABB 碰撞介绍2.常用2D碰撞盒3.为什么要学习如何编写碰撞检测4.2D BOX & BOX 碰撞检测原理和代码5.2D BOX &Shpere 碰撞检…

Linux信号编程、signal函数范例详解( 4 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

chatgpt赋能python:Python求1是什么?Python求1在SEO中的应用

Python求1是什么&#xff1f;Python求1在SEO中的应用 介绍Python求1 Python求1&#xff0c;也叫做1-bit计数器&#xff0c;是一种用来统计网页浏览量的技术。在Web开发中&#xff0c;我们需要记录网页的浏览次数&#xff0c;以便了解网站的流量和用户的使用情况。传统的做法是…

chatgpt赋能python:Python求绝对值:从初学者到高级工程师的必备知识

Python求绝对值&#xff1a;从初学者到高级工程师的必备知识 Python是一种有趣且功能强大的编程语言。它非常易于学习&#xff0c;同时又具有广泛的应用领域&#xff0c;比如Web开发、数据分析、机器学习和人工智能等。在Python的数学运算中&#xff0c;求绝对值是一个常见的需…

chatgpt赋能python:Python浮点型的两种表示方法

Python浮点型的两种表示方法 Python是一种解释型的动态语言&#xff0c;可以处理多种数据类型。其中&#xff0c;浮点型是其中一种数据类型&#xff0c;它包括十进制和科学计数法两种表示方法。 十进制表示法 十进制浮点数是Python的基本浮点类型&#xff0c;可以表示实数。…

2023 hnust 湖南科技大学 大数据技术与应用 期末考试 复习资料

前言 感谢&#xff1a;lqx&#xff08;主要内容来源&#xff09;&#xff0c;hqh 有自己的理解和魔改 可以参考的资料 课后题答案我爬取的老师布置的学习通课后题往年资料csdn里面找到的&#xff1a;1、2老师ppt上课划重点录音 不提供pdf文件&#xff0c;方便修改&#xff0…

探索技术极致,未来因你出‘粽’

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

chatgpt赋能python:Python游戏——为什么它成为未来最热门的游戏开发工具

Python游戏——为什么它成为未来最热门的游戏开发工具 在游戏开发中&#xff0c;Python一直是非常强大和受欢迎的语言。Python具有很多吸引人的特点和实用功能&#xff0c;它为游戏开发者提供了多种可能&#xff0c;我们在本文中将介绍Python游戏以及为什么它越来越受欢迎。 …

【从零开始学习JAVA | 第十一篇】ArrayList集合

目录 前言&#xff1a; ArrayList&#xff1a; 常用成员方法&#xff1a; 案例练习&#xff1a; 1.集合的遍历方式&#xff08;引用数据类型&#xff09;&#xff1a; 2&#xff1a;集合的遍历方式&#xff08;基本数据类型&#xff09;&#xff1a; 总结&#xff1a;…

一面、二面、三面有什么区别?

很多公司面试都分一面、二面、三面甚至更多&#xff0c;大家可能会好奇&#xff0c;为什么要面这么多面&#xff0c;每一面又有啥区别呢&#xff1f; 首先我来回答下为什么要这么多面&#xff0c;最核心的是最后3点&#xff1a; 如果光是一个人面&#xff0c;担心会看走眼&…

python基础学习6【DatatimeIndex与PeriodIndex函数+Timedelta类+连接数据库+agg()函数和aggregate()函数】

转换与处理时间序列数据 转换字符串时间为标准时间: Timestamp类型&#xff1a;最基础最常用。 pd.to_datetime(data[lock_time])#转换 如果超出时间戳最大值&#xff0c;最小值&#xff0c;时间戳存储可能不成功 &#xff1a; DatatimeIndex与PeriodIndex函数【其实俺暂时…

【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

&#x1f4a7; S p r i n g C l o u d S l e u t h 分布式链路跟踪 \color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} SpringCloudSleuth分布式链路跟踪&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云…

scratch lenet(9): C语言实现tanh的计算

文章目录 1. 目的2. tanh ⁡ ( x ) \tanh(x) tanh(x) 的 naive 实现2.1 数学公式2.2 naive 实现 3. tanh ⁡ ( x ) \tanh(x) tanh(x) 的快速计算3.1 Maple 中的近似公式3.2 tan_c3()3.3 Gauss 连分数公式 (Continued Fraction) 4. 最终代码和运行结果代码运行结果 5. 其他Ref…

使用python制作常用图表

案例01 制作柱形图展示数据的对比关系——员工销售业绩统计表.xlsx import xlwings as xw app xw.App(visibleTrue, add_bookFalse) workbook app.books.open(员工销售业绩统计表.xlsx) # 打开要制作图表的工作簿 for i in workbook.sheets: # 遍历工作簿中的工作表chart i…