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


前言

大家好呀!

我是你們好久不見的帥氣可愛的小編

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

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

奈何,資料太多太雜

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

看書?

看論文??

看代碼???

最后最后還是放開了手

不想再愛過頭,成了痛。

哈哈哈玩笑就此打住

那么

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

當然不是辣

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

走呀!!!

先說兩點

  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哦。最后的最后,祝大家學有所成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM