灰狼(GWO)算法(附完整Matlab代码,可直接复制)

灰狼算法模拟了自然界灰狼的领导层级和狩猎制度:其具有金字塔般的等级制度。

灰狼(GWO)算法(附完整Matlab代码,可直接复制)_第1张图片

第一层:\alpha层狼群。负责带领整个狼群狩猎猎物,即优化算法中的最优解。

第二层:\beta层狼群。负责协助\alpha狼群,即优化算法中的次优解。

第三层:\delta层狼群。听从\alpha\beta的命令和决策,负责侦查、放哨等。适应度差的 \alpha\beta会降为\delta

第四层:\omega层狼群。追随上面三层狼群行动。

 灰狼的狩猎过程包含如下:①跟踪、接近猎物②包围、追捕猎物③攻击猎物

一、包围猎物

在狩猎过程中,灰狼围捕猎物的行为为:

\overrightarrow{D}=\left | \overrightarrow{C}*\overrightarrow{X_{p}} (t)-\overrightarrow{X(t)}\right | ......(1)

\overrightarrow{X}(t+1)=\overrightarrow{X_{p}}(t)-\overrightarrow{A}\overrightarrow{D}......(2)

(1)式为灰狼和猎物之间的距离,\overrightarrow{X_{p}}\overrightarrow{X}分别是猎物的位置和灰狼的位置,t为迭代次数。\overrightarrow{A}\overrightarrow{C}为确定的系数,其计算公式分别为:

\overrightarrow{A}=2a*r_{1}-a......(3)

\overrightarrow{C}=2r_{2}......(4)

a是收敛因子,随着迭代次数,从2线性减小到0,r1和r2为随机数。

二、狩猎

\omega灰狼个体跟踪\alpha层狼群、 \beta层狼群、\delta层狼群的数学模型描述如下:

\vec{D_{\alpha }}=\left | \vec{C_{1}}*\vec{X_{\alpha}} -\vec{X} \right |

\vec{D_{\beta }}=\left | \vec{C_{2}}*\vec{X_\beta} -\vec{X} \right |

\vec{D_{\sigma }}=\left | \vec{C_{3}}*\vec{X_\sigma }-\vec{X} \right |

\vec{D_{\alpha }} \vec{D_{\beta }} \vec{D_{\sigma }}分别表示\omega灰狼个体距离  \alpha层狼群、 \beta层狼群、\delta层狼群的距离。

 \vec{X_{1 }}=\left | \vec{X_{\alpha}}-A_{1}*\vec{D_{\alpha }} \right |

\vec{X_{2 }}=\left | \vec{X_{\beta }}-A_{2}*\vec{D_{\beta }} \right |

\vec{X_{3 }}=\left | \vec{X_{\sigma }}-A_{3}*\vec{D_{\sigma }} \right |

X1、X2、X3分别表示受 \alpha层狼群、 \beta层狼群、\delta层狼群影响, \omega灰狼个体需要调整的位置。

这里取平均值,即:

\vec{X}(t+1)=\frac{\vec{X_{1}}+\vec{X_{2}}+\vec{X_{3}}}{3}

GWO灰狼算法的Matlab代码如下:



%pop——种群数量
%dim——问题维度
%ub——变量上界,[1,dim]矩阵
%lb——变量下界,[1,dim]矩阵
%fobj——适应度函数(指针)
%MaxIter——最大迭代次数
%Best_Pos——x的最佳值
%Best_Score——最优适应度值
clc;
clear all;
close all;
pop=50;
dim=2;
ub=[10,10];
lb=[-10,-10];
MaxIter=100;
fobj=@(x)fitness(x);%设置适应度函数
[Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter);
%…………………………………………绘图…………………………………………
figure(1);
plot(IterCurve,'r-','linewidth',2);
grid on;
title('灰狼迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
%…………………………………… 结果显示……………………………………
disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数:',num2str(Best_Score)]);


%种群初始化函数
function x=initialization(pop,ub,lb,dim)
for i=1:pop
    for j=1:dim
        x(i,j)=(ub(j)-lb(j))*rand()+lb(j);
    end
end
end
%狼群越界调整函数
function x=BoundrayCheck(x,ub,lb,dim)
for i=1:size(x,1)
    for j=1:dim
        if x(i,j)>ub(j)
            x(i,j)=ub(j);
        end
        if x(i,j)Alpha_Score&&Fitness(i)Alpha_Score&&Fitness(i)>Beta_Score&&Fitness(i)

相关阅读:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)

你可能感兴趣的:(Matlab,算法,matlab,开发语言)