您好,欢迎访问三七文档
2012年第一学期研究生课程考核(实验报告、研究报告)考核科目:算法分析与复杂性理论学生所在学院:计算机科学与技术学院学生所在学科:计算机应用技术姓名:学号:学生类别:研究生一、实验目的1.通过TSP算法的具体实现,加深对算法复杂分析的理解。2.通过TSP算法的具体实现,提高对NP完全问题的认识。3.通过TSP算法的具体实现,理解不确定性算法。4.通过TSP算法的具体实现,理解不确定性算法。二、实验环境实验平台:VisualC++6.0编程语言:C++编程电脑配置:三、实验内容描述TSP(TravellingSalesmanProblem)又称货郎担或巡回售货员问题,在运筹学、管理科学及工程实际中具有广泛的用途。及工程实际中具有广泛的用途。TSP问题是组合优化中的著名难题,一直受到人们的极大关注。由于其NP难题性质,至今尚未完全解决。此问题可以抽象描述为:给出一个n个顶点网络(有向或无向),要求找出一个包含所有n个顶点的具有最小耗费的环路。其中,任何一个包含所有n个顶点的环路被称作一个旅行。对于旅行商问题,顶点表示旅行商所要旅行的城市(包括起点)。边上权值给出了在两个城市旅行所需的路程。旅行表示当旅行商游览了所有城市后再回到出发点时所走的路线。四、实验原理许多研究表明,应用蚁群优化算法求解TSP问题优于模拟退火法、遗传算法、神经网络算法、禁忌算法等多种优化方法。为说明该算法,引人如下的标记:m表示蚁群中蚂蚁的数量;表示城市i和城市j之间的距离;表示t时刻位于城市i的蚂蚁数,显然应满足,表示t时刻在ij连线上的信息数量。在算法的初始时刻,将m只蚂蚁随机地放到n座城市上,此时各路径上的信息量相等,设。每只蚂蚁根据路径上保留的信息量独立地选择下一个城市。在时刻t,蚂蚁k从城市i转移到城市j的概率为其中,表示蚂蚁走下一步允许选择的所有城市,列表纪录了当前蚂蚁k所走过的城市,当所有n个城市都加入到中时,蚂蚁k便完成了一次循环,此时蚂蚁走所走过的路径便是问题的一个解。是一个启发式因子,表示蚂蚁从城市i转移到城市j的期望程度,在蚂蚁算法中,通常取城市ij之间距离的倒数。α和β分别表示路径上信息量和启发示因子的重要程度。当所有蚂蚁完成一次循环后,各路径上的信息量要根据下面的公式进行调整:其中表示路径上信息的蒸发系数;表示信息的保留系数;表示本次循环路径ij上信息的增量。表示第k只蚂蚁在本次循环中留在路径ij上的信息量,如果蚂蚁k没有经过路径,则的值为零,表示为其中,Q为常数,表示第k只蚂蚁在本次循环中所走过的路径的长度。五、实验结果与实验分析1.a280:公布最优解:25792.eil51:公布最优解:4263.eil76:公布的最优解:5384.Eil101:公布的最优解:6295.kroA100:公布的最优解:21282通过分析运算结果,我看到编写的程序的执行结果和目前公布的最优值之间还存在着较大的差距。分析原因,主要是因为没有解决好路径的交叉。六、复杂度分析假设:n是城市数量,m是蚂蚁数量,T是迭代次数时间复杂度time=n*(n-1)*m*T/2m一般是n的2/3,那就让m=n*2/3T一般是n的倍数,那就让T=k*n于是time=n*(n-1)*n*2/3*n*k/2time=n*(n-1)*n*n*k/3n-无穷大的时候,(此时k会远小于n)time就约等于n^4空间复杂度space=3*nxn+n*mspace=3*n*n+n*n*2/3space=n*n*(3+2/3)n-无穷大的时候,space约等于n^2六、实验体会因为我是非计算机专业学生,所以编程能力很差,一开始对于这些问题根本无从下手,于是自己又重新学习了遍谭浩强的C编程书,后来又学习了一下VC++,但是对于VC++还是不太熟悉,多亏了同学和我们组的组员的帮助,再加上借鉴已完成同学的程序,并且这些同学给予了耐心的知道,使我的编程能力有了很大的提升,最后能把自己的平台勉强完成很是感谢大家,在以后的学习中希望我们互帮互助共同进步,我会加倍努力,提升自己。
本文标题:TSP实验报告
链接地址:https://www.777doc.com/doc-6171143 .html