• 灰狼优化算法(Matlab完整代码实现)


     

    在电力系统中有很多应用,下面还有一篇稍微比较牛的:

     

    目录

    1 灰狼优化算法基本思想

    2 灰狼捕食猎物过程

    2.1 社会等级分层

    2.2 包围猎物

    2.3 狩猎

    2.4 攻击猎物

    2.5 寻找猎物

    3 实现步骤及程序框图

    3.1 步骤

    3.2 程序框图

    4 Matlab代码实现

    4.1 展现

    4.2 Matlab完整代码 

     

    1 灰狼优化算法基本思想

     

    灰狼优化算法是一种群智能优化算法,它的独特之处在于一小部拥有绝对话语权的灰狼带领一群灰狼向猎物前进。在了解灰狼优化算法的特点之前,我们有必要了解灰狼群中的等级制度

                                         

    灰狼群一般分为4个等级:处于第一等级的灰狼用α表示,处于第二阶级的灰狼用β表示,处于第三阶段的灰狼用δ表示,处于第四等级的灰狼用ω表示。按照上述等级的划分,灰狼α对灰狼β、δ和ω有绝对的支配权;灰狼ω对灰狼δ和ω有绝对的支配权;灰狼δ对灰狼ω有绝对的支配权

    2 灰狼捕食猎物过程

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

    2.1 社会等级分层

    当设计 GWO 时,首先需构建灰狼社会等级层次模型。计算种群每个个体的适应度,将狼群中适应度最好的三匹灰狼依次标记为 \alpha\beta\delta而剩下的灰狼标记为\omega 。也就是说,灰狼群体中的社会等级从高往低排列依次为\alpha\beta\delta\omega。GWO 的优化过程主要由每代种群中的最好三个解(即  \alpha\beta\delta)来指导完成。

    2.2 包围猎物

    灰狼群体通过以下几个公式逐渐接近并包围猎物:

                                

    式中,t是当前的迭代代数,A和C是系数向量,Xp和X分别是猎物的位置向量和灰狼的位置向量。A和C的计算公式如下:  
                                   

    式中,a是收敛因子,随着迭代次数从2线性减小到0,r1和r 2服从[ 0,1]之间的均匀分布。

    2.3 狩猎

    狼群中其他灰狼个体Xi根据α、β和百的位置Xa、XB和Xo来更新各自的位置:

                                       

    式中,Da,Dβ和D6分别表示a,β和5与其他个体间的距离;Xa,Xβ和X6分别代表a,β和5的当前位置;C1,C2,C3是随机向量,X是当前灰狼的位置。
    灰狼个体的位置更新公式如下:

                                     

    2.4 攻击猎物

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

    2.5 寻找猎物

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

    3 实现步骤及程序框图

    3.1 步骤

    Step1:种群初始化:包括种群数量N,最大迭代次数Maxlter,调控参数a,A,C.Step2:根据变量的上下界来随机初始化灰狼个体的位置X。
    Step3:计算每一头狼的适应度值,并将种群中适应度值最优的狼的位置信息保存X_{\alpha },将种群中适应度值次优的狼的位置信息保存为X_{\beta },将种群中适应度第三优的灰狼的位置信息保存为X_{\gamma }
    Step4:更新灰狼个体X的位置。
    step5:更新参数a,A和C。
    Step6:计算每一头灰狼的适应度值,并更新三匹头狼的最优位置。
    Step7:判断是否到达最大迭代次数Maxlter,若满足则算法停止并返回Xa的值作为最终得到的最优解,否则转到Step4。

    3.2 程序框图

    4 Matlab代码实现

    4.1 展现

    F10:

    1. % F10
    2. function o = F10(x)
    3. dim=size(x,2);
    4. o=-20*exp(-.2*sqrt(sum(x.^2)/dim))-exp(sum(cos(2*pi.*x))/dim)+20+exp(1);
    5. end

    F20 

    1. % F20
    2. function o = F20(x)
    3. aH=[10 3 17 3.5 1.7 8;.05 10 17 .1 8 14;3 3.5 1.7 10 17 8;17 8 .05 10 .1 14];
    4. cH=[1 1.2 3 3.2];
    5. pH=[.1312 .1696 .5569 .0124 .8283 .5886;.2329 .4135 .8307 .3736 .1004 .9991;...
    6. .2348 .1415 .3522 .2883 .3047 .6650;.4047 .8828 .8732 .5743 .1091 .0381];
    7. o=0;
    8. for i=1:4
    9. o=o-cH(i)*exp(-(sum(aH(i,:).*((x-pH(i,:)).^2))));
    10. end
    11. end

    F23 

    1. % F23
    2. function o = F23(x)
    3. aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3

    4.2 Matlab完整代码 

    1. %==========灰狼优化算法=========
    2. %========欢迎关注公众号:电力系统与算法之美=====
    3. %========回复关键字:灰狼算法,即可获取全部代码===
    4. %========目标函数============
    5. function [lb,ub,dim,fobj] = Get_Functions_details(F)
    6. switch F
    7. case 'F1'
    8. fobj = @F1;
    9. lb=-100;
    10. ub=100;
    11. dim=30;
    12. case 'F2'
    13. fobj = @F2;
    14. lb=-10;
    15. ub=10;
    16. dim=30;
    17. case 'F3'
    18. fobj = @F3;
    19. lb=-100;
    20. ub=100;
    21. dim=30;
    22. case 'F4'
    23. fobj = @F4;
    24. lb=-100;
    25. ub=100;
    26. dim=30;
    27. case 'F5'
    28. fobj = @F5;
    29. lb=-30;
    30. ub=30;
    31. dim=30;
    32. case 'F6'
    33. fobj = @F6;
    34. lb=-100;
    35. ub=100;
    36. dim=30;
    37. case 'F7'
    38. fobj = @F7;
    39. lb=-1.28;
    40. ub=1.28;
    41. dim=30;
    42. case 'F8'
    43. fobj = @F8;
    44. lb=-500;
    45. ub=500;
    46. dim=30;
    47. case 'F9'
    48. fobj = @F9;
    49. lb=-5.12;
    50. ub=5.12;
    51. dim=30;
    52. case 'F10'
    53. fobj = @F10;
    54. lb=-32;
    55. ub=32;
    56. dim=30;
    57. case 'F11'
    58. fobj = @F11;
    59. lb=-600;
    60. ub=600;
    61. dim=30;
    62. case 'F12'
    63. fobj = @F12;
    64. lb=-50;
    65. ub=50;
    66. dim=30;
    67. case 'F13'
    68. fobj = @F13;
    69. lb=-50;
    70. ub=50;
    71. dim=30;
    72. case 'F14'
    73. fobj = @F14;
    74. lb=-65.536;
    75. ub=65.536;
    76. dim=2;
    77. case 'F15'
    78. fobj = @F15;
    79. lb=-5;
    80. ub=5;
    81. dim=4;
    82. case 'F16'
    83. fobj = @F16;
    84. lb=-5;
    85. ub=5;
    86. dim=2;
    87. case 'F17'
    88. fobj = @F17;
    89. lb=[-5,0];
    90. ub=[10,15];
    91. dim=2;
    92. case 'F18'
    93. fobj = @F18;
    94. lb=-2;
    95. ub=2;
    96. dim=2;
    97. case 'F19'
    98. fobj = @F19;
    99. lb=0;
    100. ub=1;
    101. dim=3;
    102. case 'F20'
    103. fobj = @F20;
    104. lb=0;
    105. ub=1;
    106. dim=6;
    107. case 'F21'
    108. fobj = @F21;
    109. lb=0;
    110. ub=10;
    111. dim=4;
    112. case 'F22'
    113. fobj = @F22;
    114. lb=0;
    115. ub=10;
    116. dim=4;
    117. case 'F23'
    118. fobj = @F23;
    119. lb=0;
    120. ub=10;
    121. dim=4;
    122. end
    123. end
    124. % F1
    125. function o = F1(x)
    126. o=sum(x.^2);
    127. end
    128. % F2
    129. function o = F2(x)
    130. o=sum(abs(x))+prod(abs(x));
    131. end
    132. % F3
    133. function o = F3(x)
    134. dim=size(x,2);
    135. o=0;
    136. for i=1:dim
    137. o=o+sum(x(1:i))^2;
    138. end
    139. end
    140. % F4
    141. function o = F4(x)
    142. o=max(abs(x));
    143. end
    144. % F5
    145. function o = F5(x)
    146. dim=size(x,2);
    147. o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
    148. end
    149. % F6
    150. function o = F6(x)
    151. o=sum(abs((x+.5)).^2);
    152. end
    153. % F7
    154. function o = F7(x)
    155. dim=size(x,2);
    156. o=sum([1:dim].*(x.^4))+rand;
    157. end
    158. % F8
    159. function o = F8(x)
    160. o=sum(-x.*sin(sqrt(abs(x))));
    161. end
    162. % F9
    163. function o = F9(x)
    164. dim=size(x,2);
    165. o=sum(x.^2-10*cos(2*pi.*x))+10*dim;
    166. end
    167. % F10
    168. function o = F10(x)
    169. dim=size(x,2);
    170. o=-20*exp(-.2*sqrt(sum(x.^2)/dim))-exp(sum(cos(2*pi.*x))/dim)+20+exp(1);
    171. end
    172. % F11
    173. function o = F11(x)
    174. dim=size(x,2);
    175. o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;
    176. end
    177. % F12
    178. function o = F12(x)
    179. dim=size(x,2);
    180. o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...
    181. (1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));
    182. end
    183. % F13
    184. function o = F13(x)
    185. dim=size(x,2);
    186. o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...
    187. ((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));
    188. end
    189. % F14
    190. function o = F14(x)
    191. aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
    192. -32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];
    193. for j=1:25
    194. bS(j)=sum((x'-aS(:,j)).^6);
    195. end
    196. o=(1/500+sum(1./([1:25]+bS))).^(-1);
    197. end
    198. % F15
    199. function o = F15(x)
    200. aK=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
    201. bK=[.25 .5 1 2 4 6 8 10 12 14 16];bK=1./bK;
    202. o=sum((aK-((x(1).*(bK.^2+x(2).*bK))./(bK.^2+x(3).*bK+x(4)))).^2);
    203. end
    204. % F16
    205. function o = F16(x)
    206. o=4*(x(1)^2)-2.1*(x(1)^4)+(x(1)^6)/3+x(1)*x(2)-4*(x(2)^2)+4*(x(2)^4);
    207. end
    208. % F17
    209. function o = F17(x)
    210. o=(x(2)-(x(1)^2)*5.1/(4*(pi^2))+5/pi*x(1)-6)^2+10*(1-1/(8*pi))*cos(x(1))+10;
    211. end
    212. % F18
    213. function o = F18(x)
    214. o=(1+(x(1)+x(2)+1)^2*(19-14*x(1)+3*(x(1)^2)-14*x(2)+6*x(1)*x(2)+3*x(2)^2))*...
    215. (30+(2*x(1)-3*x(2))^2*(18-32*x(1)+12*(x(1)^2)+48*x(2)-36*x(1)*x(2)+27*(x(2)^2)));
    216. end
    217. % F19
    218. function o = F19(x)
    219. aH=[3 10 30;.1 10 35;3 10 30;.1 10 35];cH=[1 1.2 3 3.2];
    220. pH=[.3689 .117 .2673;.4699 .4387 .747;.1091 .8732 .5547;.03815 .5743 .8828];
    221. o=0;
    222. for i=1:4
    223. o=o-cH(i)*exp(-(sum(aH(i,:).*((x-pH(i,:)).^2))));
    224. end
    225. end
    226. % F20
    227. function o = F20(x)
    228. aH=[10 3 17 3.5 1.7 8;.05 10 17 .1 8 14;3 3.5 1.7 10 17 8;17 8 .05 10 .1 14];
    229. cH=[1 1.2 3 3.2];
    230. pH=[.1312 .1696 .5569 .0124 .8283 .5886;.2329 .4135 .8307 .3736 .1004 .9991;...
    231. .2348 .1415 .3522 .2883 .3047 .6650;.4047 .8828 .8732 .5743 .1091 .0381];
    232. o=0;
    233. for i=1:4
    234. o=o-cH(i)*exp(-(sum(aH(i,:).*((x-pH(i,:)).^2))));
    235. end
    236. end
    237. % F21
    238. function o = F21(x)
    239. aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
    240. cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];
    241. o=0;
    242. for i=1:5
    243. o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
    244. end
    245. end
    246. % F22
    247. function o = F22(x)
    248. aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
    249. cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];
    250. o=0;
    251. for i=1:7
    252. o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
    253. end
    254. end
    255. % F23
    256. function o = F23(x)
    257. aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
    258. cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];
    259. o=0;
    260. for i=1:10
    261. o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
    262. end
    263. end
    264. function o=Ufun(x,a,k,m)
    265. o=k.*((x-a).^m).*(x>a)+k.*((-x-a).^m).*(x<(-a));
    266. end

  • 相关阅读:
    大学生简单个人静态HTML网页设计作品 HTML+CSS制作我的家乡杭州 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业
    Web自动化---解决登录页面随机验证码问题
    【C++修炼之路】6. 内存管理
    浏览器:重绘(repaint)与回流/重排(reflow)
    C语言-二分查找
    IDEA断点调试
    多层神经网络和激活函数
    流媒体技术基础-摄像头接口与标准
    GitLab项目组相关操作(创建项目组Group、创建项目组的项目、为项目添加成员并赋予权限)
    python删除创建的conda虚拟环境
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/125393835