展会信息港展会大全

基于模拟退火法的C++编程问题
来源:互联网   发布日期:2011-09-22 13:32:53   浏览:8099次  

导读:我在网上找到一个程序 是关于针对DNA多序列比对问题 提出用模拟退火算法来处理 但是程序运行不正确 想请某位好心 高手帮忙修改 有兴趣 留下你 邮箱或Q号 我把代...

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])); //计算初始种群的适应度
}
}

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港