贪婪的非分层灰狼优化算法(G-NHGWO)(Matlab代码实现)

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

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

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

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

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

狼优化(GWO)算法是基于灰狼社会等级及其狩猎与合作策略的新兴算法。该算法于2014年推出,已被大量研究人员和设计师使用,因此原始论文的引用次数超过了许多其他算法。在Niu等人最近的一项研究中,介绍了这种算法优化现实世界问题的主要缺点之一。总之,他们表明,随着问题的最佳解决方案从0发散,GWO的性能会下降。

在贪婪非分层灰狼优化器(G-NHGWO)中,通过对原始GWO算法进行直接修改,即忽略其社会等级,我们能够在很大程度上消除这一缺陷,并为该算法的未来使用开辟了新的视角。通过将所提方法应用于基准和实际工程问题,验证了该方法的效率。

文章下载链接:

http://dx.doi.org/10.1049/ell2.12176

📚2 运行结果

 

部分代码:

clc
clear

global NFE
NFE=0;

nPop=30;    % Number of search agents (Population Number)
MaxIt=1000; % Maximum number of iterations
nVar=30;    % Number of Optimization Variables

Total_Runs=25;

% Pre-allocating vectors and matrices
Cost_Rsult=nan(1,Total_Runs);
Rsult=nan(Total_Runs,MaxIt);
Mean=nan(1,14);
Best=Mean;
Std=Mean;
nfe=Mean;
fitness1=nan(1,nPop);

for nFun=1:14
    NFE=0;
    CostFunction=@(x,nFun) Cost(x,nFun);        % Cost Function
    for run_no=1:Total_Runs
        
        %% Problem Definition
        
        VarMin=-100;             % Decision Variables Lower Bound
        if nFun==7
            VarMin=-600;             % Decision Variables Lower Bound
        end
        if nFun==8
            VarMin=-32;             % Decision Variables Lower Bound
        end
        if nFun==9
            VarMin=-5;             % Decision Variables Lower Bound
        end
        if nFun==10
            VarMin=-5;             % Decision Variables Lower Bound
        end
        if nFun==11
            VarMin=-0.5;             % Decision Variables Lower Bound
        end
        if nFun==12
            VarMin=-pi;             % Decision Variables Lower Bound
        end
        if nFun==14
            VarMin=-100;             % Decision Variables Lower Bound
        end
        VarMax= -VarMin;             % Decision Variables Upper Bound
        if nFun==13
            VarMin=-3;             % Decision Variables Lower Bound
            VarMax= 1;             % Decision Variables Upper Bound
        end
        
        %%   Grey Wold Optimizer (GWO)

        % Initialize Best Solution (Alpha) which will be used for archiving
        Alpha_pos=zeros(1,nVar);
        Alpha_score=inf;
                
        % Initialize the positions of search agents
        Positions=rand(nPop,nVar).*(VarMax-VarMin)+VarMin;
        Positions1=rand(nPop,nVar).*(VarMax-VarMin)+VarMin;
        BestCosts=zeros(1,MaxIt);

        fitness(1:nPop)=inf;

        iter=0;  % Loop counter
        
        %% Main loop
        while iter<MaxIt
            for i=1:nPop
                
                % Return back the search agents that go beyond the boundaries of the search space
                Flag4ub=Positions1(i,:)>VarMax;
                Flag4lb=Positions1(i,:)<VarMin;
                Positions1(i,:)=(Positions1(i,:).*(~(Flag4ub+Flag4lb)))+VarMax.*Flag4ub+VarMin.*Flag4lb;
                
                % Calculate objective function for each search agent
                fitness1(i)= CostFunction(Positions1(i,:), nFun);
                
                %  Grey Wolves
                if fitness1(i)<fitness(i)
                    Positions(i,:)=Positions1(i,:);
                    fitness(i) =fitness1(i) ;
                end
                
                % Update Best Solution (Alpha) for archiving
                if fitness(i)<Alpha_score
                    Alpha_score=fitness(i);
                    Alpha_pos=Positions(i,:);
                end
                
            end
            
            a=2-(iter*((2)/MaxIt));  % a decreases linearly fron 2 to 0
            
            % Update the Position of all search agents
            for i=1:nPop
                for j=1:nVar
                    
                    GGG=randperm(nPop-1,3);
                    ind1= GGG>=i;
                    GGG(ind1)=GGG(ind1)+1;
                    m1=GGG(1);
                    m2=GGG(2);
                    m3=GGG(3);
                    
                    r1=rand;
                    r2=rand;
                    
                    A1=2*a*r1-a;
                    C1=2*r2;
                    
                    D_alpha=abs(C1*Positions(m1,j)-Positions(i,j));
                    X1=Positions(m1,j)-A1*D_alpha;
                    
                    r1=rand;
                    r2=rand;
                    
                    A2=2*a*r1-a;
                    C2=2*r2;
                    
                    D_beta=abs(C2*Positions(m2,j)-Positions(i,j));
                    X2=Positions(m2,j)-A2*D_beta;
                    
                    r1=rand;
                    r2=rand;
                    
                    A3=2*a*r1-a;
                    C3=2*r2;
                    
                    D_delta=abs(C3*Positions(m3,j)-Positions(i,j));
                    X3=Positions(m3,j)-A3*D_delta;
                    Positions1(i,j)=(X1+X2+X3)/3;
                    
                end
            end
            
            iter=iter+1;
            BestCosts(iter)=Alpha_score;
            
            fprintf('Func No= %-2.0f,  Run No= %-2.0f,  Iter= %g, Best Cost = %g\n',nFun,run_no,iter,Alpha_score);
            
        end
        
        %%% Results
        
        Cost_Rsult(1, run_no)=Alpha_score;
        Rsult(run_no,:)= BestCosts;
    end
    
    Mean(nFun)=mean(Cost_Rsult);
    Best(nFun)=min(Cost_Rsult);
    Std(nFun)=std(Cost_Rsult);
    nfe(nFun)=NFE;

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Ebrahim Akbari (2022). Greedy Non‐Hierarchical Grey Wolf Optimizer (G-NHGWO) 

[2]Akbari, Ebrahim, et al. “A Greedy Non-Hierarchical Grey Wolf Optimizer for Real-World Optimization.” Electronics Letters, Institution of Engineering and Technology (IET), Apr. 2021, doi:10.1049/ell2.12176.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
灰狼优化算法(Grey Wolf Optimizer,GWO)是一种基于灰狼群体行为的启发式优化算法,常用于求解复杂问题。其中特征选择是一种常见的任务,可以用于从原始数据中选择出最具信息量的特征,以提高分类器的性能。 以下是用MATLAB实现灰狼优化算法特征选择的代码示例: ```matlab % 灰狼优化算法特征选择的MATLAB代码实现 % 设置灰狼优化算法的参数 MaxIterations = 100; % 最大迭代次数 SearchAgentsNo = 10; % 狼群规模 % 初始化灰狼群的位置(特征的二进制编码) dim = size(data, 2); % 特征的维度数 Positions = repmat(randi([0,1], 1, dim), SearchAgentsNo, 1); % 随机生成初始位置 % 初始化狼群的目标函数值 Fitness = zeros(SearchAgentsNo, 1); % 目标函数值 % 计算所有狼的目标函数值 for i=1:SearchAgentsNo Fitness(i) = ObjectiveFunction(data(:, Positions(i,:)), labels); % ObjectiveFunction为评价函数 end % 寻找最好的狼(最小目标函数值对应的狼) [~, index] = min(Fitness); Alpha = Positions(index, :); % Alpha为最好的狼 % 主循环 for iter=1:MaxIterations a = 2 - iter * ((2) / (MaxIterations)); % 更新参数a % 更新所有狼的位置 for i=1:SearchAgentsNo for j=1:dim r1 = rand(); % 随机数 r2 = rand(); % 随机数 A1 = 2 * a * r1 - a; % A1参数 C1 = 2 * r2; % C1参数 DAlpha = abs(C1 * Alpha(j) - Positions(i, j)); X1 = Alpha(j) - A1 * DAlpha; % 更新位置1 r1 = rand(); % 随机数 r2 = rand(); % 随机数 A2 = 2 * a * r1 - a; % A2参数 C2 = 2 * r2; % C2参数 DBest = abs(C2 * Positions(i, j) - Positions(i, j)); X2 = Positions(i, j) - A2 * DBest; % 更新位置2 r1 = rand(); % 随机数 r2 = rand(); % 随机数 A3 = 2 * a * r1 - a; % A3参数 C3 = 2 * r2; % C3参数 DAlpha = abs(C3 * Alpha(j) - Positions(i, j)); X3 = Alpha(j) - A3 * DAlpha; % 更新位置3 Positions(i, j) = (X1 + X2 + X3) / 3; % 位置更新为三个位置的平均值 end end % 边界约束 Positions = max(Positions, 0); % 将位置中小于0的值设为0 Positions = min(Positions, 1); % 将位置中大于1的值设为1 % 更新所有狼的目标函数值 for i=1:SearchAgentsNo Fitness(i) = ObjectiveFunction(data(:, Positions(i,:)), labels); end % 更新最好的狼 [~, index] = min(Fitness); Alpha = Positions(index, :); % 输出每次迭代后的结果 disp(['Iteration ', num2str(iter), ': Best f(x) = ', num2str(min(Fitness))]); end % 选出最佳特征组合 BestFeatures = Alpha; % 输出最佳特征组合 disp('Best feature combination:'); disp(BestFeatures); ``` 以上代码是个简化版本的灰狼优化算法特征选择的MATLAB实现。其中根据需要,可能需要根据具体问题进行一些参数调整或修改。同时,ObjectiveFunction函数需要自己根据具体问题实现,用于评估每个特征组合的性能。 希望以上代码示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值