💥💥💥💞💞💞歡迎來到本部落格❤️❤️❤️💥💥💥
🏆部落客優勢:🌞🌞🌞部落格内容盡量做到思維缜密,邏輯清晰,為了友善讀者。
⛳️座右銘:行百裡者,半于九十。
目錄
💥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