智能优化算法(源码)-樽海鞘优化算法(Salp Swarm Algorithm,SSA)
获取更多资讯,赶快关注上面的公众号吧!
文章目录
- 启发
- 樽海鞘链移动的数学模型
- 群体仿真
- 尊海鞘算法SSA
尊海鞘优化算法(Salp Swarm Algorithm,SSA)是由澳大利亚的Seyedali Mirjalili于2017年提出的一种新型优化算法,该算法模拟了樽海鞘在海洋中航行和觅食时的群集行为,今天将给大家带来尊海鞘算法的原理介绍,扫码关注公众号,回复“尊海鞘”或“SSA”,可获取Matlab源码下载链接。
启发
樽海鞘属樽海鞘科,体透明,呈桶状,其组织与水母非常相似,如图1(a)所示。
尊海鞘最有趣的行为之一是它们的群体行为,在深海中,樽海鞘经常形成一个称为樽海鞘链的群体,如图1(b)。
樽海鞘链移动的数学模型
为了对樽海鞘进行数学建模,首先将种群分为两个组:领导者和追随者。领导者是链中最前面的樽海鞘,而剩余其他的就都是追随者。
同其他基于种群的优化技术一样,在nnn维搜索空间中定义樽海鞘的位置,其中nnn维给定问题的变量个数。因此所有樽海鞘的位置都存储于二维矩阵xxx中。同时假设在搜索空间存在食物源FFF,作为种群的目标。
通过以下公式来更新领导者的位置:
xj1={Fj+c1((ubj−lbj)c2+lbj)c3≥0Fj−c1((ubj−lbj)c2+lbj)c3<0(1)x_{j}^{1}=\left\{\begin{array}{cc} F_{j}+c_{1}\left(\left(u b_{j}-l b_{j}\right) c_{2}+l b_{j}\right) & c_{3} \geq 0 \\ F_{j}-c_{1}\left(\left(u b_{j}-l b_{j}\right) c_{2}+l b_{j}\right) & c_{3}<0 \end{array}\right.\tag{1} xj1={Fj+c1((ubj−lbj)c2+lbj)Fj−c1((ubj−lbj)c2+lbj)c3≥0c3<0(1)
其中xj1x_{j}^{1}xj1表示第一个尊海鞘(领导者)在第jjj维的位置,FjF_jFj是食物源在第jjj维上的位置,ubju b_{j}ubj和lbjl b_{j}lbj分别是第jjj维上的上界和下界,c1,c2c_{1},c_{2}c1,c2和c3c_{3}c3为随机数。
式(1)表明领导者仅更新与食物源的相对位置,系数c1c_1c1式SSA中最重要的参数,因为其用于平衡探索和利用:
c1=2e−(4lL)2(2)c_{1}=2 e^{-\left(\frac{4 l}{L}\right)^{2}}\tag{2} c1=2e−(L4l)2(2)
其中lll为当前迭代次数,LLL为最大迭代次数。
利用如下公式对追随者的位置进行更新:
xji=12at2+v0t(3)x_{j}^{i}=\frac{1}{2} a t^{2}+v_{0} t\tag{3} xji=21at2+v0t(3)
其中i≥2i\ge 2i≥2,xjix_{j}^{i}xji表示第iii个追随者樽海鞘在第jjj维上的位置,ttt为时间,v0v_0v0是初始速度,a=vfinal v0a=\frac{v_{\text {final }}}{v_{0}}a=v0vfinal ,其中v=x−x0tv=\frac{x-x_{0}}{t}v=tx−x0。
由于在优化中时间就是迭代次数,所以迭代时间之差就是1,考虑到v0=0v_{0}=0v0=0,上式可以表达为:
xji=12(xji+xji−1)(4)x_{j}^{i}=\frac{1}{2}\left(x_{j}^{i}+x_{j}^{i-1}\right)\tag{4} xji=21(xji+xji−1)(4)
群体仿真
为了观察上述数学模型的效果,下面进行仿真实验。20只樽海鞘被随机放置于具有固定或移动食物源的搜索空间中,樽海鞘链和每只樽海鞘的历史位置如图2~5所示。
图中蓝色点是食物源的位置,黑色实心圆是领导者樽海鞘,追随者则根据与领导者的相对位置,呈现不同灰度。从图2和图4中连续9次的樽海鞘链行为可以看出,仅仅迭代一次之后,使用提出的等式就可以形成种群并移动,同时可以看出,领头的樽海鞘在食物源周围发生位置变化,而跟随的樽海鞘则在不断的迭代过程中逐渐跟随领导者。
图3和图5显示了经过100次迭代后,在二维和三维空间中,在固定和移动的食物源周围的樽海鞘历史位置。在固定的食物源周围搜索到的点表明,樽海鞘能有效地在搜索空间内移动。点的分布是合理的,表明所提出的模型能够对固定食物源周围的空间进行探索和利用。此外,图3和图5表明所提出的数学模型要求樽海鞘链中的樽海鞘追逐移动的食物源。在起始点周围搜索的点的分布高于终点,这是因为控制探索和利用的参数c1c_1c1,这些都可已证明樽海鞘链运动模型能够探索和利用静止和流动食物源周围的空间。
尊海鞘算法SSA
为了适用于优化问题,需要对上述模型进行一些小调整。在SSA群模型中,追随者樽海鞘跟随领导者樽海鞘,领导者樽海鞘也向食物来源移动,因此,如果食物源被全局最优食物所取代,樽海鞘链就会自动向其移动。但问题是,优化问题的全局最优解是未知的。在这种情况下,假设到目前为止得到的最优解是全局最优解,并假定其为樽海鞘链所追逐的食物源。
SSA的伪代码如下:
初始化樽海鞘种群xi(i=1,2,...,n)x_i(i=1,2,...,n)xi(i=1,2,...,n),上界和下界分别为ububub和lblblb。
while(未满足终止条件)
计算每个樽海鞘的适应度
F=F=F=最优樽海鞘
根据式(2)更新c1c_1c1
for 每个樽海鞘xix_ixi
if (i==1i==1i==1)
根据式(1)更新领导者的位置
else
根据式(4)更新追随者的位置
end
end
将每个樽海鞘都限制在变量的上、下界范围内
end
return FFF
注意到,在优化过程中,食物源也会被更新,这是因为樽海鞘链通过探索和利用可能会找到一个更优解。
智能优化算法(源码)-樽海鞘优化算法(Salp Swarm Algorithm,SSA)相关推荐
- 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)
1 简介 2 部分代码 %_________________________________________________________________________________% Salp ...
- 【老生谈算法】matlab实现FFT变换算法源码——FFT变换算法
Matlab实现FFT变换(单边谱及双边谱) 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]Matlab实现FFT变换程序源 ...
- 【老生谈算法】matlab实现Kmeans聚类算法源码——Kmeans聚类算法
matlab实现Kmeans聚类算法代码实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab实现Kmeans聚类 ...
- 【老生谈算法】matlab实现IIR滤波器算法源码——IIR滤波器算法
matlab的IIR滤波器的实现算法详解 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlabIIR滤波器设计.doc ...
- 【老生谈算法】matlab实现PCA人脸识别算法源码——人脸识别算法
基于主成分分析(Principal Component Analysis,PCA)方法的人脸识别讲解以及matlab代码实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序 ...
- Metis异常检测算法源码概要
Metis异常检测算法源码概要 算法源码目录 算法层目录 基于指数移动平均算法(EWMA) 孤立森林 xgboost gbdt 3-Sigma 多项式回归 特征层目录 拟合特征 分类特征 统计特征 其 ...
- python求素数积_用Python求素数的快速算法源码示例
本篇文章为Python算法相关,用Python求素数的快速算法源码示例.算法在Python的学习中算是一个要点,能研究明白算法的同学都可以算的上是Python的大牛了. 首先简单的来说下什么是素数:质 ...
- 【老生谈算法】matlab实现制动力优化源码——制动力优化
matlab制动力优化程序源码 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab制动力优化程序源码.doc 2.算 ...
- (源码)群体智能优化算法之灰狼优化(Grey Wolf Optimizer,GWO)
获取更多资讯,赶快关注上面的公众号吧! 文章目录 第三十三章 灰狼优化(Grey Wolf Optimizer,GWO) 启发 数学模型和算法 社会等级 包围捕食 狩猎 攻击猎物(利用) 搜索猎物(探 ...
- 基于LM的双目图像校准算法源码第一部分
这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...
最新文章
- c语言最小点对问题_C语言教程(一):程序开发理论基础!
- beanutil 批量copy_BeanUtils.copyProperties 需要getset方法支持
- 多媒体微型计算机必不可少的硬件,第1章计算机基础知识习题材料.doc
- C++:VS2019遇到C1083 无法打开包括文件: “opencv2/opencv.hpp”: No such file or directory
- 插件原理[转自CSDN]
- srsLTE源码学习:生成多播信道表gen_mch_tables
- 用python画熊猫代码_python-使用Pandas绘制包含列表的列
- USB Server远程连接USB实现方式
- Java+Servlet+Jsp(el, jstl)+MyBatis的CRUD练习小项目
- ubuntu 14.04 更新 flash
- 简单五子棋(单机版-C)
- Windows10 LSTC 2021输入法无法使用的问题
- chrome最强大的浏览器插件油猴Tampermonkey插件离线安装包免费分享下载
- canvas图片转素描
- win7系统怎么调计算机,分辨率,教您Win7如何调电脑的分辨率
- 最后的彩虹蝶为生命而舞
- 基于佳点集的改进麻雀搜索算法
- 物联网技术如何应用在农业上
- 网站为什么会打开缓慢
- 定义一个结构体变量(包括年月日)。计算该日在 本年中是第几天?注意闰年问题。
热门文章
- MySQL 判断表中是否存在某条数据
- 使用Connector/C++操作MySQL
- 全国高校安徽考区计算机,关于做好2021年上半年全国高校(安徽考区)计算机水平考试报名工作的通知...
- php 实现柱状图,PHP动态柱状图实现方法_PHP
- (day 46 - 小根堆 || 动态规划 ) 剑指 Offer 49. 丑数
- 全国计算机等级考试在线报名,全国计算机等级考试网上报考具体流程
- Java程序员开发参考资源
- 最新论文汇总:深度补全
- 处理javaweb中文乱码
- Asp.Net Core 入门(八)—— Taghelper