hello,大家好。各位可点击此处,访问公众号官方店铺。谨防上当受骗,感谢各位支持!
后台有很多小伙伴留言说想学习一下人工蜂群算法(artificial bee colony,ABC),所以今天我们为各位讲解ABC,让各位小伙伴能够快速掌握这种算法。
本期推文目录:
01 ABC的生物背景
02 ABC的算法策略
03 MATLAB实例
04 参考文献
01 | ABC的生物背景
蜜蜂是一种群居生物,生物学家研究发现蜜蜂以跳舞的方式来交换蜜源信息。根据分工的不同,蜜蜂被分为三个工种:引领峰、跟随蜂、侦察蜂。
侦察蜂的职责是侦察蜜源(即蜜蜂的食物),一旦某一个侦察蜂找到蜜源后,实际上它的角色就切换为引领蜂了。
找到蜜源后的引领峰以跳舞的方式向同伴传递自己找到食物的信息,这时候一些饥饿的、没有找到食物的蜜蜂就会沿着引领峰指明的方向去寻找食物,这些相信引领峰传递的信息的蜜蜂实际上就是跟随蜂。这实际上属于招募蜜蜂的行为。
当引领峰寻找了多次蜜源后,发现再也找不到吃起来更香的蜜源后,引领峰说话的信服力会降低,于是跟随蜂也逐渐不相信引领峰传递的信息。
引领峰痛定思痛,决心转变角色,做回侦察蜂。直到再次找到高质量的蜜源后,再做回引领峰,然后再带着大伙吃香的、喝辣的。这实际上属于放弃蜜源的行为。
综上,蜂群实现群体智慧的最小搜索模型包括 蜜源、 引领蜂、 跟随蜂和 侦察蜂共4个组成要素,以及 招募蜜蜂和 放弃蜜源2种基本的行为。
02 | ABC的算法策略
通过对ABC生物背景的理解,相信各位猜到蜜源实际上就对应ABC中的解,实际上也就等同于遗传算法中的个体。ABC的最终目的就是找出最好的“蜜源”,也就是最好的解。
那这些解如何寻找呢?也就是在ABC中如何更新这些解呢?
答案就是通过引领峰、跟随蜂、侦察蜂这三种蜜蜂来更新最好“蜜源”的位置。这里需要注意的一点是:引领蜂和跟随蜂各占蜂群的一半,数量等于蜜源的数量,且每个蜜源同一时间内只有一只引领蜂采蜜。
有小伙伴可能会有疑问,侦察蜂怎么没有了?
因为侦察蜂与引领峰的角色是相互切换的,所以不是侦察蜂消失了,而是假设当前这一部分蜜蜂全是引领峰。
接下来以一个问题为例,帮助各位快速理解这三种蜜蜂是如何更新蜜源位置的?前面我们已经说过,蜜源实际与问题的解相对应。群智能算法的第一步大多是初始化种群,ABC算法也不例外。只有初始化若干个蜜源后,三种蜜蜂才会寻找蜜源。
假设我们要求解问题的维数为D,则一个解的表现形式为(即一个蜜源的位置为):
第i个蜜源的位置初始化公式如公式(1)所示:
接下来就是重头戏,三种蜜蜂更新蜜源位置的公式。因为当前蜂群中只有引领蜂和跟随蜂,所以毫无疑问是引领峰先对蜜源种群位置进行更新。引领峰对第i个蜜源位置更新公式如(2)所示:
式中,d为当前位置更新的维数,
所有的引领蜂完成式(2)的运算后,飞回信息交流区共享蜜源信息。跟随蜂根据引领蜂分享的蜜源信息,按式(3)计算的概率进行跟随:
然后,跟随蜂采用轮盘赌的方法选择引领蜂,即在[0,1]产生一个均匀分布的随机数r,如果
搜索过程中,如果蜜源
以最小化的优化问题为例,在ABC 算法中,解的适应度评价依据式(5)计算。
综上所述,ABC的主要步骤如下:
1)初始化各蜜源 ; 设定参数NP、limit 以及最大迭代次数; t=1;
2)为蜜源 分配一只引领蜂,按式(2)进行搜索,产生新蜜源 ;
3)依据式(5)评价 的适应度,根据贪婪选择的方法确定保留的蜜源;
4) 由式(3)计算引领蜂找到的蜜源被跟随的概率;
5)跟随峰采用与引领蜂相同的方式进行搜索,根据贪婪选择的方法确定保留的蜜源;
6)判断蜜源 是否满足被放弃的条件。如满足,对应的引领蜂角色变为侦察蜂,否则直接转到8);
7)侦察蜂根据式(4)随机产生新蜜源;
8)t=t+1; 判断算法是否满足终止条件,若满足则终止,输出最优解,否则转到2)。
03 | MATLAB实例
MATLAB代码源地址:
https://yarpiz.com/297/ypea114-artificial-bee-colonyyarpiz.com代码中的目标函数如下:
点击main.m函数运行代码,结果为
目标函数值随迭代次数变化曲线如下图所示:
04 | 参考文献
1.秦全德, 程适, 李丽, 等. 人工蜂群算法研究综述[J]. 2014
2.Karaboga D. An idea based on honey bee swarm for numerical optimization[R]. Technical report-tr06, Erciyes university, engineering faculty, computer engineering department, 2005.
各位小伙伴可在留言板留言,未来我们讲解的具体内容由你做主。如果可以的话,可以把希望讲解的文献也在留言板上写出来。
我们已经终于推出粉丝QQ交流群,各位小伙伴赶快加入吧!!!
更多精彩尽在公众号:优化算法交流地
往期推荐
这个高质量的MATLAB自学网站,你收藏了吗?
遗传算法(GA)求解带时间窗的车辆路径(VRPTW)问题MATLAB代码
蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题(附MATLAB代码)
NSGA-II多目标优化算法讲解(附MATLAB代码)
多目标优化 | 基于NSGA-II的多目标0-1背包问题求解(附matlab代码)
多目标优化 | NSGA-II进阶教程(全网首个三目标优化教程)