遺傳算法


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。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM