小言_互联网的博客

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

372人阅读  评论(0)

目录

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代码实现

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


转载:https://blog.csdn.net/weixin_61181717/article/details/128097257
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场