【智能算法】人工水母搜索算法(JS)原理及实现

2024-03-16 06:44

本文主要是介绍【智能算法】人工水母搜索算法(JS)原理及实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

目录

    • 1.背景
    • 2.算法原理
      • 2.1算法思想
      • 2.2算法过程
    • 3.代码实现
    • 4.参考文献


1.背景

2020年,Chou 等人受到水母运动行为启发,提出了人工水母搜索算法(Artificial Jellyfish Search Optimizer, JS)。

2.算法原理

2.1算法思想

JS模拟了水母的搜索行为,包括追随海流、水母群内的主动和被动运动、时间控制机制以及群聚过程。
在这里插入图片描述

2.2算法过程

洋流
海洋中蕴含着大量的营养物质,这些物质会吸引水母。洋流的方向是通过对每个水母到处于最佳位置的水母(适应度度量)所有向量进行平均。
t r e n d → = 1 n P o p ∑ t r e n d → i = 1 n P o p ∑ ( X ∗ − e c X i ) = X ∗ − e c ∑ X i n P o p = X ∗ − e c μ \overrightarrow{\mathrm{trend}}=\frac{1}{\mathrm{n}_{\mathrm{Pop}}}\sum\overrightarrow{\mathrm{trend}}_{\mathrm{i}}=\frac{1}{\mathrm{n}_{\mathrm{Pop}}}\sum\left(X^{*}-\mathrm{e}_{\mathrm{c}}X_{\mathrm{i}}\right)=X^{*}-\mathrm{e}_{\mathrm{c}}\frac{\sum X_{\mathrm{i}}}{\mathrm{n}_{\mathrm{Pop}}}=X^{*}-\mathrm{e}_{\mathrm{c}}\mu trend =nPop1trend i=nPop1(XecXi)=XecnPopXi=Xecμ
这里,令 d f = e c μ \mathbf{df}=\mathbf{e}_{\mathbf{c}}\mu df=ecμ,则洋流方向可以描述为:
t r e n d → = X ∗ − d f \overrightarrow{\mathrm{trend}}=\mathrm{X}^{*}-\mathrm{df} trend =Xdf
假设水母在所有维度上分布服从正态空间分布:
在这里插入图片描述
因此,可以进行简化:
d f = β × r a n d ( 0 , 1 ) × μ \mathrm{df}=\beta\times\mathrm{rand}(0,1)\times\mu df=β×rand(0,1)×μ
每只水母位置更新:
X i ( t + 1 ) = X i ( t ) + r a n d ( 0 , 1 ) × ( X ∗ − β × r a n d ( 0 , 1 ) × μ \mathrm{X_i(t+1)=X_i(t)+rand(0,1)\times(X^*-\beta\times rand(0,1)\times\mu} Xi(t+1)=Xi(t)+rand(0,1)×(Xβ×rand(0,1)×μ
水母群体运动
在群集中,水母分别表现出被动(类型A)和主动(类型B)的运动 。最初,当群集刚形成时,大多数水母表现出类型A的运动。随着时间的推移,它们逐渐表现出类型B的运动。类型A运动是水母围绕自身位置的运动(全局探索),每个水母的相应更新位置由:
X i ( t + 1 ) = X i ( t ) + γ × r a n d ( 0 , 1 ) × ( U b − L b ) \mathrm{X_i(t+1)=X_i(t)+\gamma\times rand(0,1)\times(U_b-L_b)} Xi(t+1)=Xi(t)+γ×rand(0,1)×(UbLb)
B类型运动可以看作种群间根据食物数量(适应度衡量)进行互相迁移,比如当水母 i i i处食物数量大于水母 j j j处,则水母 j j j向水母 i i i移动,反之亦然。(此阶段为局部探索)
S t e p = X i ( t + 1 ) − X i ( t ) Direction → = X j ( t ) − X i ( t ) i f f ( X i ) ≥ f ( X j ) X i ( t ) − X j ( t ) i f f ( X i ) < f ( X j ) \mathrm{Step}=\mathrm{X_i(t+1)-X_i(t)} \\ \overrightarrow{\text{Direction}}=\begin{matrix}\mathsf{X_j(t)-X_i(t)~if~f(X_i)\geq f(X_j)}\\\mathsf{X_i(t)-X_j(t)~if~f(X_i)<f(X_j)}\end{matrix} Step=Xi(t+1)Xi(t)Direction =Xj(t)Xi(t) if f(Xi)f(Xj)Xi(t)Xj(t) if f(Xi)<f(Xj)
其中, S t e p → = r a n d ( 0 , 1 ) × D i r e c t i o n → \overrightarrow{\mathrm{Step}}=\mathrm{rand}(0,1)\times\overrightarrow{\mathrm{Direction}} Step =rand(0,1)×Direction ,因此整体可表述为:
X i ( t + 1 ) = X i ( t ) + S t e p → \mathrm{X_i(t+1)=X_i(t)+\overrightarrow{Step}} Xi(t+1)=Xi(t)+Step
时间控制机制
海洋流富含营养食物,吸引了水母的聚集形成水母群。随着温度或风向变化,水母群会转移至新的海洋流形成新的群体。水母群内的水母表现出被动和主动两种运动,其偏好会随着时间变化。引入时间控制机制来调节水母在海洋流和群内移动之间的转换。(这里是对全局与局部平衡,收敛性考虑)
在这里插入图片描述

c ( t ) = ∣ ( 1 − t M a x i t e r ) × ( 2 × r a n d ( 0 , 1 ) − 1 ) ∣ \mathbf{c(t)}=\left|\left(1-\frac{\mathbf{t}}{\mathbf{Max}_{\mathrm{iter}}}\right)\times(2\times\mathrm{rand}(0,1)-1)\right| c(t)= (1Maxitert)×(2×rand(0,1)1)
伪代码
在这里插入图片描述

3.代码实现

% 水母搜索算法
function [Best_pos, Best_fitness, Iter_curve, History_pos, History_best] = JS(pop, maxIter,lb,ub,dim,fobj)
%input
%pop 种群数量
%dim 问题维数
%ub 变量上边界
%lb 变量下边界
%fobj 适应度函数
%maxIter 最大迭代次数
%output
%Best_pos 最优位置
%Best_fitness 最优适应度值
%Iter_curve 每代最优适应度值
%History_pos 每代种群位置
%History_best 每代最优个体位置
%% 初始化种群
X = initialization(pop,dim,ub,lb);
VarSize = [1 dim];
%% 计算适应度
popCost = zeros(1,pop);
for i=1:poppopCost(i) = fobj(X(i,:));
end
%% 迭代
for it=1:maxIterMeanvl=mean(X,1);[value,index]=sort(popCost);Best_pos=X(index(1),:);BestCost=popCost(index(1));for i=1:pop% Calculate time control c(t) using Eq. (17);Ar=(1-it*((1)/maxIter))*(2*rand-1);if abs(Ar)>=0.5%% Folowing to ocean current using Eq. (11)newsol = X(i,:)+ rand(VarSize).*(Best_pos - 3*rand*Meanvl);% Check the boundary using Eq. (19)newsol = simplebounds(newsol,lb,ub);% EvaluationnewsolCost = fobj(newsol);% Comparisonif newsolCost<popCost(i)X(i,:) = newsol;popCost(i)=newsolCost;if popCost(i) < BestCostBestCost=popCost(i);Best_pos = X(i,:);endendelse%% Moving inside swarmif rand<=(1-Ar)% Determine direction of jellyfish by Eq. (15)j=i;while j==ij=randperm(pop,1);endStep = X(i,:) - X(j,:);if popCost(j) < popCost(i)Step = -Step;end% Active motions (Type B) using Eq. (16)newsol = X(i,:) + rand(VarSize).*Step;else% Passive motions (Type A) using Eq. (12)newsol = X(i,:) + 0.1*(ub-lb)*rand;end% Check the boundary using Eq. (19)newsol = simplebounds(newsol, lb,ub);% EvaluationnewsolCost = fobj(newsol);% Comparisonif newsolCost<popCost(i)X(i,:) = newsol;popCost(i)=newsolCost;if popCost(i) < BestCostBestCost=popCost(i);Best_pos = X(i,:);endendendend%% Store Record for Current IterationIter_curve(it)=BestCost;Best_fitness = BestCost;History_best{it} = Best_pos;History_pos{it} = X;
end
end
%% This function is for checking boundary by using Eq. 19
function s=simplebounds(s,Lb,Ub)
ns_tmp=s;
I=ns_tmp<Lb;
% Apply to the lower bound
while sum(I)~=0ns_tmp(I)=Ub(I)+(ns_tmp(I)-Lb(I));I=ns_tmp<Lb;
end
% Apply to the upper bound
J=ns_tmp>Ub;
while sum(J)~=0ns_tmp(J)=Lb(J)+(ns_tmp(J)-Ub(J));J=ns_tmp>Ub;
end
% Check results
s=ns_tmp;
end
%%
function pop=initialization(num_pop,nd,Ub,Lb)if size(Lb,2)==1Lb=Lb*ones(1,nd);Ub=Ub*ones(1,nd);
end
x(1,:)=rand(1,nd);
a=4;
for i=1:(num_pop-1)x(i+1,:)=a*x(i,:).*(1-x(i,:));
end 
for k=1:ndfor i=1:num_poppop(i,k)=Lb(k)+x(i,k)*(Ub(k)-Lb(k));end
end
end

在这里插入图片描述

4.参考文献

[1] 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.

这篇关于【智能算法】人工水母搜索算法(JS)原理及实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814624

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4