预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
#include<iostream>#include<fstream>#include<cmath>#include<ctime>#include<string>#include<iomanip>#include<cstdlib>usingnamespacestd;#include"ran_number.h"constdoublepi=3.1415926;constintnum=60;//粒子群规模constintT=2000;//最大迭代次数//*******适应度函数********//doublefunc(doublex){doublef=x*sin(10*x*pi)+2.0;f=1.0/f;returnf;}//---------------------主程序----------------------//voidmain(intargc,char*argv[]){doubleran;//随机变量RandomNumberrand;doublec1=2.05,c2=2.05;//学习因子doubled1=0.2,d2=0.7;//控制因子doublews=0.9,we=0.4;//最大最小惯性权重doublex_down=-1.0,x_up=2.0;//粒子空间上下界doublew;//惯性权重intm=2;//迭代次数doubleVmax;//粒子最大速度doublex[num];//粒子位置(控制参数)doublev[num];//粒子速度doubleg[num];//粒子适应度doublepbest[num];//粒子个体最好值doublepbest_x[num];//粒子个体最好位置doublegbest;//粒子群体最好值doublegbest_x;//粒子群体最好位置Vmax=(x_up-x_down)/8;//------------初始化粒子群:位置、速度、个体最优值及群体最优值----------//for(inti=0;i<num;i++){pbest[i]=0.0;ran=rand.fRandom();x[i]=x_down+(x_up-x_down)*ran;//初始化粒子v[i]=Vmax*(2*ran-1);//初始化粒子速度pbest[i]=func(x[i]);pbest_x[i]=x[i];}gbest=pbest[0];gbest_x=x[0];//-----------------第一次迭代得到的群体最优----------------------//for(i=0;i<num;i++)//for粒子数循环{if(pbest[i]<gbest){gbest=pbest[i];gbest_x=pbest_x[i];}}//----------------共T次迭代过程---------------------//while(m<=T)//迭代次数循环{w=(ws-we-d1)*exp(1/(1+d2*(m-1)/T));//惯性权重//cout<<"m="<<m<<";w="<<w<<endl;for(i=0;i<num;i++)//粒子数循环{g[i]=0.0;ran=rand.fRandom();v[i]=w*v[i]+c1*ran*(pbest_x[i]-x[i])+c2*ran*(gbest_x-x[i]);x[i]+=v[i];if(x[i]<x_down){x[i]=x_down;}//cout<<"到下界"<<endl;}if(x[i]>x_up){x[i]=x_up;}//cout<<"m="<<m<<"到上界"<<endl;}g[i]=func(x[i]);if(pbest[i]>g[i]){pbest[i]=g[i];pbest_x[i]=x[i];}if(pbest[i]<gbest){gbest=pbest[i];gbest_x=pbest_x[i];cout<<"第"<<m<<"次迭代的gbest="<<gbest<<"gbest_x="<<gbest_x<<endl;//输出第m次迭代的群体最优值及最优位置}}//endform=m+1;}//endforwhilecout<<"gbest="<<g