拥有 2016-07-23 01:14 采纳率: 0%
浏览 2000

C语言pso粒子群算法的初始化以及对种群中适应度高的粒子筛选问题

int initialize(int id)
{

  /*由当前时间产生随机数种子*/
  srand((unsigned)time(NULL)+10*id);
  FILE *infile;   /*初始化数据文件,记录坐标及速度上下限*/
int i, j;       /*i:维度循环参数,j:粒子群循环参数*/  
double lbound, ubound, Vlbound, Vubound;  /*记录由初始化数据文件中读入的各维度坐标和速度上下限*/
char filename[256];
sprintf(filename,"initialdata%d",id);
//printf("filename is %s\n",filename);

if((infile = fopen(filename,"r"))==NULL)
{
    fprintf(psolog,"\nCannot open input file!\n");
  exit(1);
}
for(i=0;i<DIMENSION;i++)
{
      /*读入各方向位置及速度上下限*/
      fscanf(infile, "%lf", &lbound);
      fscanf(infile, "%lf", &ubound);
      fscanf(infile, "%lf", &Vlbound);
      fscanf(infile, "%lf", &Vubound);

      /*将速度上下限循环写入各粒子结构体中,并由之随机产生初始位置及速度*/
    for(j=0;j<POPSIZE;j++)
    {
         particle[j].lowbound[i]=lbound;
         particle[j].upbound[i]=ubound;
         particle[j].low_V[i]=Vlbound;
         particle[j].up_V[i]=Vubound;
       particle[j].position[id][i]=randval(lbound, ubound);

       particle[j].velocity[id][i]=randval(Vlbound, Vubound);
       particle[j].fitness[id] = 0;

    }    
}  
fclose(infile);  
return 0;

}
int select1(int n)
{
double sum_fit,r_fitness; /*该种群当前最优适应度总和以及存储前mem个粒子适应度和的变量*/
int i,j,k;
double p; /*记录随机数*/

sum_fit=0;
for(i=0;i<POPSIZE;i++)
{
    sum_fit+=particle[i].fitness[MAXSHIFT]; 
}
for(i=0;i<POPSIZE;i++)
{
      r_fitness=0;
    for(j=0;j<i+1;j++)
    {
        r_fitness+=particle[j].fitness[MAXSHIFT];                           
    }   
    particle[i].r_fit = r_fitness/sum_fit;
}
/*开始优选*/
for(i=0;i<POPSIZE;i++)

{
p=(double)(rand()%1000)/1000;
if(p<particle[0].r_fit)
{
particle[i].fitness[n]=particle[0].fitness[n];
particle[i].fitness[MAXSHIFT]=particle[0].fitness[MAXSHIFT];
for(k=0;k<DIMENSION;k++)
{
particle[i].position[n][k] = particle[0].position[n][k];
particle[i].velocity[n][k] = particle[0].velocity[n][k];
particle[i].position[MAXSHIFT][k] = particle[0].position[MAXSHIFT][k];
particle[i].velocity[MAXSHIFT][k] = particle[0].velocity[MAXSHIFT][k];
}

  }                 
  for(j=1;j<POPSIZE;j++)
  {

        if((p>particle[j-1].r_fit)&&(p<particle[j].r_fit))
        {
            particle[i].fitness[n]=particle[j].fitness[n];
            particle[i].fitness[MAXSHIFT]=particle[j].fitness[MAXSHIFT];
            for(k=0;k<DIMENSION;k++)
            {
               particle[i].position[n][k] = particle[j].position[n][k];
               particle[i].velocity[n][k] = particle[j].velocity[n][k];
               particle[i].position[MAXSHIFT][k] =  particle[j].position[MAXSHIFT][k];
               particle[i].velocity[MAXSHIFT][k] =  particle[j].velocity[MAXSHIFT][k];
            }

        }

  }

}

}

  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog