💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
目录
💥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