水母搜索(JS)算法(含MATLAB代码)

news2024/11/27 12:38:45

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

水母搜索(Jellyfish Search, JS)算法是于2021年提出的一种新型群智能优化算法。水母搜索行为的模拟包括它们的洋流跟随,它们在水母群中的运动(主动运动和被动运动),以及在这些运动之间切换的时间控制机制。作者使用了一套综合的Benchmark函数进行测试,并应用于一系列工程结构问题。相比于其他启发式算法,JS不仅表现最好,而且需要最少的目标函数评估,具有寻优能力强,收敛速度快等特点。

Chou J S, Truong D N. A novel metaheuristic optimizer inspired by behavior of jellyfish in ocean[J]. Applied Mathematics and Computation, 2021, 389: 125535.

图片

01
灵感来源

水母生活在世界上不同深度和温度的水中。它们酷似钟状,一些水母的直径小于1cm。它们有各种各样的颜色、大小和形状。大多数水母偏好海洋环境。它们进食的方式有两种:1.利用触手把食物送进嘴里;2.以触手过滤水中的微小的浮游生物,经口腕沟靠纤毛作用送入口。它们捕食方式也有两种:1.食用洋流带来的任何食物(被动);2.主动捕食猎物,利用触手刺中猎物,令其动弹不得(主动),如图1所示。

图片

图1 水母利用触手捕食猎物

水母可以自己控制移动。它们下侧像一把伞一样合拢,利用体内喷水反射前进。尽管它们拥有这种能力,但是它们大多数漂流在水中依靠洋流和潮汐运动。当条件有利时,水母会形成群,这种被称为水母潮(Jellyfifish Bloom)。水母是一种脆弱的生物,维持水母潮的关键是它们相对洋流的方向,才不至于被搁浅。

水母自身的运动和洋流的运动促成了水母潮的形成,这种现象在海洋中随处可见。水母去的地方,食物数量各不相同。因此,通过食物比例的比较,确定最佳位置。作者以水母在海洋中的搜索行为和运动为灵感,提出了JS算法。图2给出了算法的大致步骤。

图片

图2 水母在海洋中的种群行为

02
算法设计

水母搜索算法通过模拟水母跟随洋流和在种群内部的运动方式(主动运动和被动运动),以及在这些运动之间切换的时间控制机制来建立数学模型。

首先,JS算法的三个理想化规则(模型假设):

1.水母要么跟随洋流,要么在群内自身移动,这两者运动由时间控制机制切换;

2.在海洋中,水母寻找食物时,它们会被食物数量更多的位置吸引;

3.找到的食物数量由该位置和对应的目标函数决定。

在这三条准则的基础上,JS算法的描述如下:

图片

图片

03
计算流程

JS算法的计算流程图如图3所示:
 

图片

图3 JS的计算流程

04
实验仿真

这里对JS算法的性能进行简单的测试。首先将JS用于函数寻优,算法的MATLAB程序是严格按照它的原始参考文献进行编码的。此外,种群规模取N等于50,Benchmark函数分别采用了CEC2005测试集、CEC2013测试集、CEC2014测试集、CEC2017测试集和CEC2020优化函数测试集。这里对仿真结果进行简要展示,就不再进一步做分析了。

首先,我们来检验一下JS算法对全局勘探和局部开发的平衡能力。如图4所示,是JS算法在CEC2005测试函数f7上的勘探和开发占比曲线。

图片

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

其次,以CEC2005的多峰函数Ackley (f10)为例,展示JS算法在30维环境下的收敛效果。在之前我还推送过几期海洋中的其他动物算法,如:鲸鱼优化算法(WOA)及其优秀变体(含MATLAB代码)、樽海鞘群算法(SSA)(含MATLAB代码)、旗鱼优化(SFO)算法(含MATLAB代码)、䲟鱼优化算法(ROA)(含MATLAB代码)、白鲸优化(BWO)算法(含MATLAB代码)

将它们作为对比算法,看看谁才是“海洋一哥”!最大迭代次数T均设为1000,比较它们的收敛性能,如图5所示。

图片

图5 六种对比算法在CEC2005 f10上的收敛曲线

再次,以CEC2013测试集中的单峰函数F5为例,展示JS算法在30维环境下的收敛效果,如图6所示。(注意是画的误差曲线)

图片

图6 JS在CEC2013 F5上的误差收敛曲线

接着,以CEC2014测试集中的混合函数F19为例,展示JS算法在30维环境下的收敛效果,如图7所示。(注意是画的误差曲线)

图片

图7 JS在CEC2014 F19上的误差收敛曲线

再然后,以CEC2017测试集中的多模态函数F4为例,展示JS算法在30维环境下的收敛效果,如图8所示。(注意是画的误差曲线)

图片

图8 JS在CEC2017 F4上的误差收敛曲线

最后,以CEC2020优化函数测试集中的复合函数F9为例,展示JS算法在10维环境下的收敛效果,如图9所示。(注意是画的误差曲线)

图片

图9 JS在CEC2020优化函数 F9上的误差收敛曲线

进一步,可将JS算法应用于复杂工程约束优化问题,例如之前推送的两期算法应用内容:

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

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

这里以压力容器设计(Pressure vessel design)问题为例,展示JS算法求解效果。对比算法选择:灰狼优化(GWO)、哈里斯鹰优化(HHO)、沙猫群优化(SCSO)、蜣螂优化(DBO)、浣熊优化(COA)。收敛曲线如图10所示。

图片

图10 六种对比算法在压力容器设计问题上的目标函数收敛曲线

05
MATLAB代码

 

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

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

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

相关文章

zeppelin的hive使用

zeppelin的hive使用 配置项 default.driver org.apache.hive.jdbc.HiveDriver default.url jdbc:hive2://192.168.xxx.xxx:10000 default.user hiveHive使用:点击create new note Default Interpreter选择hive

苹果iOS App Store上架操作流程详解:从开发者账号到应用发布

很多开发者在开发完iOS APP、进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store的具体流程,如有未涉及到的部分,大家可以及时咨询&#…

代码随想录算法训练营day2 | 977. 有序数组的平方,209. 长度最小的子数组

目录 977. 有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977. 有序数组的平方 977. 有序数组的平方 难度:easy 类型:双指针(相向指针) 思路: 暴力法是将每个数都平方后,再排序(快排)&#…

MySQL 多表查询练习

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );创建score表。SQL代码如下: CREATE TABLE s…

万字长文 | Hadoop 上云: 存算分离架构设计与迁移实践

一面数据原有的技术架构是在线下机房中使用 CDH 构建的大数据集群。自公司成立以来,每年都保持着高速增长,业务的增长带来了数据量的剧增。 在过去几年中,我们按照每 1 到 2 年的规划扩容硬件,但往往在半年之后就不得不再次扩容。…

KMP算法和朴素算法对比

1.KMP速求next数组 先记录做题过程 等有时间再填内容吧

6、i2c设备驱动

I2C设备驱动要使用i2c_driver和i2c_client数据结构并填充i2c_driver中的成员函数。 i2c_client一般被包 含在设备的私有信息结构体yyy_data中, 而i2c_driver则适合被定义为全局变量并初始化 static struct i2c_driver pca954x_driver { .driver {…

组件的插槽以及组件通信

组件的插槽以及组件通信 1. 插槽1.1. 单个插槽1.2. 多个插槽 2. 组件通信2.1. 属性绑定2.2. 事件绑定(重点)2.3. 获取组件实例 1. 插槽 在自定义组件的 wxml 结构中,可以提供一个 节点(插槽),用于承载组件…

2023WAIC大会后记:我们距离AGI还有多远?

只有解决了算力问题,才能离大模型的商业化之路更进一步,等等问题,都在成为当下限制我们想象力的关键因素。继2023世界人工智能大会后,大模型还有多少想象力? 作者|思杭 编辑|皮爷 出品|产业家 1亿用户&#xff0…

当用AopContext.currentProxy()方式调用@Asyn注解的方法,发现不起作用了

1、前言 遇到到平常一些spring相关调用错误浅浅记录下 2、我们常常会用到在一个类的方法内部会去调用本类的别一个方法 我们常常会用到在一个类的方法内部会去调用本类的别一个方法,示例如下: public interface ITestAsy {String funttion1();String…

pycharm新建分支并提送至GitHub

文章目录 前言pycharm创建本地分支Push至远程分支 前言 当我们写的项目代码越来越多时,一个master分支无法满足需求了,这个时候就需要创建分支来管理代码。 创建分支可以快速的回滚到某个节点的版本,也可以多个开发者同时开发一个项目&#…

css:横向滚动布局

效果&#xff1a; 实现代码&#xff1a; <template><div class"index_div"><div class"container"><div class"flexBox"><div class"flex_item" v-for"item in topMenu" :key"item.id&quo…

五种不同自动化测试模型的基本介绍

随着移动互联网的发展&#xff0c;软件研发模型逐步完善&#xff0c;软件交付质量越来越受到软件公司的重视&#xff0c;软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用。 与传统的手工测试技术相比&#xff0c;自动化测试具备了良好的可操…

模拟实现浏览器自带的 ctrl+f 搜索功能

主要利用的就是元素的innerHtml&#xff0c;通过replace方法&#xff0c;把文本替换为带标签的文本&#xff0c;然后就有样式了 下图贴出 主要代码及效果 <template><div class"search-page"><el-input style"width: 200px" v-model"…

2023年信号处理与机器学习国际研讨会(WSPML 2023)| SPIE独立出版 快速稳定

会议简介 Brief Introduction 2023年信号处理与机器学习国际研讨会(WSPML 2023) 会议时间&#xff1a;2023年9月22 -24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.wspml.org 2023年信号处理与机器学习国际研讨会(WSPML 2023) 由西安交通大学、重庆大学光电技术及…

【学术小白如何写好论文】研究结论:结论vs结论

文章目录 一、引言二、研究结论的重要性三、研究结论的切入口&#xff08;1&#xff09;这个结论与前人研究的对话&#xff08;2&#xff09;这个研究结果本身的意义所在 四、注意事项&#xff08;1&#xff09;清楚区别&#xff08;2&#xff09;对结论的深入解析&#xff08;…

Lua脚本本地调试

这里主要使用日志的方式进行debug 环境依赖 项目对openresty包的依赖比较高&#xff0c;所以环境基础都在openresty下进行 openresty的使用 openresty下载地址 下载完成后解压&#xff0c;具体使用方式和nginx没有什么区别&#xff0c;主要依赖文件是一下几个 nginx.exe …

qt开发技巧之嵌入式linux点击触发两次

1.问题 移植qt5.12.9到嵌入式linux系统&#xff0c;tslib作为触摸输入&#xff0c;开发平台是imx6ull&#xff0c;点击pushbutton按钮会出现触发两次点击的情况。 2.解决 vi /etc/profile&#xff0c;在 /etc/profile里添加环境变量&#xff0c;禁止QT自带输入检测&#xff0…

数据结构---手撕图解堆的实现和TopK的应用

文章目录 重要的概念树的存储方式顺序存储链式存储 堆的概念堆的实现向上调整算法一些实现过程中的技巧实现搭建堆实现出堆的操作向下调整算法 堆排序TopK 重要的概念 要讲到堆&#xff0c;先要说两个关于二叉树的概念 满二叉树&#xff1a;一个二叉树如果每一层的节点数都是最…

ylb_学习笔记02

1.随机4位数&#xff1a; String random RandomStringUtils.randomNumeric(4);System.out.println("注册验证码的随机数 random"random);2.使用http时判断响应的状态为ture&#xff08;200&#xff09;&#xff1a; response.getStatusLine().getStatusCode() Htt…