赞
踩
花斑翠鸟优化算法(Pied Kingfisher Optimizer,PKO)是一种受自然启发的群智能优化算法。该算法的灵感来自于自然界中斑翠鸟独特的狩猎行为和共生关系。PKO算法围绕三个不同的阶段构建:栖息/悬停猎物(探索/多样化),潜水猎物(开发/强化),培养共生关系。这些行为方面被转化为数学模型,能够有效地解决各种搜索空间中的各种优化挑战。该算法的性能在39个测试函数中进行了严格的评估,总体结果突出了PKO处理复杂优化问题的特殊能力,这些问题以具有挑战性的搜索空间为特征。PKO在有效避免局部最优的同时,显示出优越的勘探开发趋势。
该成果于2024年发表在知名SCI期刊“Neural Computing and Applications”上。
花斑翠鸟如下图所示。花斑翠鸟有一种独特的狩猎策略,包括盘旋,也被称为空中栖息。这种悬停可以让鸟在一个地方停留很长一段时间,而不需要回到附近的栖息之处。它是唯一一种能摆出八字形翅膀的翠鸟,也是世界上最大的不用气流就能悬停的鸟。花斑翠鸟通常在水面上盘旋寻找食物,然后垂直下潜,喙朝前捕捉鱼。它进化出了两种独特的策略,这是其他翠鸟所没有的,这有助于它更成功地捕获猎物。悬停的能力使它能够在一个地方停留很长一段时间,并为它开辟了新的狩猎区域。当不觅食时,花斑翠鸟有一种独特的栖息模式,帮助它们保存能量。
1、算法原理
(1)种群初始化:
与许多其他基于群体的方法类似,PKO通过从搜索空间随机生成一组起始解作为第一次试验来启动搜索过程。用于生成初始种群的方程如下:
其中Xi,j是指第i个个体在第j维的位置,rand表示0和1之间的随机值,UB和LB是指搜索范围的上界和下界。
一旦初始种群生成,适应度函数被用来根据每个个体解决问题的能力来评估其适应度值。然后选择具有最佳适应值的个体来创建新一代。
(2)栖息和盘旋策略(探索阶段)
PKO的探索阶段受到翠鸟栖息和盘旋行为的启发。对翠鸟在其自然栖息地的观察表明,它们会根据各种因素在栖息和悬停位置之间交替进行攻击。在PKO中,搜索代理的位置是根据翠鸟的觅食活动来确定的。翠鸟的位置根据以下等式更新:
在迭代过程中,下一次迭代的解用 表示,当前迭代的位置用Xi(t)表示。参数a计算为 ,其中randn表示正态分布中的随机数。N表示总体规模,Dim表示所考虑问题的维度。
参数T在本位的方法中起着关键作用,它的值是根据当前策略动态确定的,可以是"栖息"或"悬停"。T的计算是针对每种策略量身定制的,确保在不同的操作模式下的最佳性能。
在搜寻水中的猎物时,花斑翠鸟通常会将它们的羽冠保持垂直的角度。这有助于扩大它们的视野,使它们能够从更远的距离探测到运动,帮助它们发现鱼,即使它们藏在水中的植被或碎片中。一旦斑翠鸟发现了潜在的猎物,它就会降低羽冠,用双眼视觉聚焦猎物,并做出精确的动作来捕捉猎物。栖息策略可以用前面的公式进行数学建模,T参数计算如下:
最大迭代次数由Max Iter指定。恒定值BF (beat Factor)设置为8,rand是0到1之间的随机值。
悬停策略的数学模型如以下所示,T参数的计算公式为:
第i和第j斑翠鸟的适应度分别用PKO_Fitness(i)和PKO_Fitness(j)表示。此外,一个恒定的值,BF(跳动因子),被设置为8。
花斑翠鸟以其在空中盘旋时快速拍打翅膀而闻名。它的翅膀相对短而宽,可以有效而快速地拍打。通过高频率拍打翅膀,这种鸟可以在空中保持稳定的位置。花斑翠鸟的翅膀特别适合悬停,因为它们的翅膀又长又尖,这可以产生升力,使它们能够保持自己的位置。翅膀相对坚硬,使鸟能够快速拍打翅膀并保持稳定的悬停。下图展示了斑翠鸟在捕猎时悬停并保持稳定位置的能力。
(3)潜水策略(开发阶段)
如前所述,花斑翠鸟以其潜水行为而闻名,它用这种行为来捕鱼。通常,这种鸟栖息在俯瞰水面的高处,比如树枝或岩石上,以观察鱼的存在。一旦发现鱼,花斑翠鸟就会从几米高的地方迅速潜入水中,用喙捕捉猎物,动作迅速而精确。这种鸟可以到达几米深的地方,然后把鱼牢牢地叼在嘴里,回到栖息的地方。
花斑翠鸟的潜水行为使其成为高效的猎手,这也是该物种在其栖息地如此成功的原因之一。这种鸟快速而准确的潜水能力,加上它锋利的喙和出色的视力,使它成为水生环境中有效的捕食者,下图说明了这种行为。
其数学表示如下所示。
其中,第i只花斑翠鸟的适应度值记为PKO_Fitness(i),最佳适应度表示所有迭代得到的最佳适应度值。A是控制参数,o & HA表示狩猎能力,可由下式计算:
(4)随生阶段(局部逃逸阶段)
花斑翠鸟的捕食效率会受到多种因素的影响,比如猎物的可用性、单个鸟的捕猎技巧以及该地区竞争对手或捕食者的存在。这种行为在数学上表现如下:
在种群中随机选取2个个体,其位置用Xm和Xn表示。花斑翠鸟的捕食效率用PE表示,其中PEmax和PEmin固定值分别为0.5和0。
PKO优化算法的伪代码如下
2、结果展示
3、MATLAB核心代码
- %% 淘个代码 %%
- % 微信公众号搜索:淘个代码,获取更多代码
- % 花斑翠鸟优化算法(PKO)
- function [Best_fitness,Best_position,Convergence_curve]=PKO(Popsize,Maxiteration,LB,UB,Dim,Fobj)
- tic;
- BF=8;%beating Factor
- Crest_angles=2*pi*rand;
- X=Initialization(Popsize,Dim,UB,LB);
- Fitness = zeros(1,Popsize);
- Convergence_curve=zeros(1,Maxiteration);
- for i=1:Popsize
- Fitness(i)=Fobj(X(i,:));
- end
- % Calculate the fitness values of initial PKO.
- [~,sorted_indexes]=sort(Fitness);
- Best_position=X(sorted_indexes(1),:);
- Best_fitness = Fitness(sorted_indexes(1));
- Convergence_curve(1)=Best_fitness;
- t=1;
- PEmax=0.5;
- PEmin=0;
- while t<Maxiteration+1
- o=exp(-t/Maxiteration)^2;
- for i=1:Popsize
- if rand<.8 %exploration
- j=i;
- while i==j
- seed=randperm(Popsize);
- j=seed(1);
- end
- beatingRate=rand*(Fitness(j))/(Fitness(i));
- alpha=2*randn(1,Dim)-1;
- if rand<.5
- T=beatingRate-((t)^(1/BF)/(Maxiteration)^(1/BF));
- X_1(i,:)=X(i,:)+alpha.*T.*(X(j,:)-X(i,:));
- else
- T= (exp(1)-exp(((t-1)/Maxiteration)^(1/BF)))*(cos(Crest_angles));
- X_1(i,:)=X(i,:)+alpha.*T.*(X(j,:)-X(i,:));
- end
- else %exploitation
- alpha=2*randn(1,Dim)-1;
- b=X(i,:)+o^2*randn.*Best_position;
- HuntingAbility=rand*(Fitness(i))/(Best_fitness);
- X_1(i,:)=X(i,:)+ HuntingAbility*o*alpha.*(b-Best_position);
- end
- end
- for i=1:Popsize
- FU=X_1(i,:)>UB;FL=X_1(i,:)<LB;X_1(i,:)=(X_1(i,:).*(~(FU+FL)))+UB.*FU+LB.*FL;
- fitnessn(i) = Fobj(X_1(i,:));
- if fitnessn(i)<Fitness(i)
- Fitness(i)=fitnessn(i);
- X(i,:)=X_1(i,:);
- end
- if Fitness(i)<Best_fitness
- Best_fitness=Fitness(i);
- Best_position=X(i,:);
- end
- end
- % Commensal association of the pied kingfisher with foraging Eurasian otters
- PE=PEmax-(PEmax-PEmin)*(t/Maxiteration); %Predatory Efficiency
- for i=1:Popsize
- alpha=2*randn(1,Dim)-1;
- if rand>(1-PE)
- X_1(i,:)=X(randi([1,Popsize]),:)+o*alpha.*abs(X(i,:)-X(randi([1,Popsize]),:));
- else
- X_1(i,:)=X(i,:);
- end
- FU=X_1(i,:)>UB;FL=X_1(i,:)<LB;X_1(i,:)=(X_1(i,:).*(~(FU+FL)))+UB.*FU+LB.*FL;
- fitnessn(i) = Fobj(X_1(i,:));
- if fitnessn(i)<Fitness(i)
- Fitness(i)=fitnessn(i);
- X(i,:)=X_1(i,:);
- end
- if Fitness(i)<Best_fitness
- Best_fitness=Fitness(i);
- Best_position=X(i,:);
- end
- end
- Convergence_curve(t)=Best_fitness;
- t = t + 1;
- end
- time = toc;
- end
参考文献
[1]Bouaouda A, Hashim F A, Sayouti Y, et al. Pied kingfisher optimizer: a new bio-inspired algorithm for solving numerical optimization and industrial engineering problems[J]. Neural Computing and Applications, 2024: 1-59.
完整代码获取
后台回复关键词:
TGDM833
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。