1、TSP问题求解实验报告TS问题求解(一)实验目的熟悉和掌握遗传算法的原理,流程和编码策略,并利用遗传求解函数优化问题,理解求解TS问题的流程并测试主要参数对结果的影响。(二)实验原理巡回旅行商问题给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到159年ler提出的骑士旅行的问题。194年,由美国兰德公司推动,TP成为近代组合优化领域的典型难题。TSP是一个具有广泛的应用背景和重要理论价值的组合优化问题。近年来,有很多解决该问题的较为有效的算法不断被推出,例如Hopfield神经网络
2、方法,模拟退火方法以及遗传算法方法等。TSP搜索空间随着城市数n的增加而增大,所有的旅程路线组合数为(n-)!/。在如此庞大的搜索空间中寻求最优解,对于常规方法和现有的计算工具而言,存在着诸多计算困难。借助遗传算法的搜索能力解决TSP问题,是很自然的想法。基本遗传算法可定义为一个8元组:(SGA)=(C,,0,,) 个体的编码方法,GA使用固定长度二进制符号串编码方法;E个体的适应度评价函数;P0初始群体;M 群体大小,一般取20100;选择算子,SGA使用比例算子;交叉算子,SGA使用单点交叉算子;变异算子,SGA使用基本位变异算子;算法终止条件,一般终止进化代数为100500;问题的表示
3、对于一个实际的待优化问题,首先需要将其表示为适合于遗传算法操作的形式。用遗传算法解决P,一个旅程很自然的表示为n个城市的排列,但基于二进制编码的交叉和变异操作不能适用。路径表示是表示旅程对应的基因编码的最自然,最简单的表示方法。它在编码,解码,存储过程中相对容易理解和实现。例如:旅程(-1-7-8-9-4-2-3)可以直接表示为(5 1 8 9 4 2 3) (三)实验内容N=8。随即生成N个城市间的连接矩阵。指定起始城市。给出每一代的最优路线和总路线长度。以代数T作为结束条件,T=。(四)实验代码include sdfh#includstdio.h#clud#inldstdli.h#ilde
4、#ncluetie.#definecies 1/城市的个数defneMAXX0/迭代次数#dfie c 0.8 /交配概率#i pm 005 /变异概率#de u 10/种群的大小intbestolution;/最优染色体in dinctiesits;/城市之间的距离rt gop /染色体的结构 intcityites;城市的顺序nt aat;/适应度ouble ;在种群中的幸存概率gounum, grouptmpnu;/随机产生cities个城市之间的相互距离vd ii() int i, ;mmst(dstance,0, if(distance); ran((usigned)time(ULL
5、)); fo ( = 0;icities;i+) or (j = +1; ities;j+) ianceij= rn() %1; distanceji =diti; /打印距离矩阵print(城市的距离矩阵如下n); or (i 0;iiie; +) fo ( 0; jcities; j)pr(4d,stnceij);pintf(n); /随机产生初试群void rupproduce() in , j, , k, fg;for (i = 0; inu;i) /初始化 fr (j = 0; iti; j+) groi.city -1; sand((usned)tie(ULL);f(i = ; i
6、um; i+) /产生10个不相同的数字 fo(j 0; jcitis;) t = rand() % citis; fag = 1; for (k = 0;kj; +) if(goupi.ctyk= t) lag= 0; brek; if (lag) goui.ctyj = t; +; /打印种群基因 print(初始的种群n); for(i 0; ium; i+) fo (j = ; jcitie; +) prinf(%,roupi.cityj); pntf(n);/评价函数,找出最优染色体d pnji()inti, j;nn1, n2; it smditace, iggtsm= 0; e
7、biggesp = 0; for (i= 0; inum;i+) sumdtnce= 0; for ( =; jities; +) n1 = oupi.ityj -1;n2 =goupi.ityj; uditance iancen1n2; roupidapmdsance; /每条染色体的路径总和biggessum+= sudtance; /种群的总路径 /计算染色体的幸存能力,路劲越短生存概率越大 for ( = 0; im; i+) groupi. = - (duble)groupi.adat / (double)igtum; biggestp + grou.; for (i = 0; um
8、; i+) groui.p = grip/ bigestp; /在种群中的幸存概率,总和为 /求最佳路劲 betsolution 0; r (i 0; nu; +) if (groi.proupestsolution.) bestsluio ; /打印适应度 fr (i= 0; inum; i+) ritf(染色体%d的路径之和与生存概率分别为%d %4fn, , goupiadapt, gropip); int(当前种群的最优染色体是%d号染色体n, soution);/选择vod xuanze() int , j, em;ole gradienum;/梯度概率oube xuanzeu;/选
9、择染色体的随机概率i xuanm;/选择了的染色体 /初始化梯度概率 for (i 0; in; +) aeti = 0.0;uanz = 00;gdnt0 grou0.p;for(= 1; inum; i+) gadii = gadieni 1 +groi.p; sand(unied)time(NUL);/随机产生染色体的存活概率 or (i0; inum; i+) xunzei =(and()% 100); xunzei /= 00;/选择能生存的染色体f (i = ; ium;i+) for (j 0;jum; j+) if(xuazeigrdientj) xuani = j; /第个位
10、置存放第j个染色体 ek; /拷贝种群r(i =; inu; i+) grouptmi.adap =goupdapt;grouptip= group.; fo(j= 0;jcties;j+) goutepi.cityj = oup.ctyj;/数据更新 f (i= ; num; +) temp xuani; grui.aap= groupeptempaat; groupip=grupmempp; or(j ; jcitis;j+) roupi.cityj = rouptmpmp.ciyj;/用于测试printf(-n);f(i=0;ium;i+) for(0;jitis;j+)prinf(%4
11、,gropi.city); printf();pitf(染色体%d的路径之和与生存概率分别为%4d .4n,grupi.dapt,op.p);/交配,对每个染色体产生交配概率,满足交配率的染色体进行交配vod jaopei() t i, j, ,kk;ntt;/参与交配的染色体的个数it point1,poin,tmp;交配断点 int ponnum; int tep1, tem2; it ap1itie, mapities; double jienum;/染色体的交配概率 nt jipifagu;/染色体的可交配情况 fo (i= 0; ium; +)/初始化 jiaopeflg = 0; /随机产生交配概率 rnd(unsiged)time(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1