天天看點

黑寡婦(BWO)優化算法(Matlab代碼實作)

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

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

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

目錄

​​💥1 概述​​

​​📚2 運作結果​​

​​🎉3 參考文獻​​

​​🌈4 Matlab代碼實作及詳細文章​​

💥1 概述

自然啟發的優化算法由于其簡單和靈活,可以解決不同的工程和科學問題。不需要對優化問題進行結構修改,就可以對其應用元啟發式算法。最近,元啟發式算法正成為解決NP問題的有力方法。在本文中,作者提出了一種适用于連續非線性優化問題的新的元啟發式算法。所提出的黑寡婦優化算法(BWO)的靈感來自于黑寡婦蜘蛛獨特的交配行為。這種方法包括一個排他性階段,即食人。由于這個階段,适合度不合适的物種被從圓圈中省略,進而導緻早期收斂。BWO算法在51個不同的基準函數上進行了評估,以驗證其在獲得問題最優解方面的效率。所得結果表明,與其他算法相比,該算法在早期收斂和獲得最佳适應值等不同方面具有許多優點。此外,它有能力提供有競争力和有前景的結果。該研究還采用BWO算法解決了三個不同的具有挑戰性的工程設計問題。實際案例研究問題的結果證明了所提出的算法在解決具有未知和挑戰性空間的現實問題中的有效性。

📚2 運作結果

function [BestCostBw,BestRepBWO,BestOfAllBwo,meanBwo,medianBwo,WorstBwo,StdBwo]=BWOA(N,MaxIter,lb,ub,dim,func,RepNo)
BestRepBWO=zeros(RepNo,1);
for rep=1:RepNo
 nPop=N;
 nvar=dim;
 %% Settings the inputs   
 pc=0.8;                                 % Percent of Crossover 
 nCross=round(pc*nPop/2)*2;              % Number of selected Parents
 % pMutation=1-pc;                         % Percent of Mutation
 pMutation=0.4;
 nMutation=round(pMutation*nPop);        % Number of MutantspCannibalism=0.5;
 nCannibalism=round(pCannibalism*nvar);%% Initialization
individual.Position=[];
 individual.Cost=[];pop=repmat(individual,nPop,1);
% Generating the initial population
 for i=1:nPop    
     pop(i).Position=initializationBW(dim,ub,lb);
     pop(i).Cost=func(pop(i).Position); 
 end% Sorting the Population
 Costs=[pop.Cost];
 [Costs SortOrder]=sort(Costs);
 pop=pop(SortOrder);
 WorstCost=Costs(end);
 BestCost=Costs(1);
 % The outputs storage
 BestSol=[]; 
 BestCostBw=zeros(MaxIter,1); %% Main Loop
for it=1:MaxIter
     
         
     % Crossover Operator- Generating the Pop2 population
     crosspop=repmat(individual,nCross,1);
     crosspop=BwCrossover(crosspop,pop,nvar,nCross,nPop,nCannibalism,func);
        
     % Mutation- Generating the Pop3 population
     pop3=repmat(individual,nMutation,1);
     randnum=randperm(nCross);
     for k=1:nMutation
        i=randnum(k);     
         q=Mutate(pop(i));
         q.Cost=func(q.Position);
        pop3(k)=q;
     end
     
     % Unify the Populations (pop, pop2, pop3)
     [pop]=[crosspop
         pop3];
          
     
     % Sorting the Population based on fitness value
     Costs=[pop.Cost];
     [Costs SortOrder]=sort(Costs);
     pop=pop(SortOrder);
     WorstCost=max(WorstCost,Costs(end));
     
     % deleting the extra Individuals
     pop=pop(1:nPop);
     Costs=Costs(1:nPop);
     
     % Savingt the Results
     BestSol=pop(1);
     BestCostBw(it)=Costs(1);
    
 disp(['Iteration ' num2str(it) ':   ' ...
          'Best Cost Bw = ' num2str(BestCostBw(it))]);end
 BestRepBWO(rep)=BestCostBw(end);
 end
 medianBwo=median(BestRepBWO);
 meanBwo=mean(BestRepBWO);
 BestOfAllBwo=min(BestRepBWO);
 WorstBwo=max(BestRepBWO);
 StdBwo=std(BestRepBWO);
 disp([ 'The Best Bwo = ' num2str(BestOfAllBwo)])
 disp([ 'Mean Bwo = ' num2str(meanBwo)])
 disp([ 'Median Bwo = ' num2str(medianBwo)])
 disp([ 'Worst Bwo = ' num2str(WorstBwo)])
 disp([ 'Std Bwo = ' num2str(StdBwo)])
 end      

🎉3 參考文獻

​​🌈​​4 Matlab代碼實作及詳細文章​

繼續閱讀