简介

定义

人工鱼群算法为山东大学副教授李晓磊2002年从鱼找寻食物的现象中表现的种种移动寻觅特点中得到启发而阐述的仿生学优化方案。在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群及追尾行为,从而实现寻优。人工鱼拥有以下几种典型行为: /p>

(1)觅食行为:一般情况下鱼在水中随机地自由游动,当发现食物时,则会向食物逐渐增多的方向快速游去。

(2)聚群行为:鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成群,鱼聚群时所遵守的规则有三条:分隔规则:尽量避免与临近伙伴过于拥挤;对准规则:尽量与临近伙伴的平均方向一致;内聚规则:尽量朝临近伙伴的中心移动。

(3)追尾行为:当鱼群中的一条或几条鱼发现食物时,其临近的伙伴会尾随其快速到达食物点。

(4)随机行为:单独的鱼在水中通常都是随机游动的,这是为了更大范围地寻找食物点或身边的伙伴。

步骤

人工鱼群算法实现的步骤:

(1)初始化设置,包括种群规模N、每条人工鱼的初始位置、人工鱼的视野Visual、步长step、拥挤度因子δ、重复次数Trynumber;

(2)计算初始鱼群各个体的适应值,取最优人工鱼状态及其值赋予给公告牌;

(3)对每个个体进行评价,对其要执行的行为进行选择,包括觅食Pray、聚群Swarm、追尾Follow和评价行为bulletin;

(4)执行人工鱼的行为,更新自己,生成新鱼群;

(5)评价所有个体。若某个体优于公告牌,则将公告牌更新为该个体;

(6)当公告牌上最优解达到满意误差界内或者达到迭代次数上限时算法结束,否则转步骤3。

流程图

人工鱼群算法简介及应用_python

 

应用

用AFSA求函数最值,这里使用scikit-opt库。

def func(x):
    x1, x2 = x
    return 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2


from sko.ASFA import ASFA

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

结果如下:

C:\Users\20928\Desktop\数学建模>python AFSA.py
[0.99993543 1.00064329] 4.064333284516939

 

 

参考链接:

1. 简书-人工鱼群算法超详细解析附带JAVA代码

2. 百度百科-人工鱼群算法

3. scikit-opt官方文档-AFSA部分

个性签名:时间会解决一切