高斯变异黑寡妇算法,MATLAB代码免费获取

高斯变异黑寡妇优化算法(Black widow optimization with a gaussian mutation algorithm,BWOG)是一种受自然启发的群智能优化算法,这是一种新的黑寡妇优化,将其与高斯变异算法(BWOG)相结合,通过在BWO中加入一个额外的阶段,强大的高斯变异和随机分配的解决方案,提高了蜘蛛的多样性。该算法在对象检测、视频监视、医学成像、机器视觉、图像处理等领域都具有优越的效果。

黑寡妇优化(BWO)算法通过对独特的黑寡妇蜘蛛交配行为进行数学建模而引入。该算法与标准的优化算法进行了测试,发现优于所有上级。通过对BWO算法的详细研究,揭示了该算法的两个缺点:收敛速度慢,容易陷入局部最优。为了处理这些问题,我们将高斯变异方法与BWO的交换变异技术和使用Levy飞行的随机分配步骤相结合,使其能够逃离局部极小值并更快地接近最优解。这种改进的BWO导致我们提出了一个新的黑寡妇优化与高斯变异(BWOG)算法。

现有的黑寡妇优化(BWO)算法模拟了黑寡妇蜘蛛独特的交配过程及其生活方式。黑寡妇主要在夜间活动,雌性黑寡妇白天躲藏起来,晚上织网。BWO算法的数学建模包括种群初始化、繁殖、自食和变异四个阶段。 针对提出的具有高斯变异的黑寡妇优化算法(BWOG),通过引入高斯变异策略来增强搜索技巧。

48f7e153bb116dc85c8133f29c8669b2.png

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、结果展示

482ba1c0abd458622125a85b37c40ed3.png 9b6a7a29213cc838c481b6b883cf136e.png 1cd59aa59533d15d79c5b3e579bc16f5.png 79590495307beed3be6a0efea441c754.png 20fbe0d43f827d143f115b07fd58c956.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值