粒子群算法程序.docVIP

  • 6
  • 0
  • 约2.39千字
  • 约 3页
  • 2019-07-08 发布于江西
  • 举报
#includeiostream #include fstream #includecmath #include ctime #include string #include iomanip #include cstdlib using namespace std; #include ran_number.h const double pi=3.1415926; const int num=60; //粒子群规模 const int T=2000;//最大迭代次数 //*******适应度函数********// double func(double x) { double f = x*sin(10*x*pi)+2.0; f=1.0/f; return f; } //---------------------主程序----------------------// void main (int argc, char* argv[]) { double ran; // 随机变量 RandomNumber rand; double c1=2.05, c2=2.05; //学习因子 double d1=0.2,d2=0.7; //控制因子 double ws=0.9, we=0.4; //最大最小惯性权重 double x_down=-1.0, x_up=2.0; // 粒子空间上下界 double w; //惯性权重 int m=2; //迭代次数 double Vmax; //粒子最大速度 double x[num]; //粒子位置(控制参数) double v[num]; //粒子速度 double g[num]; //粒子适应度 double pbest[num]; //粒子个体最好值 double pbest_x[num]; //粒子个体最好位置 double gbest ; //粒子群体最好值 double gbest_x; //粒子群体最好位置 Vmax = (x_up-x_down)/8; //------------ 初始化粒子群:位置、速度、个体最优值及群体最优值---------- // for( int i=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; inum; 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; inum; 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[

文档评论(0)

1亿VIP精品文档

相关文档