麻雀搜索算法(SSA)(含MATLAB代码)

news2025/1/19 18:04:26

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

图片

麻雀搜索算法(Sparrow Search Algorithm, SSA)是受到麻雀种群的觅食行为和反捕食行为的启发,从而提出的新型群智能优化算法。

麻雀是一种喜欢群居的动物,在自然界中种类繁多,常出现在人类居住的环境中。通过研究发现,麻雀群内部在觅食过程中有着明确分工。内部麻雀分为两种不同类型,一种为发现者,另外为跟随者。发现者麻雀为种群觅食提供方向引导,剩余的个体为跟随者麻雀,在种群中通过跟随发现者麻雀觅食获取食物。在种群中,发现者麻雀和跟随者麻雀两者的身份是不固定的,可以灵活转变身份。同时,麻雀种群内部也会因为争夺食物而引起竞争。另外,由于种群中靠外部的麻雀更容易受到捕食者的攻击,所以麻雀种群中的个体会不断调整自身位置,向相邻的同伴靠拢或向内部聚集,以此减少被捕食的风险。

它的原始参考文献如下:

Xue J, Shen B. A novel swarm intelligence optimization approach: sparrow search algorithm[J]. Systems science & control engineering, 2020, 8(1): 22-34.

01
设计原则

类似于其他群体智能优化算法,麻雀搜索算法在寻优过程会约定一些规则,这让算法实现具有高效性、简易性和易解释性。算法设计中一般把麻雀种群的觅食行为进行理想化,分为下面六个步骤原则:

(1)麻雀种群中的发现者个体,其适应度值一般较其他个体更优,在种群的寻觅食物过程中负责搜索食物方位,并把食物存在的地点和方向信息传递到整个种群中,使跟随者个体跟随其觅食;

(2)觅食过程中,如果种群中的随机麻雀个体预知到危险时,会自动发出警戒信号,引起种群注意。警戒信号有大小之分,算法设计时通过人工设置安全警戒值阈值,倘若警戒信号值大于安全警戒值阈值,麻雀种群则不会往该处觅食,发现者麻雀会带领跟随者去别的安全区域继续觅食;

(3)觅食过程中,两种不同的麻雀身份是可以互换的。如果跟随者麻雀在寻觅过程中发现了更优异的食物地点,则该跟随者个体的身份就会转变成发现者,在转变过程中,每有一只跟随者麻雀转变成发现者麻雀,那么就会有一只发现者麻雀的分身变为跟随者,整个麻雀种群的发现者麻雀和跟随者麻雀的数量比例是固定的;

(4)因为食物数量是一定的,所以最先到达食物地点的发现者会先吃到食物,补充自身能量,而后来的跟随者相对获得的食物便较少,有的甚至吃不到食物。因此,后来的跟随者麻雀由于饥饿,会促使他们飞离种群,重新寻找新的食物地点,以此补充能量,此数学模型可以使算法有概率跳出局部区域,使得种群可以探索更多区域空间;

(5)种群中跟随者总会跟随发现食物最多的发现者,跟随他们去觅食。因为它们认为适应度值最高的发现者身边的优质食物会更多更丰富,但同时一部分跟随者也会监视发现者,与它们竞争和争夺食物资源;

(6)当麻雀种群发现外来捕食者时,处于种群边缘的麻雀个体由于要保护自身安全,它会改变自身位置,往种群中部或内部靠近,以此躲避捕食者的抓捕;而处于麻雀种群中间的麻雀个体则会向周围靠拢,通过和同伴聚堆的方式降低被捕食概率。

02
算法设计

图片

图片

图片

03
计算流程

图片

04
实验仿真

将SSA用于函数寻优,算法的MATLAB程序是严格按照它的原始参考文献进行编码的。利用CEC2005测试集验证SSA的性能,这里选择今年很火热的蜣螂优化(DBO)算法进行对比(为了对比的公平,两种算法的种群大小设置为30,最大迭代次数为500)。仅对仿真结果进行简要展示,不再进一步分析。

对比结果如下所示:

SSA Vs DBO

在一些函数上收敛曲线突然不见了,是因为已经收敛到理论最优值0了。我使用的是semilogy来绘制的收敛曲线,而semilogy画的是y轴的对数,因此,若曲线收敛到0,semilogy是画不出来的。

05
MATLAB代码

SSA对应的MATLAB代码链接如下:

SSA跑CEC2005测试集公众号里有链接
SSA跑CEC2013测试集公众号里有链接
SSA跑CEC2014测试集公众号里有链接
SSA跑CEC2017测试集公众号里有链接
SSA跑CEC2020优化函数测试集公众号里有链接
SSA跑CEC2022优化函数测试集公众号里有链接
SSA的勘探(Exploration)和开发(Exploitation)占比分析公众号里有链接
SSA的工程应用(第1期):压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计公众号里有链接
SSA的工程应用(第2期):焊接梁设计、多盘离合器制动器设计问题、步进圆锥滑轮问题、减速机设计问题、行星轮系设计优化问题、机器人夹持器问题公众号里有链接

可通过下方链接下载代码清单,在里面寻找需要的算法代码,然后去对应的链接获取。清单会同步更新,一旦有新的代码,就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。

链接:https://pan.baidu.com/s/1n2vpbwuhpA8oyXSJGsAsmA

提取码:8023

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

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

相关文章

Citespace、vosviewer、R语言文献计量学 、SCI

​文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量化的综合性知识体系。特别是,信息可视化技术手段和方法的运用,可直观的展示主题的研究发展历程、研究现状、研…

【AI视野·今日Sound 声学论文速览 第十九期】Thu, 5 Oct 2023

AI视野今日CS.Sound 声学论文速览 Thu, 5 Oct 2023 Totally 13 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Multi-resolution HuBERT: Multi-resolution Speech Self-Supervised Learning with Masked Unit Prediction Authors Jiatong Shi, Hirof…

虫情测报系统——农业害虫的监测解决方案

KH-CQPest虫情测报系统,是以物联网技术、传感器技术、光控技术为基础,针对昆虫害监测和报告的解决方,它能够为农田或果园的昆虫害防护工作提供实时、准确的情报。 虫情测报系统能够通过虫情测报仪的诱虫功能吸引害虫并进行捕获,利…

redis学习(二)——redis常见命令及基础数据类型

数据类型 基础数据类型 字符串 String abcMap集合 Hsah {name:“zhangsan”,age:18}列表 List [a, b, c, d]Set集合 Set {a,b,c}有序Set集合 SortSet {a:1,b:2,c:3} 特殊数据类型 GEO 地理坐标 {A:(100.2,35.1)}BitMap 位图,只存储0和1 01101011101HyperLog 基数…

遵循这些守则,PCB布局就不会差

PCB设计中,首先要做的就是对于PCB布局,它是将整个板子中的元器件进行排布,位置分布,一个好的布局,可以让板子结构清晰,并且在布线的时候也会更加方便与明朗,达到事半功倍的效果。 对于PCB布局&a…

【短文】Linux怎么读取文件大小

2023年10月6日,周五晚上 使用如下命令即可: du -h filenamedu命令在Linux/Unix系统中的英文全称是"disk usage"。即磁盘使用量的意思。 du命令用来显示文件和目录占用磁盘空间的大小。 du命令的巧用: ls | du -h 通过这条命令…

ChatGLM2-6B的通透解析:从FlashAttention、Multi-Query Attention到GLM2的微调、源码解读

前言 本文最初和第一代ChatGLM-6B的内容汇总在一块,但为了阐述清楚FlashAttention、Multi-Query Attention等相关的原理,以及GLM2的微调、源码解读等内容,导致之前那篇文章越写越长,故特把ChatGLM2相关的内容独立抽取出来成本文 …

测试时间不够,你会如何处理?

工作中经常会遇到测试时间不够充分的情况,当测试时间不足的情况下,如何做到不延误测试进度,又能保证测试质量? 1、根据测试目标和需求,确定测试的优先级,首先测试最重要和核心的功能和场景。 确保关键功能…

测试员最爱犯的十个思想问题

1、测试应该找到所有bug,只要线上出现bug就是罪大恶极 测试新人最容易出现此类思想,认为测试就应该发现所有bug,生产环境出现bug就是测试的锅。这种想法不能说完全错误,相反,包括很多不懂行的领导认为这相当正确。但我…

SpringMVC系列-4 参数解析器

背景: 本文作为SpringMVC系列的第四篇,介绍参数解析器。本文讨论的参数解析表示从HTTP消息中解析出JAVA对象或流对象并传参给Controller接口的过程。 本文内容包括介绍参数解析器工作原理、常见的参数解析器、自定义参数解析器等三部分。其中&#xff0…

css实现不规则图片文字环绕效果

依旧,先上效果图,可以看见,文字环绕这个椭圆形的图片, 依旧是遵循开源精神,代码就直接放下面了 (点个赞或者给个评论啥的吧,我就发现我的文章全是光看不点赞,不评论的的) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&quo…

【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)

目录 前言 六、批量数据组织——数组 6.4 线性表——分类与检索 6.4.1 主元排序 6.4.2 冒泡排序 6.4.3 插入排序 6.4.4 顺序检索&#xff08;线性搜索&#xff09; 6.4.5 对半检索&#xff08;二分查找&#xff09; 算法比较 前言 线性表是一种常见的数据结构&#xf…

Linux网络编程系列之TCP协议编程

一、什么是TCP协议 TCP&#xff08;Transmission Control Protocol&#xff09;协议是一种面向连接的、可靠的、基于字节流的传输控制协议&#xff0c;属于传输层。TCP协议可以通过错误检测、重传丢失的数据包、流量控制、拥塞控制等方式来实现可靠传输&#xff0c;同时也具有较…

string和const char*参数类型选择的合理性对比

在编程中&#xff0c;我们经常需要处理字符串类型的参数。在C中&#xff0c;有两种常见的表示字符串的参数类型&#xff0c;即string和const char*。本文将对比这两种参数类型的特点&#xff0c;分析其在不同情况下的合理性&#xff0c;以便程序员能够根据实际需求做出正确的选…

超赞极简奶油风装修攻略~速来抄作业

如果您想将极简奶油风应用于自家装修&#xff0c;以下是小编的一些优化建议&#x1f3e0;✨&#xff1a;色彩选择&#x1f3a8;&#xff1a;主色调应选择简洁、柔和的颜色&#xff0c;如白色☁、米色☕、淡灰色&#x1f32b;等。在这些基础颜色中适度添加1-2个饱和度较高的活力…

接收机灵敏度和动态范围定义

一、接收机灵敏度 灵敏度是来自天线的最小信号电平的特定值&#xff0c;在该特定值处接收器可以提供足够的输出信噪比&#xff08;SNR&#xff09;。最小可辨别信号&#xff08;MDS&#xff09;是0dB射频信噪比&#xff08;RFSNR&#xff09;的信号电平。MDS通常以dBm表示。 图…

【kubernetes】kubernetes中的应用配置(ConfigMap和Secret)

目录 1 为什么需要ConfigMap和Secret2 k8s中给容器传递配置的方式3 ConfigMap的基本使用4 ConfigMap的实践5 Secret的基本使用6 ConfigMap和Secret的对比 1 为什么需要ConfigMap和Secret 应用程序启动过程中通常需要传递参数&#xff0c;当参数较多时会将参数保存到配置文件中…

Parse [5/10/2020 7:05:04 PM] with format [yyyy-MM-dd] error!

项目场景&#xff1a; 对日期格式转化报错&#xff1a; Parse [5/10/2020 7:05:04 PM] with format [yyyy-MM-dd] error! 问题描述 例如&#xff1a;数据日期格式无法强行转化为常见格式 String releaseDate"5/10/2020 7:05:04 PM";String format DateUtil.format…

C++设计模式-适配器(Adapter)

目录 C设计模式-适配器&#xff08;Adapter&#xff09; 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-适配器&#xff08;Adapter&#xff09; 一、意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工…

Python: 库decimal()用于浮点数相加

from decimal import Decimal a1.1 b2.2 print(Decimal(2.2)Decimal(1.1))结果为&#xff1a;3.3 Pyhton中浮点数是不能直接相加的。 可以看到结果并不对。 因此需要用到decimal 可以看到ac时不计算的结果是正确的。 因此在python中&#xff0c;计算浮点数时&#xff0c;一部…