想學習啓發式優化算法,不知從何學起?

前言

你們好呀!c++

我是大家很久不見的帥氣可愛的小編算法

不知道你萌是否是時常面臨着這樣的問題編程

下定決心想要學習優化算法架構

奈何,資料太多太雜框架

更無人指路,根本無從學起dom

看書?學習

看論文??優化

看代碼???設計

最後最後仍是放開了手3d

不想再愛過頭,成了痛。

哈哈哈玩笑就此打住

那麼

就沒有好辦法學習優化算法了嗎?

固然不是辣

今天就跟着小編步伐一塊兒學習!

走呀!!!

先說兩點

  1. 本文面向的是剛入門學習算法的小白。

  2. 本文介紹的是啓發式算法的學習大綱,基於本公衆號上的學習資料。

    爲何先學啓發式算法呢?由於啓發式算法不須要運籌學的基礎,只要具有必定的思惟能力都能很快上手學習。

  3. 學習算法須要必定的編程基礎,要能看懂C++/JAVA的代碼。

    固然,語言層面的知識也不須要太深,畢竟算法更多的是在於思想和架構。

基礎篇

公衆號介紹的啓發式算法主要分爲兩類:鄰域搜索類和羣體仿生類。經常使用的也基本上是這兩類。每一類都介紹了很是經典的一些算法,你們基礎必定要好好打紮實。學習順序參考以下。

鄰域搜索類

  1. 乾貨|迭代局部搜索算法(Iterated local search)探幽(附C++代碼及註釋)

  2. 乾貨 | 用模擬退火(SA, Simulated Annealing)算法解決旅行商問題

  3. 乾貨 | 變鄰域搜索算法(Variable Neighborhood Search,VNS)超詳細一看就懂

  4. 乾貨 | 變鄰域搜索算法(VNS)求解TSP(附C++詳細代碼及註釋)

  5. 乾貨 | 變鄰域搜索算法解決0-1揹包問題(Knapsack Problem)代碼實例

羣體仿生類

  1. 乾貨 | 遺傳算法(Genetic Algorithm) (附代碼及註釋)

  2. 乾貨 | 遺傳算法(Genetic Algorithm) Java 詳細代碼及註釋

  3. 乾貨 | 嘿!你和遺傳算法的距離也許只差這一文(附C++代碼和詳細代碼註釋)

  4. 乾貨|十分鐘快速get蟻羣算法(附代碼)

  5. 乾貨 | 【算法】粒子羣算法Particle Swarm Optimization超詳細解析+代碼實例講解

  6. 乾貨 | 人工魚羣算法 超詳細解析附JAVA代碼

image

進階篇

學習完了上面的基礎篇,相信你們已經對鄰域搜索和羣體進化等有了一個清晰的認識,再接再礪,繼續學習更復雜的算法框架。學習順序參考以下。

鄰域搜索類

  1. 乾貨|十分鐘快速複習禁忌搜索(c++版)

  2. 乾貨 | 究竟是什麼算法,能讓人們如此絕望?

  3. 乾貨 | 自適應大鄰域搜索(Adaptive Large Neighborhood Search)入門到精通超詳細解析-概念篇

  4. 代碼 | 自適應大鄰域搜索系列之(1) - 使用ALNS代碼框架求解TSP問題

  5. 代碼 | 自適應大鄰域搜索系列之(2) - ALNS算法主邏輯結構解析

  6. 代碼 | 自適應大鄰域搜索系列之(3) - Destroy和Repair方法代碼實現解析

  7. 代碼 | 自適應大鄰域搜索系列之(4) - Solution定義和管理的代碼實現解析

  8. 代碼 | 自適應大鄰域搜索系列之(5) - ALNS_Iteration_Status和ALNS_Parameters的代碼解析

  9. 代碼 | 自適應大鄰域搜索系列之(6) - 判斷接受準則SimulatedAnnealing的代碼解析

  10. 代碼 | 自適應大鄰域搜索系列之(7) - 局部搜索LocalSearch的代碼解

  11. 自適應大鄰域 | 用ALNS框架求解一個TSP問題 - 代碼詳解

  12. Greedy Randomized Adaptive Search 算法超詳細解析,附代碼實現TSP問題求解

羣體仿生類

  1. 基於MPI的並行遺傳算法

image

應用篇

主要介紹應用前面所學的框架,來求解各種問題,包括如何設計算子,如何創新算法框架等等。

  1. 乾貨 | 十分鐘掌握禁忌搜索算法求解帶時間窗的車輛路徑問題(附C++代碼和詳細代碼註釋)

  2. 論文拾萃 | 基於樹表示法的變鄰域搜索算法求解考慮後進先出的取派貨旅行商問題(附C++代碼和詳細代碼註釋)

  3. 乾貨|變鄰域搜索(VNS)算法求解Max-Mean Dispersion Problem(附代碼及詳細註釋)

  4. 遺傳算法求解混合流水車間調度問題(附C++代碼)

image

小結

好了,以上的學習過程大概就是這樣,小編差很少也是按照這個歷程走過來的。最後再多說幾句,啓發式算法我以爲更注重是代碼的能力吧。不少人學習啓發式算法,光是糾結理論而不願動手去寫代碼,就容易陷入牛角尖死衚衕。在啓發式的世界裏,沒有絕對這一說,極可能你這個算法框架對於一個問題效果很好,可是另外一個問題效果卻奇差,這都是有可能的。

還有,代碼實現也是很是重要的,就拿VRPTW這類問題來講,同一份僞代碼,實現一樣的效果,不一樣人的算法運行時間可能就差幾十倍甚至幾百倍都有的。爲何呢?由於在搜索的過程不少人沒有作去重優化。致使時間大幅度上升。這些都是須要靠代碼和實踐經驗得出來的。因此但願你們千萬不要眼高手低,小編之因此敢說這樣的話,是寫了無數個算法代碼的心得體會,毫不是螃蟹生兒子--蝦BB哦。最後的最後,祝你們學有所成。

相關文章
相關標籤/搜索