目录
0 引言
水母搜索算法(Jellyfish Search,JS)是由Jui-Sheng Chou在2020年基于水母搜索行为提出的群智能算法。该算法模拟水母搜索行为的包括它们的洋流跟随,它们在水母群中的运动(主动运动和被动运动),以及在这些运动之间切换的时间控制机制和群聚过程。
1 数学模型
JS算法模拟水母跟随洋流进行漂流及在漂流过程进行主动和被动的群体运动。
1)洋流位置更新:海洋中蕴含着大量的营养物质,这些物质会吸引水母。从而进行水母的位置更新。其数学模型如下:
洋流的方向是通过对每个水母到处于最佳位置的水母(适应度度量)所有向量进行平均:X*为目前位置适应度最佳位置,ec为决定吸引力的因素;μ是所有水母的平均位置
变形设置 df = ecμ,同时假设水母在所有的维度都是符合正态分布,故数学模型变化为:df是目前水母的最佳位置与所有水母的平均位置之差。β为分布系数,基于数值实验中的灵敏度分析结果(得到β = 3。
水母随洋流位置更新:X为水母位置
2)群体运动:在水母漂流群中,水母主要进行被动A型和主动B型进行全局搜索和局部开发问题寻优,更具时间控制机制来模拟,其数学模型如下:
式中t为当前迭代,Maxiter为最大迭代次数。
被动运动A型:A型运动是水母围绕其自身位置的运动进行全局搜索:
式中γ为水母灵敏度分析参数为0.1,ub和lb为问题维度边界
主动运动B型:B型可以看作水母个体根据食物数量(适应度)进行互相迁移,当水母i处食物数量大于水母j处,则水母j向水母i移动,反之亦然。该阶段为局部开发阶段。
2 优化方式
前篇对长短期记忆神经网络(长短期记忆神经网络LSTM原理及matlab代码-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述JS原理介绍,可以将长短期记忆神经网络的超参数作为水母种群位置,每一个种群位置对应长短期记忆神经网络的预测值,将这个预测值作为食物量适应度评估指标进行上述水母运动,从而更新更优的水母位置。
3 Matlab代码
3.1 伪代码
3.2 JS主函数代码
%% JS参数
% MaxIt 最大迭代
% popi 种群位置
% popCost 种群位置对应适应度
% nPop 种群大小
% VarMin,VarMax 问题维度边界范围
% SYD 适应度函数
% simplebounds 边界检测函数
%JS主函数代码
for it=1:MaxIt
Meanvl=mean(popi,1);
[value,index]=sort(popCost);
BestSol=popi(index(1),:);
BestCost=popCost(index(1));
for i=1:nPop
Ar=(1-it*((1)/MaxIt))*(2*rand-1);% 时间控制机制
if abs(Ar)>=0.5
beta = 3;
% 洋流运动水母位置更新
newsol = popi(i,:)+ rand(VarSize).*(BestSol - beta*rand*Meanvl);%Eq(11)
newsol = simplebounds(newsol,VarMin,VarMax);
newsolCost = SYD(newsol,net);
net.trainParam.showWindow = 0;
if newsolCost<popCost(i)
popi(i,:) = newsol;
popCost(i)=newsolCost;
if popCost(i) < BestCost
BestCost=popCost(i);
BestSol = popi(i,:);
end
end
else
% 在水母群内部移动
if rand<=(1-Ar)
% 水母的方向
j=i;
while j==i
j=randperm(nPop,1);
end
Step = popi(i,:) - popi(j,:);%Eq(15)
if popCost(j) < popCost(i)
Step = -Step; %Eq(15)
end
% 主动运动(B 型)的位置
newsol = popi(i,:) + rand(VarSize).*Step;%Eq(16)
else
% 被动运动(A 型)的位置
newsol = popi(i,:) + 0.1*(VarMax-VarMin)*rand; %Eq(12)
end
newsol = simplebounds(newsol, VarMin,VarMax);
newsolCost = SYD(newsol,net);
net.trainParam.showWindow = 0;
if newsolCost<popCost(i)
popi(i,:) = newsol;
popCost(i)=newsolCost;
if popCost(i) < BestCost
BestCost=popCost(i);
BestSol = popi(i,:);
end
end
end
end
fbestvl(it)=BestCost;
end
u=BestSol;
fval=fbestvl(it);
end
3.2 JS-LSTM
1)时间序列:时间序列:水母搜索算法优化长短期记忆神经网络模型(JS-LSTM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’
标签:位置,长短期,搜索算法,JS,神经网络,水母,Matlab,适应度 From: https://blog.csdn.net/m0_74389201/article/details/142093623