【干貨】算法學習必備訣竅:算法可視化解密

受困于繁復的代碼塊里,每天看著密密麻麻的變量和語句,拿著別人提供的代碼跑出結(jié)果也不知道結(jié)果是什么?
不妨來了解了解算法可視化吧,說不定就能解你每日之煩憂,讓你的頭發(fā)掉落的速度慢下來!
01
初入“可視化”:算法可視化概念
可視化,也可以解釋為形象化,具象化,它旨將我們腦中抽象復雜的邏輯步驟變成圖像,幫助我們更好的檢索獲取分析信息。雖然說的“高大上”,但毋庸置疑的是可視化是我們學習新知識的捷徑,也是透徹理解一個理論的必由之路。還記得小時候被加法表乘法表支配的恐懼嗎?那時候就有聰明的大人發(fā)明出偉大的“蘋果論”(不要誤會,不是牛頓發(fā)明的),“你有一個蘋果,媽媽又給了你一個,現(xiàn)在你有幾個蘋果了呢?”就在這來來回回的贈送又拿走,拿走又獎勵的過程中,GDP總量上升了,我們學會了最基礎的邏輯運算。

但肯定有人說了,算法學習怎么能和加減法一樣呢,我們也怎么能和學齡前兒童類比呢?算法難不難?(如果認為小菜一碟的能不能給蒟蒻筆者留個聯(lián)系方式,好心拯救頭禿少女)難,非常難,難于上青天,但之所以會有如此哀嘆,是因為我們看到的最原始狀態(tài)的算法是這樣的:

這是一段簡單的冒泡排序算法,但盯著一堆毫無生命力的英文字母,看到一堆大括號可能就犯暈的你,怕是得花上很多時間才能理解它的原理。
但如果算法以下面這種形式呈現(xiàn),你可能會說:「噢,原來就是兩兩比較兩兩交換啊?!故遣皇菍λ惴ㄍ蝗痪筒荒敲纯謶至四??

算法可視化是指,將一段程序的數(shù)據(jù)、操作、語義進行抽象,并對這些抽象進行動態(tài)的圖像展示,使之更容易理解、傳播和交流的過程。
它的使用對象可以分成兩類——學習者和教育者。這里的學習者就是你所以為的學習者,但教育者卻不僅僅指狹義上的教師,它包括了腳本師、算法設計者等需要進行算法展示的角色。
算法可視化是伴隨著需求而發(fā)展的一門技術(shù),用戶的需求決定了算法可視化的發(fā)展方向。從只提供文字和簡單圖表的無可視化階段,到通過彈出式問題與用戶交互,從用戶能改變系統(tǒng)所演示算法的數(shù)據(jù),再到自主創(chuàng)建自己的算法的可視化動畫,用戶的需求不同,其在系統(tǒng)中的參與層級也不同。
02
實例:VRPTW求解過程可視化
聽完算法可視化相關(guān)概念的你可能已經(jīng)懵圈了,無圖無真相,說什么都不如親眼看看可視化的實際效果來的直觀。這里我們準備了一個基于 Java+JavaFx 實現(xiàn)的禁忌搜索求解帶時間窗的車輛路徑規(guī)劃問題(VRPTW)的可視化程序,不妨一起來看看吧:

關(guān)于VRPTW問題,我們已經(jīng)在之前發(fā)布的文章中多次介紹過,如果你還有疑問的話,可以戳下面的文章進行了解:
干貨|十分鐘快速掌握CPLEX求解VRPTW數(shù)學模型(附JAVA代碼及CPLEX安裝流程)
禁忌搜索算法求解帶時間窗的車輛路徑規(guī)劃問題詳解(附Java代碼)
由于啟發(fā)式算法求解VRPTW的過程往往圍繞迭代展開,因而,通過顯示每一次迭代得到的結(jié)果,追蹤解的變化,我們可以對算法求解VRPTW問題的收斂過程有更清晰的認識。同時,成本函數(shù)隨迭代次數(shù)的變化也更直觀地反映了算法的效率。
那么,這樣一個VRPTW問題的可視化程序,都為我們提供了哪些功能呢?我們又該如何進行操作呢?
首先,我們需要導入我們的算例和結(jié)果:

導入算例和結(jié)果的TXT文件后,在程序界面的左上方,會出現(xiàn)配送中心和客戶節(jié)點的分布。我們只需要把鼠標懸停在各個點上,就可以看到相應客戶點的位置、需求和時間窗約束。

點擊界面下方的啟動按鈕,程序開始運行??梢钥吹?,在節(jié)點的分布圖上生成了各種顏色的路徑線條,不同顏色的連線代表不同的配送車輛行駛的配送路線,直觀地顯示了規(guī)劃路徑的變化。

將目光移到右邊的區(qū)域上,可以看到,隨著迭代次數(shù)的增加,凈成本在不斷地變化,方便我們追蹤成本是否趨于收斂。下方則是每次迭代產(chǎn)生的具體解,每輛配送車經(jīng)過客戶點的順序、每條路徑的凈成本、每個路徑規(guī)劃方案的總成本。我們可以通過點擊暫停鍵隨時查看迭代過程中產(chǎn)生的特定解。在最下方可以看到目前為止產(chǎn)生的最優(yōu)解。

求解過程演示完畢后,在下方可以進行特定迭代次數(shù)產(chǎn)生解的查詢。此外,我們還可以通過拖動一旁的演示速度條自由選擇演示的速度。

當算法的黑盒被突然剖開,求解過程被這樣直白的呈現(xiàn)在你的面前,令人頭疼的VRPTW問題是不是變得平易近人了呢?當你還在煩惱老師or客戶對自己孤零零的結(jié)果將信將疑的時候,別人早早地已經(jīng)使用可視化工具把算法流程講的一清二楚啦。此時不用可視化,更待何時?
寫在最后
總結(jié)一下,算法可視化幫助我們將復雜的邏輯過程形象化,不管是為了學習算法原理還是展示算法過程,算法可視化都將是我們的一種有效工具。
在接下來的推文中,我們將更加詳細地為大家介紹多種算法的可視化界面及其代碼,盡情期待喲!
?贊 賞?
長按下方二維碼打賞感謝您,支持學生們的原創(chuàng)熱情!
鄭重承諾打賞是對工作的認可所有打賞所得都將作為酬勞支付給辛勤工作的學生指導老師不取一文?
?

The End
文案&編輯:李奕瀟 李欣羽
審稿人:秦時明岳(華中科技大學管理學院)
指導老師:秦時明岳(華中科技大學管理學院)
如對文中內(nèi)容有疑問,歡迎交流。(PS:部分資料來自網(wǎng)絡)
如有需求,可以聯(lián)系:秦虎老師([email protected])李奕瀟(華中科技大學管理學院本科一年級 [email protected])
李欣羽(華中科技大學管理學院本科二年級?[email protected])
掃一掃,獲取數(shù)據(jù)和模型還有更多算法學習課件分享喲
