ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:272KB ,
资源ID:1536012      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1536012.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(TSP问题求解实验报告.doc)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

TSP问题求解实验报告.doc

1、TSP问题求解(一) 实验目的熟悉和掌握遗传算法的原理,流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。(二) 实验原理巡回旅行商问题给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到1759年Euler提出的骑士旅行的问题。1948年,由美国兰德公司推动,TSP成为近代组合优化领域的典型难题。TSP是一个具有广泛的应用背景和重要理论价值的组合优化问题。 近年来,有很多解决该问题的较为有效的算法不断被推出,例如Hopfield神经网络方

2、法,模拟退火方法以及遗传算法方法等。TSP搜索空间随着城市数n的增加而增大,所有的旅程路线组合数为(n-1)!/2。在如此庞大的搜索空间中寻求最优解,对于常规方法和现有的计算工具而言,存在着诸多计算困难。借助遗传算法的搜索能力解决TSP问题,是很自然的想法。基本遗传算法可定义为一个8元组:(SGA)=(C,E,P0,M,)C 个体的编码方法,SGA使用固定长度二进制符号串编码方法;E 个体的适应度评价函数;P0初始群体;M 群体大小,一般取20100;选择算子,SGA使用比例算子;交叉算子,SGA使用单点交叉算子;变异算子,SGA使用基本位变异算子;算法终止条件,一般终止进化代数为100500

3、;问题的表示 对于一个实际的待优化问题,首先需要将其表示为适合于遗传算法操作的形式。用遗传算法解决TSP,一个旅程很自然的表示为n个城市的排列,但基于二进制编码的交叉和变异操作不能适用。路径表示是表示旅程对应的基因编码的最自然,最简单的表示方法。它在编码,解码,存储过程中相对容易理解和实现。例如:旅程(5-1-7-8-9-4-6-2-3)可以直接表示为(5 1 7 8 9 4 6 2 3) (三)实验内容N=8。随即生成N个城市间的连接矩阵。指定起始城市。给出每一代的最优路线和总路线长度。以代数T作为结束条件,T=50。(四) 实验代码#include stdafx.h#include#inc

4、lude#include#include#include#define cities 10 /城市的个数#define MAXX 100/迭代次数#define pc 0.8 /交配概率#define pm 0.05 /变异概率#define num 10/种群的大小int bestsolution;/最优染色体int distancecitiescities;/城市之间的距离struct group /染色体的结构int citycities;/城市的顺序int adapt;/适应度double p;/在种群中的幸存概率groupnum, grouptempnum;/随机产生cities个城

5、市之间的相互距离void init()int i, j;memset(distance, 0, sizeof(distance);srand(unsigned)time(NULL);for (i = 0; icities; i+)for (j = i + 1; jcities; j+)distanceij = rand() % 100;distanceji = distanceij;/打印距离矩阵printf(城市的距离矩阵如下n);for (i = 0; icities; i+)for (j = 0; jcities; j+)printf(%4d, distanceij);printf(n)

6、;/随机产生初试群void groupproduce()int i, j, t, k, flag;for (i = 0; inum; i+) /初始化for (j = 0; jcities; j+)groupi.cityj = -1;srand(unsigned)time(NULL);for (i = 0; inum; i+)/产生10个不相同的数字for (j = 0; jcities;)t = rand() % cities;flag = 1;for (k = 0; kj; k+)if (groupi.cityk = t)flag = 0;break;if (flag)groupi.cit

7、yj = t;j+;/打印种群基因printf(初始的种群n);for (i = 0; inum; i+)for (j = 0; jcities; j+)printf(%4d, groupi.cityj);printf(n);/评价函数,找出最优染色体void pingjia()int i, j;int n1, n2;int sumdistance, biggestsum = 0;double biggestp = 0;for (i = 0; inum; i+)sumdistance = 0;for (j = 1; jcities; j+)n1 = groupi.cityj - 1;n2 =

8、groupi.cityj;sumdistance += distancen1n2;groupi.adapt = sumdistance; /每条染色体的路径总和biggestsum += sumdistance; /种群的总路径/计算染色体的幸存能力,路劲越短生存概率越大for (i = 0; inum; i+)groupi.p = 1 - (double)groupi.adapt / (double)biggestsum;biggestp += groupi.p;for (i = 0; inum; i+)groupi.p = groupi.p / biggestp; /在种群中的幸存概率,总

9、和为1/求最佳路劲bestsolution = 0;for (i = 0; igroupbestsolution.p)bestsolution = i;/打印适应度for (i = 0; inum; i+)printf(染色体%d的路径之和与生存概率分别为%4d %.4fn, i, groupi.adapt, groupi.p);printf(当前种群的最优染色体是%d号染色体n, bestsolution);/选择void xuanze()int i, j, temp;double gradientnum;/梯度概率double xuanzenum;/选择染色体的随机概率int xuannu

10、m;/选择了的染色体/初始化梯度概率for (i = 0; inum; i+)gradienti = 0.0;xuanzei = 0.0;gradient0 = group0.p;for (i = 1; inum; i+)gradienti = gradienti - 1 + groupi.p;srand(unsigned)time(NULL);/随机产生染色体的存活概率for (i = 0; inum; i+)xuanzei = (rand() % 100);xuanzei /= 100;/选择能生存的染色体for (i = 0; inum; i+)for (j = 0; jnum; j+)

11、if (xuanzeigradientj)xuani = j; /第i个位置存放第j个染色体break;/拷贝种群for (i = 0; inum; i+)grouptempi.adapt = groupi.adapt;grouptempi.p = groupi.p;for (j = 0; jcities; j+)grouptempi.cityj = groupi.cityj;/数据更新for (i = 0; inum; i+)temp = xuani;groupi.adapt = grouptemptemp.adapt;groupi.p = grouptemptemp.p;for (j =

12、0; jcities; j+)groupi.cityj = grouptemptemp.cityj;/用于测试printf(n);for(i=0;inum;i+)for(j=0;jcities;j+)printf(%4d,groupi.cityj);printf(n);printf(染色体%d的路径之和与生存概率分别为%4d %.4fn,i,groupi.adapt,groupi.p);/交配,对每个染色体产生交配概率,满足交配率的染色体进行交配void jiaopei()int i, j, k, kk;int t;/参与交配的染色体的个数int point1, point2, temp;/交配断点int pointnum;int temp1, temp2;int map1cities, map2cities;double jiaopeipnum;/染色体的交配概率int jiaopeiflagnum;/染色体的可交配情况for (i = 0; inum; i+)/初始化jiaopeiflagi = 0;/随机产生交配概率srand(unsigned)time(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1