4个变量,染色体有4段 总长度为40 ,其中x2和x22范围一样 但是输出结果却也是一样的(结果理论上肯定不应该一样) 我试着把temp3和temp4输出来看看 结果他们也一样(temp2也一样 就temp1和他们不一样) 是怎么回事啊 是初始化问题还是染色体解码的问题 各位大哥帮小弟看下 不胜感激!么么哒~
#define length1 10
#define length2 10
#define length3 10
#define length4 10
#define chromlength length1+length2+length3+length4//染色体长度
void generateinitialpopulation() //种群初始化
{
int i,j;
srand((unsigned)time(NULL));
for (i=0;i<popsize;i++)
{for(j=0;j<chromlength;j++)
{
population[i].chrom[j]=(rand()%10<5)?'0':'1';}
population[i].chrom[chromlength]='\0';
}
}
long decodechromosome(char *string,int point,int length)//给染色体解码
{
int i;
long decimal=0;
char *pointer;
for(i=0,pointer=string+point;i<length;i++,pointer++)
{if(*pointer-'0')
{decimal+=(long)pow(2,i);}}
return(decimal);
}
void calculateobjectvalue() //计算函数值
{int i;
long temp1,temp2,temp3,temp4;
double x1,x11,x22,x2;
for (i=0;i<popsize;i++)
{
temp1=decodechromosome(population[i].chrom,0,length1);
temp2=decodechromosome(population[i].chrom,length1,length2);
temp3=decodechromosome(population[i].chrom,length2,length3);
temp4=decodechromosome(population[i].chrom,length3,length4);
x1=15*temp1/1023.0;
x11=21*temp2/1023.0;
x2=6*temp3/1023.0;
x22=6*temp4/1023.0;
population[i].value=1/(10000000*fabs(x1+0.2*e*x1*x2-15)+10000000*fabs(x11+0.2*0.47766*x11*x22-21)+380*(x1+x11)+550*(e*x1*x2+0.47766*x11*x22));
}
h1=x2;
h2=x22;
}
输出也没问题
printf(" h1=%f\n",h1);
printf(" h2=%f\n",h2);