前言
大家好呀!
我是你們好久不見的帥氣可愛的小編
不知道你萌是不是時常面臨着這樣的問題
下定決心想要學習優化算法
奈何,資料太多太雜
更無人指路,根本無從學起
看書?
看論文??
看代碼???
最后最后還是放開了手
不想再愛過頭,成了痛。
哈哈哈玩笑就此打住
那么
就沒有好辦法學習優化算法了嗎?
當然不是辣
今天就跟着小編步伐一起學習!
走呀!!!
先說兩點
-
本文面向的是剛入門學習算法的小白。
-
本文介紹的是啟發式算法的學習大綱,基於本公眾號上的學習資料。
為什么先學啟發式算法呢?因為啟發式算法不需要運籌學的基礎,只要具備一定的思維能力都能很快上手學習。
-
學習算法需要一定的編程基礎,要能看懂C++/JAVA的代碼。
當然,語言層面的知識也不需要太深,畢竟算法更多的是在於思想和架構。
基礎篇
公眾號介紹的啟發式算法主要分為兩類:鄰域搜索類和群體仿生類。常用的也基本上是這兩類。每一類都介紹了非常經典的一些算法,大家基礎一定要好好打扎實。學習順序參考如下。
鄰域搜索類
群體仿生類
進階篇
學習完了上面的基礎篇,相信大家已經對鄰域搜索和群體進化等有了一個清晰的認識,再接再厲,繼續學習更復雜的算法框架。學習順序參考如下。
鄰域搜索類
-
干貨 | 自適應大鄰域搜索(Adaptive Large Neighborhood Search)入門到精通超詳細解析-概念篇
-
代碼 | 自適應大鄰域搜索系列之(5) - ALNS_Iteration_Status和ALNS_Parameters的代碼解析
群體仿生類
應用篇
主要介紹應用前面所學的框架,來求解各類問題,包括如何設計算子,如何創新算法框架等等。
小結
好了,以上的學習過程大概就是這樣,小編差不多也是按照這個歷程走過來的。最后再多說幾句,啟發式算法我覺得更注重是代碼的能力吧。很多人學習啟發式算法,光是糾結理論而不肯動手去寫代碼,就容易陷入牛角尖死胡同。在啟發式的世界里,沒有絕對這一說,很可能你這個算法框架對於一個問題效果很好,但是另一個問題效果卻奇差,這都是有可能的。
還有,代碼實現也是非常重要的,就拿VRPTW這類問題來說,同一份偽代碼,實現同樣的效果,不同人的算法運行時間可能就差幾十倍甚至幾百倍都有的。為什么呢?因為在搜索的過程很多人沒有做去重優化。導致時間大幅度上升。這些都是需要靠代碼和實踐經驗得出來的。所以希望大家千萬不要眼高手低,小編之所以敢說這樣的話,是寫了無數個算法代碼的心得體會,絕不是螃蟹生兒子--蝦BB哦。最后的最后,祝大家學有所成。