對遺傳演算法 GA 的一些理解

2021-10-10 01:29:33 字數 2053 閱讀 4468

目錄

1、遺傳演算法的原理

2、遺傳演算法的主要流程

3、對遺傳演算法中的選擇、編碼、交叉及變異的理解

基因以染色體為載體在種群間得以傳播,而基因在相當程度上決定了個體的表現型(性狀),這個傳播過程常常伴隨著染色體交叉以及基因突變,從而產生新的性狀

(新的種群

),自然生存法則通過對各種性狀的篩選最終適合生存(一般對應著最優條件)的個體得以儲存。這樣一代一代周而復始地繁衍篩選,最終會得到最適合生存的種群(最優解)。

找定要優化的目標函式、確定用以評判解的優越性的自然選擇法則

初始化一定數目的種群

將種群帶進自然選擇法則,按照一定的篩選原則篩選一定比例的最優個體,並對這些個體的染色體進行編碼。

對篩選出來的個體(父代)的染色體進行交叉,產生新的個體(子代),然後對子代染色體進行一定概率的變異。最後將父代子代進行合併形成新的種群。

重複步驟3~4,直到達到最大迭代次數或最優解不在變化。

稍微加點解釋就是下面的樣子:

找定要優化的目標函式、確定用以評判解的優越性的自然選擇法則,即適應度函式(一般就是目標函式本身);

初始化一定數目的種群(自變數)

將種群帶進自然選擇法則(適應度函式),根據得出的評判值按照一定的篩選原則(一般選用輪盤賭演算法篩選)篩選一定比例(比如50%)的最優個體(最優解),並對這些個體的染色體(自變數值)進行編碼 (編碼的方法有很多種,一般採用二進位制編碼)。

對篩選出來的個體(父代)染色體進行交叉,產生新的個體(子代),對子代的染色體(編碼)按一定概率進行變異。並將父代子代進行合併形成新的種群。

重複步驟3~4,直到達到最大迭代次數或最優解不再變化。

選擇:

選擇運算,把當前群體中適應度較高的個體按某種規則或模型(對應演算法中的適應度函式)遺傳到下一代群體中。一般使用輪盤賭演算法。

編碼:

對自變數(對應著種群的染色體,由於染色體決定了種群的性狀,因此這裡可以視的種群和種群的染色體為同一概念)進行編碼。

比如要確定函式y=xsin(x)在區間[-1,3]上的最大值,我們可以對取值x進行編碼,如果採用二進位制編碼,則編碼位數對精度有著直接的影響。比如我們採用8位二進位制進行編碼,則編碼精度就是4/256,如果取x=2,則其對應的二進位制編碼為:0111 1111,反過來,編碼為0111 1111的個體就代表自變數為2,這就是反編碼。

交叉:

在生物學中,交叉就是染色體基因片段的交叉互換。同樣的,在這裡對應著一對自變數編碼片段的交叉互換,當然是否發生交叉也是有一定的概率的。還以上述優化函式為例,現有兩個自變數x1=2,x2=1,對應的編碼分別為:0111 1111、0001 1111,若對其第5、6位(一般是父代隨機配對,並隨機產生交叉位置)進行交叉互換,則得到的新個體的編碼為:0101 1111、0011 1111。

交叉運算是遺傳演算法中產生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。

變異:

模擬對交叉的操作,只是在這裡變異是針對父代交叉後的子代編碼進行變異。變異對於二進位制編碼來說就是將相應位的編碼取反,這裡就直接舉個例子,還是以上述優化y=xsin(x)為例,由父代交叉產生的x4的編碼為0011 1111,對其第3位(一般是隨機產生的變異點)進行變異,則得出的新的個體為0011 1011。

變異運算是對個體的某乙個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產生新個體的一種操作方法。

在自然界中,總的來說,變異產生的基因大多是不好的有害的,同樣的在遺傳演算法中要把子代變異的概率設定的低一點,交叉的概率稍微高一點,這也是為什麼交叉是產生子代個體的主要途徑的原因。 

遺傳演算法(GA)的matlab實現

一 task 二 實現過程 1.編碼與解碼 編碼 在編碼之前需要確定求解的精度,設定求解的精度為小數點後六位,即10 6。這樣可以將每個自變數x的解空間劃分為 1 0 10 6 1000000個等分。使n滿足 1 0 10 6 2 n 1,這裡n表示使上式成立的最小整數,即表示自變數x的基因串的長度...

我對遺傳演算法理解

1 始祖值 2 隨機交叉 3 優秀標準 4 精英策略 5 收斂 始祖值,a 1 echo print r a echo 雜湊值 any array 2,4,7,8,10,12,51,32,11 echo print r any echo 交叉並啟動精英策略,假設後代的和越大越優秀 foreach a...

我對遺傳演算法理解

1 始祖值 2 隨機交叉 3 優秀標準 4 精英策略 5 收斂 始祖值,a 1 echo print r a echo 雜湊值 any array 2,4,7,8,10,12,51,32,11 echo print r any echo 交叉並啟動精英策略,假設後代的和越大越優秀 foreach a...