分享

谁的求解效率更强呢?蚁群算法告诉你!

 niudp 2019-01-14

相信搞物流运筹优化的都知道Matlab这门语言吧,Matlab语言简洁、容易上手,最主要的优势就是自带的矩阵运算,在求解大规模非线性NP难问题非常方便,小编自己也是使用Matlab出家,用Matlab编写过遗传算法、差分演化算法以及蚁群算法,对其编码语言风格了解甚深,但自从接触到了Python后,突然感觉两门语言有共通之处,最主要的体现就是编码逻辑,和人的思维逻辑非常相似,也就是说,如果哪位朋友对Matlab了解甚深,如果想再多学一门计算机语言,不妨试一下Python,说不定会给你惊喜,小编扯远了,哈哈!下面直接撂干货,小编打算以蚁群算法求解旅行商问题,并用python和Matlab分别编写代码,研究代码运行效率,并分析原因!

这里以31个城市为例,研究一个旅行商从何处出发,如何规划路线,在遍历所有城市节点(并回到出发点)的基础上使得旅行长度最短,首先是Matlab代码:

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab_page_1

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab_page_2

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab_page_3

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab_page_4

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab_page_5

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab_page_6

Python代码小编使用了多个封装文件,包括antcolony_algorithm.py、function.py、mysqlpython.py、setting.py和cities.xlsx文件,下面是Python详细代码:

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

antcolony_algorithm.py_page_1

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

antcolony_algorithm.py_page_2

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

antcolony_algorithm.py_page_3

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_1

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_2

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_3

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_4

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_5

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_6

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_7

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

function.py_page_8

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

mysqlpython.py_page_1

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

mysqlpython.py_page_2

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

setting.py

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

cities.xlsx

Matlab和Python运行结果如下:

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Matlab运行结果

Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!

Python运行结果

在模型参数、系统配置相同的情况下,Matlab运行时间为19.14s,最短距离为15601.91,最短路径:1->15->14->12->13->11->23->16->5->6->7->2->4->8->9->10->3->18

->17->19->24->25->20->21->22->26->28->27->30->31->29->1,而Python运行时间为99.02s,最短距离为16212.93,最短路径: 14->12->13->11->23->16->5->6->7->2

->4->8->9->10->3->18->17->19->20->24->22->21->25->26->28->27->30->30

->31->29->1->15,由此可以看出,Python运行时间明显较长,即使加了多线程,运行效率仍然较低,且求解质量也不如matlab,究其原因,Python的Numpy库与Matlab矩阵运算相比有天然劣势,Matlab在组件丰富程度、计算速度、混合编程能力都完爆Numpy,况且Numpy库只是包含最基本的计算功能,若把numpy、scipy、sympy、matplotlib、pandas、traitsui……全放在一起才勉强有一拼之力,其次,就是Python线程的GIL问题(全局解释器锁),由于一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行,一个解释执行器同一时刻只能执行一个线程,但会在内核中交替运行,因此大大降低了Python线程的执行效率。因此,上述原因共同促成了Python运行效率明显低于Matlab。

受制于水平的有限,这里只从启发式算法求解的角度给大家简单对比了一下Python和Matlab的求解效率,虽然Python求解效率不高,但Python语言简洁,可移植、可扩展性较强,最主要它有丰富的第三方库,在网络编程、前后端交互、爬虫以及数据分析方面大展头角,相信未来Python应用会越来越广泛。需要交流和切磋的读者朋友,请在评论区积极评论,欢迎关注头条号:杜哥说python。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多