Python VS Matlab:誰的求解效率更強呢?蟻群算法告訴你!

相信搞物流運籌優化的都知道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。

相關推薦

推薦中...