目录
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 优化方式
前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述CO原理介绍,可以将BP神经网络权值和阈值作为猎豹种群位置,每一个种群位置对应BP神经网络的预测值,将这个预测值作为适应度进行上述猎豹狩猎活动,更新更优猎豹位置。
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-BP
1)单输出回归预测:单输出回归预测:猎豹算法优化BP神经网络(CO-BP)
2)多输出回归预测:私信
3)分类模型:私信
4)时间序列:私信
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’
标签:猎物,CO,pop,猎豹,BP,Matlab,end From: https://blog.csdn.net/m0_74389201/article/details/141671260