原创!—混合灰狼层次结构的自适应麻雀搜索算法GWHASSA

news2024/11/19 22:47:22

麻雀搜索算法(SSA)是薛建凯等人[1]提出的一种群体智能优化算法,是受麻雀觅食和躲避捕食者行为启发而设计出的算法。该算法于2020年首次提出,具有局部搜索能力强、调整参数少等特点,已成功应用于CT图像的现场检测、电池堆参数的优化识别、机器学习算法的参数优化等实际问题中。

但麻雀搜索算法在面对复杂优化问题时仍有全局搜索能力较弱、容易陷入局部最优、对初始解的依赖性等问题。为克服以上缺陷,卡卡(我)在本文提出了混合灰狼层次结构的自适应麻雀搜索算法。

00 目录

1 麻雀搜索算法原理

2 改进的麻雀搜索算法

3 代码目录

4 算法性能

5 源码获取

01 麻雀搜索算法原理

麻雀搜索算法原理及其MATLAB代码在卡卡往期文章中有过叙述,这里不再说明,感兴趣的朋友可以找我的往期文章

02 改进的麻雀搜索算法

2.1 混沌初始化策略

群体的算法的初始化影响其搜索性能。由于没有先验信息,SSA中的麻雀通常是由随机初始化产生的。这种策略在某种意义上是有用的。但是,有时候麻雀在搜索域中的分布并不均匀,这可能会使麻雀远离全局最优解,导致收敛速度较低。混沌具有遍历性、随机性和规律性等特征,是非线性系统中的一种普遍现象。

目前文献中常用的混沌扰动方程有Logistic映射和Tent映射等。由文献[2]可知Logistic映射的分布特点是:中间取值概率比较均匀,但在两端概率特别高,因此当全局最优点不在设计变量空间的两端时,对寻找最优点是不利的。而Tent混沌映射结构简单,具有比Logistic混沌映射更好的遍历均匀性和更快的搜索速度,但 Tent映射迭代序列中存在小周期, 还存在不稳定周期点, 为避免Tent混沌序列在迭代时落入小周期点和不稳定周期点,在原有的Tent 混沌映射表达式上引入一个随机变量rand(0, 1) × 1 /N[3]。则改进后的Tent混沌映射表达式如下:

在这里插入图片描述

其中: N 是序列内粒子的个数。引入随机变量rand(0, 1) /N 不仅仍然保持了Tent混沌映射的随机性、遍历性、规律性,而且能够有效避免迭代落入小周期点和不稳定周期点内。本文算法引入的随机变量,既保持了随机性, 又将随机值控制在一定的范围之内,保证了Tent混沌 的规律性。

在这里插入图片描述

图显示了Logistic、Tent和改进的Tent混沌映射产生的混沌序列在二维区域中的初始分布,可以观察到,改进后的Tent混沌映射的分布均匀性较好,因此本文以改进Tent混沌性来代替麻雀搜索算法的随机初始化,以提高和改善初始种群在搜索空间上的分布质量,加强其全局搜索能力,从而提高算法求解精度。

2.2 比例自适应变化

在 SSA算法中,发现者和加入者的数目比例保持不变,这会导致在迭代前期,发现者的数目相对较少,无法对全局进行充分的搜索,在迭代后期,发现者的数目又相对较多,此时已不需要更多的发现者进行全局搜索,而需要增加加入者的数量进行精确的局部搜索。为解决这个问题,提出发现者-加入者自适应调整策略,该策略在迭代前期,发现者可以占种群数目的多数,随着迭代次数的增加,发现者的数目自适应减少,加入者的数目自适应增加,逐步从全局搜索转为局部精确搜索,从整体上提高算法的收敛精度。发现者和加入者数目调整式为
在这里插入图片描述

在这里插入图片描述

式中:pNum 为发现者数目;sNum为加入者数目;b为比例系数,用于控制发现者和加入者之间的数目;k为扰动偏离因子,对非线性递减值 r 进行扰动。如图,本文提出的发现者和追随者的数量之比随着迭代的进行逐渐收敛,可以在早期的全局搜索和后期的局部优化之间达到平衡。
在这里插入图片描述

2.3 动态惯性权重

根据SSA算法机制,注意到从每次迭代开始发现者向最优解的移动过程容易呈现出“跳跃式”的步进状态,该模式固然有利于提高算法的收敛速度,但种群在较短的时间内大量汇集将在一定程度上降低搜索过程的多样性,并出现因忽略搜索盲点和搜索范围不足而陷入局部极值。同时,且发现者在其更新过程中对自身位置的利用程度始终未发生改变。受粒子群优化算法以及文献[4]启发,本文将惯性权重的扰动策略引入到麻雀搜索算法中来更新发现者的位置,从而提高发现者的全局搜索能力,使原种群中适应度较好的个体在其原位置的不同地点之间扰动,改善麻雀种群之间的信息交换,改进的发现者位置更新公式如下:

在这里插入图片描述

在这里插入图片描述

其中,wmax和wmin是权重变化的最大和最小值,Tmax为最大迭代数,t为当前迭代次数。在迭代前期,较大的惯性权值有利于发现者的全局探索, 而迭代后期较小的惯性权值有利于发现者的局部搜索.提高算法的收敛速度和精度。

在这里插入图片描述

2.4 等级制度

根据侦察者位置更新的公式:
在这里插入图片描述

在遇到危险时,麻雀个体逃生方式单调狭窄,并在更新中仅考虑当前状态的最优解,没有考虑其他次优解,将过早使全部个体收敛于当前最优个体,若当前最优个体非全局极值点,将使结果容易陷入局部解。所以引入灰狼优化算法(GWO)中的等级制度策略,选取前3个历史最优位置{Xα, Xβ,Xγ}以得到潜在的最优解,该策略能够更为灵活搜索附近的可靠解,降低了SSA陷入局部最优的概率。改进后的侦察者位置更新公式为:
在这里插入图片描述

其中,各头狼对应权重θi 计算公式如下:
在这里插入图片描述

通过引入等级制度,使得SSA的逃生范围扩大,但是个体在向最优解靠近的过程中,由式得到的个体更新位置是当前最优解、次优解和再次优解的加权平均和,具有一定的随机性,所以更新的位置不一定更优,即算法可能不会收敛,甚至出现发散现象。为了使算法能够收敛到最优解,根据差分进化中的“贪婪”策略,个体的更新位置只选取当前的代价最优值。当得到的更新位置Xnew(t+1)的适应度优于当前的位置,即fnew<=fcurrent,新个体位置才被接受,否则个体的位置保持当前最优而不进行更新。位置更新函数为:

在这里插入图片描述

2.5 算法流程
混合灰狼层次结构的自适应麻雀搜索算法流程图如下:

在这里插入图片描述

可以看到,算法的改进整体上并没有增加额外的计算负担。

03 代码目录

在这里插入图片描述

其中,Main_GWHASSA.m为主程序,代码注释详细,一键运行Main_GWHASSA即可得到所有运行结果。

运行结果包括:混沌序列比较图、自适应参数变化图、惯性权重图以及算法在各测试函数上的迭代图,最后将生成excel表,包含算法在各函数迭代n次的平均值,均值、运行时间、最优解。同时,文件也有乱码解决,给出了主要代码的txt文件。

部分源码:
在这里插入图片描述

04 算法性能

为了评估该算法的有效性,在多个测试函数上进行性能测试,并与多个算法进行对比,结果显示改进有效果。

在这里插入图片描述
在这里插入图片描述

05 源码获取

公众号(KAU的云实验台)后台回复: GWHASSA

除这些改进措施外,还可以在算法最后对最优个体增加一个随机游走等策略来使其避免陷入局部最优,进一步提高其性能。

卡卡将在后面的文章中继续更新其他没有介绍过的智能优化算法,并免费提供经卡卡注释过的源码,从这些改进的方法中可以看到,各种不同的算法更新机制将是算法创新性的重要来源,也许从这些算法中你也可以受到启发创造出高性能的算法,因此对不同的算法多进行了解对于算法的改进是必要的,卡卡也将尽可能兼顾简洁和逻辑性帮大家更多的了解其他算法,为各位提供帮助,看到这里,不妨点个赞吧​。

参考文献

[1]XUE J K, ShEN B. A novel swarm intelligence optimization approach: sparrow search algorithm [J]. Systems Science & Control Engineering, 2020, 8(1): 22-34.

[2] 江善和,王其申,汪巨浪.一种新型SkewTent映射的混沌混合优化算法[J.控制理论与应用, 2007,24(2): 269-273.

[3] 张娜,赵泽丹,包晓安,等.基于改进的Tent混沌万有引力搜索算法[J].控制与决策,2020,35(4):893-900.

[4]张顶学, 关治洪, 刘新芝. 一种动态改变惯性权重的自适应粒子群算法[J]. 控制与决策, 2008, 23(11): 1253-1257.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行)

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

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

相关文章

分布式和微服务

问题分析&#xff1a; 简单来说&#xff0c;分布式是一组通过网络进行通信&#xff0c;并且为了完成共同的计算任务的计算机节点组 成的系统。 分布式系统的设计理念&#xff0c;其实是来自于小型机或者大型机的计算能力的瓶颈和成本的 增加。 在集中式系统里面&#xff0c;要…

FL Studio21最新中文破解进阶高级完整版安装下载教程

目前水果软件最版本是FL Studio21&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破想象力的限制。喜欢音乐制作的小伙伴千万不要错过这个功能强大&#xff0c;安装便捷的音乐软件哦&#xff01;如…

ThreadLocal源码解密

1 背景 作为一只懒懒地程序员,其实我是不太爱看源码的,晦涩、深奥、难懂、耗费时间等等,就觉得不是我这种能力平平地小老百姓能吃得消的,但现实比人强,记得曾经我就被不懂原理的情况下乱用ThreadLocal给毒打了。 犹记得当时在一个JSF服务中的责任链的校验场景中需要在源…

使用vcpkg管理依赖第三库

文章目录 使用vcpkg管理依赖第三库vcpkg安装vcpkg经典模式使用从仓库列表搜索依赖项从某个基线版本的列表中查询某个依赖项信息安装依赖库 vcpkg清单模式的使用vcpkg清单模式的使用例子说明 使用vcpkg管理依赖第三库 vcpkg 有两种操作模式&#xff1a;经典模式和清单模式。 在…

36 机器学习(四):异常值检测|线性回归|逻辑回归|聚类算法|集成学习

文章目录 异常值检测箱线图z-score 保存模型 与 使用模型回归的性能评估线性回归正规方程的线性回归梯度下降的线性回归原理介绍L1 和 L2 正则化的介绍api介绍------LinearRegressionapi介绍------SGDRegressor 岭回归 和 Lasso 回归 逻辑回归基本使用原理介绍正向原理介绍损失…

深入理解JavaScript ES8的新特性

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

opencv改善pdf清晰度

improve-pdf 介绍&#xff1a; 使用python脚本对pdf进行优化&#xff0c;提高pdf清晰度&#xff0c;使文字更加清晰&#xff0c;观感更佳。仅适用黑白扫描版pdf&#xff0c;且文字较清晰&#xff0c;若模糊会更加模糊。 原理&#xff1a; pdf转成png图片 再使用opencv对图片…

【算法训练-回溯算法 三】【回溯算法最佳实践】括号生成、复原IP地址

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【回溯算法】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

由Django-Session配置引发的反序列化安全问题

漏洞成因 漏洞成因位于目标配置文件settings.py下 关于这两个配置项 SESSION_ENGINE&#xff1a; 在Django中&#xff0c;SESSION_ENGINE 是一个设置项&#xff0c;用于指定用于存储和处理会话&#xff08;session&#xff09;数据的引擎。 SESSION_ENGINE 设置项允许您选择不…

MSQL系列(六) Mysql实战-SQL语句优化

Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;以及索引最左侧匹配原则&#xff0c;Explain的用法&#xff0c;可以看到是否使用了索引&#xff0c;今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…

统信uos 1030 企业版 安装.net core环境

安装.net core步骤 添加密钥和包存储库 安装 .NET 之前&#xff0c;请运行以下命令&#xff0c;将 Microsoft 包签名密钥添加到受信任密钥列表&#xff0c;并添加包存储库wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-mic…

nuxt使用i18n进行中英文切换

中文效果图&#xff1a; 英文效果图&#xff1a; 版本&#xff1a; 安装&#xff1a; npm install vue-i18n8.27.0 --savenpm i nuxtjs/i18n # npm 新建en.js与zh.js两个文件进行切换显示 en.js内容 import globals from ./../js/global_valexport default {/******* 公共内…

什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别?软件测试等相关概念入门篇

1、什么是软件测试&#xff1f; 常见理解&#xff1a; 软件测试就是找BUG&#xff0c;发现缺陷 真正理解&#xff1a; 软件测试就是验证软件产品特性是否满足用户的需求 测试定义&#xff1a; 测试人员验证软件是否符合需求的这个过程就是测试 2、为什么要有测试 标准情况下&a…

ShareMouse for Mac(多台电脑鼠标键盘共享软件)

ShareMouse mac版是一款Mac平台上可以在多台电脑间共享鼠标的工具软件&#xff0c;sharemousefor Mac支持 Windows 与 Mac&#xff0c;并可以在不同电脑间共享剪贴板。只需要移动鼠标指针的到想控制的显示器那里去、鼠标光标就会神奇地“跨越”到邻近的电脑屏幕上。每个计算机都…

vue中使用coordtransform 互相转换坐标系

官方网站&#xff1a;https://www.npmjs.com/package/coordtransform 在使用高德sdk时&#xff0c;其返回的坐标在地图上显示时有几百米的偏移&#xff0c;这是由于高德用的是 火星坐标&#xff08;GCJ02&#xff09;&#xff0c;而不是wgs84坐标。为了消除偏移&#xff0c;将G…

KubeSphere安装mysql8

需要持久化储存数据的&#xff0c;建立有状态服务。 无状态服务是不会持久化的&#xff0c;重启就归零 KubeSphere 创建自建应用后&#xff0c;创建有状态服务&#xff0c;但是自己应用的有状态服务不能外放端口&#xff0c;需要在服务哪里删除pod&#xff0c;在创建负载指定相…

微信小程序会议OA系统其他页面

前言&#xff1a; 及上一文章&#xff1a;https://blog.csdn.net/djssubddbj/article/details/133895170?spm1001.2014.3001.5501我们所写的会议OA的首页&#xff0c;在这个上面我们继续完成我们的会议OA系统&#xff0c;这是我们的本期所要完成的页面 自定义组件 微信小程序…

基于MATLAB的GPS卫星绕地运行轨迹动态模拟仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 Prn NavData(PRNS_SEL,1);%识别导航数据中的PRNiode NavData(PRNS_SEL,11);%企…

客户端post请求,服务器收到{}数据解决方法

当我们发起登录请求时&#xff0c;后台接收到的为{}数据 原因&#xff1a;传送过去的对象格式不对 解决方案&#xff1a; 引入qs npm install qs 在data中格式化数据 const res await axios({url:http://127.0.0.1:3000/post,method:post,data:Qs.stringify({username:te…

【试题024】C语言强制转型小例题

1.题目&#xff1a;设int a7; float x2.5,y4.7;,则表达式x3%(int)(xy)/4的值是 &#xff1f; 2.代码分析&#xff1a; #include <stdio.h> int main() { //设int a7; float x2.5,y4.7;,则表达式x3%(int)(xy)/4的值是 &#xff1f;int a 7;float x 2.5, y 4.7;printf…