Hamilton回路源代码下载

weixin_39821526 2019-05-06 07:00:13
回溯法解决Hamilton回路问题,以8*8棋盘马的走法为例
相关下载链接://download.csdn.net/download/data2010/2106338?utm_source=bbsseo
...全文
12 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
人类基因组计划的基本完成表明后基因组时代的到来。 人类积累的大量的生物信息数据为揭开生命奥秘提供了数据基础,生物学研究的热点由对细胞内个别基因或蛋白质功能的局部性研究,转移到以细胞内全部的基因、蛋白质及代谢产物为整体对象的系统研究。对基因调控网络、蛋白质相互作用网络、代谢路径网络等结构及功能模块的检测技术的研究,逐步把分子生物学推入系统生物学时代。 基因与蛋白质通过网状的相互作用产生更高一级的功能模块,所以,通过数学建模来设计有效的算法,在生物网络中进行功能模块的挖掘和分析,将有助于更好地研究生物体自身的功能和不同生物体之间的进化关系,为分析理解生命基本规律提供依据。 本文对基于图论的经典频繁子图挖掘算法进行了系统的研究和全面的总结,在此基础上提出了一种新的挖掘频繁子图的算法,该算法包含子图的搜索算法及同构分类算法。 对子图搜索问题,提出了环分布的概念,并构造了基于环分布的子图搜索算法ESR(EnumerateSubgraphs based on Ring);对子图同构问题,利用度序列和特征值构造了两种算法,分别用于对有向图和无向图的同构判别;利用同构算法对搜索出的子图进行同构分类,根据分类结果得到频繁子图。 管理毕业论文网www.yifanglunwen.com;音乐毕业论文www.xyclww.com;经济论文www.youzhiessay.com 教育论文www.hudonglunwen.com;医学论文网www.kuailelunwen.com;英语毕业论文www.vipvo.com 当网络规模比较大时,子图数量非常庞大,同构分类的工作量很大,为此又提出了随机归类算法和Hamilton子图的挖掘算法,以减少同构分类的运算量。 随机归类算法是通过从子图集中随机地抽取一定数量的子图进行同构分类,是一种近似的算法;Hamilton子图的挖掘算法旨在挖掘特定类型(具有Hamilton回路)的子图,以减少搜索结果集。最后对5个真实生物网络进行了仿真实验研究,找出了不同规模的频繁子图,实验结果表明本文提出的算法优于现有的算法。
<项目介绍> 基于C++实现的改进版遗传算法解决TSP问题源码+项目说明.zip 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 > 旅行商问题(Traveling Salesman Problem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。 在本文中使用的数据为来自TSPLIB的`ATT48`,即美国本土48个州首府坐标,TSPLIB的已知最优解为10628。 从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是一个NP完全问题。 # 解决思路 由于NPC问题至今没有得到解决,TSP问题往往是通过启发式搜索(我觉得也可以叫暴力)算法来“猜”出最优解。 使用遗传算法来解决TSP问题,主要思路如下: - 使用一个不重复的,首尾相同的字符串来表示一个解,该字符串即TSP的顺序 - 使用交叉,变异两种方式产生新的解,并根据数据来计算解的适应度 - 种群定义为当前所有解的一个集合,当种群中的每个个体完成一次“进化”(由概率决定)之后,称之为进化一代 - 对每一代种群进行筛选(根据适应度进行排序),择优劣汰,具有更优秀适应度的个体有更高的概率被其他个体选中进行交叉 - 不断重复上述过程,直到出现可以完全适应的个体(最优解) 遗传算法在TSP问题上可以融合多种算法,从而达到不同的效果,比如交叉应该如何交叉,变异应该如何变异等等。同时遗传算法的参数难以调整到最优——包括交叉率,变异率,种群容量等可以对搜索过程产生较大影响的参数都难以调整。限于个人水平,我无法从数学上给出最优参数,只能以经验论,加以多次实验选取表现优秀的样本。 # 解决方案 - 语言:C++ - 个体(解)的表示:用`vector`储存,代表节点遍历顺序 - 距离的计算:取伪欧式(pseudo Euclidean)距离,计算方法如下(向上取整): ![](assets/2.png) 使用`unordered_map`,内部实现为散列表,使得计算个体适应度可以达到*O*(N)​级别的复杂度 - 随机数的生成:设置时间种子,并由此生成随机数 - 交叉对象的选择:轮盘赌 - 交叉算法的选择:顺序移位 - 变异算法的选择:顺序移位 / 贪婪倒位 - 参数的选择:由多次实验得出 # Feature - 种群自动扩增 - 贪心初始化 - 自动调整变异算子 - 自动调整变异率 实验记录 - 实验样本:ATT48@TSPLIB(`att48.tsp`) - 理论最优解:10628 - 实验平台:CLion 2019.3(G++ 8.2.1 x64) ## 1000代 | 序号 | 最优解 | 耗时 / s | | ---- | ------- | -------- | | 0 | 12530 | 0.871 | | 1 | 11965 | 1.061 | | 2 | 12571 | 0.904 | | 3 | 11974 | 0.84 | | 4 | 12295 | 1.108 | | 5 | 12528 | 0.793 | | 6 | 12601 | 1.285 | | 7 | 12505 | 0.82 | | 8 | 11605 | 1.096 | | 9 | 12410 | 0.901 | | AVG | 12298.4 | 0.9679 | ## 5000代 | 序号 | 最优解 | 耗时 / s | | ---- | ------- | -------- | | 0 | 10906 | 3.349 | | 1 | 11122 | 3.899 | | 2 | 11265 | 4.49 | | 3 | 11591 | 5.184 | | 4 | 11407 | 6.562 |

12,794

社区成员

发帖
与我相关
我的任务
社区描述
CSDN 下载资源悬赏专区
其他 技术论坛(原bbs)
社区管理员
  • 下载资源悬赏专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧