0. 寫在前面
參考博文:遺傳演算法的幾種改進 - GXTon - 部落格園 (cnblogs.com)
參考文獻:新型災變自適應遺傳演算法及其應用 (c-s-a.org.cn)
沒想到被最基礎的遺傳演算法打敗了˚‧º·(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )‧º·˚
在編寫遺傳演算法時我發現了一些問題:
-
優良基因很容易因為交叉、變異而遭到破壞,同時普通遺傳演算法也很容易陷入早熟(具體表現:1.群體中所有的個體都陷於同一極值而停止進化;2. 接近最優解的個體總是被淘汰,進化過程不收斂。)
-
對於輪盤賭的選擇方式,早期的高適應度個體迅速佔據種群、 後期的種群中因個體的適應度相差不大,都會導致種群停止進化。
遺傳演算法經常被應用於工業生產中的最最佳化問題當中, 但是在面對非線性、多極值、多變數的問題時容易在早期尋優過程中陷入區域性最優解範圍,透過大量的實驗分析可得, 在解決具有多變數的最最佳化問題時, 遺傳演算法很容易因為遺傳演算法的特性造成“早熟”現象。(ps. 這次我研究的就是非線性且超多變數的問題,感覺被說中了T_T
1. 災變操作
假設迭代次數為M,在第\(m(m<M)\)代之後,多數個體與最優個體相似度高(只有最優個體及最差個體相似度低),此時進行如下操作,以產生新種群:
-
將當前種群狀態、最優個體及其適應度值進行儲存
-
保留數量較少的適應度值較差的個體
-
將種群中大多數適應度優秀的個體進行刪除
-
隨機產生新個體進行補充
優點:
-
對保留之前的優秀種群特徵組成新種群,進行新一輪搜尋,可增大種群的多樣性和搜尋範圍。
-
災變之後保留的舊種群個體,由於本身處於較為優秀的尋優範圍內會對新種群個體的搜尋提供收斂趨勢的引導。
2. 避免近親繁殖的交叉運算元
遺傳演算法中,在交叉之前需要進行配對。常用的方法是隨機配對,但存在一個問題,當遺傳過程進入區域性最優時,群體中有很多幾乎完全相同的串,我們稱之為 “近親”。當這些串進行交叉時,由很低的機率產生新的模式,類似於近親繁殖,這樣就無法跳出區域性最優。
有學者提出了近親交叉迴避的思想,利用海明距離來判別親緣關係的遠近,參與交叉的兩個串的海明距離過近,交換產生的新模式可能就會很少,容易陷入區域性最優。
3. 避免區域性收斂的動態變異率
基本思路為:當判斷出種群出現“早熟”趨勢時,以一個遠大於通常變異機率的機率對所有個體執行一次變異操作,獨立隨機的產生許多新的個體,從而使整個群體脫離“早熟”。
4. 返回機制
為了提高演算法的全域性搜尋效能,提高搜尋的遍歷性,可加入了返回操作。返回操作的概念是當交叉、變異操作失利時,即新生成的群體的平均(最優)適應度水平低於原先群體的平均(最優)適應度水平時,則否定此次操作,恢復到之前的種群狀態。