资源描述:
《遗传算法解决TSP问题(C++).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、遗传算法解决TSP问题(C++版)遗传算法流程:交叉,编译,计算适应度,保存最优个体。其中交叉过程是选择最优的两个染色体进行交叉操作,本文采用的是轮盘赌算法。#include#include#includeusingnamespacestd;#definepopulation200//种群数量#definepc0.9//交叉的概率#definepm0.1//变异的概率#definecount200//迭代的次数#definenum10//城市的数量int**city;//存
2、放每个个体的访问顺序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{13,36,51,8,64,43,
3、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=;intmin_index=-1;int*min_path;//初始化种群voidinit(){int*a=newint[num];for(inti=0;i4、++){a[i]=i;}city=newint*[population];for(inti=0;i=0;j--){intn=rand()%(j+1);//产出的数是0-j,保证交换的后面的数不会再被交换swap(a[j],a[n]);//保证a里面全是0-(num-1)的数,无重复的数,只是顺序颠倒city[i][j]=a[j];}}delete[]a;dis
5、=newint[population];fitness=newdouble[population];min_path=newint[num];}//计算适应度voidcompute(){//cout<<"docomputenow."<6、;}dis[i]+=path[b][city[i][0]];fitness[i]=1.0/dis[i];//以距离的倒数作为适应度函数值total+=fitness[i];}}//选择适应度高的物种,采用轮盘赌算法intselect(){doubletotal=0;for(inti=0;i7、m=0;inti=0;while(sum<=size&&idis[i]){result=dis[i];index=i;}}returnindex;}intgetMaxDis(){intresult=dis[0];intindex=0;for(inti=1;i<
8、population;i++){if(result