樽海鞘群算法(SSA)(含MATLAB代码)

news2024/11/15 17:48:57

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

“应粉丝要求,讲一下樽海鞘算法~

昨天调研了一下,搞这个算法的人还挺多,在WOS上也是被高引的文献。有兴趣的同学可以了解一下,这个算法本身是非常简单的,因此也比较容易上手~”

樽海鞘群算法(Salp Swarm Algorithm, SSA)是Mirjalili等人于2017年提出的一种全新的群体智能优化算法。该算法的主要思想来源于樽海鞘的群链生物特征。樽海鞘算法的整个寻优过程起源于樽海鞘链的群聚觅食行为,将樽海鞘群体对最佳食物源搜索的过程类比为对函数寻优。SSA的原始参考文献如下:

Mirjalili S, Gandomi A H, Mirjalili S Z, et al. Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems[J]. Advances in engineering software, 2017, 114: 163-191.


 

01
灵感来源

樽海鞘是一种身体几乎完全透明的桶状海洋生物。这种透明特性可以很好地保护樽海鞘在海洋中免受天敌捕食,主要以浮游植物为食,依靠吸入喷出海水前进。它们每天可以将成吨的碳从海洋表面运送到深海中,防止这些碳重新进入大气圈,有效地减少了碳进入大气圈成为温室气体的可能性,对大自然来说有很好的清碳作用。樽海鞘这一特殊功能使其在海洋中发挥着不可替代的作用。自然界中的大多数生物以群的方式移动、觅食,但樽海鞘却是首尾相连,组成链的形式进行觅食。樽海鞘在海洋中以群体形成链状结构漂浮生活,樽海鞘链分为两部分:领导者和跟随者。樽海鞘链最前端的个体被认为是领导者,其他个体被认为是跟随者,领导者根据食物源位置指导引领着跟随者移动,如图1所示。

图1 樽海鞘的觅食原理

在SSA中,位于樽海鞘链的第一个樽海鞘为领导者,其余的为跟随者。和其他的群体智能优化算法不同在于,领导者不会影响整个群体的移动,跟随者会根据前一个个体的位置来更新自己的位置。依此类推形成了樽海鞘链。领导者对于排在后面的跟随者的领导作用会越来越弱,在后面的跟随者不会一味的向着领导者移动,保持了种群的多样性。樽海鞘群算法将目前得到的最优解保存下来,并将其赋值给食物源变量,因此即使整个种群恶化,它也不会丢失。SSA只更新领导者相对于食物源的位置,这是目前得到的最佳解,所以领导者一直在探索和开发它周围的空间;跟随者的跟随运动提高了局部搜索的性能,在一定程度上避免了陷入局部最优的情况。

02
算法设计

与往期推送一样,目前我还不会在公众号里编辑数学公式。因此,这部分内容在Word文档里先写好,然后做成图片,最后导入。

03
计算流程

SSA的计算流程伪代码如图2所示:

图2 SSA计算流程

04
实验仿真

同样地,对SSA的性能进行简单测试。将SSA用于函数寻优,它的MATLAB程序严格按照原始参考文献进行编写。此外,种群规模N为50,最大迭代次数T取2000,Benchmark函数采用的是CEC2005测试集。

这里以CEC2005测试集中的单峰函数Sphere (f1)和多峰函数Ackley (f10)为例,展示SSA在30维环境下的收敛效果。如图3所示,这里就不再做进一步的分析了。

(a) f1

(b) f10

图3 SSA的收敛曲线

其次,不妨检验一下SSA对全局勘探和局部开发的平衡能力。如图4所示,是SSA在CEC2005测试函数f3上的勘探和开发占比曲线。

图4 SSA在CEC2005 f3上的勘探和开发百分占比变化曲线

最后,将SSA应用于复杂工程约束优化问题,例如之前推送的两期算法应用内容:

算法应用:基于DBO算法的工程优化设计(第1期)(含MATLAB代码)

算法应用:工程优化设计(第2期)(含MATLAB代码)

这里以焊接梁设计问题为例,展示SSA求解效果。收敛曲线如图5所示。

图5 SSA在焊接梁设计问题上的目标函数收敛曲线

05
MATLAB代码

SSA的MATLAB代码可通过复制下方链接进入获得。代码严格按照原始参考文献编写,附有详细注释。

(公众号里有,关注公众号:启发式算法讨论)

SSA的勘探(Exploration)和开发(Exploitation)占比分析:

(公众号里有,关注公众号:启发式算法讨论)

SSA的工程应用(第1期):压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计。

(公众号里有,关注公众号:启发式算法讨论)

SSA的工程应用(第2期):焊接梁设计、多盘离合器制动器设计问题、步进圆锥滑轮问题、减速机设计问题、行星轮系设计优化问题、机器人夹持器问题。

(公众号里有,关注公众号:启发式算法讨论)

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

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

相关文章

时间序列分解 | Matlab自适应噪音的完整集合经验模态分解CEEMDAN分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab自适应噪音的完整集合经验模态分解CEEMDAN分解 部分源码 %--------------------

torch_scatter安装踩坑实录

由于运行代码出现如下报错 ModuleNotFoundError: No module named torch_scatter因此,在网上找到一篇博客【不好使】 pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.12.1cu116.html(match) F:\matchCode\SuperGlue_training-main>p…

Bootstrap 表格

文章目录 Bootstrap 表格基本的表格可选的表格类条纹表格边框表格悬停表格精简表格 上下文类响应式表格 Bootstrap 表格 Bootstrap 提供了一个清晰的创建表格的布局。下表列出了 Bootstrap 支持的一些表格元素&#xff1a; 标签描述<table>为表格添加基础样式。<thea…

学习笔记-图解HTTP

1 Web及网络基础 1.1 适用Http协议访问Web 在浏览器上输入网址然后访问指定的网页&#xff0c;浏览器就相当于是客户端&#xff0c;访问的网址就是指向特定的服务器。 HTTP协议&#xff1a;HyperText Transfer Protocol&#xff0c;超文本传输协议。 Web是建立在HTTP协议上…

MySQL8.0安装详细教程

前言&#xff1a; MySQL版本区别&#xff1a; ● MySQL Community Server&#xff1a;Community是社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持&#xff1b; ● MySQL Enterprise Edition&#xff1a;Enterprise企业版本&#xff0c;需付费&#xff0c;可以…

剑指 Offer 数组中数字出现的次数

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;数组中数字出现的次数 ⭕️ 代码&#xff1a; /*思路&#xff1a;有两个出现单次的数字&#xff0c;其余数字都出现两次。把所有的数字分成两组&#xff0c;这两个数组分到不同的组&#xff0c;异或起来&#xff0c;就可…

力扣 108. 将有序数组转换为二叉搜索树

题目来源&#xff1a;https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ C题解1&#xff1a;递归法。由于要求是平衡树&#xff0c;又给出了递增数组&#xff0c;所以构建二叉树只需将中间值作为中间节点&#xff0c;左右两边分属左右子树…

无广告 齐全 简洁 免费的音乐开源软件(支持 电脑max win linux 手机 )——lxMusic

无广告 齐全 简洁 免费的音乐开源软件&#xff08;支持 电脑max win linux 手机 &#xff09;——lxMusic 话不多说先上效果 &#xff08;真香&#xff09; 下载地址&#xff08;官方&#xff09; https://www.lanzoui.com/b0bf2cfa/ 密码&#xff1a;glqw 软件安装包说明 文…

python接口自动化(五)--接口测试用例和接口测试报告模板(详解)

简介 当今社会在测试领域&#xff0c;接口测试已经越来越多的被提及&#xff0c;被重视&#xff0c;而且现在好多招聘信息要对接口测试提出要求。区别于传统意义上的系统级别测试&#xff0c;很多测试人员在接触到接口测试的时候&#xff0c;也许对测试执行还可以比较顺利的上手…

FDM3D打印系列——5、上色和灯光

3D打印扎古头可动并加灯 大家好&#xff0c;我是阿赵&#xff0c;这次通过一个实际操作的例子&#xff0c;来聊一下3D打印模型添加效果。这里主要讲2个方面&#xff0c;一个是上色&#xff0c;另一个是加灯光 一、上色 这个扎古头模型就是这次的主角。 1、打磨 可以看到&…

MIT 6.S081 教材第七章内容 -- 调度 -- 上

MIT 6.S081 教材第七章内容 -- 调度 -- 上 引言线程&#xff08;Thread&#xff09;概述XV6线程调度XV6线程切换实际切换流程 XV6进程切换示例程序yield/sched函数switch函数scheduler函数 补充 引言 MIT 6.S081 2020 操作系统 本文为MIT 6.S081课程第七章教材内容翻译加整理…

基于Python所写的飞鸟游戏设计

https://blog.csdn.net/qq_64505944/article/details/131493838?spm1001.2014.3001.5502

容器环境检测方法总结

在渗透测试过程中&#xff0c;我们的起始攻击点可能在一台虚拟机里或是一个Docker环境里&#xff0c;甚至可能是在K8s集群环境的一个pod里&#xff0c;我们应该如何快速判断当前是否在容器环境中运行呢&#xff1f; 当拿到shell权限&#xff0c;看到数字和字母随机生成的主机名…

(四)Qt 动态手势识别“手掌随动”+“握拳选择”

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

【java爬虫】使用selenium爬取优惠券

本文将介绍使用selenium爬取某宝优惠券的方法&#xff0c;之所以使用selenium是因为我不会js逆向&#xff0c;如果你已经参透了淘宝联盟的js逆向方法&#xff0c;那么直接使用接口调数据就行了。 使用selenium接管chrome浏览器 由于淘宝联盟需要先登录&#xff0c;为了避免每…

【剧前爆米花--爪哇岛寻宝】TCP实现可靠性的方法以及连接相关的三次握手四次挥手

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络编程的文章&#xff0c;在这篇文章中我会具体介绍TCP是如何实现可靠性的并且分析建立断开连接的情况&#xff0c;希望对你有所帮助&#xff01; 目录 可靠性 确认应答 超时…

iOS开发进阶(一):走近iOS原生开发

文章目录 一、前言二、知识储备三、 Object-C四、启动流程五、拓展阅读 一、前言 在应用 uni-app 进行跨平台APP开发过程中&#xff0c;发现并不支持视频播放小窗功能&#xff0c;且插件市场提供的插件用户体验不好&#xff0c;遂决定自行开发 uni-app 原生插件。 uni-app原生…

力扣 450. 删除二叉搜索树中的节点

题目来源&#xff1a;https://leetcode.cn/problems/delete-node-in-a-bst/description/ C题解1&#xff1a;迭代法。删除节点需要分情况讨论&#xff1a; 找不到节点&#xff0c;返回原根节点&#xff1b;删除节点无子节点&#xff0c;那么其父节点指向空就行&#xff08;注意…

Java前端编译与优化

一个编译器的前端把*.java文件转变成*.class文件的过程称为Java前端编译。像Javac这类前端编译器对代码的运行效率几乎没任何优化措施&#xff0c;但是其做了许多针对Java语言编码过程的优化措施来降低程序员的编码复杂度、提供编码效率。 1 Javac编译器 准备过程 初始化插入…

《PyTorch深度学习实践》第十讲 卷积神经网络(基础篇)

b站刘二大人《PyTorch深度学习实践》课程第十讲卷积神经网络&#xff08;基础篇&#xff09;笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p10&vd_sourceb17f113d28933824d753a0915d5e3a90 上一讲中MNIST数据集的例子采用的是全连接神经网络&#…