遺傳演算法(genetic algorithm,ga)是計算數學中用於解決最優化問題的搜尋演算法,是進化演算法的一種。進化演算法最初是借鑑了達爾文進化生物學中的一些現象而發展起來的,這些現象包括遺傳、突變、自然選擇以及雜交等。
預備知識:達爾文演化論,遺傳學三大基本定律
查爾斯·達爾文 (1809 - 1882)
格雷戈爾·孟德爾(1822 - 1884)
托馬斯·亨特·摩爾根 (1866 - 1945)
遺傳演算法通常實現方式為一種計算機模擬。對於乙個最優化問題,一定數量的候選解(稱為個體)可抽象表示為染色體,使種群向更好的解進化。傳統上,解用二進位制表示(即0和1的串),但也可以用其他表示方法。進化從完全隨機個體的種群開始,之後一代一代發生。在每一代中評價整個種群的適應度,從當前種群中隨機地選擇多個個體(基於它們的適應度),通過自然選擇和突變產生新的生命種群,該種群在演算法的下一次迭代中成為當前種群。
基本的遺傳演算法以初始種群為起點,經過自然選擇、交叉和突變操作生成新的種群,經過反覆更新種群直到尋找到最優解。其計算步驟如下:
編碼:將問題空間轉換為遺傳空間;
生成初始種群:隨機生成p個染色體;
種群適應度計算:按照確定的適應度函式,計算各個染色體的適應度;
選擇:根據染色體適應度,按照選擇運算元進行染色體的選擇;
返回第3步繼續迭代,直到滿足終止條件。
例題1:試計算此二元函式的最大值: f(
x1,x
2)=x
21+x
22 x
1∈ x
2∈編碼:因 x1
,x2 為 0 ~ 7之間的整數,所以分別用3位無符號二進位制整數來表示,將它們連線在一起所組成的6位無符號二進位制數就形成了個體的基因型,表示乙個可行解。例如:基因型 x=101110 所對應的表現型是: [x
1,x2
]=[5
,6]
生成初始種群:本例中,群體規模的大小取為4,即群體由4個個體組成,每個個體可通過隨機的方法產生。例如: a1
=101000=[
5,0]
,a2=
101100=[
5,4]
,a3=
001100=[
1,4]
,a4=
101111=[
5,7]
種群適應度計算:本例中,目標函式總取非負值,並且是以求函式最大值為優化目標,故可直接利用目標函式值作為個體的適應度: f(
a1)=
25,f(
a2)=
41,f(
a3)=
17,f(
a4)=
74
選擇:我們採用與適應度成正比的概率來確定各個個體複製到下一代群體中的數量。其具體操作過程如下:
交叉:本例採用單點交叉的方法,其具體操作過程是:
突變:我們採用基本位變異的方法來進行變異運算,其具體操作過程是:
例題2:八皇后問題:如何能夠在8×8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。
編碼:染色體的長度取決於皇后的個數,本例中染色體長度即為8。染色體中每個基因所處的位置表示其在棋盤上的行號,基因值表示其所在的列號。例如,染色體4075623,表示第0行皇后放在第4列,第1行皇后放在第0列,第2行皇后放在第7列,等等。八皇后問題中的任意兩個皇后不能出現在同列,因此染色體中的基因取值(0~7)不可重複;
生成初始種群:隨機生成8個初始染色體,他們的染色體中的基因取值各不相同,也就是滿足所有皇后都不處於同行同列,但是可能並不滿足對角線上是否出現互攻。
種群適應度計算:在對某一染色體上某兩個皇后的位置進行比較的時候,可以求其行號之差的絕對值與列號之差的絕對值, 若相等則說明互攻成立。
設某一染色體的互攻次數用value表示,其初始值等於0;將第0行皇后與第1~7行皇后進行比較,每出現一次互攻則value的值加1;將第1行皇后與第2~7行皇后進行比較,每出現一次互攻則value的值加1;以此類推。
如果染色體的value值為0則表示未發生互攻,表示已找到乙個可行解。如果value不為0,一般說來適應度越大則value的值越小,也就是說適應度與value成反比。在這裡對染色體的value求倒數就得到其適應度。
選擇:根據染色體適應度,按照與例題1中相似的賭輪選擇法進行染色體的選擇;
交叉:本例採用單點交叉的方法,先對群體進行隨機配對,對於每一對染色體,首先隨機選取兩點擷取一段基因,例如: 01∥
24∥3675
12∥30∥
4576
然後將這段基因進行交換: 01∥
30∥3675
12∥24∥
4576
這樣生成的兩條染色體並不合法,因此要對中間段外的基因進行交換,從而生成合法的染色體: 41∥
30∥2675
13∥24∥
0576
交叉完成。
突變:按照突變概率對下一代種群中的個體進行突變操作,這裡對突變個體的染色體隨機選擇兩個基因進行互換,例如對第1和6進行互換:
突變之前:72061453
突變之後:42061753(這其實就是乙個最優解)
返回第3步繼續迭代,直到取得value為0的解。
遺傳演算法在解決優化問題過程中有如下特點:
遺傳演算法簡介
把電腦科學與演化論結合起來的嘗試始於50年代末,但由於缺乏一種通用的編碼方案 人們只能依賴變異而非交配來產生新的基因結構,故而收效甚微。到60年代中期,美 國michigan大學的john hol land在a s fraser和h j bremermann等人工作的基礎 上提出了位串編碼技術。這種...
遺傳演算法簡介
今天來講遺傳演算法,遺傳演算法有很多應用,比如尋路問題,八數碼問題,囚犯困境問題,動作控制,tsp問題,生產 排程問題,在乙個多邊形中尋找乙個包含在該多邊形內的乙個圓,函式求最值問題等等。之前講的模擬退火演算法是用 來求解最優化問題的,鏈結為 模擬退 火演算法用一句話概括就是 貪心過程中引入了隨機因...
遺傳演算法簡介
遺傳演算法借鑑了達爾文的演化論,是一種解決最佳化的搜尋演算法 具體步驟 1 初始化 先初始化一堆染色體,也就是一組編碼,常見的編碼方式有二進位制 浮點數編碼 2 適應度函式 根據要達成的目標進行乙個適應度排序 比如求要求乙個函式的最小值,那麼染色體所代表的資料越小,適應度越高 適應度決定了下乙個階段...