Bootstrap

改进的灰狼算法(IGWO)优化BP神经网络原理及Matlab代码复现

目录

0 引言

1 数学模型

2 模型性能

3 Matlab代码

3.1 伪代码

3.2 IGWO主函数

3.3 IGWO-BP

0 引言

改进的灰狼算法(improved grey wolf optimizer,IGWO)是Mohammad H. Nadimi-Shahraki等人在2021年基于GWO算法多样性差而提出改进智能算法。IGWO算法受益于一种新的运动策略,即基于维度学习的狩猎(DLH)搜索策略,它继承了自然界中狼的个体狩猎行为。DLH使用一种不同的方法为每只狼构建一个邻域,其中相邻的信息可以在狼之间共享,增强了局部搜索和全局搜索之间的平衡,并保持了多样性。

1 数学模型

IGWO是在GWO基础上引入维度学习的狩猎(DLH)搜索策略来提高算法多样性,同时与邻居狼群进行信息共享,提高局部开发性能,其数学模型如下:

1)初始化种群:重新定义灰狼种群位置。

式中i为种群数目,j为问题维度,uj,lj为问题维度边界。

2)定义DLH距离半径:通过欧氏距离半径来计算随机种群和GWO候选解距离,其数学模型如下:

3)定义DLH邻居位置:通过DLH距离差距定义灰狼邻居位置,其数学模型如下:

4)DLH灰狼位置更新:在DLH运动策略搜索下,灰狼位置更新如下:

5)选择和更新阶段:比较DLH运动策略灰狼适应度和α狼适应度,选出最佳参与下一迭代算法搜索。其数学模型如下:

式中f为适应度函数。

2 模型性能

IGWO-BP和GWO-BP的回归模型预测:数据来源UCI数据集

精度指标:

寻优指标:

3 Matlab代码

3.1 伪代码

3.2 IGWO主函数

% 主循环
while l<Max_iteration %white(t<最大迭代次数)    
    % 跟新ω狼寻找猎物
    for i=1:size(Positions,1)    
     %% IGWO部分
     %约束条件(边界)
        X_GWO(i,:) = boundConstraint(X_GWO(i,:),Positions(i,:),lu);
        Fit_GWO(i) = SYD(X_GWO(i,:),net);
        net.trainParam.showWindow = 0;       % 关闭训练窗口
    end
    %
    radius = pdist2(Positions,X_GWO,'euclidean'); %Eq(10)
    dist_Position = squareform(pdist(Positions));
    r1 = randperm(SearchAgents_no,SearchAgents_no);
    
    l=l+1;
    Convergence_curve(l)=Alpha_score;
  
    % 维度学习(DLH)的策略
   for t = 1:SearchAgents_no
        neighbor(t,:) = (dist_Position(t,:)<=radius(t,t));%Eq(11)
        [~,idx] = find(neighbor(t,:)==1);
        random_idx_neighbor = randi(size(idx,2),1,dim);
    %Eq(12)
        for d = 1:dim
            X_DLH(t,d) = Positions(t,d) + rand.*Positions(idx(random_idx_neighbor(d)),d)- Positions(r1(t),d);
        end
        X_DLH(t,:) = boundConstraint (X_DLH(t,:),Positions(t,:),lu);
        Fit_DLH(t) = SYD(X_DLH(t,:),net);
        net.trainParam.showWindow = 0;       % 关闭训练窗口
    end
    
    % 选择更新阶段Eq(13)
    tmp = Fit_GWO < Fit_DLH;
    tmp_rep = repmat(tmp',1,dim);

    tmpFit = tmp .* Fit_GWO + (1-tmp).*Fit_DLH;
    tmpPositions = tmp_rep .* X_GWO + (1-tmp_rep) .*X_DLH;

    tmp = pBestScore <= tmpFit;
    tmp_rep = repmat (tmp',1,dim);

    pBestScore = tmp .*pBestScore + (1-tmp) .* tmpFit;
    pBest = tmp_rep .* pBest + (1-tmp_rep) .* tmpPositions;
     
    Fit = pBestScore;
    Positions = pBest;

end

3.3 IGWO-BP

单输出回归、多输出回归模型、分类模型、时间序列模型代码复现:改进的灰狼算法(IGWO)Matlab代码复现-CSDN博客

;