1 基本概念
遺傳算法(GA)的概念是由Holland於1973年受生物進化論的啟發而首次提出的。它是一種通過模擬生物界自然選擇和遺傳機制的隨機搜索算法。
遺傳算法基本思想是模擬自然界優勝劣汰的進化現象,把搜索空間映射為遺傳空間,把可能的解編碼成一個向量——染色體,向量的每個元素稱為基因。 通過不斷計算各染色體的適應值,選擇最好的染色體,獲得最優解。
個體就是模擬生物個體而對問題中的對象(一般就是問題的解)的一種稱呼,一個個體也就是搜索空間中的一個點。
種群就是模擬生物種群而由若干個體組成的群體, 它一般是整個搜索空間的一個很小的子集。
適應度(fitness)就是借鑒生物個體對環境的 適應程度,而對問題中的個體對象所設計的 表征其優劣的一種測度。
適應度函數(fitness function)就是問題中的 全體個體與其適應度之間的一個對應關系。 它一般是一個實值函數。該函數就是遺傳算 法中指導搜索的評價函數。
染色體(chromosome)就是問題中個體的某種字符串形式的編碼表示。字符串中的字符也就稱為基因(gene)。
例如: 個體 染色體
9 ---- 1001
(2,5,6)---- 010 101 110
遺傳操作,也稱遺傳算子(genetic operator),就是關於染色體的運算。遺傳算法中有三種遺傳操作:
選擇-復制(selection-reproduction)
通常做法是:對於一個規模為N的種群S,按每個染色體xi∈S的選擇概率P(xi)所決定的選中機會,分N次從S中隨機選定N個染色體, 並進行復制。

交叉(crossover,亦稱交換、交配或雜交)
就是互換兩個染色體某些位上的基因。
例如, 設染色體 s1=01001011, s2=10010101, 交換其后4位基因, 即:

s1′=01000101, s2′=10011011 可以看做是原染色體s1和s2的子代染色體。
變異(mutation,亦稱突變)
就是改變染色體某個(些)位上的基因。
例如, 設染色體 s=11001101 將其第三位上的0變為1, 即:
s=11001101 →11101101= s′。 s′也可以看做是原染色體s的子代染色體。
2遺傳算法基本流程

基本遺傳算法步驟:
步1 在搜索空間U上定義一個適應度函數f(x),給定種群規模N,交叉率Pc和變異率Pm,代數T;
步2 隨機產生U中的N個個體s1, s2, …, sN,組成初始種群S={s1, s2, …, sN},置代數計數器t=1;
步3 計算S中每個個體的適應度f() ;
步4 若終止條件滿足,則取S中適應度最大的個體作為所求結果,算法結束。
步5 按選擇概率P(xi)所決定的選中機會,每次從S中隨機選定1個個體並將其染色體復制,共做N次,然后將復制所得的N個染色體組成群體S1;
步6 按交叉率Pc所決定的參加交叉的染色體數c,從S1中隨機確定c個染色體,配對進行交叉操作,並用產生的新染色體代替原染色體,得群體S2;
步7 按變異率Pm所決定的變異次數m,從S2中隨機確定m個染色體,分別進行變異操作,並用產生的新染色體代替原染色體,得群體S3;
步8 將群體S3作為新一代種群,即用S3代替S,t = t+1,轉步3;
3舉例
例: 利用遺傳算法求解區間[0,31]上的二次函數y=x2的最大值。

分析:原問題可轉化為在區間[0, 31]中搜索能使y取最大值的點a的問題。那么[0, 31]中的點x就是個體, 函數值f(x)恰好就可以作為x的適應度,區間[0, 31]就是一個(解)空間 。這樣, 只要能給出個體x的適當染色體編碼, 該問題就可以用遺傳算法來解決。
(1) 設定種群規模,編碼染色體,產生初始種群。
將種群規模設定為4;用5位二進制數編碼染色體;取下列個體組成初始種群
S1: s1= 13 (01101), s2= 24 (11000) s3= 8 (01000), s4= 19 (10011)
(2) 定義適應度函數, 取適應度函數:f (x)=x*x
(3) 計算各代種群中的各個體的適應度, 並對其染色體進行遺傳操作,直到適應度最高的個體(即31(11111))出現為止。
首先計算種群S1中各個體s1= 13(01101), s2= 24(11000) s3= 8(01000), s4= 19(10011) 的適應度f (si) 。
容易求得 f (s1) = f(13) = 13*13= 169
f (s2) = f(24) = 242*24= 576
f (s3) = f(8) = 8*8 = 64
f (s4) = f(19) = 19*19 = 361
再計算種群S1中各個體的選擇概率。選擇概率的計算公式為

由此可求得 P(s1) = P(13) = 0.14
P(s2) = P(24) = 0.49
P(s3) = P(8) = 0.06
P(s4) = P(19) = 0.31
賭輪選擇法:
在算法中賭輪選擇法可用下面的子過程來模擬:
① 在[0, 1]區間內產生一個均勻分布的隨機數r。
② 若r≤q1,則染色體x1被選中。
③ 若qk-1<r≤qk(2≤k≤N), 則染色體xk被選中。 其中的qi稱為染色體xi (i=1, 2, …, n)的積累概率, 其計算公式為

(4)選擇-復制
設從區間[0, 1]中產生4個隨機數如下:
r1 = 0.450126, r2 = 0.110347 r3 = 0.572496, r4 = 0.98503
| 染色體 |
適應度 |
選擇概率 |
積累概率 |
選中次數 |
| s1=01101 |
169 |
0.14 |
0.14 |
1 |
| s2=11000 |
576 |
0.49 |
0.63 |
2 |
| s3=01000 |
64 |
0.06 |
0.69 |
0 |
| s4=10011 |
361 |
0.31 |
1.00 |
|
於是,經復制得群體: s1’ =11000(24), s2’ =01101(13) s3’ =11000(24), s4’ =10011(19)
(5)交叉
設交叉率pc=100%,即S1中的全體染色體都參加交叉運算。
設s1’與s2’配對,s3’與s4’配對。分別交換后兩位基因,得新染色體:
s1’’=11001(25), s2’’=01100(12) s3’’=11011(27), s4’’=10000(16)
(6)變異
設變異率pm=0.001。
這樣,群體S1中共有 5×4×0.001=0.02 位基因可以變異。 0.02位顯然不足1位,所以本輪遺傳操作不做變異。
於是,得到第二代種群S2: s1=11001(25), s2=01100(12) s3=11011(27), s4=10000(16)

顯然,在迭代好多代種群中已經出現了適應度最高的染色體s1=11111。於是,遺傳操作終止,將染色體“11111”作為最終結果輸出。
然后,將染色體“11111”解碼為表現型,即得所求的最優解:31。 將31代入函數y=x2中,即得原問題的解,即函數y=x2的最大值為961。
