c语言遗传算法tsp,TSP的遗传算法程序实验报告.doc

TSP的遗传算法程序实验报告

TSP的遗传算法程序

实验原理

遗传算法的流程如图所示:

二、程序的主要思想

使用C语言实现TSP的遗传算法

根据遗传算法的原理,自定义所需的初始染色体长度、初始群体大小、最大的迭代次数、交叉概率以及变异概率。

初始时生成与染色体长度相同个数的城市,为每个城市随机生成平面坐标,将城市的初始生成的顺序作为初始的路径,即第一条染色体。计算路径中相邻城市之间的距离,并进行保存。

将生成的城市再进行多次的重新排列,得到多条不同的路径,将这些路径作为初始群体里的染色体,计算每条路径的长度。

通过自定义的适应度函数计算染色体的适应度,通过交叉、变异生成新的种群。对新种群继续迭代操作,直到达到初始定义的迭代次数,获得最终的路径及路径图。

三、程序的主要步骤

① 染色体初始化的子函数

void initialize()

{int k,j,minx,miny,maxx,maxy;

initdata();

minx=0;

miny=0;

maxx=0;maxy=0;

for(k=0;k

{x[k]=rand();

if(x[k]>maxx)maxx=x[k];

if(x[k]

y[k]=rand();

if(y[k]>maxy)maxy=y[k];

if(y[k]

}

if((maxx-minx)>(maxy-miny))

{maxxy=maxx-minx;}

else {maxxy=maxy-miny;}

maxdd=0.0;

for(k=0;k

for(j=0;j

{dd[k*lchrom+j]=hypot(x[k]-x[j],y[k]-y[j]);

if(maxdd

}

refpd=dd[lchrom-1];

for(k=0;k

refpd=refpd+dd[k*lchrom+k+2];

for(j=0;j

dd[j*lchrom+j]=4.0*maxdd;

ff=(0.765*maxxy*pow(lchrom,0.5));

minpp=0;

min=dd[lchrom-1];

for(j=0;j

{if(dd[lchrom*j+lchrom-1]

{min=dd[lchrom*j+lchrom-1];

minpp=j;

}

}

initpop();

statistics(oldpop);

initreport();

}

for(k=0;k

{x[k]=rand();

if(x[k]>maxx)maxx=x[k];

if(x[k]

y[k]=rand();

if(y[k]>maxy)maxy=y[k]

if(y[k]

}

此段程序是初始化多个城市的坐标值(x,y),其中(x[k],y[k])代表第k+1个城市的坐标值,也相当于初始染色体的第k+1个基因值。

for(k=0;k

for(j=0;j

{dd[k*lchrom+j]=hypot(x[k]-x[j],y[k]-y[j]);

此段程序是将初始生成的城市的顺序做为第一条路径的顺序,计算路径中相邻点之间的距离。

② 群体初始化的子函数

void initpop()

{unsigned char j1;

unsigned int k5,i1,i2,j,i,k,j2,j3,j4,p5[maxstring];

float f1,f2;

j=0;

for(k=0;k

oldpop[j].chrom[k]=k;

for(k=0;k

p5[k]=oldpop[j].chrom[k];

randomize();

for(;j

{j2=random(lchrom);

for(k=0;k

{j3=random(lchrom);

j4=random(lchrom);

j1=p5[j3];

p5[j3]=p5[j4];

p5[j4]=j1;

}

for(k=0;k

oldpop[j].chrom[k]=p5[k];

}

for(k=0;k

for(j=0;j

dd[k*lchrom+j]=hypot(x[k]-x[j],y[k]-y[j]);

for(j=0;j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值