遗传算法c语言代码
遗传算法代码
#include
#include
#include
#include
#include
struct group //染色体的结构
{
int city[cities];//城市的顺序
int adapt;//适应度
double p;//在种群中的幸存概率
}group[num],grouptemp[num];
//随机产生10个城市之间的相互距离
void init()
{
int i,j;
memset(distance,0,sizeof(distance));
srand((unsigned)time(NULL));
for(i=0;i
{
for(j=i+1;j
{
distance[i][j]=rand()%100;
distance[j][i]=distance[i][j];
}
}
printf("************城市的距离矩阵如下************\n");
for(i=0;i
{
for(j=0;j
printf("%4d",distance[i][j]);
printf("\n");
}
}
//随机产生初试群
void groupproduce()
{
int i,j,t,k,flag;
for(i=0;i
for(j=0;j
group[i].city[j]=-1;
srand((unsigned)time(NULL));
for(i=0;i
{
for(j=0;j
{
t=rand()%cities;
flag=1;
for(k=0;k
{
if(group[i].city[k]==t)
{
flag=0;
break;
}
}
if(flag)
{
group[i].city[j]=t;
j++;
}
}
}
printf("************初始种群如下****************\n");
for(i=0;i
{
for(j=0;j
printf("%4d",group[i].city[j]);
printf("\n");
}
}
//评价函数,找出最优染色体
void pingjia()
{
int i,j;
int n1,n2;
int sumdistance,biggestsum=0;
double biggestp=0;
for(i=0;i
{
sumdistance=0;
for(j=1;j
{
n1=group[i].city[j-1];
n2=group[i].city[j];
sumdistance+=distance[n1][n2];