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

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

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

相关文章

Sql server 使用DBCC Shrinkfile 收缩日志文件

磁盘空间有限,需要收缩日志文件释放空间。 数据库名称上右击属性->文件,逻辑名称日志文件默认名称为“_log”结尾。 alter database 数据库 set recovery simple dbcc shrinkfile(XXX_log,2,truncateonly) alter database 数据库 set recovery full

QT聊天室阶段性记录(完善中:注册功能,数据库存储)

server.h #ifndef SERVERDEMO_H #define SERVERDEMO_H#include <QObject> #include <QTcpServer> #include <QMap> #include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> //执行sql语句的类 #include <QSqlRecord> //数据库…

Netty

目录 引言&#xff1a; 什么是Netty&#xff1f; Netty和Tomcat有什么区别&#xff1f; 为什么Netty受欢迎&#xff1f; Netty为什么并发高 Netty为什么传输快 为什么说Netty封装好&#xff1f; 使用示例&#xff1a; 步骤1: 添加Netty依赖 步骤2: 创建服务器启动类 步…

【JavaEE】_构造HTTP请求与HTTPS

目录 1. 构造HTTP请求 1.1 form标签构造HTTP请求 1.1.1 form标签构造GET请求 1.1.2 form标签构造POST请求 1.2 通过ajax构造HTTP请求 1.3 form与ajax 1.4 使用ajax构造HTTP请求 2.HTTPS 2.1 对称加密 2.2 非对称加密 2.3 证书 1. 构造HTTP请求 1.1 form标签构造HTT…

idea插件(free mybatis plugin)

安装&#xff1a; 由于我用的idea版本是2023的&#xff0c;所以搜出来的是Free MyBatis Tool,和Free MyBatis plugin是一样的 主要功能&#xff1a; 生成mapper xml文件 快速从代码跳转到mapper及从mapper返回代码 mybatis自动补全及语法错误提示 集成mybatis generator gui…

Spring Boot中的@Controller使用教程

一 Controller使用方法&#xff0c;如下所示&#xff1a; Controller是SpringBoot里最基本的组件&#xff0c;他的作用是把用户提交来的请求通过对URL的匹配&#xff0c;分配个不同的接收器&#xff0c;再进行处理&#xff0c;然后向用户返回结果。下面通过本文给大家介绍Spr…

JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域

文章目录 前言 1&#xff1a;什么叫作用域 一&#xff1a;全局作用域 1&#xff1a;全局变量的声明 2&#xff1a;变量声明和使用的顺序 3&#xff1a;方法声明和使用的顺序 前言 1&#xff1a;什么叫作用域 可以起作用的范围 function fun(){var a 1; } fun();consol…

Linux YUM源(本地/网络源)配置详解

目录 一、挂载 二、实现思路 三、建立本地源 配置详解&#xff1a; 四、建立网络源 配置详解&#xff1a; 五、验证 一、挂载 ——将光盘挂载到 /mnt ——挂载光盘时要保证虚拟机光盘处于连接状态 命令&#xff1a;[rootlocalhost mnt]# mount /dev/sr0 /mnt # 此时还…

MongoDB数据库网站网页实例-编程语言Python+Django

程序示例精选 PythonDjangoMongoDB数据库网站网页实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoMongoDB数据库网站网页实例》编写代码&#xff0c;代码整洁&#xff0c;…

海信电视U8发布,一场针对画质的“定向跨越”

作者 | 曾响铃 文 | 响铃说 最近在重温《西游记》时&#xff0c;我才发现“灵性”这个东西有多讨喜。 在灵台方寸山&#xff0c;孙悟空头上被铛铛铛敲了三下&#xff0c;就悟出了师傅要为其深夜传授妙法&#xff0c;而这样的“感知”和“觉悟”&#xff0c;却在进修了那么多…

次方计数的拆贡献法(考虑组合意义)+限定类问题善用值域与位置进行ds:1006T3

对于多次方的计数问题可以考虑拆贡献。 题目问 ∣ S ∣ 3 |S|^3 ∣S∣3&#xff0c; ∣ S ∣ |S| ∣S∣ 表示选的点数。相当于在 ∣ S ∣ |S| ∣S∣ 中选了3次&#xff0c;也就是选了3个可相同的点。 先考虑3个不相同点的贡献&#xff0c;对应任意3个点&#xff0c;必然会对…

Flow Chart 的中文意思是什么?请说出自然界中河流的三种流动方式。事件驱动是什么?

目录 Flow Chart 的中文意思是什么? 请说出自然界中河流的三种流动方式。 事件驱动是什么? 请介绍一下 亚特兰大这座城市 Flow Chart 的中文意思是什么? 流程图 请说出自然界中河流的三种流动方式。 自然界中的河流可以以多种不同的方式流动&#xff0c;以下是其中三…

在Linux中软链接和硬链接的区别是什么?

2023年10月6日&#xff0c;周五晚上 目录 软链接(SymbolicLink):硬链接(HardLink):区别: 软链接(SymbolicLink): 软链接本身只是一个指向其他文件或目录的指针,不占用任何磁盘空间。软链接的修改或删除不会影响原文件。软链接可以指向不同文件系统中的文件。 硬链接(HardLink…

c++运算符重载实现

#include <iostream> #include <cstring> using namespace std; class myString { private:char *str;int size; public://无参构造myString():size(10){str new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串}//有…

微信小程序开发缺少中间证书问题(腾讯云、阿里云等做服务器)

项目使用nginx做负载均衡后&#xff0c;不再采用原来直接用jar包的方式直接开启对应端口&#xff0c;所以需要重新从云服务器上下载证书&#xff0c;写入到Nginx读取的证书路径上即可。

stm32之HAL库操作PAJ75620

一、模块简介 手势模块PAJ7620主要利用IIC或SPI协议来实现数据的传输&#xff0c;本实验用的模块是以IIC来进行信息传输。支持电压从2.8v到3.6v, 正常可以选择3.3v。检测的距离从5到15cm, 可以检测9种手势&#xff0c;包括 右&#xff1a;编码为 0x01左&#xff1a;编码为 0x0…

[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除git 通过githack 获取index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i, $_GET[exp])) {if(; preg_replace(/[a-z,_]\(…

redis实战-实现用户签到UV统计

BitMap功能演示 我们针对签到功能完全可以通过mysql来完成&#xff0c;比如说以下这张表 用户一次签到&#xff0c;就是一条记录&#xff0c;假如有1000万用户&#xff0c;平均每人每年签到次数为10次&#xff0c;则这张表一年的数据量为 1亿条 每签到一次需要使用&#xff08…

支付环境安全漏洞介绍

1、平台支付逻辑全流程分析 2、平台支付漏洞如何利用&#xff1f;买东西还送钱&#xff1f; 3、BURP抓包分析修改支付金额&#xff0c;伪造交易状态&#xff1f; 4、修改购物车参数实现底价购买商品 5、SRC、CTF、HW项目月入10W副业之路 6、如何构建最适合自己的网安学习路线 1…

ArcGIS Engine:鹰眼图的拓展功能-点击和矩形+坐标状态栏

目录 01 前言 02 鹰眼图的控制功能 03 显示当前鼠标的地理坐标 01 前言 说是拓展&#xff0c;不过是忘记了实验还有附加实验.这里补上. 前文不再赘述,上一节查看&#xff1a;ArcGIS Engine&#xff1a;视图菜单的创建和鹰眼图的实现_炒茄子的博客-CSDN博客 这里加上三个功能…