達爾文:物競天擇,適者生存。node
遺傳算法概述
遺傳算法(Genetic Algorithm
,GA
)的算法思想來源於達爾文的進化論學說和Mendel
的遺傳理論,本質是模擬種羣個體不斷進化以逐漸適應環境的過程。遺傳算法經過天然選擇、交叉、變異等遺傳操做模擬種羣進化過程,使種羣中個體的優良基因得以保留,提升個體的適應能力,進而不斷加強對環境的適應能力。見下表:web

從上表中,咱們能夠看到遺傳算法是以染色體形式對問題的解進行描述,經過對編碼串相似天然進化的遺傳操做,來完成新個體的產生。當新個體產生後,咱們就能夠根據個體的適應值,遵循天然選擇法則,適者生存來選取優秀個體再次進化,直到進化完成。算法
其中,遺傳算法的流程圖以下:微信

在算法初始化時,首先隨機產生一批初始種羣,根據適應度函數公式計算種羣中各個染色體的適應度值;進一步,按照適者生存、優勝劣汰的法則,選擇種羣中的個體進行復制、交叉、變異的遺傳操做產生出子代染色體,個體適應度越大被選擇進行遺傳操做的機率越高,從而將種羣中的優良基因進行保留同時適應度較差的個體將逐漸被淘汰;最後,進化多代後達到算法終止條件,算法收斂到某個對環境適應性最好的染色體上,這個染色體對應的編碼也就是該問題的最優解。編輯器
遺傳算法具體實現
根據上述流程圖咱們來一步一步理解下:svg
肯定實際問題參數
首先,咱們假如問題是找出下式子的最大值:函數
很顯然,在該範圍內存在x=0
時,f(x)=1
最大。以下圖:flex

至此,咱們已經肯定了問題的參數,即在[-1,1]
上找出f(x)
的最大值。編碼
對參數進行編碼
採用二進制編碼,將某個變量值表明的個體表示爲一個{0,1}
二進制串。串長取決於求解的精度。若是肯定求解精度到3
位小數,因爲區間長度爲1-(-1)=2
,必須將區間[-1,1]
分爲2×10^3
等份。由於spa
因此編碼的二進制串長至少須要11
位。二進制串轉化爲十進制:
例如,s=<01000110000>
,x’=560
; 得x=-0.453
. 則 <00000000000>
與<11111111111>
表示區間的兩個端點-1
和1
。至此,咱們對該問題進行了二進制串編碼。
初始化種羣
一個二進制串叫作一個個體(individual
)。有若干個個體組成個體的集合,稱爲種羣(population
),種羣中含有的個體的數量叫作種羣的規模(population size
)。隨機生成初始種羣:
評價羣體
要評價羣體,就得必須有一個評價標準,遺傳算法是根據個體的適應值進行評價個體是否進入下一代的。很顯然這裏的適應值函數就是咱們的目標函數f(x)
,直接將目標函數做爲適應值函數。有了適應值函數,能夠對初始種羣進行評估。
中止條件
在進化算法中,常見的進化中止算法有三種:
-
設置進化代數,當種羣進化N代以後,進化中止,選出適應值最高的個體,該個體便是最優解。 -
設置評價次數,當種羣進化過程當中的評價次數達到M後,進化結束,輸出適應值最高個體。 -
種羣收斂,若是種羣收斂,則輸出最優個體,進化結束。固然,若是沒達到進化中止的條件,則對種羣進行遺傳操做,來產生新個體。
遺傳操做
遺傳操做通常分爲三種:交叉,變異,複製
-
交叉:兩個個體隨機以某個點爲交叉點進行交叉點後的基因互換。以下圖,兩條染色體將第四個基因後面的基因互換: -
變異:在某個基因上隨機選出一個變異位置,將該位置上的基因進行隨機互換。以下圖選擇第一個基因將 0
變異成爲1
: -
複製:
複製就是將優秀的個體,原封不動的複製到下一代種羣中,以保存優秀基因。這裏出現了一個問題:選擇哪些基因進行遺傳操做呢?
適者生存
和天然進化同樣在選擇的時候通常按照一個原則:適應值高的存活的機率大,即選中進行遺傳操做的機率大。通常有如下幾個方法進行選擇:
-
輪盤賭選擇法 ( Roulette Wheel Selection
):利用各個個體適應度所佔比例的大小決定其子孫保留的可能性。 -
錦標賽選擇法( tournament selection
):每次隨機選取幾個個體之中適應度最高的一個個體遺傳到下一代羣體中,重複M次. -
隨機遍歷選擇法:像輪盤賭同樣計算選擇機率,而後根據指針等距離地選擇個體。 這樣,適應值高的個體存活的機率大,進行遺傳操做的機率高,產生後代的機會就大,符合天然進化的選擇方法。
在進行遺傳操做後,在保證種羣大小不變的狀況下進行淘汰適應值低的個體。而後進行下一代進化。直至進化結束,產生出最優個體爲止。

♥點個贊再走唄♥
本文分享自微信公衆號 - 智能算法(AI_Algorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。