美文网首页
模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分

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

作者: 番茄鸡蛋炒饭被抢注啦 | 来源:发表于2020-12-10 11:09 被阅读0次

    写在前面

    众所周知,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代码分享

    为什么不用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编写更好。不然绞尽脑汁想出的优化方法,还不如别人换种语言效果更好

    image

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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/tdvlgktx.html