提出了一种新的仿生元启发式算法人工兔子优化(ARO),并进行了全面的测试。ARO算法的灵感来自于自然界中兔子的生存策略,包括绕道觅食和随机隐藏。绕道觅食策略迫使兔子吃其他兔子巢穴附近的草,这可以防止它的巢穴被捕食者发现。随机隐藏策略使兔子能够从自己的洞穴中随机选择一个洞穴进行隐藏,从而减少了被敌人捕获的可能性。此外,兔子的能量收缩会导致兔子从绕道觅食策略向随机隐藏策略的过渡。
MATLAB代码如下:
function [BestX,BestF,HisBestF]=ARO(F_index,MaxIt,nPop)
[Low,Up,Dim]=EngRange(F_index);
PopPos=zeros(nPop,Dim);
PopFit=zeros(nPop,1);
for i=1:nPop
PopPos(i,:)=rand(1,Dim).*(Up-Low)+Low;
PopFit(i)=EngFunctions(PopPos(i,:),F_index);
end
BestF=inf;
BestX=[];
for i=1:nPop
if PopFit(i)<=BestF
BestF=PopFit(i);
BestX=PopPos(i,:);
end
end
HisBestF=zeros(MaxIt,1);
for It=1:MaxIt
Direct1=zeros(nPop,Dim);
Direct2=zeros(nPop,Dim);
theta=2*(1-It/MaxIt);
for i=1:nPop
L=(exp(1)-exp(((It-1)/MaxIt)^2))*(sin(2*pi*rand));%Eq.(3)
rd=ceil(rand*(Dim));
Direct1(i,randperm(Dim,rd))=1;
c=Direct1(i,:);%Eq.(4)
R=L.*c;%Eq.(2)
A=2*log(1/rand)*theta;% Eq.(15)
if A>1
K=[1:i-1 i+1:nPop];
RandInd=K(randi([1 nPop-1]));
newPopPos=PopPos(RandInd,:)+R.*( PopPos(i,:)-PopPos(RandInd,:))...
+round(0.5*(0.05+rand))*randn;%Eq.(1)
else
Direct2(i,ceil(rand*Dim))=1;
gr=Direct2(i,:);%Eq.(12)
H=((MaxIt-It+1)/MaxIt)*randn; %Eq.(8)
b=PopPos(i,:)+H*gr.*PopPos(i,:);%Eq.(13)
newPopPos=PopPos(i,:)+ R.*(rand*b-PopPos(i,:));%Eq.(11)
end
newPopPos=SpaceBound(newPopPos,Up,Low);
newPopFit=EngFunctions(newPopPos,F_index);
if newPopFit<PopFit(i)
PopFit(i)=newPopFit;
PopPos(i,:)=newPopPos;
end
end
for i=1:nPop
if PopFit(i)<BestF
BestF=PopFit(i);
BestX=PopPos(i,:);
end
end
HisBestF(It)=BestF;
end
测试结果如下: