遺傳算法(二)改進:自適應、遺傳退火算法

自從Hollad教授提出基本遺傳算法後,針對遺傳算法改進的討論從來沒有停止。本文將介紹遺傳算法的幾種改進方法,分別爲自適應遺傳算法、混合遺傳算法中的模擬退火遺傳算法(SAGA)和並行遺傳算法。相較於標準(簡單)遺傳算法(SGA),改進法在某些方面會具有一定的優勢。

往期傳送門


自適應遺傳算法

交叉概率Pc 和變異概率 Pm 對遺傳算法性能有很大的影響,直接影響算法收斂性1。雖然Pc 較大的時候種羣更容易產生新個體,但是當其變大時,優良個體在種羣中保留率也降低。對Pm 來說,若其過大則本算法相當於普通的隨機算法,失去了遺傳算法的意義。本文直接給出Srinvivas提出的自適應遺傳算法(Adaptive GA, AGA)方法:

Pc=Pc1(Pc1Pc2)(ffavg)fmaxfavg,Pc1,ffavgf<favg

Pm=Pm1(Pm1Pm2)(fmaxf)fmaxfavg,Pm1,ffavgf<favg

上式中,
  • fmax ——羣體中最大的適應度值
  • favg ——每代羣體的平均適應度值
  • f ——要交叉的兩個個體中較大的適應度值
  • f ——要變異的個體的適應度值
    Pc1=0.9Pc2=0.6Pm1=0.1Pm2=0.001

模擬退火遺傳算法

用模擬退火算法對GA進行改進的具體辦法有許多,總結下來有退火思維改進適應度函數、退火式變異(SAM)和退火式選擇等方法。

1. 無從考證的Stoffa改進方法

Stoffa借鑑模擬退火的思想2(並沒有找到原文,只有未列出參考文獻的二手資源),將適應度隨迭代的次數拉伸。遺傳算法在運行初期個體差異較大,使用輪盤賭選擇產生的後代與適應度成正比,可以獲得較好的選擇效果。但在算法後期,適應度趨於一致,優秀個體優勢不足,需要對適應度進行一定的“拉伸”,公式如下:

fi=efi/TMi=1efi/T

T=T0(0.99g1)

其中fi 爲第i 個個體的適應度,M 爲種羣大小,g 爲遺傳代數,T 爲溫度, T0 爲初始溫度。

本方法有一定的可取之處,在“算法後期,適應度趨於一致”的時候,該方法可以拉伸適應度,使遺傳算法中的選擇更有擇優的效果。但該方法只是應用了模擬退火思想中“拉伸”的思想,無法解決早熟問題,並沒有將模擬退火算法的爬山能力融入遺傳算法中。

2.SAM(退火式變異)

遺傳算法有三種明顯劣勢 3,一是編碼所佔用的儲存空間可能很大(二進制碼),二是可能出現早熟,陷入局部最優解,三是爬山能力差。Adler提出一種操作符——退火變異,僞代碼如下:

SAM(s, T){
    s' = mutate(s);
    if (accept(s, s', T)) return s';
    else return s;
}

其中的aceept操作爲模擬退火中的accept。計算變異後新的適應度與變異前適應度的差值,若變異後適應度更大,則接受變異;若變異後適應度變小,則以一定的退火概率exp(δ/T) 來確定是否發生變異。這樣的操作提高了遺傳算法的效率,同時也可以一定程度上避免早熟的出現。

對於函數

y=x×sin(4πx)+2

在區間[1,2] 上,使用自適應遺傳算法AGA和引入SAM的模擬退火遺傳算法SAGA對區間上最大值進行求解。記錄所需遺傳的代數,可以得到如下比較圖。
這裏寫圖片描述
使用AGA求解的遺傳代數情況(兩百次實驗)

其中平均遺傳代數爲64.66次。

這裏寫圖片描述
使用SAGA求解的遺傳代數情況(兩百次實驗)

在退火初溫度T 取3時,平均遺傳代數爲28次,遠遠小於64.66次。
可以發現加入模擬退火變異操作後可以明顯提高遺傳算法的效率。

3. 另一種改進的遺傳退火進化算法

操作流如下:

這裏寫圖片描述

與上述僅僅將變異或交叉操作符中加入退火思想不同,本方法直接將一部分個體進行退火。


  1. 王小平. 遺傳算法 : 理論、應用與軟件實現[M]. 西安交通大學出版社, 2002.
  2. 王小平. 遺傳算法 : 理論、應用與軟件實現[M]. 西安交通大學出版社, 2002.
  3. Adler D. Genetic algorithms and simulated annealing: a marriage proposal[C]. international symposium on neural networks, 1993: 1104-1109.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章