栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

人工鱼群算法python实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

人工鱼群算法python实现

人工鱼群算法 基本思想

人工鱼群算法是一种基于模拟鱼群行为的优化算法,是由李晓磊等在2002年提出的一种新型的寻优算法。在一片水域中,鱼生存的数目最多的地方就是本水域中富含营养物质最多的地方,依据这一特点来模仿鱼群的觅食等行为,从而实现全局寻优,这就是鱼群算法的基本思想。

在鱼类的活动中,可以分为觅食行为、聚群行为、追尾行为和随机行为这四种行为,如何利用简单有效的方式来构造实现这些行为将是算法实施的主要问题。

  • 觅食行为主要就是循着食物多的方向游动的一种行为,在寻优中则是向较优方向进行的迭代方式

  • 在聚群行为中,借鉴的思想对每条人工鱼规定了这样两个规则
    1.尽量向邻近伙伴的中心移动
    2.避免过分拥挤,这样就能基本实现人工鱼的聚群能力;

  • 追尾行为就是一种向临近的最活跃者追逐的行为,在寻优算法中可以理解为是向附近的最优化伙伴前进的过程

  • 随机行为就是人工鱼在其视野内随机移动的行为,在寻优算法中这种行为有助于解跳出局部最优

算法原理

1.觅食行为

指鱼循着食物多的方向游动的一种行为,人工鱼Xi在其视野内随机选择一个状态Xj,分别计算它们的目标函数值进行比较,如果发现Yj比Yi优,则Xi向Xj方向移动一步,否则Xi继续选择Xj,判断是否满足前进条件,反复尝试trynumber次后,仍没有满足前进条件,则随机移动一步使Xi达到新的状态。

人工鱼的视觉描述

看看流程图

2.聚群行为

鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成群 。人工鱼Xi搜索其视野内的伙伴数目nf及中心位置Xc,若Yc/nf<δYi(求极小值时使用小于号,在求极大值时则相反)表明伙伴中心位置状态较优且不太拥挤,则Xi朝伙伴的中心位置移动一步,否则执行觅食行为

3.追尾行为

指鱼向其视野区域内的最优方向移动的一种行为。人工鱼Xi搜索视野内最优的适应度最高的个体Xj,并搜索人工鱼Xj的视野内的伙伴数目nf,若Yj/nf<δYi,表明Xj的状态较优且不太拥挤,Xi朝着Xj一步,否则执行觅食行为

总的来说算法在运算过程中,会同时进行聚群和追尾行为。而觅食行为属于这两种行为中发现聚群对象或者追尾对象附近拥挤度过大时,人工鱼选择的行为方式,若在觅食过程中,未发现比自身适应度高的人工鱼,则按步长step随机移动。最后对聚群行为和追尾行为得到的适应度值进行比较,选择优秀的人工鱼作为下一代的个体。其总框架图如下:

拥挤度因子 拥挤度因子的取值

拥挤度因子的影响

以极大值为例(极小值的情况正好和极大值相反), δ δδ越大,表明允许的拥挤程度越小,人工鱼摆脱局部最优的能力越强;但是收敛的速度会有所减缓,这主要因为人工鱼在逼近极值的同时,会因避免过分拥挤而随机走开或者受其它人工鱼的排斥作用,不能精确逼近极值点。可见,δ δδ的引入避免了人工鱼过度拥挤而陷入局部极值,另一方面,该参数会使得位于极值点附近的人工鱼之间存在相互排斥的影响,而难以向极值点精确逼近,所以,对于某些局部极值不是很严重的具体问题,可以忽略拥挤的因素,从而在简化算法的同时也加快了算法的收敛速度和提高结果的精确程度。

python代码实现
def func(x):
	x1, x2 = x
	return 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2


from sko.AFSA import AFSA

afsa = AFSA(func, n_dim=2, size_pop=50, max_iter=300,
	        max_try_num=100, step=0.5, visual=0.3,
    	    q=1, delta=0.5)
best_x, best_y = afsa.run()
print(best_x, best_y)

[1.00274898 0.99989597] 4.000030188126589

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号