模拟退火、禁忌搜索、迭代局部搜索求解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

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do