资源描述:
《遗传算法解决TSP问题(C++)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、遗传算法解决TSP问题(C++版)遗传算法流程:交叉,编译,计算适应度,保存最优个体。其中交叉过程是选择最优的两个染色体进行交叉操作,本文采用的是轮盘赌算法。#include#include#includeusingnamespacestd;#definepopulation200//种群数量#definepc0.9//交叉的概率#definepm0.1//变异的概率#definecount200//迭代的次数#definenum10//城市的数量int**
2、city;//存放每个个体的访问顺序intpath[10][10]={//0,1,2,3,4,5,6,7,8,9{0,23,93,18,40,34,13,75,50,35},//0{23,0,75,4,72,74,36,57,36,22},//1{93,75,0,64,21,73,51,25,74,89},//2{18,4,64,0,55,52,8,10,67,1},//3{40,72,21,55,0,43,64,6,99,74},//4{34,74,73,52,43,0,43,66,52,39},//5{1
3、3,36,51,8,64,43,0,16,57,94},//6{75,57,25,10,6,66,16,0,23,11},//7{50,36,74,67,99,52,57,23,0,42},//8{35,22,89,1,74,39,94,11,42,0}//9};int*dis;//存放每个个体的访问顺序下的路径长度double*fitness;//存放灭个个体的适应度intmin_dis=1000000;intmin_index=-1;int*min_path;//初始化种群voidinit(){int*a
4、=newint[num];for(inti=0;i=0;j--){intn=rand()%(j+1);//产出的数是0-j,保证交换的后面的数不会再被交换swap(a[j],a[n]);//保证a里面全是0-(num-1)的数,无重复的
5、数,只是顺序颠倒city[i][j]=a[j];}}delete[]a;dis=newint[population];fitness=newdouble[population];min_path=newint[num];}//计算适应度voidcompute(){//cout<<"docomputenow."<6、;j7、D_MAX*total;//保证不产生0//cout<<"size"<dis[i]){result=dis[i];index=i;}}return
8、index;}intgetMaxDis(){intresult=dis[0];intindex=0;for(inti=1;i