《c语言实现的粒子群算法代码及解释》由会员分享,可在线阅读,更多相关《c语言实现的粒子群算法代码及解释(4页珍藏版)》请在金锄头文库上搜索。
1、粒子群PSO算法#include#include#include#include/*/粒子数目搜索域范围速度范围个体集合每个个体局部最优向量个体的局部最优适应度,有局部最优向量计算而来全局最优向量全局最优适应度,有全局最优向量计算而来记录每个个体的当前代速度向量记录每个粒子的当前代适应度#definePI3.141592653589#defineP_num200#definedim50#definelow-100#definehigh100#defineiter_num1000#defineV_max20#definecl2#definec22#definew0.5#definealp1dou
2、bleparticleP_numdim;doubleparticleJoc_bestP_numdim;doubleparticleJoc_fitP_num;doubleparticle_glo_bestdim;doublegfit;doubleparticle_vP_numdim;doubleparticle_fitP_num;doubleSphere(doublea)inti;doublesum=0.0;for(i=0;idim;i+)sum+=ai*ai;returnsum;doubleRosenbrock(doublea)inti;doublesum=0.0;for(i=0;idim-l
3、;i+)sum+=100*(ai+l-ai*ai)*(ai+l-ai*ai)+(ai-l)*(ai-l);returnsum;doubleRastrigin(doublea)inti;doublesum=0.0;for(i=0;idim;i+)sum+=ai*ai-10.0*cos(2*PI*ai)+10.0;returnsum;doublefitness(doublea)适应度函数returnRastrigin(a);voidinitial()inti,j;for(i=0;iP_num;i+)随即生成粒子for(j=0;jdim;j+)particleij=low+(high-low)*1.
4、0*rand()/RAND_MAX;初始化群体particle_loc_bestij=particleij;将当前最优结果写入局部最优集合particle_vij=-V_max+2*V_max*1.0*rand()/RAND_MAX;速度for(i=0;iP_num;i+)计算每个粒子的适应度particle_fiti=fitness(particlei);particle_loc_fiti=particle_fiti;gfit=particle_loc_fit0;找出全局最优j=0;for(i=l;iP_num;i+)if(particle_loc_fitigfit)gfit=particl
5、e_loc_fiti;j=i;for(i=0;idim;i+)更新全局最优向量particle_glo_besti=particle_loc_bestji;voidrenew_particle()inti,j;for(i=0;iP_num;i+)更新个体位置生成位置for(j=0;jhigh)particleij=high;if(particleijlow)particleij=low;voidrenew_var()int,j;for(i=0;iP_num;i+)计算每个粒子的适应度particle_fiti=fitness(particlei);if(particle_fitiparticl
6、e_loc_fiti)/更新个体局部最优值particle_loc_fiti=particle_fiti;for(j=0;jdim;j+)更新局部最优向量particle_loc_bestij=particleij;for(i=Ozj=-l;iP_num;i+)更新全局变量if(particle_loc_fitigfit)gfit=particle_loc_fiti;j=i;if(j!=-Dfor(i=0;idim;i+)更新全局最优向量particle_glo_besti=particle_loc_bestji;for(i=0;iP_num;i+)更新个体速度for(j=0;jV_max)particle_vij=V_max;if(particle_vij-V_max)particle_vij=-V_max;intmain()freopen(result.txt,a+,stdout);inti=0;srand(unsigned)time(NULL);initial();while(iiter_num)renew_particle();renew_var();i+;printf(“粒子个数:%dn“,P_num);printf(维度为:%dn“,dim);printf(最优值为%.10lfn,gfit);return0;