愿你搜索到人生的最优解


hello,大家好。

新来的小伙伴可在公众号后台回复 代码,即可提取一整套高质量智能优化算法MATLAB代码


本次推文B站讲解视频:

https://www.bilibili.com/video/BV1Ka4y1H7r7


后台有很多小伙伴留言说想学习一下人工蜂群算法(artificial bee colony,ABC),所以今天我们为各位讲解ABC,让各位小伙伴能够快速掌握这种算法。


本期推文目录:

01 ABC的生物背景

02 ABC的算法策略

03 MATLAB实例

04 参考文献







01 | ABC的生物背景


蜜蜂是一种群居生物,生物学家研究发现蜜蜂以跳舞的方式来交换蜜源信息。根据分工的不同,蜜蜂被分为三个工种:引领峰、跟随蜂、侦察蜂


侦察蜂的职责是侦察蜜源(即蜜蜂的食物),一旦某一个侦察蜂找到蜜源后,实际上它的角色就切换为引领蜂了。


找到蜜源后的引领峰以跳舞的方式向同伴传递自己找到食物的信息,这时候一些饥饿的、没有找到食物的蜜蜂就会沿着引领峰指明的方向去寻找食物,这些相信引领峰传递的信息的蜜蜂实际上就是跟随蜂这实际上属于招募蜜蜂的行为。


当引领峰寻找了多次蜜源后,发现再也找不到吃起来更香的蜜源后,引领峰说话的信服力会降低,于是跟随蜂也逐渐不相信引领峰传递的信息。


引领峰痛定思痛,决心转变角色,做回侦察蜂。直到再次找到高质量的蜜源后,再做回引领峰,然后再带着大伙吃香的、喝辣的。这实际上属于放弃蜜源的行为。



综上,蜂群实现群体智慧的最小搜索模型包括蜜源领蜂跟随蜂侦察蜂共4个组成要素,以及招募蜜蜂放弃蜜源2种基本的行为。


秦全德, 程适, 李丽, 等. 人工蜂群算法研究综述[J]. 2014.







02 | ABC的算法策略


通过对ABC生物背景的理解,相信各位猜到蜜源实际上就对应ABC中的解,实际上也就等同于遗传算法中的个体。ABC的最终目的就是找出最好的“蜜源”,也就是最好的解


那这些解如何寻找呢?也就是在ABC中如何更新这些解呢?

答案就是通过引领峰、跟随蜂、侦察蜂这三种蜜蜂来更新最好“蜜源”的位置。这里需要注意的一点是:引领蜂和跟随蜂各占蜂群的一半,数量等于蜜源的数量,且每个蜜源同一时间内只有一只引领蜂采蜜。


有小伙伴可能会有疑问,侦察蜂怎么没有了?

因为侦察蜂与引领峰的角色是相互切换的,所以不是侦察蜂消失了,而是假设当前这一部分蜜蜂全是引领峰。


接下来以一个问题为例,帮助各位快速理解这三种蜜蜂是如何更新蜜源位置的?前面我们已经说过,蜜源实际与问题的解相对应。群智能算法的第一步大多是初始化种群,ABC算法也不例外。只有初始化若干个蜜源后,三种蜜蜂才会寻找蜜源。


假设我们要求解问题的维数为D,则一个解的表现形式为(即一个蜜源的位置为): MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_MATLAB_02 ,其中MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_MATLAB_03 ,MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_04MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_05分别表示搜索空间的上下限, MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_06


第i个蜜源的位置初始化公式如公式(1)所示:

MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_07


接下来就是重头戏,三种蜜蜂更新蜜源位置的公式。因为当前蜂群中只有引领蜂和跟随蜂,所以毫无疑问是引领峰先对蜜源种群位置进行更新。引领峰对第i个蜜源位置更新公式如(2)所示:

MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_08

式中,d为当前位置更新的维数, MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_09 表示更新的是第3维的位置;MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_MATLAB_10表示在NP个蜜源中随机选择一个不等于i的蜜源;MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_11均匀分布的随机数,决定扰动幅度。当新蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_12的适应度优于 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13时,采用贪婪选择的方法用 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_14代替 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13,否则保留 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13


所有的引领蜂完成式(2)的运算后,飞回信息交流区共享蜜源信息。跟随蜂根据引领蜂分享的蜜源信息,按式(3)计算的概率进行跟随:

MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_17


然后,跟随蜂采用轮盘赌的方法选择引领蜂,即在[0,1]产生一个均匀分布的随机数r,如果 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_18大于r,该跟随蜂按式(2)在蜜源i的周围产生一个新蜜源,且采用同引领蜂相同的贪婪选择的方法确定保留的蜜源。


搜索过程中,如果蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13经过trial次迭代搜索到达阈值limit而没有找到更好的蜜源,该蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13 将会被放弃,与之对应的引领蜂角色转变为侦察蜂。侦察蜂将在搜索空间随机产生一个新的蜜源代替 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13 ,上述过程如式(4):



以最小化的优化问题为例,在ABC 算法中,解的适应度评价依据式(5)计算。



综上所述,ABC的主要步骤如下




1)初始化各蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13; 设定参数NP、limit 以及最大迭代次数; t=1;

2)为蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13 分配一只引领蜂,按式(2)进行搜索,产生新蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_14 ;

3)依据式(5)评价 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_14 的适应度,根据贪婪选择的方法确定保留的蜜源;

4) 由式(3)计算引领蜂找到的蜜源被跟随的概率;

5)跟随峰采用与引领蜂相同的方式进行搜索,根据贪婪选择的方法确定保留的蜜源;

6)判断蜜源 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_13 是否满足被放弃的条件。如满足,对应的引领蜂角色变为侦察蜂,否则直接转到8);

7)侦察蜂根据式(4)随机产生新蜜源;

8)t=t+1; 判断算法是否满足终止条件,若满足则终止,输出最优解,否则转到2)。



秦全德, 程适, 李丽, 等. 人工蜂群算法研究综述[J]. 2014.







03 | MATLAB实例


MATLAB代码源地址:

https://yarpiz.com/297/ypea114-artificial-bee-colony


代码中的目标函数如下:



点击main.m函数运行代码,结果为 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_搜索_27 至 MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_MATLAB_28

MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_29


目标函数值随迭代次数变化曲线如下图所示:

MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_MATLAB_30







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.


1

END

1


各位小伙伴可在留言板留言,未来我们讲解的具体内容由你做主。如果可以的话,可以把希望讲解的文献也在留言板上写出来。



MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)_多目标_31

长按识别二维码关注我们



阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6