一、灰狼算法简介

1 前言:

灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注,它己被成功地应用到了车间调度、参数优化、图像分类等领域中。


2 算法原理:

灰狼隶属于群居生活的犬科动物,且处于食物链的顶层。灰狼严格遵守着一个社会支配等级关系。如图:

【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab

社会等级第一层:狼群中的头狼记为 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼主要负责对捕食、栖息、作息时间等活动作出决策。由于其它的狼需要服从【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼的命令,所以 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼也被称为支配狼。另外, 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼不一定是狼群中最强的狼,但就管理能力方面来说, 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼一定是最好的。

社会等级第二层【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08 狼,它服从于 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼,并协助 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼作出决策。在 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼去世或衰老后,【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08 狼将成为 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼的最候选者。虽然 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08 狼服从 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02 狼,但 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08 狼可支配其它社会层级上的狼。

社会等级第三层【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 狼,它服从 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08 狼,同时支配剩余层级的狼。【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 狼一般由幼狼、哨兵狼、狩猎狼、老年狼及护理狼组成。

社会等级第四层【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_21 狼,它通常需要服从其它社会层次上的狼。虽然看上去 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_21 狼在狼群中的作用不大,但是如果没有 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_21 狼的存在,狼群会出现内部问题如自相残杀。

GWO 优化过程包含了灰狼的社会等级分层跟踪包围***猎物等步骤,其步骤具体情况如下所示。

1)社会等级分层(Social Hierarchy)当设计 GWO 时,首先需构建灰狼社会等级层次模型。计算种群每个个体的适应度,将狼群中适应度最好的三匹灰狼依次标记为 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 ,而剩下的灰狼标记为 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_21。也就是说,灰狼群体中的社会等级从高往低排列依次为; 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_21。GWO 的优化过程主要由每代种群中的最好三个解(即 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 )来指导完成。

2)包围猎物( Encircling Prey )灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:

【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_35

式中:t 为当前迭代次数:。表示 hadamard 乘积操作;A 和 C 是协同系数向量;Xp 表示猎物的位置向量; X(t) 表示当前灰狼的位置向量;在整个迭代过程中 a 由2 线性降到 0; r1 和 r2 是 [0,1] 中的随机向量。

3)狩猎( Hunring)

灰狼具有识别潜在猎物(最优解)位置的能力,搜索过程主要靠 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 灰狼的指引来完成。但是很多问题的解空间特征是未知的,灰狼是无法确定猎物(最优解)的精确位置。为了模拟灰狼(候选解)的搜索行为,假设 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 具有较强识别潜在猎物位置的能力。因此,在每次迭代过程中,保留当前种群中的最好三只灰狼( 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 ),然后根据它们的位置信息来更新其它搜索代理(包括 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_21)的位置。该行为的数学模型可表示如下:

【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_46

式中:【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_47【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_48【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_49 分别表示当前种群中 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 的位置向量;X表示灰狼的位置向量;【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_53【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_54【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_55 分别表示当前候选灰狼与最优三条狼之间的距离;当|A|>1时,灰狼之间尽量分散在各区域并搜寻猎物。当|A|<1时,灰狼将集中捜索某个或某些区域的猎物。

【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_56

从图中可看出,候选解的位置最终落在被 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 定义的随机圆位置内。总的来说, 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 需首先预测出猎物(潜 在最优解)的大致位置,然后其它候选狼在当前最优兰只狼的指引下在猎物附近随机地更新它们的位置。

4)***猎物(Attacking Prey)构建***猎物模型的过程中,根据2)中的公式,a值的减少会引起 A 的值也随之波动。换句话说,A 是一个在区间[-a,a](备注:原作者的第一篇论文里这里是[-2a,2a],后面论文里纠正为[-a,a])上的随机向量,其中a在迭代过程中呈线性下降。当 A 在[-1,1]区间上时,则捜索代理(Search Agent)的下一时刻位置可以在当前灰狼与猎物之间的任何位置上。

5)寻找猎物(Search for Prey)灰狼主要依赖 【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_02【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_08【优化求解】基于非线性收敛方式的灰狼优化算法matlab源码_matlab_17 的信息来寻找猎物。它们开始分散地去搜索猎物位置信息,然后集中起来***猎物。对于分散模型的建立,通过|A|>1使其捜索代理远离猎物,这种搜索方式使 GWO 能进行全局搜索。GWO 算法中的另一个搜索系数是C。从2)中的公式可知,C向量是在区间范围[0,2]上的随机值构成的向量,此系数为猎物提供了随机权重,以便増加(|C|>1)或减少(|C|<1)。这有助于 GWO 在优化过程中展示出随机搜索行为,以避免算法陷入局部最优。值得注意的是,C并不是线性下降的,C在迭代过程中是随机值,该系数有利于算法跳出局部,特别是算法在迭代的后期显得尤为重要。

二、改进非线性收敛方式的灰狼优化算法

 针对灰狼优化算法在求解复杂优化问题时过早收敛和易陷入局部最优的缺点, 提出一种改进型灰狼优化算法(CGWO)用于求解无约束优化问题.算法首先利用引入混沌映射策略的反向学习方法初始种群个体, 为算法全局寻优奠定基础; 从平衡全局和局部搜索能力角度考虑, 对收敛因子的递减形式提出了改进型非线性函数形式; 为避免算法陷入局部最优, 对当前最优灰狼个体位置进行Cauchy变异操作.给出了改进的具体实现步骤, 对8个标准测试函数进行仿真实验, 实验结果表明, 改进灰狼优化算法具有更好的求解精度和稳定性.

三、部分代码

% Grey Wolf Optimizer
function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems

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

Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems

%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%TRANSFORM HERE BY EQ1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Convergence_curve=zeros(1,Max_iter);


l=0;% Loop counter


%%%%%%%%%%%%%%%%%%%%%%%%%%%%EVALUAGE J HERE F?RST FOR ALL X? EQ2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Main loop STEP 3
while l<Max_iter
    for i=1:size(Positions,1)  
        
       % Return back the search agents that go beyond the boundaries of the search space
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               
        
        % Calculate objective function for each search agent
        fitness=fobj(Positions(i,:));
        
        % Update Alpha, Beta, and Delta
        if fitness<Alpha_score 
            Alpha_score=fitness; % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score 
            Beta_score=fitness; % Update beta
            Beta_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score 
            Delta_score=fitness; % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0

    % Update the Position of search agents including omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                       
            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 (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%EVALUAGE J HERE F?RST FOR ALL X? EQ2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    l=l+1;    
    Convergence_curve(l)=Alpha_score;
end



  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.

四、仿真结果

系数k kk的取值影响非线性收敛因子a aa,进而影响改进算法的性能。通过改变非线性调节系数k = { 1 , 1.25 , 1.5 , 1.75 , 2 }五组不同取值进行数值实验,从稳定性方面分析调节系数k对CGWO算法性能的影响。
参数设置:种群规模N = 70,最大迭代次数t m a x = 500,独立运行30次。以F3为例。
k = 1 时的最大值、最小值、平均值及标准差为:

k=1
CGWO:最大值: 1.9788e-12,最小值:1.0312e-15,平均值:1.4892e-13,标准差:3.7775e-13
  • 1.
  • 2.

k = 1.25 时的最大值、最小值、平均值及标准差为:

k=1.25
CGWO:最大值: 1.4261e-13,最小值:4.1941e-18,平均值:1.4483e-14,标准差:2.9773e-14
  • 1.
  • 2.

k = 1.5 时的最大值、最小值、平均值及标准差为:

k=1.5
CGWO:最大值: 3.3684e-14,最小值:2.5503e-17,平均值:7.4339e-15,标准差:1.0077e-14
  • 1.
  • 2.

k = 1.75 时的最大值、最小值、平均值及标准差为:

k=1.75
CGWO:最大值: 6.2523e-14,最小值:1.157e-17,平均值:6.7363e-15,标准差:1.3215e-14
  • 1.
  • 2.

k = 2 时的最大值、最小值、平均值及标准差为:

k=2
CGWO:最大值: 7.2156e-14,最小值:3.1809e-17,平均值:4.5632e-15,标准差:1.2155e-14
  • 1.
  • 2.

综合分析,k = 2时性能最佳

五、参考文献及代码私信博主

[1] 谈发明, 赵俊杰, 王琪. 一种改进非线性收敛方式的灰狼优化算法研究[J]. 微电子学与计算机, 2019, 36(5): 89-95.