在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法(Artificial Fish Swarm Algorithm,AFSA)就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群及追尾行为,从而实现寻优。

 

人工鱼的几种典型行为

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

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

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

 

 

人工鱼个体的状态可表示为向量 x= (x1, x2, …, xn) , 其中 xi(i=1, 2, 3, …, n) 为欲寻优的变量; 人工鱼当前所在位置的食物浓度表示为Y=f (x) , 其中 Y为目标函数值; 人工鱼个体之间的距离表示为 di, j=‖xi- xj‖; visual 表示人工鱼的感知距离;step表示人工鱼移动的步长; δ 表示拥挤度因子。

 

 

1) 觅食行为

设人工鱼当前状态为 xi, 在其视野范围内随机选择一个状态 xj, 如果 yi<yj, 则向该方向前进一步; 反之, 再重新随机选择状态 xj, 判断是否满足前进条件; 试探 trynumber 次后, 如果仍不满足前进条件, 则执行其他行为 (如随机移动行为) 。

公式表述如下:

if(Yj>Yi)

xinext=xi+random (step) (xj- xi) /‖Xj- Xi‖;

if(Yj<Yi) 

xinext=xi+random (step) ;

其中:

xi—— —表示当前所处的状态 (位子) ;

xj—— —表示随机移动后所处的状态 (位子) ;

Yi—— —表示当前状态下的目标函数值;

Yj——表示随机移动后的目标函数值;

Random (step) —— —表示[0, step]之间的随机数字。

 

 

 

2) 聚群行为

人工鱼当前状态为 xi,设其可见区域内的同伴个数为 nf,形成集合 K:

 

K={ xj|xj- xi≤visual} i, j=1, 2, 3, …, n (2)

如果 K不是空集的话, 表明在视野范围内有同伴存在, 即 nf≥1, 那么就按式 (3) 探索中心位子Xc:

其中: xc—— —表示中心位子的状态。

如果nf /n<δ , (0<δ <1) , 则表明伙伴中心有较多食物并且不太拥挤, 如果此时 yi<yc, 则人工鱼向中心位置 xc 前进一步; 否则执行其他行为 (如觅食行为) .公式表述如下:

if(nf /n<δ&& yi<yc)

xinext=xi+random (step) (xc- xi) /‖Xc- Xi‖; 

else

conduct prey

3) 追尾行为

设人工鱼当前状态为 xi,探索其邻域内状态最优的邻居xmax, 如果 yi<ymax, 并且 xmax 的邻域内伙伴的数目 nf 满足 nf /n<δ ,(0<δ <1) , 表明xmax 的附近有较多的食物并且不太拥挤, 则向 xmax的位置前进一步; 否则执行觅食行为。公式描述如下:

if nf /n<δ&& yi<ymax

xinext=xi+random (step) (xmax- xi) /‖Xmax- Xi‖; (5)

else

conduct prey

 

 

 算法步骤:

(1) 初始化: 在定义域范围内随机产生鱼群的样本, 对 vi-sual、 step、 g、 trynumber进行初始化定义。

(2) 判断当前代数是否是 n 的整数倍, 如果是则计算可行解在种群中的比率,按计算结果对半可行解的宽度 ε 、步长step进行相应的 调整。

(3) 执行追尾行为, 满足条件则调整鱼群位置, 向选取准则中规定更优的方向移动, 否则执行觅食行为。

(4) 如未达到终止条件 (精度没有达到要求或没有达到最大迭代步数) , 则返回到 (2) 。

(5) 算法结束, 输出运算结果。

 


人工鱼群算法特点:

1)具有较快的收敛速度,可以用于解决有实时性要求的问题;

2)对于一些精度要求不高的场合,可以用此算法快速的得到一个可行解;

3)不需要问题的严格机理模型,甚至不需要问题的精确描述,这使得它的应用范围得以延伸。