目录
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 只侦察蜂 。
部分代码:
- 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
部分理论引用网络文献,如有侵权请联系删除。
[1]余敏.蜜蜂算法及其在水电站优化调度中的应用[J].广东水利水电,2015(04):15-18.