收藏 分享(赏)

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

上传人:cjc2202537 文档编号:184718 上传时间:2018-03-23 格式:DOC 页数:12 大小:176KB
下载 相关 举报
优化算法——人工蜂群算法(abc).doc_第1页
第1页 / 共12页
优化算法——人工蜂群算法(abc).doc_第2页
第2页 / 共12页
优化算法——人工蜂群算法(abc).doc_第3页
第3页 / 共12页
优化算法——人工蜂群算法(abc).doc_第4页
第4页 / 共12页
优化算法——人工蜂群算法(abc).doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

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

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

4、蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜源的花蜜量;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. const int FoodNu

5、mber=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. doubl

6、e 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. BeeGroup

7、 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 sendEmploye

8、dBees(); 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

9、 gen=0; 61. 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. 18

10、0. EmployedBeei.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(OnLook

11、eri.trueFit); 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. NectarSourcemaxtrialindex.trail=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报