目录
0 引言
猎豹算法(cheetah optimizer,CO)是MohammadAminAkbari于2022年基于猎豹的狩猎策略启发而提出的智能算法。CO模拟猎豹的三种主要策略来捕猎猎物,即搜索、坐着和攻击;同时猎豹狩猎过程中还加入了离开猎物回家的策略,以提高该框架的种群多样性、收敛性能和鲁棒性。
1 数学模型
CO数学模拟包括俩部分,狩猎策略(搜索猎物,坐等猎物,攻击猎物),回家重新开始新一轮狩猎,以下是其的数学模型构建:
1)搜索策略:猎物在寻找猎物阶段,对设置区域进行扫描。
式中X为猎物种群位置,r和a分别为猎物随机参数和步长,符合正态分布形式。
2)坐等策略:在搜索策略下,猎物可能会暴露在猎豹的视野中。在这种情况下,猎豹的每一个动作都可能让猎物意识到猎豹的存在,并导致猎物逃跑。为了避免这种担忧,猎豹可能会决定伏击(躺在地上或躲在灌木丛中),以获得足够的接近它的猎物。其数学模型如下
3)攻击策略:猎豹在决定攻击猎物时,其利用两个关键因素来攻击猎物:速度和敏捷性。当一只猎豹决定攻击它时,全速冲向猎物。过了一会儿,猎物注意到了猎豹的攻击,并开始逃跑。猎豹用其敏锐的眼睛在拦截路径上快速追逐猎物,其数学模型如下:
式中rij转向因子,其式子为|ri,j| exp (ri,j/2)sin 2πri,j,该因子反映了猎豹在捕猎模式下的急转弯策略。βij为相互因子,其反映捕猎过程中猎豹之间或猎豹和首领之间的相互作用。
4)回家重新新的猎豹位置进行新一轮的狩猎活动:猎豹狩猎到食物会返回家园食用,或其为狩猎到食物会回到家园中,重新分布首领猎豹等位置重新进行上述狩猎策略,进而捕捉猎物。
2 优化方式
前篇对长短期记忆神经网络(长短期记忆神经网络LSTM原理及matlab代码-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述CO原理介绍,可以将这些超参数作为猎豹种群位置,每一个种群位置对应长短期记忆神经网络的预测值,将这个预测值作为适应度进行上述猎豹狩猎活动,更新更优猎豹位置。
3 Maltab代码
3.1 伪代码
3.2 CO主函数代码
%% 参数
% pop 包括种群pop.Position和对应适应度pop.Cost
% MaxIt 最大迭代次数
% X_best 最好适应度种群位置
% Globest 最好适应度
% SYD 适应度函数
% T 狩猎时间
% it 迭代计算器
%% CO的主函数代码
while FEs <= MaxIt
m = 1+randi (ceil(n/2));
i0 = randi(n,1,m);% 随机选择猎豹成员
for k = 1 : m % 每个成员执行以下任务
i = i0(k);
% 定义成员io邻居
if k == length(i0)
a = i0(k-1);
else
a = i0(k+1);
end
X = pop(i).Position; % 第 i 只猎豹的当前位置
X1 = pop(a).Position; % 邻居a的位置
Xb = BestSol.Position; % 领导位置
Xbest = X_best.Position;% 最佳位置
kk=0;
% 执行选择重组种群,可能会提高 CO精度
if i<=2 && t>2 && t>ceil(0.2*T+1) && abs(BestCost(t-2)-BestCost(t-ceil(0.2*T+1)))<=0.0001*Globest(t-1)
X = X_best.Position;
kk = 0;
elseif i == 3
X = BestSol.Position;
kk = -0.1*rand*t/T;
else
kk = 0.25;
end
if mod(it,100)==0 || it==1
xd = randperm(numel(X));
end
Z = X;
%
for j = xd % 选择任意一组安排
r_Hat = randn;% R随机化参数, 可用Eq (1)
r1 = rand;
if k == 1 % 领导者的步长(假定 k==1 与领导者编号相关联)
alpha = 0.0001*t/T.*(ub(j)-lb(j)); % 步长,公式 可用(1)
else % 成员步长
alpha = 0.0001*t/T*abs(Xb(j)-X(j))+0.001.*round(double(rand>0.9));%成员步长,可用公式 (1)
end
r = randn;
r_Check = abs(r).^exp(r/2).*sin(2*pi*r); % 标准正态分布的正态分布随机数,可用Eq(3)
beta = X1(j)-X(j); % 猎豹之间或猎豹与领导者在捕获模式下的互动系数,可用Eq(3)
h0 = exp(2-2*t/T);
H = abs(2*r1*h0-h0);
r2 = rand;
r3 = kk+rand;
if r2 <= r3
r4 = 3*rand;
if H > r4
% 搜索策略
Z(j) = X(j)+r_Hat.^-1.*alpha; % 搜索, Eq(1)
else
% 攻击策略
Z(j) = Xbest(j)+r_Check.*beta; % 攻击, Eq(3)
end
else
Z(j) = X(j); % 坐等, Eq
end
end
% 更新成员 i 的解
% 边界检查
xx1=find(Z<lb);
Z(xx1)=lb(xx1)+rand(1,numel(xx1)).*(ub(xx1)-lb(xx1));
xx1=find(Z>ub);
Z(xx1)=lb(xx1)+rand(1,numel(xx1)).*(ub(xx1)-lb(xx1));
% 适应度比较
NewSol.Position = Z;
NewSol.Cost = SYD(NewSol.Position,net);
net.trainParam.showWindow = 0;
if NewSol.Cost < pop(i).Cost
pop(i) = NewSol;
if pop(i).Cost < BestSol.Cost
BestSol = pop(i);
end
end
FEs = FEs+1;
end
t = t+1;
% 离开猎物,返回家园
if t>T && t-round(T)-1>=1 && t>2
if abs(BestCost(t-1)-BestCost(t-round(T)-1))<=abs(0.01*BestCost(t-1))
% 更改领导者位置
best = X_best.Position;
j0=randi(D,1,ceil(D/10*rand));
best(j0) = lb(j0)+rand(1,length(j0)).*(ub(j0)-lb(j0));
BestSol.Cost = SYD(best,net);
net.trainParam.showWindow = 0;
BestSol.Position = best; % 领导人的新位置
FEs = FEs+1;
i0 = randi(n,1,round(1*n));
pop(i0(n-m+1:n)) = pop1(i0(1:m)); % 一些种群恢复了最初的位置
pop(i) = X_best; % 将成员 i 替换为猎物
t = 1; % 重置狩猎时间
end
end
it = it +1;
% 更新猎物(全体最佳)位置
if BestSol.Cost<X_best.Cost
X_best=BestSol;
end
BestCost(t)=BestSol.Cost;
CO_Convergence(FEs) = X_best.Cost;
end
end
3.3 CO-LSTM
1)时间序列:时间序列:猎豹算法优化长短期记忆神经网络(CO-LSTM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’
标签:猎物,CO,长短期,pop,猎豹,Matlab,狩猎,end From: https://blog.csdn.net/m0_74389201/article/details/141672594