1. 算法简介
(以下描述,均不是学术用语,仅供大家快乐的阅读)
鸽群算法是根据鸽子依据磁场而拥有高超识途技巧提出的优化算法。算法提出于2014年(到底是08年还是14年?引用显示08),也算有些年头了。这也是一个由中国研究者提出的优化算法,可喜可贺。
鸽群算法中的个体和粒子群算法中的粒子结构类似,都由位置和速度组成。在鸽群算法中,鸽子的飞行行为根据迭代次数分为了两个阶段。简单来说,阶段一向着当前最优位置飞行,阶段二向着自身周围飞行。下面将详细描述其飞行步骤
2. 算法流程
本次的主角就是鸽子了。
鸽群中鸽子数量为N,每只鸽子的位置为,速度为,该位置的优劣由其适应度函数计算得出。
在鸽群算法中,鸽子的行为依照迭代次数划分为两个阶段,阶段1占整个迭代次数的比例为NcRate,一般的NcRate取值为0.75。
2.1 阶段1
迭代次数在代内为阶段1。
在阶段1中,需要根据鸽子的位置与目标,计算出鸽子的速度。当前位置加上速度就得到了新的位置。
其具体实现与粒子群相似,先计算出新的速度,在通过速度和位置得到新位置。公式(1)中R为一个常量,一般取值为0.2,iter为当前迭代次数,rand为[0,1]内的均匀随机数。可以看出,阶段1中的速度随着迭代次数增加会越来越依赖于和最优位置的距离。然而式(1)中e的指数部分是一个绝对数值而不是比值,当最大迭代次数不同时,该公式的效果会有较大的差异。故公式(1)中e的指数应改为iter与的比值,当然需要找到适应的系数来进行调优。
2.2阶段2
阶段2为迭代次数大于的部分。
阶段2相对复杂,首先需要对群体进行排序,将群体均分为两组,较优的那组保持位置不变,同时提供其位置、适应度值作为参数,供较差的那组确定它们的新位置所在。
公式(3)求出了较优的那部分鸽子的重心所在,公式(4)则是让较差的部分鸽子向着较优部分鸽子的重心随机飞行了一段距离。
2.3流程图
文章没有说明鸽群算法是否需要使用贪心算法,下面会各自进行一次实验看看效果。
3. 实验
适应度函数。
实验一: 无贪心步骤
问题维度(维度) | 2 |
总群数量(种群数) | 20 |
最大迭代次数 | 50 |
取值范围 | (-100,100) |
实验次数 | 10 |
NcRate | 0.75 |
R | 0.2 |
从图像可以看出,算法的收敛速度和精度都不错。但是可以明显注意到在40代左右,聚集于右下最优位置附近的个体会有一个向中心聚集的过程,数了一下,刚好是10个个体。这应该是阶段2中较差的部分个体更新位置导致的。
本次试验阶段2时,可以认为其适应度函数几乎等于0,个体位置几乎到达90。则Nc计算公式如下:
可知个体会向着9处前进,并最终收敛到此处。可以看出阶段2中公式(3)设计欠妥(当然,当最优解在0处时,精度会有很大的提升)。公式(3)应去除分母中求和前的N/2。
值 | |
---|---|
最优值 | 1.0852653759188143E-16 |
最差值 | 0.004604311219220796 |
平均值 | 9.028977620358627E-4 |
从结果来看,鸽群算法还不错,但是性能好像不太稳定,毕竟只用了阶段1就计算出了结果,情有可原。
下面看看添加了贪心算法的实验。
实验二: 有贪心步骤
图像好像比实验一好了一些,但是并不能说明问题。实验一中存在的问题在实验二中仍然存在,只是由于贪心步骤的缘故,鸽群无法飞到差于自己的位置,阶段2仍然没有任何作用。
值 | |
---|---|
最优值 | 4.457111736304401E-16 |
最差值 | 4.637206866491525E-4 |
平均值 | 5.506734307008853E-5 |
实验结果好像好了一丢丢,但几乎可以认为没有变化。
4. 总结
鸽群算法是受鸽子依据磁场识途的特性启发而提出的优化算法。算法的结构简单,主要分为两个阶段,其中阶段1为向着最优位置前进,阶段2则是较差个体向着较优群体中心前进(bushi)。
从实验中可以看出,原算法的公式设计有些许缺陷,进行修改后应该能够得到非常不错的结果。
参考文献
Haibin, Duan, Peixin, et al. Pigeon-inspired optimization: a new swarm intelligence optimizer for air robot path planning[J]. International Journal of Intelligent Computing & Cybernetics, 2008. 提取码:wjok
以下指标纯属个人yy,仅供参考
指标 | 星数 |
---|---|
复杂度 | ★☆☆☆☆☆☆☆☆☆ |
收敛速度 | ★★★☆☆☆☆☆☆☆ |
全局搜索 | ★★★☆☆☆☆☆☆☆ |
局部搜索 | ★★★★☆☆☆☆☆☆ |
优化性能 | ★★★★☆☆☆☆☆☆ |
跳出局部最优 | ★☆☆☆☆☆☆☆☆☆ |
改进点 | ★★★★☆☆☆☆☆☆ |