人工蜂群算法

人工蜂群算法

人工蜂群算法(Artificial Bee Colony Optimization,ABC)是一种基于蜜蜂觅食行为的优化算法,由土耳其学者Karaboga于2005年提出,算法模拟蜜蜂的采蜜行为对优化问题进行求解。

算法原理

ABC算法的核心思想是将优化问题的解空间视作蜜源,蜜蜂作为搜索代理在解空间中进行探索。在算法的每一轮迭代中,蜜蜂根据当前蜜源的质量和周围蜜源的信息,选择性地进行勘探和开发,从而逐步优化搜索空间。蜜源的位置代表了优化问题的可能解决方案,蜜源的花蜜量对应于相关解决方案的优劣,ABC算法与优化问题的对应关系如下表所示。

ABC优化问题
蜜源可行解: X i = ( x i 1 , x i 2 , … , x i D ) X_i=(x_{i1},x_{i2},\dots,x_{iD}) Xi=(xi1,xi2,,xiD)
花蜜量适应度

算法超参数

ABC算法的超参数包括雇佣蜂比例和蜜源保留次数阈值等,参数影响着蜜蜂在搜索空间中的行为和搜索效率。

  • e m p l o y e d _ r a t e employed\_rate employed_rate:雇佣蜂比例;
  • l i m i t limit limit:蜜源保留次数的阈值;
  • NP:种群大小;
  • Gmax:最大迭代数。

寻优公式

人工蜂群由雇佣蜂(employed bees)、围观蜂(onlookers)和侦察蜂(scouts)三类蜜蜂组成。在标准的ABC算法中,蜂群的前半部分由受雇的人工蜜蜂组成,后半部分为观察蜂。每个蜜源只有一只雇佣蜂,受雇蜜蜂的数量等于蜂巢周围食物源的数量。被雇用的蜜蜂的食物源已被蜜蜂吃光,它就会转变为侦察蜂探索新的蜜源。ABC通过重复执行雇佣蜂、观察蜂和侦察蜂三个阶段来寻找问题的最优解。

  1. 雇佣蜂阶段,雇佣蜂在现有蜜源的位置开发新的蜜源。
    v i j t = x i j t + ϕ i j t ( x i j t − x k j t ) (1) v_{ij}^t=x_{ij}^t + \phi_{ij}^t(x_{ij}^t - x_{kj}^t) \tag{1} vijt=xijt+ϕijt(xijtxkjt)(1)
    其中, k ∈ { 1 , ⋯ , N P } k \in \{1,\cdots,NP\} k{1,,NP} k ≠ i k\neq i k=i ϕ i j ∈ [ − 1 , − 1 ] \phi_{ij} \in [-1,-1] ϕij[1,1]
    X i t + 1 = { X i t , if  f i t ( X i ) t > f i t ( V i t ) V i t + 1 , e l s e (2) X_{i}^{t+1}= \begin{cases} X_{i}^t, & \text{if $fit(X_i)^t > fit(V_i^t)$}\\ V_{i}^{t+1},& else \end{cases} \tag{2} Xit+1={Xit,Vit+1,if fit(Xi)t>fit(Vit)else(2)
  2. 观察蜂阶段,观察蜂对雇佣蜂分享的蜜源信息进行分享,采用轮盘赌策略来选址蜜源跟踪开采新的蜜源,公式与式(1)等价。
  3. 侦察蜂阶段,蜜源 X i X_i Xi拥有参数trial,统计蜜源没有被更新的次数,当蜜源更新被保留时,trail设置为0;反之,trail加1。如果一个蜜源经过多次开采没被更新,当trail超过了阈值limit,那么需要抛弃该蜜源,启动侦察探索新的蜜源。
    x i j = x i , j m i n + r a n d ( 0 , 1 ) ⋅ ( x i , j m a x − x i , j m i n ) (3) x_{ij}=x_{i,j}^{min}+rand(0,1) \cdot (x_{i,j}^{max} - x_{i,j}^{min}) \tag{3} xij=xi,jmin+rand(0,1)(xi,jmaxxi,jmin)(3)
    雇佣蜂阶段和观察蜂阶段体现了算法的开发过程即算法对已知优质解的利用,侦察蜂阶段体现了算法的探索过程即算法对新解的探索。

初始化

初始解应当覆盖整个搜索空间,一般采用均匀分布随机生成初始解。
x i j 0 = x i , j m i n + r a n d ( 0 , 1 ) ⋅ ( x i , j m a x − x i , j m i n ) (4) x_{ij}^0=x_{i,j}^{min}+rand(0,1) \cdot (x_{i,j}^{max} - x_{i,j}^{min}) \tag{4} xij0=xi,jmin+rand(0,1)(xi,jmaxxi,jmin)(4)
其中,rand(0,1)表示0-1之间的随机数, x i j m a x x_{ij}^{max} xijmax x i j m i n x_{ij}^{min} xijmin分别表示该问题第j个维度变量的上下界。

伪代码


输入:超参数 ( e m p l o y e d _ r a t e , l i m i t , N P , G m a x ) (employed\_rate,limit,NP,Gmax) (employed_rate,limit,NP,Gmax)和搜索边界 X m i n X_{min} Xmin, X m a x X_{max} Xmax
输出:最优解
1:初始化
2:根据式(4)初始化位置种群X
3:记录群体最优gbest
4:优化搜索
5:For G = 1:Gmax
6: \qquad 雇佣蜂更新
7: \qquad 观察蜂更新
8: \qquad 侦察蜂更新
9: \qquad 更新群体最优 g b e s t gbest gbest
10:End


注:优化算法并不保证能够得到问题的最优解,因此,算法输出的最优解并非问题的整体最优解,而是搜索过程中最好的一个解。

实验

实验选取二维的平方和函数,函数的最小值在点(a,b)取得,最小值为0。
f ( x 1 , x 2 ) = ( x 1 − a ) 2 + ( x 2 − b ) 2 (5) f(x_1,x_2) = (x_1 - a)^2 + (x_2-b)^2 \tag{5} f(x1,x2)=(x1a)2+(x2b)2(5)

实验参数如下:

参数
问题维度D2
种群数NP30
最大进化次数Gmax50
雇佣蜂比例0.5
limit10
取值范围(-100,100)

人工蜂群算法搜索过程

人工蜂群算法搜索过程

人工蜂群算法收敛曲线

人工蜂群算法收敛曲线

最优值最差值平均值标准差
1.686e-115.679e-76.952e-81.324e-7

代码获取

关注微信公众号数学模型与算法回复 ABC算法获取python代码

参考文献

[1] 何尧,刘建华,杨荣华.人工蜂群算法研究综述[J].计算机应用研究,2018,35(05):1281-1286.
[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.
[3] Akay B, Karaboga D. A modified artificial bee colony algorithm for real-parameter optimization[J]. Information sciences, 2012, 192: 120-142.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql学习笔记之事务详解(读未提交、读以提交、可重复读、串行化读)

在这个博主的基础上,增加两种情况的对比:https://blog.csdn.net/llllllkkkkkooooo/article/details/108068919 可重复读中幻读现象(未使用MVCC) 设置可重复读的隔离级别 set global transaction isolation level repeatable read…

「解析文件流,Java之FileOutputStream助您轻松操作文件!」

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!&#xf…

TCP重传机制、滑动窗口、拥塞控制

一、总述 TCP,Transmission Control Protocol,是一个面向连接、基于流式传输的可靠传输协议,考虑到的内容很多,比如数据包的丢失、损坏、分片和乱序等,TCP协议通过多种不同的机制来实现可靠传输。今天,重点…

复试人工智能前沿概念总结

1.大模型相关概念(了解即可) 1.1 GPT GPT,全称为Generative Pre-training Transformer,是OpenAI开发的一种基于Transformer的大规模自然语言生成模型。GPT模型采用了自监督学习的方式,首先在大量的无标签文本数据上进…

Android使用WebView打开内嵌H5网页

Android打开外部网页链接请参考上一篇文章 https://public.blog.csdn.net/article/details/136384559 继上篇,新建assets文章夹,将H5的网页资源放到此文件夹下 把H5的资源文件都拷进来 这个时候,将添加打开本地网页的代码: //打…

【活动】2024年AI辅助研发:深度变革与无限潜力

作为一名前端程序员,深入探讨2024年AI在软件研发领域的应用趋势及其影响,我们可以看到一场引人注目的转型正在发生。AI辅助研发对于前端开发而言,不仅意味着效率的飞跃,更是在用户体验设计、代码编写、性能优化、项目管理等诸多方…

Java零基础 - 数组的定义和声明

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

httprunner用例结构(前后置)

说明:httprunner 结合 pytest 的前后置方式 1. 用例级别前后置 1.1. setup teardown class TestCaseRefTestcase(HttpRunner):# 用例级别前后置def setup(self):logger.warning("------用例级别前置")def teardown(self):logger.warning("------用…

在Vue中处理接口返回的二进制图片数据

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Android使用WebView打开外部网页链接

发布Android应用,除了用原生开发外,更多是采用内嵌H5网页的方式来做,便于更新以及多平台使用。 一、第一种方式是直接通过WebView打开外部H5链接。 新建Android工程 直接创建一个工程,点击运行就可以了,打开是个空页…

2024 批量下载公众号文章内容/阅读数/在看数/点赞数/留言数/粉丝数导出pdf文章备份(带留言):公众号记忆承载近1500篇历史文章在线查看,找文章方便了

关于公众号文章批量下载,我之前写过很多文章: 视频更新版:批量下载公众号文章内容/话题/图片/封面/音频/视频,导出html,pdf,excel包含阅读数/点赞数/留言数 2021陶博士2006/caoz的梦呓/刘备我祖/六神读金…

打造禹州中医药大模型,以AI驱动业务创新(内附孙思邈GPT内测版)

大禹智库 第78 期(总第409 期) 2024年 3 月 4 日 在中医药传承与发展的关键时期,结合许昌市的地域特色和产业优势,大禹智库提出“打造禹州中医药大模型,以AI驱动业务创新”的战略构想。本报告围绕构建禹州中医药现代化…

旅游陪同翻译,英译中需要具备什么能力!

随着中国旅游业的蓬勃发展,越来越多的外国游客选择踏足这片充满魅力的土地。然而,语言障碍常常成为他们探索中国文化的绊脚石。在这时,旅游陪同翻译应运而生,为游客提供了便捷的语言沟通服务,让他们的旅程更加顺畅和愉…

河北省国际光伏展览会

能源是国民经济发展的重要基础之一。随着国民经济的发展,能源的缺口增大,能源安全及能源在国民经济中的地位越显突出。我国是世界上少数几个能源结构以煤为INVITATION主的国家之一,也是世界上最大的煤炭消费国,燃煤造成的环境污染…

云轴科技ZStack荣获证券基金行业信息技术应用创新联盟年度优秀成员奖

近日,由中国证监会科技监管司、上海市经济和信息化委员会及上交所理事会科技发展委员会指导,证券基金行业信息技术应用创新联盟(简称信创联盟)主办的2023年年度工作会议在上海成功举办。会议汇聚了来自监管机构、政府机构、行业侧…

Spring Cloud Gateway自定义断言

问题:Spring Cloud Gateway自带的断言(Predicate)不满足业务怎么办?可以自定义断言! 先看Spring Cloud Gateway是如何实现断言的 Gateway中断言的整体架构如下: public abstract class AbstractRoutePred…

【kerberos】hadoop集群使用keytab认证的逻辑

一、背景: haoop的kerberos认证核心是org.apache.hadoop.security.UserGroupInformation类。 UserGroupInformation一般有两种:(1)apache原生的(2)cdh hdp改良过的,即cloudera改良过的。 由此衍…

Flink并行度

1、Task flink中每个算子就是一个Task,比如flatMap、map、sum是一个Task。 2、SubTask 算子有几个并行度SubTask的数量就是几,比如 3、算子并行度 算子并行度指的是每个算子的并行度,可用env.setParallelism(1);设置所有算子的并行度&am…

基于Jupyter快速入门Python,Numpy,Scipy,Matplotlib

文章目录 Jupyter 和 Colab 笔记本PythonPython 版本基础数据类型数字Numbers布尔值Booleans字符串Strings 容器列表List字典Dictionaries集合Sets元组Tuples 函数类 Numpy数组Array数组索引Array indexing数据类型DatatypesArray math广播Broadcasting Scipy图像操作MATLAB文件…