天天看點

大猩猩優化算法(Matlab代碼實作)

💥💥💥💞💞💞歡迎來到本部落格❤️❤️❤️💥💥💥

🏆部落客優勢:🌞🌞🌞部落格内容盡量做到思維缜密,邏輯清晰,為了友善讀者。

⛳️座右銘:行百裡者,半于九十。

目錄

​​💥1 概述​​

​​📚2 運作結果​​

​​🎉3 參考文獻​​

​​🌈4 Matlab代碼實作​​

💥1 概述

元啟發式在解決優化問題方面發揮着關鍵作用,其中大多數都受到自然界中自然生物集體智慧的啟發。本文提出了一種新的元啟發式算法,其靈感來自自然界大猩猩部隊的社會智能,稱為人工大猩猩部隊優化器(GTO)。在這個算法中,大猩猩的集體生活被數學公式化,并設計了新的機制來進行探索和開發。為了評估 GTO,我們将其應用于 52 個标準基準函數和 7 個工程問題。弗裡德曼檢驗和威爾科克森秩和統計檢驗将所提出的方法與幾種現有的元啟發式方法進行了統計比較。結果表明,GTO在大多數基準函數上的表現優于比較算法,特别是在高維問題上。結果表明,與其他元啟發式方法相比,GTO可以提供更好的結果。

大猩猩優化算法(Matlab代碼實作)

📚2 運作結果

大猩猩優化算法(Matlab代碼實作)
部分代碼:
 function [Silverback_Score,Silverback,convergence_curve]=GTO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj)
 % initialize Silverback
 Silverback=[];
 Silverback_Score=inf;%Initialize the first random population of Gorilla
 X=initialization(pop_size,variables_no,upper_bound,lower_bound); convergence_curve=zeros(max_iter,1);
for i=1:pop_size   
     Pop_Fit(i)=fobj(X(i,:));%#ok
     if Pop_Fit(i)<Silverback_Score 
             Silverback_Score=Pop_Fit(i); 
             Silverback=X(i,:);
     end
 end GX=X(:,:);
 lb=ones(1,variables_no).*lower_bound; 
 ub=ones(1,variables_no).*upper_bound; %%  Controlling parameter
p=0.03;
 Beta=3;
 w=0.8;%%Main loop
 for It=1:max_iter 
     
     a=(cos(2*rand)+1)*(1-It/max_iter);
     C=a*(2*rand-1); %% Exploration:
    for i=1:pop_size
         if rand<p    
             GX(i,:) =(ub-lb)*rand+lb;
         else  
             if rand>=0.5
                 Z = unifrnd(-a,a,1,variables_no);
                 H=Z.*X(i,:);   
                 GX(i,:)=(rand-a)*X(randi([1,pop_size]),:)+C.*H; 
             else   
                 GX(i,:)=X(i,:)-C.*(C*(X(i,:)- GX(randi([1,pop_size]),:))+rand*(X(i,:)-GX(randi([1,pop_size]),:))); %ok ok             end
         end
     end       
        
     GX = boundaryCheck(GX, lower_bound, upper_bound);
     
     % Group formation operation 
     for i=1:pop_size
          New_Fit= fobj(GX(i,:));          
          if New_Fit<Pop_Fit(i)
             Pop_Fit(i)=New_Fit;
             X(i,:)=GX(i,:);
          end
          if New_Fit<Silverback_Score 
             Silverback_Score=New_Fit; 
             Silverback=GX(i,:);
          end
     end
     
 %% Exploitation:  
     for i=1:pop_size
        if a>=w  
             g=2^C;
             delta= (abs(mean(GX)).^g).^(1/g);
             GX(i,:)=C*delta.*(X(i,:)-Silverback)+X(i,:); 
        else
            
            if rand>=0.5
               h=randn(1,variables_no);
            else
               h=randn(1,1);
            end
            r1=rand; 
            GX(i,:)= Silverback-(Silverback*(2*r1-1)-X(i,:)*(2*r1-1)).*(Beta*h); 
            
        end
     end
    
     GX = boundaryCheck(GX, lower_bound, upper_bound);
     
     % Group formation operation    
     for i=1:pop_size
          New_Fit= fobj(GX(i,:));
          if New_Fit<Pop_Fit(i)
             Pop_Fit(i)=New_Fit;
             X(i,:)=GX(i,:);
          end
          if New_Fit<Silverback_Score 
             Silverback_Score=New_Fit; 
             Silverback=GX(i,:);
          end
     end
              
 convergence_curve(It)=Silverback_Score;
 fprintf("In Iteration %d, best estimation of the global optimum is %4.4f \n ", It,Silverback_Score );
          
 end      

🎉3 參考文獻

​​🌈​​4 Matlab代碼實作

繼續閱讀