【优化算法】鹈鹕优化算法(POA)(Matlab代码实现)

时间:2022-11-06 20:55:54

????1 概述

【优化算法】鹈鹕优化算法(POA)(Matlab代码实现)

      鹈鹕体型大,有一个长嘴,喉咙里有一个大袋子,用来捕捉和吞食猎物。这种鸟喜欢群体和社交生活,成群生活在几百只鹈鹕中[25]。鹈鹕的外形如下:它们的体重约为2.75至15千克,高度约为1.06至1.83米,翼展约为0.5至3米[26]。鹈鹕的食物主要是鱼,很少是青蛙、海龟和甲壳类动物;如果它很饿,它甚至会吃海鲜[27]。鹈鹕经常一起打猎。鹈鹕在确定猎物的位置后,从10–20米的高度俯冲猎物。当然,有些物种也会在较低的高度俯瞰猎物。然后,它们在水面上展开翅膀,迫使鱼进入浅水区,这样它们就能很容易地捕捉到鱼。在捕鱼时,大量的水进入鹈鹕的喙,在吞下鱼之前,它会向前移动头部,以去除多余的水分[28]

鹈鹕在狩猎时的行为和策略是一个聪明的过程,使这些鸟成为熟练的猎人。拟议POA设计的主要灵感来源于上述策略的建模。

????2 运行结果

【优化算法】鹈鹕优化算法(POA)(Matlab代码实现)

部分代码:

for t=1:Max_iterations
%% update the best condidate solution
[best , location]=min(fit);
if t==1
Xbest=X(location,:); % Optimal location
fbest=best; % The optimization objective function
elseif best<fbest
fbest=best;
Xbest=X(location,:);
end

%% UPDATE location of food

X_FOOD=[];
k=randperm(SearchAgents,1);
X_FOOD=X(k,:);
F_FOOD=fit(k);

%%
for i=1:SearchAgents

%% PHASE 1: Moving towards prey (exploration phase)
I=round(1+rand(1,1));
if fit(i)> F_FOOD
X_new=X(i,:)+ rand(1,1).*(X_FOOD-I.* X(i,:)); %Eq(4)
else
X_new=X(i,:)+ rand(1,1).*(X(i,:)-1.*X_FOOD); %Eq(4)
end
X_new= max(X_new,lowerbound);X_new = min(X_new,upperbound);

% Updating X_i using (5)
f_new = fitness(X_new);
if f_new <= fit (i)
X(i,:) = X_new;
fit (i)=f_new;
end
%% END PHASE 1: Moving towards prey (exploration phase)

%% PHASE 2: Winging on the water surface (exploitation phase)
X_new=X(i,:)+0.2*(1-t/Max_iterations).*(2*rand(1,dimension)-1).*X(i,:);% Eq(6)
X_new= max(X_new,lowerbound);X_new = min(X_new,upperbound);

% Updating X_i using (7)
f_new = fitness(X_new);
if f_new <= fit (i)
X(i,:) = X_new;
fit (i)=f_new;
end
%% END PHASE 2: Winging on the water surface (exploitation phase)
end best_so_far(t)=fbest;
average(t) = mean (fit);

end
Best_score=fbest;
Best_pos=Xbest;
POA_curve=best_so_far;
end

 

????3 参考文献

【优化算法】鹈鹕优化算法(POA)(Matlab代码实现)

​????​​4 Matlab代码及文章详细讲解