jp417799578 2015-03-29 04:54 采纳率: 25%
浏览 2091
已结题

遗传算法c程序问题 大家进来看看 感激不尽

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);

  • 写回答

1条回答 默认 最新

  • oyljerry 2015-04-01 05:21
    关注

    这种算法,最好自己设置断点,单步跟踪一下,看各个变量运行中是否按你的算法在进行运算

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型