void fitness(struct individual *critter)
//计算适应度函数
{
int *array;
int temp;
int h=0;
double sum=0.0;
char *alignment[sequence_number]; //定义alignment序列
if((array=new int[chromosize])==NULL)
cout<<"can't allocate more memory.\n";
for(int w=0;w<sequence_number;w++)
{
if((alignment[w]=new char[chromosize+min_sequence_length])==NULL)
cout<<"can't allocate more memory.\n";
}
for(int i=0;i<sequence_number;i++)
{
for(int j=0;j<chromosize-(sequence_length[i]-min_sequence_length);j++)
array[j]=critter->chromosome[j+h]; //将染色体片断的值放入临时数组array中
h+=chromosize-(sequence_length[i]-min_sequence_length);
for(int m=chromosize-(sequence_length[i]-min_sequence_length);m>1;m--) //冒泡排序 使得array数组中的值从小到大排列
for(int n=0;n<m-1;n++)
if(array[n]>array[n+1])
{
temp=array[n+1];
array[n+1]=array[n];
array[n]=temp;
}
for(int l=0;l<sequence_length[i];l++) //将sequence中的值放入alignment中
alignment[i][l]=sequence[i][l];
for(int k=chromosize-1-(sequence_length[i]-min_sequence_length);k>=0;k--) //将GAP即'_'插入alignment中
{
if(array[k]>(sequence_length[i]+(chromosize-1-(sequence_length[i]-min_sequence_length)-k)))
alignment[i][sequence_length[i]+(chromosize-1-(sequence_length[i]-min_sequence_length)-k)]='-';
else
{
for(int m=chromosize+min_sequence_length-1;m>array[k];m--)
alignment[i][m]=alignment[i][m-1];
alignment[i][array[k]]='-';
}
}
}
for(int x=0;x<sequence_number;x++) //计算所生成的alignment比较结果,即适应度
for(int y=1;y<sequence_number;y++)
if(x<y)
{
for(int p=0;p<chromosize+min_sequence_length;p++)
{
if(alignment[x][p]==alignment[y][p])
continue;
if((alignment[x][p]=='-')||(alignment[y][p]=='-'))
sum+=1.00;
else if((alignment[x][p]=='a')&&(alignment[y][p]=='g'))
sum+=0.45;
else if((alignment[x][p]=='g')&&(alignment[y][p]=='a'))
sum+=0.45;
else if((alignment[x][p]=='u')&&(alignment[y][p]=='c'))
sum+=0.45;
else if((alignment[x][p]=='c')&&(alignment[y][p]=='u'))
sum+=0.45;
else sum+=0.77;
}
}
critter->fitness=sum;
delete[] array;
for(int n=0;n<sequence_number;n++)
delete[] alignment[n];
}
void initpop()
//随即初始化种群
{
int j,k,h;
oldpop[popsize-1].chromosome[0]=0;
oldpop[popsize-1].chromosome[1]=0;
oldpop[popsize-1].chromosome[2]=0;
oldpop[popsize-1].chromosome[3]=11;
oldpop[popsize-1].chromosome[4]=14;
oldpop[popsize-1].chromosome[5]=28;
oldpop[popsize-1].chromosome[6]=0;
oldpop[popsize-1].chromosome[7]=0;
oldpop[popsize-1].chromosome[8]=0;
oldpop[popsize-1].chromosome[9]=11;
oldpop[popsize-1].chromosome[10]=14;
oldpop[popsize-1].chromosome[11]=28;
oldpop[popsize-1].chromosome[12]=0;
oldpop[popsize-1].chromosome[13]=0;
oldpop[popsize-1].chromosome[14]=0;
oldpop[popsize-1].chromosome[15]=11;
oldpop[popsize-1].chromosome[16]=14;
oldpop[popsize-1].chromosome[17]=28;
oldpop[popsize-1].chromosome[18]=0;
oldpop[popsize-1].chromosome[19]=0;
oldpop[popsize-1].chromosome[20]=0;
oldpop[popsize-1].chromosome[21]=11;
oldpop[popsize-1].chromosome[22]=14;
oldpop[popsize-1].chromosome[23]=28;
oldpop[popsize-1].chromosome[24]=0;
oldpop[popsize-1].chromosome[25]=0;
oldpop[popsize-1].chromosome[26]=0;
oldpop[popsize-1].chromosome[27]=11;
oldpop[popsize-1].chromosome[28]=14;
oldpop[popsize-1].chromosome[29]=28;
oldpop[popsize-1].chromosome[30]=0;
oldpop[popsize-1].chromosome[31]=0;
oldpop[popsize-1].chromosome[32]=0;
oldpop[popsize-1].chromosome[33]=11;
oldpop[popsize-1].chromosome[34]=14;
oldpop[popsize-1].chromosome[35]=28;
oldpop[popsize-1].chromosome[36]=0;
oldpop[popsize-1].chromosome[37]=13;
oldpop[popsize-1].chromosome[38]=16;
oldpop[popsize-1].chromosome[39]=30;
oldpop[popsize-1].chromosome[40]=0;
oldpop[popsize-1].chromosome[41]=13;
oldpop[popsize-1].chromosome[42]=16;
oldpop[popsize-1].chromosome[43]=30;
oldpop[popsize-1].chromosome[44]=0;
oldpop[popsize-1].chromosome[45]=13;
oldpop[popsize-1].chromosome[46]=16;
oldpop[popsize-1].chromosome[47]=30;
oldpop[popsize-1].chromosome[48]=0;
oldpop[popsize-1].chromosome[49]=13;
oldpop[popsize-1].chromosome[50]=16;
oldpop[popsize-1].chromosome[51]=30;
oldpop[popsize-1].chromosome[52]=0;
oldpop[popsize-1].chromosome[53]=0;
oldpop[popsize-1].chromosome[54]=0;
oldpop[popsize-1].chromosome[55]=11;
oldpop[popsize-1].chromosome[56]=14;
oldpop[popsize-1].chromosome[57]=28;
oldpop[popsize-1].chromosome[58]=0;
oldpop[popsize-1].chromosome[59]=26;
oldpop[popsize-1].chromosome[60]=31;
oldpop[popsize-1].chromosome[61]=14;
oldpop[popsize-1].chromosome[62]=17;
oldpop[popsize-1].chromosome[63]=31;
oldpop[popsize-1].chromosome[64]=0;
oldpop[popsize-1].chromosome[65]=0;
oldpop[popsize-1].chromosome[66]=12;
oldpop[popsize-1].chromosome[67]=15;
oldpop[popsize-1].chromosome[68]=10;
oldpop[popsize-1].chromosome[69]=13;
oldpop[popsize-1].chromosome[70]=38;
oldpop[popsize-1].chromosome[71]=14;
oldpop[popsize-1].chromosome[72]=39;
oldpop[popsize-1].chromosome[73]=0;
oldpop[popsize-1].chromosome[74]=0;
oldpop[popsize-1].chromosome[75]=12;
oldpop[popsize-1].chromosome[76]=15;
oldpop[popsize-1].chromosome[77]=25;
oldpop[popsize-1].chromosome[78]=28;
oldpop[popsize-1].chromosome[79]=0;
oldpop[popsize-1].chromosome[80]=0;
oldpop[popsize-1].chromosome[81]=12;
oldpop[popsize-1].chromosome[82]=15;
oldpop[popsize-1].chromosome[83]=29;
oldpop[popsize-1].chromosome[84]=14;
oldpop[popsize-1].chromosome[85]=17;
fitness(&(oldpop[popsize-1]));
for(j=0;j<popsize;j++)
{
h=0;
for(int i=0;i<sequence_number;i++)
{
for(k=0;k<chromosize-(sequence_length[i]-min_sequence_length);k++)
oldpop[j].chromosome[k+h]=rnd(0,sequence_length[i]);//给染色体赋予随机序列
h+=chromosize-(sequence_length[i]-min_sequence_length);
}
fitness(&(oldpop[j])); //计算初始种群的适应度
}
}
基于模拟退火法的C++编程问题
来源:互联网 发布日期:2011-09-22 13:32:53 浏览:8099次
导读:我在网上找到一个程序 是关于针对DNA多序列比对问题 提出用模拟退火算法来处理 但是程序运行不正确 想请某位好心 高手帮忙修改 有兴趣 留下你 邮箱或Q号 我把代...
相关内容
AiLab云推荐
最新资讯
本月热点
热门排行
-
周鸿祎预测2024大模型10大趋势,“建议让AI在公司里无孔不入”
阅读量:186874
-
AI大变局,时代新希望|异想大会
阅读量:167156
-
产品经理必须懂得AI:ChatGPT-人工智能对话的新篇章
阅读量:107635
-
印媒:防AI造假,尼康、索尼等相机巨头拟推“数字签名”新技术
阅读量:104914
-
AI 的未来比你想象的更不稳定
阅读量:94547
-
比OpenAI官方提示词指南更全,这26条黄金准则让LLM性能飙升50%以上
阅读量:60890