在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法(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)不需要问题的严格机理模型,甚至不需要问题的精确描述,这使得它的应用范围得以延伸。