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];
}
}
}
}
}