遺傳算法簡單實例

轉自http://blog.csdn.net/b2b160/article/details/4680853/
遺傳算法的手工模擬計算示例

爲更好地理解遺傳算法的運算過程,下面用手工計算來簡單地模擬遺傳算法的各
個主要執行步驟。

例:求下述二元函數的最大值:
這裏寫圖片描述

(1)個體編碼

遺傳算法的運算對象是表示個體的符號串,所以必須把變量 x1, x2 編碼爲一種符號串。本題中,用無符號二進制整數來表示。
因 x1, x2 爲 0 ~ 7之間的整數,所以分別用3位無符號二進制整數來表示,將它們連接在一起所組成的6位無符號二進制數就形成了個體的基因型,表示一個可行解。
例如,基因型 X=101110 所對應的表現型是:x=[ 5,6 ]。
個體的表現型x和基因型X之間可通過編碼和解碼程序相互轉換。

(2)初始羣體的產生

  遺傳算法是對羣體進行的進化操作,需要給其淮備一些表示起始搜索點的初始羣體數據。
  本例中,羣體規模的大小取爲4,即羣體由4個個體組成,每個個體可通過隨機方法產生。
  如:011101,101011,011100,111001

(3)適應度汁算

  遺傳算法中以個體適應度的大小來評定各個個體的優劣程度,從而決定其遺傳機會的大小。
  本例中,目標函數總取非負值,並且是以求函數最大值爲優化目標,故可直接利用目標函數值作爲個體的適應度。

(4)選擇運算

  選擇運算(或稱爲複製運算)把當前羣體中適應度較高的個體按某種規則或模型遺傳到下一代羣體中。一般要求適應度較高的個體將有更多的機會遺傳到下一代羣體中。                   
  本例中,我們採用與適應度成正比的概率來確定各個個體複製到下一代羣體中的數量。其具體操作過程是:
  •  先計算出羣體中所有個體的適應度的總和  fi  ( i=1.2,…,M );
  •  其次計算出每個個體的相對適應度的大小 fi / fi ,它即爲每個個體被遺傳到下一代羣體中的概率,
  •  每個概率值組成一個區域,全部概率值之和爲1;
  •  最後再產生一個0到1之間的隨機數,依據該隨機數出現在上述哪一個概率區域內來確定各個個體被選中的次數。

這裏寫圖片描述

(5) 交叉運算

 交叉運算是遺傳算法中產生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。
 本例採用單點交叉的方法,其具體操作過程是:
 • 先對羣體進行隨機配對;
 • 其次隨機設置交叉點位置;
 • 最後再相互交換配對染色體之間的部分基因。

這裏寫圖片描述

(6) 變異運算

 變異運算是對個體的某一個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產生新個體的一種操作方法。
 本例中,我們採用基本位變異的方法來進行變異運算,其具體操作過程是:
 • 首先確定出各個個體的基因變異位置,下表所示爲隨機產生的變異點位置,
      其中的數字表示變異點設置在該基因座處;
 • 然後依照某一概率將變異點的原有基因值取反。

這裏寫圖片描述

 對羣體P(t)進行一輪選擇、交叉、變異運算之後可得到新一代的羣體p(t+1)。

這裏寫圖片描述

 從上表中可以看出,羣體經過一代進化之後,其適應度的最大值、平均值都得到了明顯的改進。事實上,這裏已經找到了最佳個體“111111”。       

[注意]
需要說明的是,表中有些欄的數據是隨機產生的。這裏爲了更好地說明問題,我們特意選擇了一些較好的數值以便能夠得到較好的結果,而在實際運算過程中有可能需要一定的循環次數才能達到這個最優結果。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章