混合蛙跳算法(Shuffled Frog-Leaping Algorithm,简称SFLA)的思想是由青蛙觅食中启发而来的。池塘中的青蛙群体,为了获取更加丰富的食物源,每只青蛙在石头之间不停跳跃觅食,最后蛙群在食物最多的地方聚集,如图6-8所示。每只青蛙所处的位置表示问题的一个解,食物代表函数极值。每只青蛙都有为了靠近食物而努力运动的想法,并且每只青蛙都具有对当前位置与食物之间的距离判断能力,通过在石头上的跳跃更新自己的位置。这种文化同样会受到其他青蛙的影响。整个青蛙种群按照模因分组被分成很多个子群体,每个子群中由多只青蛙个体构成。每个子群又有自己的文化,在每次进化时执行局部搜索策略,分别找到子群内位置最好和最差的青蛙。位置最差的青蛙采用位移更新算法进行组内局部位置更新,每个子群体进行完局部搜索后,又将全部青蛙个体按照适应度值排序后,重新划分模因子群。这样进行全局信息交换后,继续进行局部搜索,局部和全局搜索交替执行直到满足收敛条件为止。
图6-8 青蛙觅食示意图
作为一种亚启发式群智能算法,SFLA结合了模因算法(Memetic Algorithm,简称MA)和粒子群算法(Particle Swarm Optimization,简称PSO)的优点。它具有结构简单、参数少、收敛快和易实现等特点。在SFLA中,一只青蛙表示一个候选解。青蛙群体被分成若干个模因组,每个模因组由一定的青蛙构成。SFLA流程步骤如下:
1.初始化种群
随机生成N个候选解,假设初始化青蛙种群为F=(X1,X2,…,XN),其中Xi=(Xi1,Xi2,…,Xid),1≤i≤N,d表示解的维数。
2.计算适应度值
根据适应度函数计算所有青蛙的适应度值,适应度函数定义为在CV意义下的识别准确率,适应度值实质是分类精度的高低。
3.种群分组
将N只青蛙按照适应度值降序排列把种群分为M个模因子群。在迭代循环中,将第1只青蛙分配给第1个子群,第2只青蛙分配给第2个子群,直到第M个青蛙分配给第M个子群。然后再将第M+1个青蛙分配给第1个子群,第M+2个青蛙分配给第2个子群,这样以此类推直到所有青蛙分配到M个模因子群。种群被分为M个模因子群,每个子群由P只青蛙组成,即N=M×P。如果用z表示第i只青蛙所在的子群编号,则:
4.局部搜索(局部更新)
在每个模因子群中子群中,Fb表示子群中位置最好的青蛙,Fw表示子群中位置最差的青蛙,Fg表示整个种群中位置最好的青蛙。每次迭代计算过程中,将对每个模因子群中位置最差的Fw进行调整,具体方法如式(6-54)和(6-55):(www.xing528.com)
Di表示青蛙移动距离,式(6-54)表示模因子群中最差青蛙更新位置,最差位置表示适应度值低。rand()取值范围是[0,1]之间的随机数。青蛙移动的极限距离被限制在[-Dmax,Dmax]范围内。经过迭代计算,如果Fnew_w>Fw,则用Fnew_w替代Fw,否则用Fg替换Fb重新执行式(6-54),如式(6-55):
如果经过上式Fnew_w还没有改进,则随机产生一个新解替代原来的Fw。
重复上述步骤经过一定次数的局部搜索进化后,对每个子群中最差青蛙位置进行更新,然后将各个子群中全部个体又重新按照适应度函数计算的适应度值降序排列划分新的模因子群。这样可以使青蛙个体信息得到充分交流,继续进行局部搜索直到满足收敛条件。
局部搜索流程图如图6-9所示。
图6-9 局部搜索算法流程图
5.全局搜索(全局更新)
当每个模因子群都完成了局部搜索,所有青蛙混合在一起,重复第2步和第5步,直到满足迭代次数或者达到精度要求。
SFLA算法流程图如图6-10所示。
图6-10 SFLA算法流程图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。