目录
1 蜜蜂优化算法
蜜蜂算法
(
Bees Algorithm
,
BA
)
由英国学者
AfshinGhanbarzadeh 和他的研究小组于
2005
年提出
。
该算法是一种有别于蚁群算法及粒子群算法的全新的群智能优化算法,
它通过模拟蜜蜂群体的觅食行为来搜索数学问题的最优解。
在国外,
蜜蜂算法目前已广泛应用到包括数据聚类分析、
电子设计
、
函数优化
、
机械设计
、
机器人控制、
神经网络训练等在内的连续优化问题中
,
以及包括集装箱装载、
特征提取
、
作业调度
、
TSP
等在内的组合优化问题中。
大量研究成果表明
,
邻域搜索和随机搜索相结合的蜜蜂算法能够很好地解决各类大型组合优化问题与函数优化问题。
然而
,
国内尚没有专门针对蜜蜂算法展开的理论研究和应用研究,
仅有部分学者采用蜂群觅食机制的原理来改进遗传算法,
称为蜂群遗传算法[1]
,
或蜜蜂进化型遗传算法
[
2-4
]
。
这些算法在基因进化的过程中增加了模拟蜜蜂觅食机理的步骤,
使得遗传算法的全局搜索能力和收敛速度均有所提高,
取得了良好的应用效果
。
1.1 蜂群觅食机制
蜂群能够在大范围地理区域内的不同方向上同时寻找到大量花蜜或花粉。
并且
,
花蜜或花粉质量较好
、数量较多、
距离较近的食源会吸引大量蜜蜂
,
而花蜜或花粉质量较差、
数量较少
、
距离较远的食源则只能吸引少量蜜蜂。首先,
蜂群会派出一群侦察蜂各自飞到不同的地点,
并且在该地点附近随机地搜索花蜜或花粉
。
各侦察蜂找到食源之后飞回蜂房,
并以
“
圆舞
”
或
“8 字舞
” 的舞蹈方式将食源的信息告知其它工蜂。
食源的信息主要包括 3
个
:
食源的方向
、
食源的距离
、
食源食物的质量。
蜂群依据这些信息对不同的食源进行评价
,进而派出大量采集蜂前往较好的食源,
派出少量采集蜂前往较差的食源。
这种觅食机制使得蜂群能够快速有效地采集食物。
1.2 蜜蜂算法
蜜蜂算法
(
Bees Algorithm
,
BA
)
的核心思想是对上述蜂群觅食机制的计算机模拟。
运用蜜蜂算法进行优化计算时需要设置以下几个参数:
侦察蜂的数量
(
n
)
、从 n
个采集点中优选出来的较好的搜索区域数目
(
m
,m <
n
)
、
从
m
个搜索区域中优选出来的最好的搜索区域数目(
e
,
e
<
m
)
、
e
个最好的搜索区域各自招募的采集蜂数量(
nep
)
、
另外
m
-
e
个搜索区域各自招募的采集蜂数量(
nsp
,
nsp
<
nep
)
、
搜索邻域的大小
(
ngh) ,以及迭代终止判定准则
。
1.3 流程
蜜蜂算法的计算流程如下
:
Step 1. 随机初始化 n 只侦察蜂的位置 , 并计算各自的适应值;Step 2. 优选 m 只适应值较好的侦察蜂进行邻域( ngh ) 搜索 , 并计算各自适应值 ;Step 3. 优选出适应值最好的 e 只侦察蜂 , 并各自招募 nep 只采集蜂进行邻域搜索 , 计算每只采集蜂的适应值;Step 4. 优选出适应值其次的 m - e 只侦察蜂 , 并各自招募 nsp 只采集蜂进行邻域搜索 , 计算每只采集蜂的适应值;Step 5. 分别针对 m 个食源 , 选出各食源的所有蜜蜂中适应值最好的那只蜜蜂;Step 6. 剩余 n - m 只侦察蜂在问题的解空间内随机搜索并计算各自的适应值;Step 7. 转到 Step 2 , 直至迭代终止判定条件成立 。第 3 步和第 4 步招募采集蜂到适应值最好的 e 个食源和适应值其次的 m - e 个食源并进行邻域搜索时 ,分配到每个食源的采集蜂数量是不同的, 可以采用各侦察蜂的适应值作为选择采集蜂的概率。 第 5 步在每个食源中仅仅只保留适应值最好的那只蜜蜂来形成下一代蜜蜂群体。 在真实蜂群中并没有这种限制 , 该步骤仅仅是为了减少搜索点的数量。 第 6 步中 , 群体中剩下的 n - m 只侦察蜂将在搜索空间内随机分配 , 以查找新的可行解。 每一次迭代完成后 , 新的蜜蜂群体将会由两部分组成, 一部分是在选定食源邻域内搜索得到适应值最好的 m 只蜜蜂 , 另一部分则是负责随机搜索的 n - m 只侦察蜂 。
2 经济调度
3 运行结果
部分代码:
for i = nEliteSite+1:nSelectedSite
bestnewbee.Cost = inf;
for j = 1:nSelectedSiteBee
newbee.Position = BeeDance(bee(i).Position, r);
[newbee.Cost newbee.Sol] = CostFunction(newbee.Position);
if newbee.Cost<bestnewbee.Cost
bestnewbee = newbee;
end
end
if bestnewbee.Cost<bee(i).Cost
bee(i) = bestnewbee;
end
end
% Non-Selected Sites
for i = nSelectedSite+1:nScoutBee
bee(i).Position = unifrnd(VarMin, VarMax, VarSize);
[bee(i).Cost bee(i).Sol] = CostFunction(bee(i).Position);
end
% Sort
[~, SortOrder] = sort([bee.Cost]);
bee = bee(SortOrder);
% Update Best Solution Ever Found
BestSol = bee(1);
% Store Best Cost Ever Found
BestCost(it) = BestSol.Cost;
% Display Iteration Information
disp(['In Iteration No ' num2str(it) ': Bees Cost is = ' num2str(BestCost(it))]);
% Damp Neighborhood Radius
r = r*rdamp;
end
4 参考文献
部分理论引用网络文献,如有侵权请联系删除。
[1]余敏.蜜蜂算法及其在水电站优化调度中的应用[J].广东水利水电,2015(04):15-18.