高斯变异黑寡妇优化算法(Black widow optimization with a gaussian mutation algorithm,BWOG)是一种受自然启发的群智能优化算法,这是一种新的黑寡妇优化,将其与高斯变异算法(BWOG)相结合,通过在BWO中加入一个额外的阶段,强大的高斯变异和随机分配的解决方案,提高了蜘蛛的多样性。该算法在对象检测、视频监视、医学成像、机器视觉、图像处理等领域都具有优越的效果。
黑寡妇优化(BWO)算法通过对独特的黑寡妇蜘蛛交配行为进行数学建模而引入。该算法与标准的优化算法进行了测试,发现优于所有上级。通过对BWO算法的详细研究,揭示了该算法的两个缺点:收敛速度慢,容易陷入局部最优。为了处理这些问题,我们将高斯变异方法与BWO的交换变异技术和使用Levy飞行的随机分配步骤相结合,使其能够逃离局部极小值并更快地接近最优解。这种改进的BWO导致我们提出了一个新的黑寡妇优化与高斯变异(BWOG)算法。
现有的黑寡妇优化(BWO)算法模拟了黑寡妇蜘蛛独特的交配过程及其生活方式。黑寡妇主要在夜间活动,雌性黑寡妇白天躲藏起来,晚上织网。BWO算法的数学建模包括种群初始化、繁殖、自食和变异四个阶段。 针对提出的具有高斯变异的黑寡妇优化算法(BWOG),通过引入高斯变异策略来增强搜索技巧。
1、算法原理
(1)种群初始化:
BWO中,待求解问题的一个解是一只黑寡妇蜘蛛,可以将黑寡妇蜘蛛视为一个一维数组:
其中,Nvar是优化的维度,初始化时,每个维度的值都是随机的浮点数。每只黑寡妇都有适应度,使用适应度函数计算黑寡妇的适应度:
(2)生殖
生殖阶段是全局搜索阶段。首先,根据适应度大小对种群排序,基于生殖率(procreating rate,PP)计算种群中参与生殖的黑寡妇,然后从中随机选择一对父母(雌雄黑寡妇)进行交配繁殖。在自然界中,每对黑寡妇都在自己的蜘蛛网上进行繁殖,与其他的黑寡妇是分开的,每次大约生成1000枚卵,但只有适应度较优的小蜘蛛能存活下来。在黑寡妇算法中,每对父母借助α数组模拟生殖过程:
其中,x1和x2为父母,y1和y,2是后代。这个过程要重复Nvar/2次。
(3)高斯突变:
为了产生一个新的后代,它将从高斯分布中随机抽取的一个随机值加到单个解向量的每个分量上。这个高斯随机变量控制多少中断被添加到父向量,这有助于算法摆脱局部最优。对于每个父解向量,在第m代高斯变异产生的后代被描述为
其中μ和σ表示高斯分布所需的均值和标准差。一个均值为0,标准差为1的高斯随机变量,用符号Norm(0,1)表示在本文中,取平均数μ为1,每个解向量的标准差由公式计算:
其中f(Xj)是种群中的解的第j个的适应值函数,fmin是当前种群的NP解向量之间的最小适应值。高斯随机变量在公式中的贡献。(11)取决于标准差σs,而标准差σs在整个更新人口矩阵的过程中保持人口的多样性。
BWOG的繁殖和同类相食阶段与BWO相同,而在突变阶段,后代是通过交换突变或高斯突变以等概率以随机方式产生的,如下所示:
其中rand表示在[0,1]之间均匀生成的随机数,其中Xj是通过高斯突变向量Xjgm或交换突变向量Xjsm生成的解向量。
(4)随机分配:
在突变阶段结束时,先生成一组随机解,形成新的种群矩阵PM4。新的随机解包含在交叉和变异的输出中,然后生成新的种群进行下一次迭代。本文中随机解的个数与随机产生率Gr有关,本文取Gr为0.1.
其中Levy分布有利于更有效的空间探索。Lb和ub表示搜索空间中每个变量的下界和上界,NGR=NxGr。指数B是一个常数,位于[0,2]范围内,本文取其为1.5。Levy飞行帮助算法提出新的候选解决方案,远离当前的最佳解决方案,提供所需的人口多样性。
2、结果展示
3.MATLAB核心代码
function [BestFitness,BestLocation,BestCostBw]=BWOG(nPop,MaxIter,lb,ub,nvar,func)
%% 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 Mutants
pCannibalism=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=lb+rand(1,nvar).*(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);
for it=1:MaxIter
% Crossover Operator- Generating the Pop2 population
crosspop=repmat(individual,nCross,1);
individual.Position=[];
individual.Cost=[];
a=repmat(individual,nvar,1);
indexno=randperm(nCross);
for k=1:2:nCross
%% parents' choosing
r1=indexno(k);
r2=indexno(k+1);
p1=pop(r1);
p2=pop(r2);
%% sexual Cannibalism
if pop(r1).Cost < pop(r2).Cost
a(1) = pop(r1);
else
a(1) = pop(r2);
end
%% Reproduction
for i=1:2:nvar
x1=p1.Position;
x2=p2.Position;
alpha=rand(size(x1));
y1=alpha.*x1+(1-alpha).*x2;
y2=alpha.*x2+(1-alpha).*x1;
a(i+1).Position=y1;
a(i+2).Position=y2;
a(i+1).Cost=func(a(i+1).Position);
a(i+2).Cost=func(a(i+2).Position);
end
Costs=[a.Cost];
[value order]=sort(Costs);
a=a(order);
%% Sibling Cannibalism
if nvar>2
for l=0:nCannibalism
crosspop(k+l)=a(l+1);
end
elseif nvar==2
for l=0:nCannibalism+1
crosspop(k+l)=a(l+1);
end
elseif nvar==1
for l=0:nCannibalism+2
crosspop(k+l)=a(l+1);
end
end
end
% Mutation- Generating the Pop3 population
pop3=repmat(individual,nMutation,1);
randnum=randperm(nCross);
for k=1:nMutation
i=randnum(k);
if rand>0.5
x=pop(i).Position;
x=x*(1+randn(1,1));
q.Position=x;
else
x=pop(i).Position;
nvar=numel(x);
randrand=randperm(nvar);
j1=randrand(1);
j2=randrand(2);
n1j=x(j1);
n2j=x(j2);
x(j1)=n2j;
x(j2)=n1j;
q.Position=x;
end
q.Cost=func(q.Position);
pop3(k)=q;
end
Z=round(nPop*0.1);
pop4=repmat(individual,Z,1);
for i=1:Z
pop4(i).Position=lb+levyoriginal(1,nvar,1.5)*(ub-lb);
pop4(i).Cost=func(pop4(i).Position);
end
% Unify the Populations (pop, pop2, pop3)
[pop]=[crosspop; pop3; pop4];
% 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);
end
BestCostBw=BestCostBw';
BestFitness=BestSol.Cost;
BestLocation=BestSol.Position;
参考文献:
[1] Jena B, Naik M K, Panda R. A novel Kaniadakis entropy-based multilevel thresholding using energy curve and Black Widow optimization algorithm with Gaussian mutation[C]//2023 International Conference in Advances in Power, Signal, and Information Technology (APSIT). IEEE, 2023: 86-91.
[2] Vahideh Hayyolalam, Ali Asghar Pourhaji Kazem. Black Widow Optimization Algorithm: A novel meta-heuristic approach for solving engineering optimization problems[J]. Engineering Applications of Artificial Intelligence, 2020, 87: 103249.
完整代码获取方式:后台回复关键字:
TGDM866