模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享

本文主要是介绍模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来源于公众号【程序猿声】,作者舟寒丶

写在前面

众所周知,python是近几年来最火的语言之一,也因为容易上手、代码简洁深受各位刚刚接触编程的同学的喜爱。小编这学期也有一门python的课程。

然而,公众号内代码基本通过C++、Java编写,很少有python。但是还是有部分童鞋想要python代码。

还有同学发出疑问:为什么不用python

为了熟悉python,同时本着造-福-人-类的目的,小编特地选取了公众号内几个相对简单的代码,改编成python,供各位童鞋学习~

做个预告哦,相信看完这期,你就不会想用python写启发式算法了

代码分享

小编这次准备了三段代码,分别是Tabu Search禁忌搜索算法SA模拟退火算法ILS迭代局部搜索算法求解TSP问题的代码。

其中禁忌搜索代码改编自此文代码,去除了对比所用的GUROBI,保留了纯粹的禁忌搜索:

干货 | 到底是什么算法,能让人们如此绝望?

SA代码改编自此文:

【算法进阶】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题

ILS代码改编自此文:

【优化算法】迭代局部搜索算法(Iterated local search)探幽(附C++代码及注释)

同时,关于SA、ILS求解TSP的代码小编也有改编成Java:

模拟退火算法(SA)和迭代局部搜索(ILS)求解TSP的Java代码分享

在公众号中输入【PYTSP】不带【】即可下载相关代码!

为什么不用python

公众号内运筹学相关代码一直采用C++和Java编写,没有用过python。关于这一点,之前也曾提到过:

关于为什么选择C++和java,而不是Python或者matlab,小编已经解释很多遍了。那只学C++或者java一门可以吗?小编之所以建议两手抓,是因为C++和java都有着非常显著的优点。

对于C++而言,速度相当快,快到你怀疑人生。可能此时会有读者有疑问,小编骗人,有时候明明感觉C++慢的离谱。那是因为你IDE的编译模式用的是debug,编译也没有开优化之类的。>对于java而言,最大的优点是兼顾速度和易用性。速度总体上和C++是一个量级的,但终究还是比不过变态的C++。

对于java而言,最大的优点是兼顾速度和易用性。速度总体上和C++是一个量级的,但终究还是比不过变态的C++。

但java用起来非常方便,比如调用cplex,只需要导入一个jar包配置好dll就可以随心所欲了。而C++又要导入头了,又要链接库了,对小白而言简直是噩梦. 而且java一个类一个文件,不像C++一个类有一个头文件一个CPP文件我真是头大。

与python相比,运行速度是C++和Java最重要的有点。python的运行速度远不如C++和Java。

为了对比三种语言的速度,小编特地在修改代码时保留了代码的大部分处理方式(虽然由于年代久远,现在看来有些不太好),对三段内容相同的代码做了一个小实验:

语言C++Javapython
满意解110601137011102
时间(秒)1.02.039.4
时间(比例)1239

可以看出,调整编译模式最快的C++代码速度最优,Java其次,而python与前者差距巨大。

而运筹学问题,要处理的数据量通常很大,因此用C++或Java编写更好。不然绞尽脑汁想出的优化方法,还不如别人换种语言效果更好

image

所以,小编以后也不会考虑再拓展启发式算法的python版本了。

还是老老实实学好C++和Java吧!

在公众号中输入【PYTSP】不带【】即可下载相关代码!

这篇关于模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161393

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监