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

简介: 干货 | 模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享

写在前面

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

微信图片_20220423101932.jpg

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

微信图片_20220423101935.jpg

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

微信图片_20220423101937.png

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

微信图片_20220423101940.png

做个预告哦,相信看完这期,你就不会想用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++ Java python
满意解 11060 11370 11102
时间(秒) 1.0 2.0 39.4
时间(比例) 1 2 39

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

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

微信图片_20220423102154.gif

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

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

相关文章
|
1天前
|
缓存 开发者 Python
探索Python中的装饰器:简化和增强你的代码
【10月更文挑战第32天】 在编程的世界中,简洁和效率是永恒的追求。Python提供了一种强大工具——装饰器,它允许我们以声明式的方式修改函数的行为。本文将深入探讨装饰器的概念、用法及其在实际应用中的优势。通过实际代码示例,我们不仅理解装饰器的工作方式,还能学会如何自定义装饰器来满足特定需求。无论你是初学者还是有经验的开发者,这篇文章都将为你揭示装饰器的神秘面纱,并展示如何利用它们简化和增强你的代码库。
|
2天前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
18 3
|
4天前
|
设计模式 缓存 测试技术
Python中的装饰器:功能增强与代码复用的艺术####
本文将深入探讨Python中装饰器的概念、用途及实现方式,通过实例演示其如何为函数或方法添加新功能而不影响原有代码结构,从而提升代码的可读性和可维护性。我们将从基础定义出发,逐步深入到高级应用,揭示装饰器在提高代码复用性方面的强大能力。 ####
|
2天前
|
算法 IDE API
Python编码规范与代码可读性提升策略####
本文探讨了Python编码规范的重要性,并深入分析了如何通过遵循PEP 8等标准来提高代码的可读性和可维护性。文章首先概述了Python编码规范的基本要求,包括命名约定、缩进风格、注释使用等,接着详细阐述了这些规范如何影响代码的理解和维护。此外,文章还提供了一些实用的技巧和建议,帮助开发者在日常开发中更好地应用这些规范,从而编写出更加清晰、简洁且易于理解的Python代码。 ####
|
5天前
|
缓存 测试技术 数据安全/隐私保护
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第29天】本文通过深入浅出的方式,探讨了Python装饰器的概念、使用场景和实现方法。文章不仅介绍了装饰器的基本知识,还通过实例展示了如何利用装饰器优化代码结构,提高代码的可读性和重用性。适合初学者和有一定经验的开发者阅读,旨在帮助读者更好地理解和应用装饰器,提升编程效率。
|
9天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
12 3
|
11天前
|
缓存 算法 数据处理
Python性能优化:提升代码效率与速度的秘诀
【10月更文挑战第22天】Python性能优化:提升代码效率与速度的秘诀
10 0
|
2月前
|
人工智能 数据挖掘 数据处理
揭秘Python编程之美:从基础到进阶的代码实践之旅
【9月更文挑战第14天】本文将带领读者深入探索Python编程语言的魅力所在。通过简明扼要的示例,我们将揭示Python如何简化复杂问题,提升编程效率。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编码世界的大门。让我们开始这段充满智慧和乐趣的Python编程之旅吧!
|
6月前
|
算法 编译器 开发者
如何提高Python代码的性能:优化技巧与实践
本文探讨了如何提高Python代码的性能,重点介绍了一些优化技巧与实践方法。通过使用适当的数据结构、算法和编程范式,以及利用Python内置的性能优化工具,可以有效地提升Python程序的执行效率,从而提升整体应用性能。本文将针对不同场景和需求,分享一些实用的优化技巧,并通过示例代码和性能测试结果加以说明。
|
1月前
|
大数据 Python
Python 高级编程:深入探索高级代码实践
本文深入探讨了Python的四大高级特性:装饰器、生成器、上下文管理器及并发与并行编程。通过装饰器,我们能够在不改动原函数的基础上增添功能;生成器允许按需生成值,优化处理大数据;上下文管理器确保资源被妥善管理和释放;多线程等技术则助力高效完成并发任务。本文通过具体代码实例详细解析这些特性的应用方法,帮助读者提升Python编程水平。
64 5