蜂群算法 matlab 运行时间_Python VS Matlab:谁的求解效率更强呢?蚁群算法告诉你!...

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

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

365417e19d255cb4be49e04645db9755.png

Matlab_page_1

5e2d72da350a0f5fbf58f2bb3967802b.png

Matlab_page_2

21fe8df4c9fcf174db109f3445e28f65.png

Matlab_page_3

1d4255335e4c5f4c975a6111b5165025.png

Matlab_page_4

10f36d56ce1ca8e63d97e10b53197ec8.png

Matlab_page_5

ed13233e9b826ef161fc6d822e758224.png

Matlab_page_6

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

ae6dd20bfadad00186c801c7ae143fb9.png

antcolony_algorithm.py_page_1

cc7128db01c5343d67fa264c18f11bf0.png

antcolony_algorithm.py_page_2

02adee339a80922527837610aa0102bd.png

antcolony_algorithm.py_page_3

00cd4d22ca2b4cb6c72466f1bd541dae.png

function.py_page_1

600c9832cc4add344cc1a792f28cdea2.png

function.py_page_2

7464c6f85858f9c38208e02cd2087c69.png

function.py_page_3

54cddfe6b77a28e9b8417ac56d1f2e5d.png

function.py_page_4

78c956e0a95e88b9567c4d629ef5316c.png

function.py_page_5

52e9c0e7d739a83f21750e3343f49610.png

function.py_page_6

d39ef3ed3326180977d95c7a67dc1c70.png

function.py_page_7

40859bc5e402043c613d5d8ee9a08660.png

function.py_page_8

9c3f80b61a6a6a67d316ad639a5d7ab6.png

mysqlpython.py_page_1

55a103f669939a0c0b53e765adaa3f11.png

mysqlpython.py_page_2

8f67e7e91743ada73c8441ca827de01c.png

setting.py

9691ee66dc4eaa4f365a87c9373420a3.png

cities.xlsx

Matlab和Python运行结果如下:

3c25f05523a08601d21758a692e1001b.png

Matlab运行结果

b2442d488ca56e6ffe7b1ff2eb25d504.png

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值