优化算法——人工蜂群算法

上传人:友**** 文档编号:168180097 上传时间:2022-11-08 格式:DOCX 页数:13 大小:38.43KB
收藏 版权申诉 举报 下载
优化算法——人工蜂群算法_第1页
第1页 / 共13页
优化算法——人工蜂群算法_第2页
第2页 / 共13页
优化算法——人工蜂群算法_第3页
第3页 / 共13页
资源描述:

《优化算法——人工蜂群算法》由会员分享,可在线阅读,更多相关《优化算法——人工蜂群算法(13页珍藏版)》请在装配图网上搜索。

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

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

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

4、蜜源一一对应,根据上面第一个公式更新蜜源信息,同时确定蜜源的花蜜量;观察蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜源的花蜜量;确定侦查蜂,并根据第三个公式寻找新的蜜源;记忆迄今为止最好的蜜源;判断终止条件是否成立;三、人工蜂群算法用于求解函数优化问题对于函数=0.5-tn2 ( x(121J71J72 2z+1.2.3.4.5.6.7.8.14.15.16.其中t 一 I- I代码:cpp view plaincopy#include #include #include #include #include #include using names

5、pace std;9- const int NP=40;/种群的规模,采蜜蜂+观察蜂10. const int FoodNumber=NP/2;/食物的数量,为采蜜蜂的数量11. const int limit=20;/限度,超过这个限度没有更新采蜜蜂变成侦查蜂12- const int maxCycle=10000;/停止条件13./*函数的特定参数*/const int D=2;/函数的参数个数const double lb=-100;/函数的下界const double ub=100;/函数的上界19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.3

6、4.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.double resultmaxCycle=0;/*种群的定义*/ struct BeeGroupdouble codeD;/函数的维数double trueFi t;/记录真实的最小值double fitness;double rfi tness;/相对适应值比例int trail;/表示实验的次数,用于与limit作比较BeeFoodNumber;BeeGroup Nec tarSourceFoodNumber;/蜜源,

7、注意:一切的修改都是针对蜜源而言的BeeGroup EmployedBeeFoodNumber; /采蜜蜂BeeGroup 0nLookerFoodNumber; /观察蜂BeeGroup Bes tSource;/记录最好蜜源/*函数的声明*/double random(double, double);/产生区间上的随机数void ini tilize();/初始化参数double calcula tionTruefi t(BeeGroup);/计算真实的函数值double calcula ti onF it ness(double); /计算适应值void Calcula teProbab

8、ili ties();/计算轮盘赌的概率void evalueSource();/评价蜜源void sendEmployedBees();void sendOnlookerBees();void sendScoutBees();void MemorizeBestSource();int main()ofstream output;output.open(dataABC.txt); srand(unsigned)time(NULL);ini tilize();/初始化MemorizeBes tSource();/保存最好的蜜源主要的循环int gen=0;while(genmaxCycle)63

9、.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83. 84.sendEmployedBees();CalculateProbabilities();sendOnlookerBees();MemorizeBestSource();sendScoutBees();MemorizeBestSource();outputsetprecision(30)BestSource.trueFitendl; gen+;output.close();cou t运行结束!endl;return 0;85.86.87.88.89.90./*函数的实

10、现*/double random(double st ar t, double end)/随机产生区间内的随机数 return start+(end-start)*rand()/(RAND_MAX + 1.0);91. void initilize()/初始化参数92. 93.94.95.96.97.98.99.100.101.102.103.104.105.int i,j;for (i=0;iFoodNumber;i+)for (j=0;j=0)fitnessResult=1/(truefit+1);elsefitnessResult=1+abs(truefit);return fitnes

11、sResult;148.149.150.151.152.153.154.155.156.void sendEmployedBees()/修改采蜜蜂的函数 int i,j,k;int param2change;/需要改变的维数 double Rij;/-1,1之间的随机数for (i=0;iFoodNumber;i+)157.158.param2change=(int)random(0,D);/随机选取需要改变的维数159.160.161.162.163.164.165.166.167.168.169.170.171.172.173./*选取不等于 i 的 k*/while (1)k=(int)

12、random(0,FoodNumber); if (k!=i)break;for (j=0;jub)EmployedBeei.codeparam2change=ub;if (EmployedBeei.codeparam2changelb)EmployedBeei.codeparam2change=lb;EmployedBeei.trueFit=calculationTruefit(EmployedBeei);EmployedBeei.fitness=calculationFitness(EmployedBeei.trueFit);189.190.191.192.193.194.195.196.

13、197.198.199.200.201.202.203.204.205.206.207.208.209.210.211.212.213.214.215.216.217.218.219.;220.221.222.223.224.225.226.227.228.229.230.231./* 贪婪选择策略 */ if (EmployedBeei.trueFitNectarSourcei.trueFit)for (j=0;jD;j+)NectarSourcei.codej=EmployedBeei.codej;NectarSourcei.trail=0;NectarSourcei.trueFit=Em

14、ployedBeei.trueFit;NectarSourceifitness=EmployedBeeifitness;elseNectarSourcei.trail+;void Calcula teProbabili ties()/计算轮盘赌的选择概率int i;double maxfit;maxfit=NectarSource0.fitness;for (i=1;imaxfit)maxfit=NectarSourceifitness;for (i=0;iFoodNumber;i+)NectarSourcei.fitness=(0.9*(NectarSourceifitness/maxfit

15、)+0.1void send0nlookerBees()/采蜜蜂与观察蜂交流信息,观察蜂更改信息int i,j,t,k;double R_choosed;/被选中的概率 int param2change;/需要被改变的维数 double Rij;/-1,1之间的随机数 i=0;t=0;while(tFoodNumber)232.233.234.235.236.237.238.239.240.241.242.243.244.245.246.247.248.249.250.251.252.253.254.255.256.257.R_choosed=random(0,1);if (R_choosed

16、Nec tarSourcei.fi tness)/根据被选择的概率选择 t+;param2change=(int)random(0,D);/*选取不等于 i 的 k*/ while (1)k=(int)random(0,FoodNumber);if (k!=i)break; for(j=0;jD;j+)OnLookeri.codej=NectarSourcei.codej;/* 更新 */Rij=random(-1,1);OnLookeri.codeparam2change=NectarSourcei.codeparam2change+Rij*(NectarSourcei.codeparam2

17、change-NectarSourcek.codeparam2change);258.259.260.261.262.263.264.265.266.267.268.269.270.271.272.273./* 判断是否越界 */if (0nLookeri.codeparam2changeub)OnLookeri.codeparam2change=ub;OnLookeri.trueFit=calculationTruefit(0nLookeri);OnLookerifitness=calculationFitness(OnLookeri.trueFit);/*贪婪选择策略*/if (OnLoo

18、keri.trueFitNectarSourcei.trueFit)274.275.276.277.278.279.280.281.282.283.284.285.286.287.288.289.290.291.292.293.294.295.296.297.298.299.300.301.302.303.304.305.306.307.308.309.310.311.312.313.314.315.316.for (j=0;jD;j+)NectarSourcei.codej=OnLookeri.codej;NectarSourcei.trail=0;NectarSourcei.trueFit

19、=0nLookeri.trueFit;Nec tarSourcei fit ness=0nLookeri fit ness;elseNectarSourcei.trail+;i+;if (i=FoodNumber)i=0;/*只有_只侦杳蜂 */ void sendScou tBees()/判断是否有侦查蜂的出现,有则重新生成蜜源int maxtrialindex,i,j; double R;/0,1之间的随机数maxtrialindex=0;for (i=1;iNectarSourcemaxtrialindex.trail)maxtrialindex=i; if(NectarSourcema

20、xtrialindex.trail=limit)/* 重新初始化 */ for (j=0;jD;j+)R=random(0,1);NectarSourcemaxtrialindex.codej=lb+R*(ub-lb); NectarSourcemaxtrialindex.trail=0;317.NectarSourcemaxtrialindex.trueFit=calculationTruefit(NectarSourcemaxtrialindex);318.NectarSourcemaxtrialindex.fitness=calculationFitness(NectarSource maxtrialindex.trueFit);void MemorizeBes tSource()/保存最优的蜜源int i,j;for (i=1;iFoodNumber;i+)if (NectarSourcei.trueFitBestSource.trueFit)for (j=0;j.7 IIiiiiiiii20040060080Q10001.00140016001800 -000Number of generations /google!9890102

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!