优化算法——人工蜂群算法(ABC)详解.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
优化算法——人工蜂群算法(ABC)详解

优化算法——人工蜂群算法(ABC) 一、人工蜂群算法的介绍 ? ? 手机微信关注公众号ID:datadw 学习数据挖掘,研究大数据,关注你想了解的,分享你需要的。人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根据各自的分工进行不同的活动,并实现蜂群信息的共享和交流,从而找到问题的最优解。人工蜂群算法属于群智能算法的一种。 ? ? ? ? 标准的ABC算法通过模拟实际蜜蜂的采蜜机制将人工蜂群分为3类: 采蜜蜂、观察蜂和侦察蜂。整个蜂群的目标是寻找花蜜量最大的蜜源。在标准的ABC算法中,采蜜蜂利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息;观察蜂在蜂房中等待并依据采蜜蜂分享的信息寻找新的蜜源;侦查蜂的任务是寻找一个新的有价值的蜜源,它们在蜂房附近随机地寻找蜜源。 ? ? ? ? 假设问题的解空间是维的,采蜜蜂与观察蜂的个数都是,采蜜蜂的个数或观察蜂的个数与蜜源的数量相等。则标准的ABC算法将优化问题的求解过程看成是在维有哪些信誉好的足球投注网站空间中进行有哪些信誉好的足球投注网站。每个蜜源的位置代表问题的一个可能解,蜜源的花蜜量对应于相应的解的适应度。一个采蜜蜂与一个蜜源是相对应的。与第个蜜源相对应的采蜜蜂依据如下公式寻找新的蜜源: 其中,,,是区间上的随机数,。标准的ABC算法将新生成的可能解与原来的解作比较,并采用贪婪选择策略保留较好的解。每一个观察蜂依据概率选择一个蜜源,概率公式为 其中,是可能解的适应值。对于被选择的蜜源,观察蜂根据上面概率公式搜寻新的可能解。当所有的采蜜蜂和观察蜂都有哪些信誉好的足球投注网站完整个有哪些信誉好的足球投注网站空间时,如果一个蜜源的适应值在给定的步骤内(定义为控制参数“limit”) 没有被提高, 则丢弃该蜜源,而与该蜜源相对应的采蜜蜂变成侦查蜂,侦查蜂通过已下公式有哪些信誉好的足球投注网站新的可能解。 其中,是区间上的随机数,和是第维的下界和上界。 初始化; 重复以下过程: 将采蜜蜂与蜜源一一对应,根据上面第一个公式更新蜜源信息,同时确定蜜源的花蜜量; 观察蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜源的花蜜量; 确定侦查蜂,并根据第三个公式寻找新的蜜源; 记忆迄今为止最好的蜜源; 判断终止条件是否成立; ? ? 对于函数 其中。 代码: [cpp]?view plaincopy #includeiostream?? #includetime.h?? #includestdlib.h?? #includecmath?? #includefstream?? #includeiomanip?? using?namespace?std;?? ?? const?int?NP=40;//种群的规模,采蜜蜂+观察蜂?? const?int?FoodNumber=NP/2;//食物的数量,为采蜜蜂的数量?? const?int?limit=20;//限度,超过这个限度没有更新采蜜蜂变成侦查蜂?? const?int?maxCycle=10000;//停止条件?? ?? /*****函数的特定参数*****/?? const?int?D=2;//函数的参数个数?? const?double?lb=-100;//函数的下界??? const?double?ub=100;//函数的上界?? ?? double?result[maxCycle]={0};?? ?? /*****种群的定义****/?? struct?BeeGroup?? {?? ????double?code[D];//函数的维数?? ????double?trueFit;//记录真实的最小值?? ????double?fitness;?? ????double?rfitness;//相对适应值比例?? ????int?trail;//表示实验的次数,用于与limit作比较?? }Bee[FoodNumber];?? ?? BeeGroup?NectarSource[FoodNumber];//蜜源,注意:一切的修改都是针对蜜源而言的?? BeeGroup?EmployedBee[FoodNumber];//采蜜蜂?? BeeGroup?OnLooker[FoodNumber];//观察蜂?? BeeGroup?BestSource;//记录最好蜜源?? ?? /*****函数的声明*****/?? double?random(double,?double);//产生区间上的随机数?? void?initilize();//初始化参数?? double?calculationTruefit(BeeGroup);//计算真实的函数值?? double

文档评论(0)

cc880559 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档