资源描述:
《遗传算法解决TSP问题(C++).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实用文档遗传算法解决TSP问题(C++版)遗传算法流程:交叉,编译,计算适应度,保存最优个体。其中交叉过程是选择最优的两个染色体进行交叉操作,本文采用的是轮盘赌算法。#include#include#includeusingnamespacestd;#definepopulation200//种群数量#definepc0.9//交叉的概率#definepm0.1//变异的概率#definecount200//迭代的次数#definenum10//城市的数量int**city;//存放每个个体的访问顺序intpath[10][1
2、0]={实用文档//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,0,16,57,94},//6{75,57,25,10,6,66,16,0,23,11},/
3、/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=newint[num];for(inti=0;i4、++){city[i]=newint[num];}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=newint[population];fitness=newdouble[population];min_path=newint[num];}//计算适应度voidco
5、mpute(){//cout<<"docomputenow."<6、用文档intselect(){doubletotal=0;for(inti=0;i7、r(inti=1;idis[i]){result=dis[i];index=i;}}returnindex;}intgetMaxDis(){实用文档intresult=dis[0];intindex=0;for(inti=1;i