遺傳演算法求解混合流水車間調度問題(附C++代碼)
欲獲取相關代碼,請關注我們的微信公眾號:數據魔術師。在後台回復遺傳車間調度即可下載。
0 前言
各位讀者大家好,好久沒有介紹演算法的推文了,感覺愧對了讀者們熱愛學習的心靈。於是,今天我們帶來了一個神奇的優化演算法——遺傳演算法!
它的優點包括但不限於:遺傳演算法對所求解的優化問題沒有太多的數學要求,由於他的進化特性,搜索過程中不需要問題的內在性質,對於任意形式的目標函數和約束,無論是線性的還是非線性的,離散的還是連續的都可處理。
進化運算元的遍歷性(各態歷經性)使得遺傳演算法能夠非常有效地進行概率意義的全局搜素。
遺傳演算法對於各種特殊問題可以提供極大的靈活性來混合構造領域特有的啟發式,從而保證演算法的有效性看完了是不是頓時覺得遺傳演算法很強大呢?其實遺傳演算法在我們之前的推文中就已經出現啦,在乾貨 | 遺傳演算法(Genetic Algorithm) (附代碼及注釋)以及乾貨 | 遺傳演算法(Genetic Algorithm) Java 詳細代碼及注釋里你都可以學到遺傳演算法的相關知識。這次我們要介紹的是
遺傳演算法解決混合流水車間調度問題。需要注意的是,在以上兩篇推文中求解的是連續優化問題,採用浮點數編碼方式可以更好達到精度和空間要求(具體見兩篇推文)。而本文求解的是離散優化問題,使用二進位編碼和浮點數編碼會存在精度誤差,使用符號編碼是更好的選擇。符號編碼法是指個體染色體編碼串中的基因值取自一個無數值含義、而只有代碼含義的符號集如{A,B,C…}、{1,2,3...}(數字僅表示為符號)、{A1、A2、A3...}等。本文採用了
符號編碼中的數字元號編碼。廢話不多說,我們趕緊來學習一下這麼niubility的演算法吧~