遺傳演算法的執行過程的整體概況,如下:
1、選擇編碼策略,把參數轉換成串;
2、根據群體大小N,隨機產生N個串構成的群體;
3、根據適應度函數 F=f(x) 計算各個串的適應度;
4、根據串的複製機率 F=f(x) 選擇一個串進行複製,直至已經複製了N個串,適應度越高,複製機率越大;
5、複製後的串兩兩配對,以交叉機率進行交叉;
6、對每個串中的基因按變異機率進行翻轉;
7、從3起重複進行,直到滿足某一效能指標或規定的遺傳代數;
本文最初由SpriteLW發表於http://blog.csdn.net/SpriteLW,可以隨意轉載,但未經同意不得增刪修改,轉載應保留本聲明,否則追究責任。
讀萬卷書不如行萬裡路,今天下決心寫一個SGA(Simple Genetic Alogrithms)程式,是求解非約束最佳化問題。
max f(x1,x2) = 21.5 + x1*sin(4 * PI *x1) + x2*sin(20 * PI * x2)
-3.0 <= x1 <= 12.1
4.1 <= x2 <= 5.8
這可是遺傳演算法中最容易的,可是結果卻令人失望,在整個求解過程中都收斂在局部最優,只有通過加大變異率才能求得全域最優,但問題可想而知:全域最優解不穩定,就好像是曇花一現。
查了一下資料才發現是編碼設計的問題。我用的是二進位編碼。
編碼是應用遺傳演算法時要解決的首要問題,也是設計遺傳演算法時的一個關鍵步驟。編碼方法影響到交叉運算元、變異運算元等遺傳運算元的運算方法,大很大程度上決定了遺傳進化的效率。
迄今為止人們已經提出了許多種不同的編碼方法。總的來說,這些編碼方法可以分為三大類:二進位編碼法、浮點編碼法、符號編碼法。下面我們從具體實現角度出發介紹其中的幾種主要編碼方法。
1.二進位編碼方法:
它由二進位符號0和1所組成的二值符號集。它有以下一些優點:
1) 編碼、解碼操作簡單易行
2) 交叉、變異等遺傳操作便於實現
3) 符合最小字元集編碼原則
4) 利用模式定理對演算法進行理論分析。
二進位編碼的缺點是:對於一些連續函數的最佳化問題,由於其隨機性使得其局部搜尋能力較差,如對於一些高精度的問題(如上題),當解迫近於最優解後,由於其變異後表現型變化很大,不連續,所以會遠離最優解,達不到穩定。而格雷碼能有效地防止這類現象
2.格雷碼方法:
格雷碼方法是這樣的一種編碼方法,其連續兩個整數所對應的編碼值之間僅僅只有一個碼位是不同的。如下表
十進位 |
二進位 |
格雷碼 |
0 |
0000 |
0000 |
1 |
0001 |
0001 |
2 |
0010 |
0011 |
3 |
0011 |
0010 |
4 |
0100 |
0110 |
5 |
0101 |
0111 |
6 |
0110 |
0101 |
7 |
0111 |
0100 |
8 |
1000 |
1100 |
9 |
1001 |
1101 |
10 |
1010 |
1111 |
11 |
1011 |
1110 |
12 |
1100 |
1010 |
13 |
1101 |
1011 |
14 |
1110 |
1001 |
15 |
1111 |
1000 |
假設有一個二進位編碼B=bmbm-1…b2b1,其對應的格雷碼為G=gmgm-1…g2g1
由二進位編碼轉格雷碼的轉換公式為:
gm = bm
gi = bi+1⊕bi ,i=m-1,m-2,…2,1
由格雷碼轉二進位的轉換公式為:
bm = gm
bi = bi+1⊕gi, i=m-1,m-2,…2,1
從以上表格可以看出,當一個染色體變異後,它原來的表現現和現在的表現型是連續的。
格雷碼編碼的主要優點是:
1) 便於提高遺傳演算法的局部搜尋能力
2) 交叉、變異等遺傳操作便於實現
3) 符合最小字元集編碼原則
4) 便於利用模式定理對演算法進行理論分析
3.浮點編碼法
對於一些多維、高精度要求的連續函數最佳化問題,使用二進位編碼來表示個體時將會有一些不利之處。
二進位編碼存在著連續函數離散化時的映射誤差。個體長度較知時,可能達不到精度要求,而個體編碼長度較長時,雖然能提高精度,但卻使遺傳演算法的搜尋空間急劇擴大。
所謂浮點法,是指個體的每個基因值用某一範圍內的一個浮點數來表示。在浮點數編碼方法中,必須保證基因值在給定的區間限制範圍內,遺傳演算法中所使用的交叉、變異等遺傳運算元也必須保證其運算結果所產生的新個體的基因值也在這個區間限制範圍內。
浮點數編碼方法有下面幾個優點:
1) 適用於在遺傳演算法中表示範圍較大的數
2) 適用於精度要求較高的遺傳演算法
3) 便於較大空間的遺傳搜尋
4) 改善了遺傳演算法的計算複雜性,提高了運算交率
5) 便於遺傳演算法與經典最佳化方法的混合使用
6) 便於設計針對問題的專門知識的知識型遺傳運算元
7) 便於處理複雜的決策變數約束條件
4.符號編碼法
符號編碼法是指個體染色體編碼串中的基因值取自一個無數值含義、而只有代碼含義的符號集如{A,B,C…}。
符號編碼的主要優點是:
1) 符合有意義積術塊編碼原則
2) 便於在遺傳演算法中利用所求解問題的專門知識
3) 便於遺傳演算法與相關近似演算法之間的混合使用。
但對於使用符號編碼方法的遺傳演算法,一般需要認真設計交叉、變異等遺傳運算的操作方法,以滿足問題的各種約束村求,這樣才能提高演算法的搜尋效能。