群智能算法之人工蜂群算法(ABC算法)
人工蜂群算法(ABC算法)(Artificial Bee Colony)
该算法标准原型代码下载地址:https://abc.erciyes.edu.tr/index.htm ,包括C、Java、Matlab、伪代码和python。
或点击此链接在CSDN网下载点击此处
蜂群算法简介
- 人工蜂群算法是模仿蜜蜂行为所提出的一种优化方法,是集群体智能思想的一个具体应用。
- 主要特点是不需要了解问题的特殊信息而只需要对问题进行优劣比较,通过每个人工蜂个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着比较快的收敛速度。
- 为了解决多变量函数优化问题,Karaboga在2005年提出了人工蜂群算法ABC模型。
1、蜜蜂采蜜机理
蜜蜂是一种群居昆虫,虽然单个昆虫的行为极其简单,但是由单个简单的个体所组成的群体却表现出极其复杂的行为。真实的蜜蜂种群能够在任何环境下,以极高的效率从食物源(花朵)中采集花蜜;同时,它们能适应环境的改变。
蜂群产生群体智慧的最小搜索模型包含基本的三个组成要素:食物源、被雇佣的蜜蜂和未被雇佣的蜜蜂。两种最基本的行为模型:为食物源招募蜜蜂和放弃某个食物源。
(1) 食物源
食物源的价值由多方面因素决定,如:离蜂巢的远近、包含花蜜的丰富程度和获得花蜜的难易程度。使用单一的参数,食物源的“收益率”来代表以上各个因素。
(2) 被雇佣的蜜蜂
也称引领蜂,其与所采集的食物源一一对应。引领蜂储存有食物源的相关信息(相对与蜂巢的距离、方向和食物源的丰富程度等)并把这些信息以一定的概率与其他蜜蜂分享。
(3) 未被雇佣的蜜蜂
其主要任务是寻找和开采食物源。有两种未被雇佣的蜜蜂:侦查蜂和跟随蜂。侦查蜂搜索附近的新食物源;跟随蜂等在蜂巢里面并通过与引领蜂分享相关信息找到食物源。一般情况下,侦查蜂的数量是蜂群的5%--20%
在群体智慧形成过程中,蜜蜂间交换信息是最重要的一环。舞蹈区是蜂巢中最为重要的信息交换地。蜜蜂的舞蹈也叫摇摆舞。食物源的信息在舞蹈区通过摇摆舞的形式与其他蜜蜂共享,引领蜂通过摇摆舞的持续时间等来表现食物源的收益率,故跟随蜂可以观察到大量的舞蹈并依据收益率来选择到哪个食物源采蜜。收益率与食物源被选择的可能性成正比。因而,蜜蜂被招募到一个食物源的概率与食物源的收益率成正比。
初始时刻,蜜蜂以侦查蜂的方式搜索。其搜索可以由系统的先验知识决定,也可以完全随机。经过一轮侦查后,若蜜蜂找到食物源,蜜蜂利用它本身的存储能力记录位置信息并开始采蜜。此时,蜜蜂将称为“被雇佣者”。蜜蜂在食物源采蜜后回到蜂巢卸下蜂蜜,然后将有如下选择:
(1) 放弃食物源而成为非雇佣蜂;
(2) 跳摇摆舞为所对应的食物源招募更多的蜜蜂,然后回到食物源采蜜;
(3) 继续在食物源采蜜而不进行招募。
对于非雇佣蜂有如下选择:
(1) 转变为侦查蜂并搜索蜂巢附近的食物源,其搜索可以由先验知识决定也可以完全随机;
(2) 在观察完摇摆舞以后,被雇佣成为跟随蜂,开始搜索对应食物源领域并采蜜。
2、 ABC算法原理
在基本ABC算法中,人工蜂群包含三种个体:雇佣蜂、观察蜂和侦查蜂
每个雇佣蜂对应一个确定的蜜源(解向量),并在迭代中对蜜源的领域进行搜索。
根据蜜源的丰富程度(适应值的大小)采用轮盘赌的方式雇佣观察蜂采蜜(搜索新蜜源)
如果蜜源多次更新没有改进,则放弃该蜜源,雇佣蜂转为侦查蜂随机搜索新蜜源。
(1) 蜜源初始化
初始化时,随机生成SN个可行解(等于雇佣蜂的数量)并计算适应度函数值。随机产生可行解的公式如下:
(2) 新蜜源的更新搜索公式
(3) 观察蜂选择雇佣蜂的概率
(4) 侦查蜂的产生
为了防止算法陷入局部最优,当蜜源迭代limit次没有改进时,便放弃该蜜源,并且将该蜜源记录在禁忌表中,同时该蜜源对应的雇佣蜂转变为侦查蜂按式(1)随机产生一个新的位置代替原蜜源。
3、 控制参数
(1) 蜜源的个数(与雇佣蜂或观察蜂相等)SN
(2) 算法终止的最大进化数(maximum evaluation number)MEN
(3) Limit
基本ABC算法的流程:
(1) 根据式(1)初始化种群解xi,i=1,2,…,SN;
(2) 计算种群中各蜜蜂的适应值
(3) cycle=1
(4) repeat
(5) 雇佣蜂根据(2)产生新的解vi并计算适应值
(6) 雇佣蜂根据贪心策略选择蜜源
(7) 根据(3)式计算选择蜜源xi的概率pi
(8) 观察蜂根据概率pi选择蜜源xi,根据(2)式在该蜜源附近产生新的蜜源vi,并计算新蜜源vi的适应值
(9) 观察蜂根据贪心算法选择蜜源
(10) 决定是否存在需要放弃的蜜源,如果存在,根据(1)式随机产生一个蜜源代替它
(11) 记录最优解
(12) cycle = cycle + 1
(13) until cycle=MCN
4、 算法可能的改进方式
(1) 新蜜源的搜索领域(2)式的改进(如:其他拓扑邻域)
(2) 观察蜂选择雇佣蜂的概率(3)式的改进(如:动态的)
参考文章:文章1、文库算法介绍
群智能算法之人工蜂群算法(ABC算法)相关推荐
- python智能优化算法_人工蜂群(ABC)算法的群体智能优化问题方法(Python完整实现)...
这些算法已被证明在解决实际问题方面非常有效.一些可以使用SI算法解决的任务是聚类,行星映射,控制纳米机器人和数据挖掘中的各种问题,如特征选择和分类. 在数学上讲,要使用计算智能算法解决现实世界中的优化 ...
- 智能优化算法:人工蜂群算法-附代码
智能优化算法:人工蜂群算法 文章目录 智能优化算法:人工蜂群算法 1.算法原理 1.1 蜂群的初始化 1.2 雇佣蜂阶段 1.3 跟随蜂阶段 1.4 探索蜂阶段 2.算法流程 3.算法结果 4.参考文 ...
- 改进交叉算子的自适应人工蜂群黏菌算法-附代码
改进交叉算子的自适应人工蜂群黏菌算法 文章目录 改进交叉算子的自适应人工蜂群黏菌算法 1.黏菌算法 2.改进黏菌算法 2.1 自适应可调节反馈因子 2.2 算数交叉算子 2.3 改进的人工蜂群搜索策略 ...
- 人工蜂群算法python_人工蜂群算法简介与程序分析
目前人工蜂群算法主要分为基于婚配行为与基于釆蜜行为两大类,本文研究的是基于釆蜜行为的人工蜂群算法. 蜜蜂采蜜 自然界中的蜜蜂总能在任何环境下以极高的效率找到优质蜜源,且能适应环境的改变.蜜蜂群的采蜜系 ...
- 智能优化算法:人工大猩猩部队优化算法-附代码
智能优化算法:人工大猩猩部队优化算法 文章目录 智能优化算法:人工大猩猩部队优化算法 1.算法原理 1.1勘探阶段 1.2 开发阶段 1.2.1 跟随银背大猩猩 1.2.2 竞争成年雌性 2.实验结果 ...
- 【ABC算法】人工蜂群算法原理及代码
一.人工蜂群算法的介绍 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜 ...
- 进化算法-人工蜂群(ABC)
人工蜂群算法(Artificial Bee Colony Algorithm,ABC),主要模拟蜂群的智能采蜜行为,ABC算法中,主要由采蜜蜂.观察蜂.侦查蜂,3部分组成,每一处蜜源仅有一个采蜜蜂, ...
- 算法篇——人工蜂群算法python实现
最终效果与测试函数 1迭代过程 2效果曲线 3测试函数 artiBeeColony.py 面向对象的实现方式,简单明了.如有转载请注明出处. 直接运行,有bug的评论区私聊 #encoding:utf ...
- 人工蜂群算法python_人工蜂群算法-python实现
1 importnumpy as np2 from ABSIndividual importABSIndividual3 importrandom4 importcopy5 importmatplot ...
最新文章
- java 9宫格抽奖_前端js实现九宫格模式抽奖(多宫格抽奖)
- Wireshark网络抓包实践
- Java虚拟机详解02----JVM内存结构
- Stack:peek、pop、push、search
- Python面试题(三)(爬虫方面)
- python pynlpir NLPIR许可证过期问题【RuntimeError: NLPIR function ‘NLPIR_Init‘ failed.】
- 【一些简单的jQuery选择器】
- 美国著名核物理学家,前半生为美国造核弹,后半生为中国放牛
- linux下如何搜索某个文件,技术|如何在 Linux 中查找一个文件
- java什么是接口_Java接口是什么
- c语言tracert程序一直超时,TRACERT怎么用我用这个命令为什么都是超时啊 爱问知识人...
- 光猫gpon和epon的区别
- 在Javascript中实现类似C#中string.Format的功能
- zzulioj1001C语言答案,ZZULIOJ
- 档案管理制度计算机管理制度,档案管理制度保密制度
- [密码学复习]Cryptography
- BF,KMP算法(万字图文详解)
- 微机原理与接口技术实验:子程序设计实验
- 需求驱动还是技术驱动,大跃进的聊天机器人在开着一辆往历史倒退的车
- win7电脑怎么录制视频 电脑怎么录屏
热门文章
- sap 假脱机请求_SAP打印机配置 - 萧静默的个人空间 - OSCHINA - 中文开源技术交流社区...
- 使用div+css编写网页框架
- 美通社日历 | 媒体关注、会展信息、企业财报发布,节假日备忘(12月14日—20日)...
- 有模有样解决Flutter里Webview无法访问HTTP页面的问题
- 如何向linux中添加头文件,linux添加头文件路径
- java面试 : JAVA中 常量的储存位置
- 骨传导耳机哪个好,排行靠前的几款不入耳蓝牙耳机分享
- c++终极螺旋丸:₍˄·͈༝·͈˄*₎◞ ̑̑“类与对象的结束“是结束也是开始
- 人工智能 VS人类,谁会笑到最后?
- 【高效养殖管控羊类系统设计说明书】