深圳幻海软件技术有限公司 欢迎您!

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

2023-05-18

尊重他人劳动成果,请勿转载!有问题可留言或私信,看到了都会回复解答!其他算法请参考:1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125730562?spm=1001.2014.30

尊重他人劳动成果,请勿转载!

有问题可留言或私信,看到了都会回复解答!

其他算法请参考:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125730562?spm=1001.2014.3001.5502

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125826933?spm=1001.2014.3001.5502

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/115359297?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22115359297%22%2C%22source%22%3A%22xinzhi1992%22%7D

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/126761617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126761617%22%2C%22source%22%3A%22xinzhi1992%22%7D5、果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/127649424

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

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

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

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

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

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

一、包围猎物

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

(1)式为灰狼和猎物之间的距离,分别是猎物的位置和灰狼的位置,t为迭代次数。为确定的系数,其计算公式分别为:

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

二、狩猎

灰狼个体跟踪层狼群、 层狼群、层狼群的数学模型描述如下:

分别表示灰狼个体距离  层狼群、 层狼群、层狼群的距离。

 

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

这里取平均值,即:

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

  1. %pop——种群数量
  2. %dim——问题维度
  3. %ub——变量上界,[1,dim]矩阵
  4. %lb——变量下界,[1,dim]矩阵
  5. %fobj——适应度函数(指针)
  6. %MaxIter——最大迭代次数
  7. %Best_Pos——x的最佳值
  8. %Best_Score——最优适应度值
  9. clc;
  10. clear all;
  11. close all;
  12. pop=50;
  13. dim=2;
  14. ub=[10,10];
  15. lb=[-10,-10];
  16. MaxIter=100;
  17. fobj=@(x)fitness(x);%设置适应度函数
  18. [Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter);
  19. %…………………………………………绘图…………………………………………
  20. figure(1);
  21. plot(IterCurve,'r-','linewidth',2);
  22. grid on;
  23. title('灰狼迭代曲线');
  24. xlabel('迭代次数');
  25. ylabel('适应度值');
  26. %…………………………………… 结果显示……………………………………
  27. disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
  28. disp(['最优解对应的函数:',num2str(Best_Score)]);
  29. %种群初始化函数
  30. function x=initialization(pop,ub,lb,dim)
  31. for i=1:pop
  32. for j=1:dim
  33. x(i,j)=(ub(j)-lb(j))*rand()+lb(j);
  34. end
  35. end
  36. end
  37. %狼群越界调整函数
  38. function x=BoundrayCheck(x,ub,lb,dim)
  39. for i=1:size(x,1)
  40. for j=1:dim
  41. if x(i,j)>ub(j)
  42. x(i,j)=ub(j);
  43. end
  44. if x(i,j)<lb(j)
  45. x(i,j)=lb(j);
  46. end
  47. end
  48. end
  49. end
  50. %适应度函数,可根据自身需要调整
  51. function [Fitness]=fitness(x)
  52. Fitness=sum(x.^2);
  53. end
  54. %…………………………………………灰狼算法主体………………………………………
  55. function [Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter)
  56. Alpha_Pos=zeros(1,dim);%初始化Alpha狼群
  57. Alpha_Score=inf;
  58. Beta_Pos=zeros(1,dim);%初始化Beta狼群
  59. Beta_Score=inf;
  60. Delta_Pos=zeros(1,dim);%初始化化Delta狼群
  61. Delta_Score=inf;
  62. x=initialization(pop,ub,lb,dim);%初始化种群
  63. Fitness=zeros(1,pop);%初始化适应度函数
  64. for i=1:pop
  65. Fitness(i)=fobj(x(i,:));
  66. end
  67. [SortFitness,IndexSort]=sort(Fitness);
  68. Alpha_Pos=x(IndexSort(1),:);
  69. Alpha_Score=SortFitness(1);
  70. Beta_Pos=x(IndexSort(2),:);
  71. Beta_Score=SortFitness(2);
  72. Delta_Pos=x(IndexSort(3),:);
  73. Delta_Score=SortFitness(3);
  74. Group_Best_Pos=Alpha_Pos;
  75. Group_Best_Score=Alpha_Score;
  76. for t=1:MaxIter
  77. a=2-t*((2)/MaxIter);%线性调整a的值
  78. for i=1:pop
  79. for j=1:dim
  80. %根据Alpha狼群更新位置X1
  81. r1=rand;
  82. r2=rand;
  83. A1=2*a*r1-a;%计算A1
  84. C1=2*r2;%计算C1
  85. D_Alpha=abs(C1*Alpha_Pos(j)-x(i,j));%计算种群中其它狼只与Alpha狼群的距离
  86. X1=Alpha_Pos(j)-A1*D_Alpha;%更新X1
  87. %根据Beta狼群更新位置X2
  88. r1=rand;
  89. r2=rand;
  90. A2=2*a*r1-a;%计算A2
  91. C2=2*r2;%计算C2
  92. D_Beta=abs(C2*Beta_Pos(j)-x(i,j));%计算种群中其它狼只与Beta狼群的距离
  93. X2=Beta_Pos(j)-A2*D_Beta;%更新X2
  94. %根据Delta狼群更新位置X3
  95. r1=rand;
  96. r2=rand;
  97. A3=2*a*r1-a;
  98. C3=2*r2;
  99. D_Delta=abs(C3*Delta_Pos(j)-x(i,j));%计算种群中其它狼只与BDelta狼群的距离
  100. X3=Delta_Pos(j)-A3*D_Delta;%更新X3
  101. x(i,j)=(X1+X2+X3)/3;%更新后的狼只位置
  102. end
  103. end
  104. x=BoundrayCheck(x,ub,lb,dim);%狼只越界调整
  105. for i=1:pop
  106. Fitness(i)=fobj(x(i,:));
  107. if Fitness(i)<Alpha_Score%替换Aplha狼
  108. Alpha_Score=Fitness(i);
  109. Alpha_Pos=x(i,:);
  110. end
  111. if Fitness(i)>Alpha_Score&&Fitness(i)<Beta_Score%替换Beta狼
  112. Beta_Score=Fitness(i);
  113. Beta_Pos=x(i,:);
  114. end
  115. if Fitness(i)>Alpha_Score&&Fitness(i)>Beta_Score&&Fitness(i)<Delta_Score%替换Delta狼
  116. Delta_Score=Fitness(i);
  117. Delta_Pos=x(i,:);
  118. end
  119. end
  120. Group_Best_Pos=Alpha_Pos;
  121. Group_Best_Score=Alpha_Score;
  122. IterCurve(t)=Group_Best_Score;
  123. end
  124. Best_Pos=Group_Best_Pos;
  125. Best_Score=Group_Best_Score;
  126. end

相关阅读:

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

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

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

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览46513 人正在系统学习中