优化算法——人工蜂群算法(abc)

上传人:小** 文档编号:47004836 上传时间:2018-06-29 格式:DOC 页数:12 大小:128.50KB
返回 下载 相关 举报
优化算法——人工蜂群算法(abc)_第1页
第1页 / 共12页
优化算法——人工蜂群算法(abc)_第2页
第2页 / 共12页
优化算法——人工蜂群算法(abc)_第3页
第3页 / 共12页
优化算法——人工蜂群算法(abc)_第4页
第4页 / 共12页
优化算法——人工蜂群算法(abc)_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《优化算法——人工蜂群算法(abc)》由会员分享,可在线阅读,更多相关《优化算法——人工蜂群算法(abc)(12页珍藏版)》请在金锄头文库上搜索。

1、优化算法人工蜂群算法(ABC)一、人工蜂群算法的介绍一、人工蜂群算法的介绍手机微信关注公众号 ID:datadw 学习数据挖掘,研究大数据,关注你想了解的,分享你需要的。人工蜂群算法(Artificial Bee Colony, ABC)是由 Karaboga 于 2005 年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根据各自的分工进行不同的活动,并实现蜂群信息的共享和交流,从而找到问题的最优解。人工蜂群算法属于群智能算法的一种。二、人工蜂群算法的原理二、人工蜂群算法的原理1 1、原理、原理标准的 ABC 算法通过模拟实际蜜蜂的采蜜机制将人工蜂群分为 3 类

2、: 采蜜蜂、观察蜂和侦察蜂。整个蜂群的目标是寻找花蜜量最大的蜜源。在标准的 ABC 算法中,采蜜蜂利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息;观察蜂在蜂房中等待并依据采蜜蜂分享的信息寻找新的蜜源;侦查蜂的任务是寻找一个新的有价值的蜜源,它们在蜂房附近随机地寻找蜜源。假设问题的解空间是维的,采蜜蜂与观察蜂的个数都是,采蜜蜂的个数或观察蜂的个数与蜜源的数量相等。则标准的 ABC 算法将优化问题的求解过程看成是在维搜索空间中进行搜索。每个蜜源的位置代表问题的一个可能解,蜜源的花蜜量对应于相应的解的适应度。一个采蜜蜂与一个蜜源是相对应的。与第 个蜜源相对应的采蜜蜂依据如下公式寻找新的蜜源:其

3、中,是区间上的随机数,。标准的 ABC 算法将新生成的可能解与原来的解作比较,并采用贪婪选择策略保留较好的解。每一个观察蜂依据概率选择一个蜜源,概率公式为其中,是可能解的适应值。对于被选择的蜜源,观察蜂根据上面概率公式搜寻新的可能解。当所有的采蜜蜂和观察蜂都搜索完整个搜索空间时,如果一个蜜源的适应值在给定的步骤内(定义为控制参数“limit”) 没有被提高, 则丢弃该蜜源,而与该蜜源相对应的采蜜蜂变成侦查蜂,侦查蜂通过已下公式搜索新的可能解。其中, 是区间上的随机数,和是第 维的下界和上界。2 2、流程、流程初始化;重复以下过程:o将采蜜蜂与蜜源一一对应,根据上面第一个公式更新蜜源信息,同时确

4、定蜜源的花蜜量;o观察蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜源的花蜜量;o确定侦查蜂,并根据第三个公式寻找新的蜜源;o记忆迄今为止最好的蜜源;判断终止条件是否成立;三、人工蜂群算法用于求解函数优化问题三、人工蜂群算法用于求解函数优化问题对于函数其中。代码:cpp view plaincopy1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.using namespace std; 8. 9.const int NP=40;/种群的规模,采蜜蜂+观察蜂 10.

5、const int FoodNumber=NP/2;/食物的数量,为采蜜蜂的数量 11.const int limit=20;/限度,超过这个限度没有更新采蜜蜂变成侦查蜂 12.const int maxCycle=10000;/停止条件 13. 14./*函数的特定参数*/ 15.const int D=2;/函数的参数个数 16.const double lb=-100;/函数的下界 17.const double ub=100;/函数的上界 18. 19.double resultmaxCycle=0; 20. 21./*种群的定义*/ 22.struct BeeGroup 23. 24

6、. double codeD;/函数的维数 25. double trueFit;/记录真实的最小值 26. double fitness; 27. double rfitness;/相对适应值比例 28. int trail;/表示实验的次数,用于与 limit 作比较 29.BeeFoodNumber; 30. 31.BeeGroup NectarSourceFoodNumber;/蜜源,注意:一切的修改都是针对蜜源而言的 32.BeeGroup EmployedBeeFoodNumber;/采蜜蜂 33.BeeGroup OnLookerFoodNumber;/观察蜂 34.BeeGro

7、up BestSource;/记录最好蜜源 35. 36./*函数的声明*/ 37.double random(double, double);/产生区间上的随机数 38.void initilize();/初始化参数 39.double calculationTruefit(BeeGroup);/计算真实的函数值 40.double calculationFitness(double);/计算适应值 41.void CalculateProbabilities();/计算轮盘赌的概率 42.void evalueSource();/评价蜜源 43.void sendEmployedBees(

8、); 44.void sendOnlookerBees(); 45.void sendScoutBees(); 46.void MemorizeBestSource(); 47. 48. 49./*主函数*/ 50.int main() 51. 52. ofstream output; 53. output.open(“dataABC.txt“); 54. 55. srand(unsigned)time(NULL); 56. initilize();/初始化 57. MemorizeBestSource();/保存最好的蜜源 58. 59. /主要的循环 60. int gen=0; 61.

9、while(gen=0) 140. 141. fitnessResult=1/(truefit+1); 142. else 143. 144. fitnessResult=1+abs(truefit); 145. 146. return fitnessResult; 147. 148. 149.void sendEmployedBees()/修改采蜜蜂的函数 150. 151. int i,j,k; 152. int param2change;/需要改变的维数 153. double Rij;/-1,1之间的随机数 154. for (i=0;iub) 179. 180. EmployedBe

10、ei.codeparam2change=ub; 181. 182. if (EmployedBeei.codeparam2changemaxfit) 214. maxfit=NectarSourcei.fitness; 215. 216. 217. for (i=0;iub) 265. 266. OnLookeri.codeparam2change=ub; 267. 268. OnLookeri.trueFit=calculationTruefit(OnLookeri); 269. OnLookeri.fitness=calculationFitness(OnLookeri.trueFit);

11、 270. 271. /*贪婪选择策略*/ 272. if (OnLookeri.trueFitNectarSourcemaxtrialindex.trail) 304. 305. maxtrialindex=i; 306. 307. 308. if(NectarSourcemaxtrialindex.trail=limit) 309. 310. /*重新初始化*/ 311. for (j=0;jD;j+) 312. 313. R=random(0,1); 314. NectarSourcemaxtrialindex.codej=lb+R*(ub-lb); 315. 316. NectarSo

12、urcemaxtrialindex.trail=0; 317. NectarSourcemaxtrialindex.trueFit=calculationTruefit(NectarSourcemaxtrialindex); 318. NectarSourcemaxtrialindex.fitness=calculationFitness(NectarSourcemaxtrialindex.trueFit); 319. 320. 321. 322.void MemorizeBestSource()/保存最优的蜜源 323. 324. int i,j; 325. for (i=1;iFoodNumber;i+) 326. 327. if (NectarSourcei.trueFitBestSource.trueFit) 328. 329. for (j=0;jD;j+) 330. 331. BestSource.codej=NectarSourcei.codej; 332. 333. BestSource.trueFit=NectarSourcei.trueFit; 334. 335. 336. 收敛曲线:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 宣传企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号