【改进优化算法】混合二进制灰狼裸鼹鼠算法HbGNMR(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

提出了一种新的混合二进制变体灰狼优化器(GWO)和裸鼹鼠算法(NMRA)的算法,称为HbGNMR,旨在克服基本NMRA的探索不足和局部最优停滞问题,以及GWO的开发不足。HbGNMR将GWO的全局搜索策略融入到工作阶段中以增强探索能力,并在繁殖阶段添加了基于模拟退火惯性权重的交配因子,以改善开发能力。此外,分析了两个家族的十四个新的时变二进制传输函数:七个S形函数和七个V形函数。在这些传输函数中,$TV_{V5}$ 被确定为最有效的,能够将解从连续搜索空间转换为二进制搜索空间,并在探索和开发阶段之间保持平衡。

📚2 运行结果

部分代码:

%_____________________________________________________________________________________%
% Hybrid Binary Grey Wolf Naked Mole Rat Algorithm (HbGNMR) source code with TVTF     %
%            By "Gurdeep Singh" Dated: 28-08-2022                                     %
%_____________________________________________________________________________________%
function [binbest,Alpha_pos,Alpha_score,bb]=HbGNMR(Lb,Ub,n,maxiter,BTF,CostFunction,d)

rand('state',sum(100*clock));
bp=0.05;              % breeding parameter
breeders=round(n/5);  % breeder population
iter=1;
bb(1:iter)=inf;
NMRfitness(1:n)=inf;
Alpha_pos=zeros(1,d);
Alpha_score=inf; %change this to -inf for maximization problems

Beta_pos=zeros(1,d);
Beta_score=inf; %change this to -inf for maximization problems

Delta_pos=zeros(1,d);
Delta_score=inf; %change this to -inf for maximization problems
% Population Initialization
for i=1:n,
    NMRsolution(i,:)=Lb+(Ub-Lb).*rand(1,d);
    binsol(i,:)=randi([0 1],1,d);
    NMRfitness(i)=CostFunction(binsol(i,:));
end
% Find the current NMRbest
[~,I]=min(NMRfitness);
% NMRbest=NMRsolution(I,:);
binbest=binsol(I,:);
H=NMRsolution;

while (iter<=maxiter) % Loop over worker and breeders
    %For workers
    for i=(breeders+1):n,

            Flag4Ub=H(i,:)>Ub;
            Flag4Lb=H(i,:)<Lb;
            H(i,:)=(H(i,:).*(~(Flag4Ub+Flag4Lb)))+Ub.*Flag4Ub+Lb.*Flag4Lb;

    % ############ Binary Conversion using Sigmoidal TF ############           
        Snew=BTF_selection(H(i,:),binsol(i,:),iter,maxiter,BTF,d);

        % Evaluate new NMRsolutions
        Fnew=CostFunction(Snew);

        % Update Alpha, Beta, and Delta
        if Fnew<Alpha_score
            Alpha_score=Fnew; % Update alpha
            Alpha_pos=H(i,:);
            NMRfitness(i)=Fnew;
            NMRsolution(i,:)=H(i,:);
            binsol(i,:)=Snew;
        end

        if Fnew>Alpha_score && Fnew<Beta_score
            Beta_score=Fnew; % Update beta
            Beta_pos=H(i,:);
        end

        if Fnew>Alpha_score && Fnew>Beta_score && Fnew<Delta_score
            Delta_score=Fnew; % Update delta
            Delta_pos=H(i,:);
        end
    end
            
    a=2-iter*((2)/maxiter); % a decreases linearly fron 2 to 0
    for i=(breeders+1):n,
        for j=1:d,
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            A1=2*a*r1-a; % Equation (7)
            C1=2*r2;     % Equation (8)
            D_alpha=abs(C1*Alpha_pos(j)-NMRsolution(i,j)); % Equation (10)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (13)-part 1
                r1=rand();
                r2=rand();
                A2=2*a*r1-a; % Equation (7)
                C2=2*r2;     % Equation (8)
                D_beta=abs(C2*Beta_pos(j)-NMRsolution(i,j)); % Equation (11)-part 2
                X2=Beta_pos(j)-A2*D_beta; % Equation (13)-part 2  
            r1=rand();
            r2=rand();             
            A3=2*a*r1-a; % Equation (7)
            C3=2*r2;     % Equation (8)            
            D_delta=abs(C3*Delta_pos(j)-NMRsolution(i,j)); % Equation (12)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (13)-part 3             

            H(i,:)=(X1+X2+X3)/3;% Equation (14)
        end           
    end    
             
    %For Breeders
    for z=1:breeders;
        if rand>bp,
            Flag4Ub=H(z,:)>Ub;
            Flag4Lb=H(z,:)<Lb;
            H(z,:)=(H(z,:).*(~(Flag4Ub+Flag4Lb)))+Ub.*Flag4Ub+Lb.*Flag4Lb;
    % ############ Binary Conversion using Sigmoidal TF ############
            Snew=BTF_selection(H(z,:),binsol(z,:),iter,maxiter,BTF,d);                 
          
            % Evaluate new NMRsolutions
            Fnew=CostFunction(Snew);
            
            % If NMRfitness improves (better NMRsolutions found), update then
            if (Fnew<=Alpha_score),
                Alpha_score=Fnew;
                Alpha_pos=H(z,:);
                NMRfitness(z)=Fnew;
                NMRsolution(z,:)=H(z,:);
                binsol(z,:)=Snew;            
            end

%             lambda=rand;
            NMRneighbours=randperm(breeders);
 % weight-6 **** Simulated Annealing Inertia weight *******
            v_min=0.5;%0.25;
            v_max=0.9; k=rand; p=0.95;
            lambda=v_min+((v_max-v_min)*p^(k-1));
            
            H(z,:)=(1-lambda).*(H(z,:))+(lambda*(Alpha_pos-NMRsolution(NMRneighbours(1),:)));
        end        
    end

    [fmin,I]=min(NMRfitness);
%     NMRbest=NMRsolution(I,:);
    binbest=binsol(I,:);    
    
    bb(iter)=fmin;
    iter=iter+1;
end
end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码实现

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值