前言
人工鱼群算法最初是由李晓磊在他的博士毕业论文《一种新型的智能优化方法-人工鱼群算法》提出的,所以我去看了这篇论文,这篇论文总共95面,我没有全部看完,看了第二章基本的人工鱼群算法,结合公众号文章干货 | 人工鱼群算法 超详细解析附JAVA代码的讲解来学习的。
一、基本思想
在一片水域中,鱼生存的数目最多的地方一般就是本水域中富含营养物质最多的地方,依据这一特点来模仿鱼群的觅食、聚群及追尾等行为,从而实现全局寻优,这就是鱼群算法的基本思想。
二、算法流程
人工鱼群算法最重要的三个行为分别是:觅食、聚群和追尾,下面分别详细介绍这三个行为(以寻找函数的最大值为例)。
1. 觅食(Prey)
在鱼的视野范围内,随机选择一个方向移动,如果移动后的状态对应目标函数的值比移动之前大,那么选择该方向移动;否则,继续随机选择一个方向移动直到达到最大尝试次数。如果达到最大尝试次数还没选择到一个更好的方向移动,这时随机移动一步。
2. 聚群(Swarm)
寻找鱼 x i x_i xi视野范围内的小伙伴,记录下小伙伴的数量 n n n和中心位置 x c x_c xc,如果 f ( x c ) n > δ f ( x i ) \frac{f(x_c)}{n}>\delta f(x_i) nf(xc)>δf(xi