遗传算法解决TSP问题

读了原作者mylovestart用遗传算法实现的tsp问题,学习了ga算法。

原文链接:http://blog.csdn.net/mylovestart/article/details/8977005#cpp

但发现原作者mylovestart的jiaopei()函数写的有问题,交叉后要确保每个城市有且仅走了一次,修改了jiaopei()的代码如下:

//交配,对每个染色体产生交配概率,满足交配率的染色体进行交配
void  jiaopei()
{
	int i,j,k,kk;
	int t;//参与交配的染色体的个数
	int point1,point2,temp;//交配断点
	int pointnum;
	int temp1,temp2;
	int map1[cities],map2[cities];
	double jiaopeip[num];//染色体的交配概率
	int jiaopeiflag[num];//染色体的可交配情况
	int kkk,flag=0;
	//初始化
	for(i=0;ipoint2) //保证point1<=point2
		{
			temp=point1;
			point1=point2;
			point2=temp;
		}
		//初始化
        memset(map1,-1,sizeof(map1));
		memset(map2,-1,sizeof(map2));
		//断点之间的基因产生映射
		for(k=point1;k<=point2;k++)
		{
			map1[group[temp1].city[k]]=group[temp2].city[k];
			map2[group[temp2].city[k]]=group[temp1].city[k];
		}
		//断点两边的基因互换
		for(k=0;k


之后自己又试了50+的城市的数据,效果不太理想,希望过后自己可以再改进一下选择函数,让每次最优的个体可以保留下来。

你可能感兴趣的:(Coding)