天天看點

【優化算法】鹈鹕優化算法(POA)(Matlab代碼實作)

💥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 參考文獻

​​🌈​​4 Matlab代碼及文章詳細講解

繼續閱讀