• 粒子群算法和鲸鱼算法的比较(Matlab代码实现)


    目录

    1 粒子群优化算法

    2 鲸鱼优化算法 

    3 粒子群算法和鲸鱼算法比较 

    4 Matlab代码实现


    1 粒子群优化算法

    粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
      PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

          粒子群算法思想来源于实际生活中鸟捕食的过程。假设在一个n维的空间中,有一群鸟(m只)在捕食,食物位于n维空间的某个点上,对于第i只鸟某一时刻来说,有两个向量描述,一个是鸟的位置向量,第二个是鸟的速度。假设鸟能够判断一个位置的好坏,所谓“好坏”,就是离食物更近了还是更远了。鸟在捕食的过程中会根据自己的经验以及鸟群中的其他鸟的位置决定自己的速度,根据当前的位置和速度,可以得到下一刻的位置,这样每只鸟通过向自己和鸟群学习不断的更新自己的速度位置,最终找到食物,或者离食物足够近的点。

         粒子群是比较经典的有自适应过程的算法,类似的有蝙蝠算法、布谷鸟算法、蜂群算法等,某个粒子的移动会参考历史最优和当前最优,可以通过设置c1、c2表示两者的重要程度,每个粒子移动的速度也是不一样的,速度也会收到w的影响,以上三者共同决定粒子下一步到达的位置。
     

    我这篇文章有详细总结:

    2 鲸鱼优化算法 

    鲸鱼优化算法(WOA)是澳大利亚学者Mirjaili等于2016年提出的群体智能优化算法,根据座头鲸的捕猎行为实现优化搜索的目的。其中,每个鲸鱼可以看作一个粒子,每个粒子作为不同的决策变量。WOA的实现过程主要包括包围猎物、螺旋狩猎和随机搜索3个阶段。

    我这篇文章有详细总结:

      

    3 粒子群算法和鲸鱼算法比较 

    这里只展示两个函数空间:

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

    4 Matlab代码实现

    博客主页:@橘柑橙柠桔柚

  • 相关阅读:
    设计模式中Monoid/Foldables
    Springboot楼盘在线销售平台7txdy计算机毕业设计-课程设计-期末作业-毕设程序代做
    systemverilog学习 --- 代码重用
    RepGhost实战:使用RepGhost实现图像分类任务(一)
    前端 单元测试介绍 - 以及在项目中使用 (史上最全)
    探索网络爬虫技术:原理、实践与挑战
    多级分类(树形结构)数据解决方案
    go 语言 mage 安装踩坑
    互联网摸鱼日报(2024-06-26)
    免杀Backdoor-factory
  • 原文地址:https://blog.csdn.net/weixin_61181717/article/details/128097257