目录
0 引言
火鹰优化(Fire Hawk Optimizer, FHO)算法是由Mahdi Azizi等人于2022年提出一种基于黑鸢(Milvus migrans)、啸栗鸢(Haliastur sphenurus)和褐隼(Falco berigora)等火鹰的觅食行为的进化算法。算法灵感来源火鹰利用自然条件纵火引诱猎物出逃行为来实现捕食行为。
1 数学模型
FHO利用纵火进行捕食行为数学模型主要包括生火、传火及捕食等过程,其数学模型见下:
1)初始化火鹰和猎物的位置:利用随机初始化方程来确定
式中N为总位置数,d为问题维度,Xmin和Xmax为解空间的上下界限。同时将位置对应适应度较好作为火鹰,其他作为食物位置,其方程见下式:
式中PR为猎物位置,FH为火鹰位置,同时m+n=N。
2)确定PR和FH距离:便于火鹰对猎物进行纵火捕食。
式中Dk1为第l只火鹰和第k只猎物的距离,(x1,y1)为火鹰坐标,(x2,y2)为猎物的坐标。
3)火鹰纵火更新自身位置:火鹰通过捡燃烧火把在自己特定领域进行纵火引出猎物,或使用其他火鹰火把进行纵火更新自身位置。
FH1new为FH1只火鹰的新位置,GB为当前搜索空间最优火鹰,FHnear为邻居火鹰,r1和r2为0到1均匀分布的随机数,用于确定火鹰向最优火鹰或者邻居火鹰移动的趋势。
4)猎物位置更新:在火鹰纵火后,其一,猎物会进行躲避、误向火鹰位置跑去从而更新自身新位置,其二,猎物会向其他领域火鹰移动甚至向更远地方移动,其位置更新如下:
式(7)中PRqnew为被第l只火鹰(FHl)包括的第q个猎物,其中SP1为FH1火鹰属下的安全点,r3和r4为0到1均匀分布的随机数,用于确定猎物向火鹰或者向安全点移动的概率;式(8)PRq new为第q猎物被第l个火鹰包围新位置,其中FHalter为搜索空间另一只火鹰,SP为FH1火鹰领域之外的安全点,r5和r6为0到1均匀分布的随机数,用于确定猎物向其他火鹰或者向其他领域安全点移动的概率.
2 优化方式
前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述FHA原理介绍,可以将BP神经网络权值和阈值作为火鹰和猎物的种群,每一个种群对应BP神经网络的预测值,将这个预测值作为适应度进行上述火鹰纵火行为觅食后位置更新。
3 Matlab代码
3.1 伪代码
3.2 FHO主函数代码
%% 参数
%nPop 种群
%VarMin,VarMax 问题维度上下界限
%VarNumber 问题维度
%SYD 适应度函数
%HN 火鹰个体数
%distance 距离函数
%MaxFes 最大迭代次数
%% 初始化
Pop=[];
Cost=[];
for i=1:nPop
% 初始化种群
Pop(i,:)=unifrnd(VarMin,VarMax,[1 VarNumber]);
% 初始化适应度
Cost(i,1)=SYD(Pop(i,:),net);
net.trainParam.showWindow = 0;
FEs=FEs+1;
end
% 种群排序
[Cost, SortOrder]=sort(Cost);
Pop=Pop(SortOrder,:);
BestPop=Pop(1,:);
SP=mean(Pop);
% 火鹰
FHPops=Pop(1:HN,:);
% 猎物
Pop2=Pop(HN+1:end,:);
% 火鹰与猎物之间的距离
for i=1:HN
nPop2=size(Pop2,1);
if nPop2<HN
break
end
Dist=[];
for q=1:nPop2
Dist(q,1)=distance(FHPops(i,:), Pop2(q,:));
end
[ ~, b]=sort(Dist);
alfa=randi(nPop2);
PopNew{i,:}=Pop2(b(1:alfa),:);
Pop2(b(1:alfa),:)=[];
if isempty(Pop2)==1
break
end
end
if isempty(Pop2)==0
PopNew{end,:}=[PopNew{end,:} ;Pop2];
end
% 更新最佳
GB=Cost(1);
BestPos=BestPop;
%% 开始
while FEs < MaxFes
Iter=Iter+1;
PopTot=[];
Cost=[];
for i=1:size(PopNew,1)
PR=cell2mat(PopNew(i));
FHl=FHPops(i,:);
SPl=mean(PR);
Ir=unifrnd(0,1,1,2);
FHnear=FHPops(randi(HN),:);
FHl_new=FHl+(Ir(1)*GB-Ir(2)*FHnear);
FHl_new = max(FHl_new,VarMin);
FHl_new = min(FHl_new,VarMax);
PopTot=[PopTot ;FHl_new];
for q=1:size(PR,1)
Ir=unifrnd(0,1,1,2);
PRq_new1=PR(q,:)+((Ir(1)*FHl-Ir(2)*SPl));
PRq_new1 = max(PRq_new1,VarMin);
PRq_new1 = min(PRq_new1,VarMax);
PopTot=[PopTot ;PRq_new1];
Ir=unifrnd(0,1,1,2);
FHAlter=FHPops(randi(HN),:);
PRq_new2=PR(q,:)+((Ir(1)*FHAlter-Ir(2)*SP));
PRq_new2 = max(PRq_new2,VarMin);
PRq_new2 = min(PRq_new2,VarMax);
PopTot=[PopTot ;PRq_new2];
end
end
for i=1:size(PopTot,1)
Cost(i,1)=SYD(PopTot(i,:),net);
net.trainParam.showWindow = 0;
end
% 种群排列
[Cost, SortOrder]=sort(Cost);
PopTot=PopTot(SortOrder,:);
Pop=PopTot(1:nPop,:);
HN = randi([1 ceil(nPop/5)],1,1);
BestPop=Pop(1,:);
SP=mean(Pop);
FHPops=Pop(1:HN,:);
Pop2=Pop(HN+1:end,:);
clear PopNew
% 火鹰与猎物之间的距离
for i=1:HN
nPop2=size(Pop2,1);
if nPop2<HN
break
end
Dist=[];
for q=1:nPop2
Dist(q,1)=distance(FHPops(i,:), Pop2(q,:));
end
[ ~, b]=sort(Dist);
alfa=randi(nPop2);
PopNew{i,:}=Pop2(b(1:alfa),:);
Pop2(b(1:alfa),:)=[];
if isempty(Pop2)==1
break
end
end
if isempty(Pop2)==0
PopNew{end,:}=[PopNew{end,:} ;Pop2];
end
% 更新最佳适应度
if Cost(1)<GB
BestPos=BestPop;
end
GB=min(GB,Cost(1));
BestCosts(Iter)=GB;
FEs = FEs+1;
Conv_History(FEs)=GB;
end
3.3 FHO-BP
1)单输出回归预测:单输出回归预测:火鹰算法优化BP神经网络模型(FHO-BP)
2)多输出回归预测:多输出回归预测:火鹰算法优化BP神经网络模型(FHO-BP)
3)分类模型:分类模型:火鹰算法优化BP神经网络模型(FHO-BP)
4)时间序列:时间序列:火鹰算法优化BP神经网络模型(FHO-BP)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’