遺傳算法
1.簡要概述
在幾十億年的演化過程中,自然界中的生物體已經 形成了一種優化自身結構的內在機制,它們能夠不 斷地從環境中學習,以適應不斷變化的環境。對於大多數生物體,這個過程是通過自然選擇和有性生殖來完成的。自然選擇決定了群體中哪些個體 能夠存活並繁殖,有性生殖保證了后代基因的混合 與重組。
演化計算(Evolutionary Computation, EC)是在達爾文(Darwin)的進化論和孟德 爾(Mendel)的遺傳變異理論的基礎上產生的一種在基因和種群層次上模擬自然界生 物進化過程與機制,進行問題求解的自組織、自適應的隨機搜索技術。它以達爾文進化論的“物竟天擇、適者生存”作為算法的進化規則,並結合孟德爾的遺 傳變異理論,將生物進化過程中的繁殖(Reproduction)、變異(Mutation)、競爭 (Competition)、選擇(Selection)引入到了算法中,是一種對人類智能的演化模擬方法演化計算的主要有遺傳算法、演化策略、演化規划和遺傳規划四大分支。其中,遺傳算 法是演化計算中最初形成的一種具有普遍影響的模擬演化優化算法。
遺傳算法簡稱GA(Genetic Algorithms)是1962年由美國Michigan大學的Holland教授提出的模擬自然界遺傳機制和生物進化論而成的一種並行隨機搜索最優化方法。
遺傳算法是以達爾文的自然選擇學說為基礎發展起來的。
自然選擇學說包括以下三個方面:
遺傳:這是生物的普遍特征,親代把生物信息交給子代,子代總是和親代具有相同或相似的性狀。生物有了這個特征,物種才能穩定存在。
變異:親代和子代之間以及子代的不同個體之間的差異,稱為變異。變異是隨機發生的,變異的選擇和積累是生命多樣性的根源。
生存斗爭和適者生存:具有適應性變異的個體被保留下來,不具有適應性變異的個體被淘汰,通過一代代的生存環境的選擇作用,性狀逐漸與祖先有所不同,演變為新的物種。
2.基本原理
遺傳算法將“優勝劣汰,適者生存”的生物進化原理引入優化參數形成的編碼串聯群體中,按所選擇的適應度函數並通過遺傳中的復制、交叉及變異對個體進行篩選,使適應度高的個體被保留下來,組成新的群體
新的群體既繼承了上一代的信息,又優於上一代這樣周而復始,群體中個體適應度不斷提高,直到滿足一定的條件遺傳算法的算法簡單,可並行處理,並能得到全局最優解。
3.基本操作
遺傳算法的基本操作有三種:
-
- 復制(Reproduction Operator)
- 從一個舊種群中選擇生命力強的個體產生新種群的過程
- 具有高適應度的個體更有可能在下一代中產生一個或多個子孫
- 模擬無性繁殖
-
- 交叉(Crossover Operator)
- 復制操作能從舊種群中選擇出優秀者,但不能創造新的染色體
- 交叉模擬了生物進化過程中的有性繁殖現象,通過染色體的交換組合,產生新的優良品種
- 交叉的過程:在匹配池中任選兩個染色體,隨機選擇一點或多點交換點位置;交換雙親染色體交換點右邊的部分,即可得到兩個新的染色體數字串
-
- 變異(Mutation Operator)
- 模擬生物在自然的遺傳環境中由於各種偶然因素引起的基因突變
- 以很小的概率隨機地改變遺傳基因(表示染色體的符號串的某一位)的值
- 在染色體以二進制編碼的系統中,它隨機地將染色體的某一個基因由1變為0,或由0變為1
變異的重要作用:沒有變異,則無法在初始基因組合以外的空間進行搜索;使進化過程在早期就陷入局部解而進入終止過程;為了在盡可能大的空間中獲得質量較高的優化解(水至清則無魚)
4.應用領域
- 函數優化:非線性、多模型、多目標的函數優化問題,采用其他優化方法較難求解,而遺傳算法卻可以得到較好的結果
- 組合優化:隨着問題的增大,組合優化問題的搜索空間也急劇擴大,采用傳統的優化方法很難得到最優解
- 自動控制:利用遺傳算法進行控制器參數的優化;基於遺傳算法的模糊控制規則的學習;基於遺傳算法的參數辨識;基於遺傳算法的神經網絡結構的優化和權值學習
- 機器人:移動機器人路徑規划、關節機器人運動軌跡規划、機器人結構優化和行為協調
- 圖像處理:圖像處理過程中的掃描、特征提取、圖像分割等的優化計算;模式識別、圖像恢復、圖像邊緣特征提取
5.關鍵概念
(1)編碼
研究生物遺傳是從染色體入手的
染色體是由基因排成的串,可以理解為生物編碼
研究遺傳算法,研究如何編碼是第一步工作
編碼是通過某種機制把求解問題抽象為由特定符號按一定順序 排成的串
使用二進制串進行編碼是常見的方法
利用遺傳算法求下列一元函數的最大值,其中x∈[-1,1],求解結果精確到6位小數,請問如何編碼?
f(x)=x*sin(8πx)+3.0
【解】由於區間長度為2,求解結果精確到6位小數,因此可以將自變量定義區間划分為等份。又因為2^20 < 2*10^6 < 2^21,所以本例的二進 制編碼長度至少需要21位,本例的編碼過程實質上是將區間[-1,1]內對 應的實數值轉化為一個二進制串(
)
(2)初始種群
確定編碼方案后,遺傳算法通常采用隨機方法生成若干個個體的集合,該集合稱為初始種群,初始種群中個體的數量稱為種群規模。
(3)適應度函數
遺傳算法對一個個體(解)的好壞用適應度函數值來評價
適應度函數值越大,解的質量越好
適應度函數是遺傳算法進化過程的驅動力,也是進行自然選擇的唯一標准,它的設計應結合求解問題本身的要求而定
遺傳算法使用選擇運算來實現對群體中的個體進行優勝劣汰操作:適應度高的個體被遺傳到下一代群體中的概率大;適應度低的個體,被遺傳到下一代群體中的概率小
(4)遺傳算子
- 選擇操作的任務就是按某種方法從父代群體中選取一些個體,遺傳到下一代群體
- 選擇算子采用輪盤賭選擇方法,又稱比例選擇算子,它的基本思想是: 各個個體被選中的概率與其適應度函數值大小成正比。設群體大小為n ,個體i 的適應度為 Fi ,則個體i 被選中遺傳到下一代群體的概率為:
- 輪盤賭選擇方法的實現步驟如下:
①計算群體中所有個體的適應度函數值(需要解碼)
②利用比例選擇算子的公式,計算每個個體被選中遺傳到下一代群體的概率
③采用模擬賭盤操作(即生成0到1之間的隨機數與每個個體遺傳到下一代群體的概率進行匹配)來確定各個個體是否遺傳到下一代群體中
(5)交叉運算
交叉運算是指對兩個相互配對的染色體依據交叉概率 Pc 按某種方式相互交換其部分基因,從而形成兩個新的個體。交叉運算是遺傳算法區別於其他進化算法的重要特征,它在遺傳算法中起關鍵作用,是產生新個體的主要方法。交叉算子一般采用單點交叉算子:
交叉前(用”|"來表示交叉點):
00000|01110000000010000
11100|00000111111000101
交叉后:
00000|00000111111000101
11100|01110000000010000
(6)變異運算
所謂變異運算,是指依據變異概率 Pm 將個體編碼串中的某些基因值用其它基因值來替換,從而形成一個新的個體。
遺傳算法中的變異運算是產生新個體的輔助方法,它決定了遺傳算法的局部搜索能力,同時保持種群的多樣性,交叉運算和變異運算的相互配合,共同完成對搜索空間的全局搜索和局部搜索,變異算子采用基本位變異算子。基本位變異算子是指對個體編碼串隨機指定的某一位或某幾位基 因作變異運算。對於基本遺傳算法中用二進制編碼符號串所表示的個體,若需要進行變異操作的原有基因值為0,則變異操作將其變為1;反之,若原有基因值為1,則變異操作將其變為0
變異前: 000001110000000010000
變異后: 000001110001000010000
6.遺傳算法應用實例
①函數最值問題
利用遺傳算法求函數最值(極值)問題是清晰地理解遺傳算法的一個較好的途徑
【例】求函數f(x1,x2)=x12+x22的最大值,其中x1 及x2取值范圍為{1,2,3,4,5,6,7}
②編碼
本例用無符號二進制整數來表示,因 x1, x2 為 0 ~ 7之間的整數,分別用3位無符號二進制整數來表示
將它們連接在一起所組成的6位無符號二進制數就形成了個體的基因型,表示一個可行解
如:基因型X=101110所對應的表現型是:x=[ 5,6 ]。個體的表現型x和基因型X之間可通過編碼和解碼程序相互轉換
③初始群體的產生
遺傳算法是對群體進行的進化操作,需要給其准備一些表示起始搜索點的初始群體數據
本例中,群體規模的大小取為4,即群體由4個個體組成,每個個體可通過隨機方法產生
如:011101,101011,011100,111001
④適應度計算
遺傳算法以個體適應度的大小來評定各個個體的優劣程度,從 而決定其遺傳機會的大小
本例中,目標函數總取非負值,並且是以求函數最大值為優化目標,故可直接利用目標函數值作為個體的適應度
⑤選擇運算
選擇運算(或稱為復制運算)把當前群體中適應度較高的個體按某種規則或模型遺傳到下一代群體中,一般要求適應度較高的個體將有更多的機會遺傳到下一代群體中
采用與適應度成正比的概率來確定各個個體復制到下一代群體中的數量。其具體操作過程是:
- 先計算出群體中所有個體的適應度的總和
- Σfi ( i=1.2,…,M );
- 其次計算出每個個體的相對適應度的大小 fi / Σfi,它即為每個個體被遺傳到下一代群體中的概率
- 每個概率值組成一個區域,全部概率值之和為1
- 最后再產生一個0到1之間的隨機數,依據該隨機數出現在上述哪一個概率區域內來確定各個個體被選中的次數
⑥交叉運算
交叉運算是遺傳算法中產生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。本例采用單點交叉的方法,其具體操作過程是:先對群體進行隨機配對,其次隨機設置交叉點位置;最后再相互交換配對染色體之間的部分基因
其中新產生的個體“111101”、“111011”的適應度較原來兩個個體的適應度都要高
⑦變異運算
變異運算是對個體的某一個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產生新個體的一種操作方法。本例中,我們采用基本位變異的方法來進行變異運算,其具體操作過程是:首先確定出各個個體的基因變異位置,下表所示為隨機產生的變異點位置,其中的數字表示變異點設置在該基因座處;然后依照某一概率將變異點的原有基因值取反
⑧新一代
對群體P(t)進行一輪選擇、交叉、變異運算之后可得到新一代的群體p(t+1)
群體經過一代進化之后,其適應度的最大值、平均值都得到了明顯的改進。事實上,這里已經找到了最佳個體“111111”