这是我在百度空间里面写的文章,很久了,现在搬家搬到这边来。
蜂群算法
Bee colony algorithms
蜂群算法的分类(基于繁殖行为的算法、蜜蜂交配优化算法、蜜蜂进化型遗传算法、蜂王算法)
基于采蜜行为的算法(人工蜂群算法(ABC)、虚拟蜜蜂算法、蜂群优化算法)
生物学机理
1、不同角色之间的交流、转换及协作来实现
2、采蜜行为包括蜜源、采蜜蜂与待采蜜蜂
蜂群算法存在的问题
1、参数设置对算法性能影响很大
2、容易陷入局部最优,早熟
3、无理论支持,数学证明
4、并行计算,分布式
5、仅应用在组合优化问题
参数:
蜜源:可能的最优解
角色
(role):
引领蜂
(leader),
侦察蜂
(scouter),
跟随蜂
(follower)
蜜蜂行为
:
搜索
(search)
蜜源
,
为蜜源招募
(recruit),
放弃
(abandon)
蜜源
蜂群参数
:
SN(
种群规模
),maxcycle(
迭代次数
),limit(
全局和局部搜索能
力
),n(
邻域规模
),cycle(
迭代次数变量
)
参数说明:
引领蜂,跟随蜂:加快算法收敛
侦察蜂:
增强算法跳出局部最优的能力
Limit
:
控制了算法的收敛性,对算法跳出局部最优解有这重要
影响;前期比较小,增强全局搜索能力,后期较小,加快收敛
速度
N
邻域规模
:前期比较大,增强局部搜索能力,后期较小,加
快收敛
算法步骤:
l
初始化
种群规模
SN
包含引领蜂和观察蜂
,
各取种群数量的一半,初始解数量
FN=SN/2
。
trail[i]
第
i
个解的实验次数
初始化为
0
排序:函数优劣,前
50%
作为引领蜂,后
50%
作为跟随蜂
适应度:
引领蜂阶段
邻域搜索
如果新解优于原先解,则替换,否则不变;
更新
trail[i]
,若大于
limit
值,则抛弃该解
(
可以用队列进行存储该局部最优解
)
,同
时,引领蜂角色转化侦察蜂
,trail[i]=0;
跟随蜂阶段
计算蜜源
Xi
被选择概率
P
选择蜜源后,进行邻域搜索,搜索规则:
贪婪原则,如果该解优于原引领蜂的解,则完成角色互换,跟随蜂转变为
引领蜂,否则不变。
直到所有跟随蜂被分配到蜜源
侦查蜂阶段
随机产生新的解,若优于原先的解,则替代原先局部最优解,侦察蜂转变为
引领蜂,
trail[i]
清零;若不优于原先解,原先解不变;
初始化生成解的方法,随机化方法
一轮算法结束后,最优解被记录,迭代次数
cycle++
若
cycle=maxcycle
,算法结束;否则跳到引领
蜂的阶段