




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
优化算法人工蜂群算法(ABC)一、人工蜂群算法的介绍 手机微信关注公众号ID:datadw 学习数据挖掘,研究大数据,关注你想了解的,分享你需要的。人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根据各自的分工进行不同的活动,并实现蜂群信息的共享和交流,从而找到问题的最优解。人工蜂群算法属于群智能算法的一种。二、人工蜂群算法的原理 1、原理 标准的ABC算法通过模拟实际蜜蜂的采蜜机制将人工蜂群分为3类: 采蜜蜂、观察蜂和侦察蜂。整个蜂群的目标是寻找花蜜量最大的蜜源。在标准的ABC算法中,采蜜蜂利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息;观察蜂在蜂房中等待并依据采蜜蜂分享的信息寻找新的蜜源;侦查蜂的任务是寻找一个新的有价值的蜜源,它们在蜂房附近随机地寻找蜜源。 假设问题的解空间是维的,采蜜蜂与观察蜂的个数都是,采蜜蜂的个数或观察蜂的个数与蜜源的数量相等。则标准的ABC算法将优化问题的求解过程看成是在维搜索空间中进行搜索。每个蜜源的位置代表问题的一个可能解,蜜源的花蜜量对应于相应的解的适应度。一个采蜜蜂与一个蜜源是相对应的。与第个蜜源相对应的采蜜蜂依据如下公式寻找新的蜜源:其中,是区间上的随机数,。标准的ABC算法将新生成的可能解与原来的解作比较,并采用贪婪选择策略保留较好的解。每一个观察蜂依据概率选择一个蜜源,概率公式为其中,是可能解的适应值。对于被选择的蜜源,观察蜂根据上面概率公式搜寻新的可能解。当所有的采蜜蜂和观察蜂都搜索完整个搜索空间时,如果一个蜜源的适应值在给定的步骤内(定义为控制参数“limit”) 没有被提高, 则丢弃该蜜源,而与该蜜源相对应的采蜜蜂变成侦查蜂,侦查蜂通过已下公式搜索新的可能解。其中,是区间上的随机数,和是第维的下界和上界。 2、流程 初始化; 重复以下过程:o 将采蜜蜂与蜜源一一对应,根据上面第一个公式更新蜜源信息,同时确定蜜源的花蜜量;o 观察蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜源的花蜜量;o 确定侦查蜂,并根据第三个公式寻找新的蜜源;o 记忆迄今为止最好的蜜源; 判断终止条件是否成立;三、人工蜂群算法用于求解函数优化问题 对于函数其中。代码:cppview plaincopy1. #include2. #include3. #include4. #include5. #include6. #include7. usingnamespacestd;8. 9. constintNP=40;/种群的规模,采蜜蜂+观察蜂10. constintFoodNumber=NP/2;/食物的数量,为采蜜蜂的数量11. constintlimit=20;/限度,超过这个限度没有更新采蜜蜂变成侦查蜂12. constintmaxCycle=10000;/停止条件13. 14. /*函数的特定参数*/15. constintD=2;/函数的参数个数16. constdoublelb=-100;/函数的下界17. constdoubleub=100;/函数的上界18. 19. doubleresultmaxCycle=0;20. 21. /*种群的定义*/22. structBeeGroup23. 24. doublecodeD;/函数的维数25. doubletrueFit;/记录真实的最小值26. doublefitness;27. doublerfitness;/相对适应值比例28. inttrail;/表示实验的次数,用于与limit作比较29. BeeFoodNumber;30. 31. BeeGroupNectarSourceFoodNumber;/蜜源,注意:一切的修改都是针对蜜源而言的32. BeeGroupEmployedBeeFoodNumber;/采蜜蜂33. BeeGroupOnLookerFoodNumber;/观察蜂34. BeeGroupBestSource;/记录最好蜜源35. 36. /*函数的声明*/37. doublerandom(double,double);/产生区间上的随机数38. voidinitilize();/初始化参数39. doublecalculationTruefit(BeeGroup);/计算真实的函数值40. doublecalculationFitness(double);/计算适应值41. voidCalculateProbabilities();/计算轮盘赌的概率42. voidevalueSource();/评价蜜源43. voidsendEmployedBees();44. voidsendOnlookerBees();45. voidsendScoutBees();46. voidMemorizeBestSource();47. 48. 49. /*主函数*/50. intmain()51. 52. ofstreamoutput;53. output.open(dataABC.txt);54. 55. srand(unsigned)time(NULL);56. initilize();/初始化57. MemorizeBestSource();/保存最好的蜜源58. 59. /主要的循环60. intgen=0;61. while(genmaxCycle)62. 63. sendEmployedBees();64. 65. CalculateProbabilities();66. 67. sendOnlookerBees();68. 69. MemorizeBestSource();70. 71. sendScoutBees();72. 73. MemorizeBestSource();74. 75. outputsetprecision(30)BestSource.trueFitendl;76. 77. gen+;78. 79. 80. output.close();81. cout运行结束!endl;82. return0;83. 84. 85. /*函数的实现*/86. doublerandom(doublestart,doubleend)/随机产生区间内的随机数87. 88. returnstart+(end-start)*rand()/(RAND_MAX+1.0);89. 90. 91. voidinitilize()/初始化参数92. 93. inti,j;94. for(i=0;iFoodNumber;i+)95. 96. for(j=0;j=0)140. 141. fitnessResult=1/(truefit+1);142. else143. 144. fitnessResult=1+abs(truefit);145. 146. returnfitnessResult;147. 148. 149. voidsendEmployedBees()/修改采蜜蜂的函数150. 151. inti,j,k;152. intparam2change;/需要改变的维数153. doubleRij;/-1,1之间的随机数154. for(i=0;iFoodNumber;i+)155. 156. 157. param2change=(int)random(0,D);/随机选取需要改变的维数158. 159. /*选取不等于i的k*/160. while(1)161. 162. k=(int)random(0,FoodNumber);163. if(k!=i)164. 165. break;166. 167. 168. 169. for(j=0;jub)179. 180. EmployedBeei.codeparam2change=ub;181. 182. if(EmployedBeei.codeparam2changelb)183. 184. EmployedBeei.codeparam2change=lb;185. 186. EmployedBeei.trueFit=calculationTruefit(EmployedBeei);187. EmployedBeei.fitness=calculationFitness(EmployedBeei.trueFit);188. 189. /*贪婪选择策略*/190. if(EmployedBeei.trueFitNectarSourcei.trueFit)191. 192. for(j=0;jD;j+)193. 194. NectarSourcei.codej=EmployedBeei.codej;195. 196. NectarSourcei.trail=0;197. NectarSourcei.trueFit=EmployedBeei.trueFit;198. NectarSourcei.fitness=EmployedBeei.fitness;199. else200. 201. NectarSourcei.trail+;202. 203. 204. 205. 206. voidCalculateProbabilities()/计算轮盘赌的选择概率207. 208. inti;209. doublemaxfit;210. maxfit=NectarSource0.fitness;211. for(i=1;imaxfit)214. maxfit=NectarSourcei.fitness;215. 216. 217. for(i=0;iFoodNumber;i+)218. 219. NectarSourcei.rfitness=(0.9*(NectarSourcei.fitness/maxfit)+0.1;220. 221. 222. 223. voidsendOnlookerBees()/采蜜蜂与观察蜂交流信息,观察蜂更改信息224. 225. inti,j,t,k;226. doubleR_choosed;/被选中的概率227. intparam2change;/需要被改变的维数228. doubleRij;/-1,1之间的随机数229. i=0;230. t=0;231. while(tFoodNumber)232. 233. 234. R_choosed=random(0,1);235. if(R_choosedNectarSourcei.rfitness)/根据被选择的概率选择236. 237. t+;238. param2change=(int)random(0,D);239. 240. /*选取不等于i的k*/241. while(1)242. 243. k=(int)random(0,FoodNumber);244. if(k!=i)245. 246. break;247. 248. 249. 250. for(j=0;jD;j+)251. 252. OnLookeri.codej=NectarSourcei.codej;253. 254. 255. /*更新*/256. Rij=random(-1,1);257. OnLookeri.codeparam2change=NectarSourcei.codeparam2change+Rij*(NectarSourcei.codeparam2change-NectarSourcek.codeparam2change);258. 259. /*判断是否越界*/260. if(OnLookeri.codeparam2changeub)265. 266. OnLookeri.codeparam2change=ub;267. 268. OnLookeri.trueFit=calculationTruefit(OnLookeri);269. OnLookeri.fitness=calculationFitness(OnLookeri.trueFit);270. 271. /*贪婪选择策略*/272. if(OnLookeri.trueFitNectarSourcei.trueFit)273. 274. for(j=0;jD;j+)275. 276. NectarSourcei.codej=OnLookeri.codej;277. 278. NectarSourcei.trail=0;279. NectarSourcei.trueFit=OnLookeri.trueFit;280. NectarSourcei.fitness=OnLookeri.fitness;281. else282. 283. NectarSourcei.trail+;284. 285. 286. i+;287. if(i=FoodNumber)288. 289. i=0;290. 291. 292. 293. 294. 295. /*只有一只侦查蜂*/296. voidsendScoutBees()/判断是否有侦查蜂的出现,有则重新生成蜜源297. 298. intmaxtrialindex,i,j;299. doubleR;/0,1之间的随机数300. maxtrialindex=0;301. for(i=1;iNectarSourcemaxtrialindex.trail)304. 305. maxtrialindex=i;306. 307. 308. if(NectarSourcemaxtrialindex.trail=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新型环保替代品开发与原药市场价值链重构矛盾分析
- 数字孪生技术在港口集装箱实时响应与应急预案模拟中的应用探索
- 故障自诊断算法在分布式控制架构中的容错机制
- 拉线防松技术升级与自锁结构拓扑优化研究
- 快时尚职场装供应链的劳工权益与环保悖论
- 3.水能和风能说课稿-2025-2026学年初中物理教科版八年级下册-教科版2012
- 学校安全网格化管理方案
- 循环经济视角下镁合金压铸件全生命周期碳排放核算与优化策略
- 循环经济模式下清洁耗材标准化包装与箱体兼容性矛盾
- 平台经济中刷子账号的边际成本曲线与平台流量分配的经济学悖论
- 强化学习在信息路由中的应用
- CE安全标准规范(电气类)
- 大象版科学新大象版 五年级上册科学课件-3.2《生活习惯与健康》(练习+视频)
- Satyam-audit-failure-case-auditing-speech(萨蒂扬公司审计失败的案例分析)
- 医学检验技术临床案例及分析
- 第3课《追求人生理想》第2框《努力把人生理想变为现实》-【中职专用】《哲学与人生》同步课堂课件
- 第七届全国急救大赛(医生组)理论测试考试题库及答案
- (2024版)大学本科新增专业《生物育种技术》解读
- AGV拖车电机选择计算表
- 舌癌手术步骤课件
- 老师孤独症培训课件
评论
0/150
提交评论