对较好和较差个体双向更新的混合蛙跳算法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对较好和较差个体双向更新的混合蛙跳算法

庞凯立;梁昔明

【摘要】针对基本蛙跳算法在处理复杂函数优化问题时求解精度低且易陷入局部最优的缺点,将共轭梯度法引入基本蛙跳算法,对排名靠前的p个模因组中的精英个体和排名靠后的q个模因组中的落后个体同时使用共轭梯度法进行更新,一方面增强对较差青蛙的指导能力,另一方面使最差的青蛙直接更新,提高了算法的收敛精度.所得混合蛙跳算法有效结合了基本蛙跳算法较强的全局搜索能力和共轭梯度法快速精确的局部搜索能力.将所得的混合蛙跳算法与其他智能优化算法进行对比,数值试验结果表明,无论从收敛精度还是进化代数而言,所得混合蛙跳算法较其他算法均有较大的改进,具有更高的收敛精度,能有效避免陷入局部最优,且优化结果更加稳定.【期刊名称】《北京建筑大学学报》

【年(卷),期】2016(032)004

【总页数】6页(P52-57)

【关键词】混合蛙跳算法;共轭梯度法;数值试验;适应度函数

【作者】庞凯立;梁昔明

【作者单位】北京建筑大学理学院,北京100044

【正文语种】中文

【中图分类】TP301.6

基本蛙跳算法[1]是一种新的基于群体智能的启发式算法,该算法是在2003年由Eusuff和Lansey受青蛙进食行为的启发进行建模和仿真研究的结果,该算法结合

了粒子群算法和模因算法两者的优点,具有结构简单、收敛速度快和全局寻优能力强等特点.

基本蛙跳算法与其他群体迭代算法一样,虽然具有较强的全局搜索能力,但是易陷入局部最优,且收敛精度不高. 为此,学者们进行了深入的研究,提出了一些改进算法,也都取得了不错的效果. 文献[2]对子群中每只青蛙个体引入了随机扰动,并让子群内每只青蛙个体都参与产生新个体,充分利用每只青蛙个体的信息,增加了种群多样性. 文献[3]引入全局共享因子和局部共享因子,由于共享因子随着迭代次数的增加而增大,使得在局部搜索初期,较小的共享因子初值能减弱最优个体对最差个体的指导,避免了青蛙个体更新步长过大而跳过局部最优;在进化后期,共享因子增大,增强了最优个体对最差个体的指导,使得个体跳过局部最优实现全局收敛,该算法动态改变最优个体对最差个体的指导能力,使得青蛙个体更容易跳出局部最优实现全局收敛. 文献[4]基于量子理论提出一种量子混合蛙跳算法,该算法采用量子位的Bloch球面坐标编码个体,利用量子位在Bloch球面上绕轴旋转的方法更新个体,通过自适应混沌旋转角度算子提高子群内部局部搜索能力,采用Hadamard门实现个体变异避免早熟,有效扩展了空间的搜索范围. 文献[5]定义了新的粒子分类标准,将所有青蛙按此标准进行分类,青蛙个体在迭代过程中根据自身状态动态调整惯性权重,并以停滞代数判断是否对最优个体进行优化,避免了陷入局部最优.

以上文献中的改进算法都较好地改善了基本SFLA算法,在克服种群陷入局部最优缺陷的基础上增加了种群多样性. 考虑到传统优化算法—共轭梯度法具有较强的局部搜索能力,而现代智能优化算法—基本蛙跳算法收敛精度不高,寻找一种方法将蛙跳算法与共轭梯度法结合起来从而凸显各自的优点显得尤为重要,且历来很少有学者将传统优化方法与基本蛙跳算法结合起来研究. 本文提出的对较好和较差个体进行更新的混合蛙跳算法(SFLA_HH),充分利用了SFLA算法和共轭梯度法两者

的优点,弥补了两者的不足,将SFLA_HH算法与其他智能优化算法进行对比,对五个测试问题的试验结果表明,SFLA_HH算法收敛精度更高.

对无约束连续优化问题:

若x*∈Rd满足:

则称x*为f(x)在全空间Rd上的全局最小点或整体极小点.

1.1 SFLA原理

SFLA算法将每个个体看做池塘中的一只青蛙[6],搜索区间即为整个池塘. SFLA算法首先在寻优区间内随机初始化一组向量来组成青蛙的初始种群[7]

P={X1,X2,…,Xi,…,XF}(i=1,2,…,F),第i只青蛙为Xi=(xi1,xi2,…,xid),每一只青蛙

代表一个待选解,xij为第i只青蛙第j维的分量. 对于每个青蛙个体,计算适应度

函数值fit(Xi),本文中适应度函数取为目标函数,然后将所有青蛙个体按照它们的适应度值进行升序排列,并分别放入m个模因组中. 设Mk为第k个模因组青蛙

的集合(k=1,2,…,m),表达式如下:

式中,n为每个模因组中的青蛙的个数.

种群中适应度函数值最小的青蛙用Xg表示,用和分别表示第k个模因组Mk中适应度函数值最小和最大的青蛙,通过每个模因组Mk中的跳跃前进和位置调整进

而影响整个族群的前进位置调整公式如下:

青蛙移动的距离向量:

更新最差青蛙位置:

式中,rand()是0~1之间的随机数,Smax是青蛙跳跃每个分量上允许的最大值,Smin是青蛙跳跃每个分量上允许的最小值. 青蛙在跳跃前进时,如果经(5)更新后

的的适应度值比小,用代替;否则用Xg取替重新进行更新操作位置更新公式如下:如果经过式(5)、式(7)计算后仍然产生不了适应度函数值更小的青蛙,那么就随机

化一个新向量代替至此完成一次局部迭代,重复局部迭代L次. 当所有模因组都完

成局部迭代L次后,判断是否达到全局搜索次数G次,若没有,则将所有F只青蛙重新混合、排序、分组,再按照上述局部搜索步骤重复搜索,直至符合终止条件. 一般情况下,当算法达到了预定的全局迭代次数时,算法终止并输出最优解,全局最优解即为Xg.

1.2 共轭梯度法

共轭梯度法[8]是由Hestenes和Stiefel( 1952)提出来的,是一种介于最速下降法和牛顿法之间的经典非线性无约束优化算法,它的基本思想是根据迭代点处的负梯度方向构造出一组共轭方向,再沿着这组方向搜索目标函数极值,共轭梯度法的机制保证了所得到的这组共轭方向就是函数值的下降方向. 共轭梯度法最大的优势在于同时解决了最速下降法收敛慢和牛顿法对目标函数要求较高且计算量大的不足,具有较好的局部搜索能力,是求解大型非线性无约束最优化问题的有效算法之一,其求解流程如下:

步骤1 选取初始点X0,给定精度eps,计算初始搜索方向

步骤2 若‖‖≤eps,输出X0并停止迭代;否则,令k=0,转步骤3;

步骤3 求tk使得

步骤4 令Xk+1=Xk+tkPk;

步骤5 计算若‖‖≤eps,输出Xk+1并停止迭代;否则转步骤6;

步骤6 计算共轭方向Pk+1,令k=k+1并转步骤3.

考虑到基本蛙跳算法中精英个体更新效率较低、较差个体更新效果不明显等缺陷导致的进化后期易陷入局部最优这一缺点,本文提出在基本蛙跳算法中引入共轭梯度法,对前p个模因组中的精英个体和后q个模因组中的落后个体直接进行更新,一方面增强了对较差个体的指导能力,另一方面提高了最差个体的更新效率. SFLA_HH算法首先对种群和参数进行初始化,各青蛙的初始位置在给定搜索区间内随机生成;然后计算每只青蛙的适应度函数值,对函数值进行升值排序. 本文中

相关文档
最新文档