遺傳算法(GA)

  • 遺傳算法的應用

    遺傳算法在人工智能的眾多領域便得到了廣泛應用。例如,機器學習、聚類、控制(如煤氣管道控制)、規劃(如生產任務規劃)、設計(如通信網絡設計、布局設計)、調度(如作業車間調度、機器調度、運輸問題)、配置(機器配置、分配問題)、組合優化(如TSP、背包問題)、函數的最大值以及圖像處理和信號處理等等。

  遺傳算法與其他智能算法和技術相結合,使其問題求解能力得到進一步擴展和提高。例如,將遺傳算法與模糊技術、神經網絡相結合,已取得了不少成果。
  • 遺傳算法定義

    遺傳算法(Genetic Algorithm,GA)最早是由美國的 John holland于20世紀70年代提出。該算法模擬達爾文的自然選擇學說和自然界的生物進化過程的一種計算模型,它采用簡單的編碼技術來表示各種復雜的結構,通過對一組編碼表示進行簡單的遺傳操作和優勝劣汰的自然選擇來指導學習和確定搜索的方向。

    遺傳算法的操作對象是種群。其中每一個染色體都對應問題的一個解。從初始種群出發,采用基于適應值比例的選擇策略在當前種群中選擇個體,使用雜交和變異來產生下一代種群。如此模仿生命的進化一代代演化下去,直到滿足期望的終止條件為止。

  • 許多應用問題的結構很復雜,但可以化為簡單的位串形式編碼表示

    將問題結構變換為位串形式編碼表示的過程叫編碼;

    而相反將位串形式編碼表示變換為原問題結構的過程叫解碼或譯碼。

    把位串形式編碼表示叫染色體。

  • 遺傳算法最常用的編碼方法是二進制編碼:

    二進制編碼的最大缺點之一是長度較大,對很多問題用其他編碼方法可能更有利。其他編碼方法主要有:浮點數編碼方法、格雷碼、符號編碼方法、多參數編碼方法等。

  • 適應度函數

    為了體現染色體的適應能力,引入了對問題中的每一個染色體都能進行度量的函數,叫適應度函數(fitness function)。

    適應度函數要有效反映每一個染色體與問題的最優解染色體之間的差距。適應度函數的取值大小與求解問題對象的意義有很大的關系。

  • 遺傳操作

    交叉,就是互換兩個染色體某些位上的基因。

    變異,就是改變染色體某個(些)位上的基因。

簡單遺傳算法的遺傳操作主要有三種:

選擇操作也叫復制(reproduction)操作,根據個體的適應度函數值所度量的優劣程度決定它在下一代是被淘汰還是被遺傳。

交叉操作的簡單方式是將被選擇出的兩個個體P1和P2作為父母個體,將兩者的部分碼值進行交換。

變異操作的簡單方式是改變數碼串的某個位置上的數碼。二進制編碼表示的簡單變異操作是將0與1互換:0變異為1,1變異為0。

改進的遺傳算法大量擴充了遺傳操作,以達到更高的效率
  • 遺傳算法一般步驟
  1. 定義一個目標(適應度)函數;

  2. 將可行解群體在一定的約束條件下初始化,每一個可行解用一個向量 X 來編碼(染色體),向量的分量代表基因,它對應可行解的某一決策變量;

  3. 計算群體中每條染色體xi(i=1,2,…,n)所對應的目標函數值(適應值)Fi,按Fi的大小來評價該可行解的好壞;

  4. 以優勝劣汰的機制,將適應值差的染色體淘汰掉,對幸存的染色體根據其適應值的好壞,按概率隨機選擇,進行繁殖,形成新的群體;

  5. 通過雜交和變異的操作,產生子代。雜交是隨機選擇兩條染色體(雙親),將某一點或多點的基因互換而產生兩個新個體,變異是基因中的某一點或多點發生突變;

  6. 對子代群體重復步驟(3)~(5)的操作,進行新一輪遺傳進化過程,直到迭代收斂(適應值趨穩定)即找到了最優解或準最優解。

image
  • 算法中的一些控制參數

    交叉率(crossover rate)是參加交叉運算的染色體個數占全體染色體總數的比例,記為Pc,取值范圍一般為0.4~0.99。

    變異率(mutation rate)是指發生變異的基因位數所占全體染色體的基因總位數的比例,記為Pm,取值范圍一般為0.0001~0.1

  • 遺傳算法的特點與優勢

  1. 遺傳算法一般是直接在解空間搜索, 而不像圖搜索那樣一般是在問題空間搜索, 最后才找到解。

  2. 遺傳算法的搜索隨機地始于搜索空間的一個點集, 而不像圖搜索那樣固定地始于搜索空間的初始節點或終止節點, 所以遺傳算法是一種隨機搜索算法。

  3. 遺傳算法總是在尋找優解, 而不像圖搜索那樣并非總是要求優解, 而一般是設法盡快找到解, 所以遺傳算法又是一種優化搜索算法。

  4. 遺傳算法的搜索過程是從空間的一個點集(種群)到另一個點集(種群)的搜索,而不像圖搜索那樣一般是從空間的一個點到另一個點地搜索。因而它實際是一種并行搜索, 適合大規模并行計算,而且這種種群到種群的搜索有能力跳出局部最優解。

  5. 遺傳算法的適用性強, 除需知適應度函數外, 幾乎不需要其他的先驗知識。

  6. 遺傳算法長于全局搜索, 它不受搜索空間的限制性假設的約束,不要求連續性, 能以很大的概率從離散的、多極值的、含有噪聲的高維問題中找到全局最優解。

  • 舉列:

** 利用遺傳算法求解區間[0,31]上的二次函數y=x^2的最大值。**

** 解:**

(1) 設定種群規模,編碼染色體,產生初始種群。將種群規模設定為4;用5位二進制數編碼染色體;取下列個體組成初始種群S1:

    s1= 13 (01101),  

    s2= 24 (11000), 

    s3= 8 (01000),    

    s4= 19 (10011) 

(2) 定義適應度函數,取適應度函數:f (x)=x2

(3) 計算各代種群中的各個體的適應度, 并對其染色體進行遺傳操作,直到適應度最高的個體(即31(11111))出現為止。

首先計算種群S1中各個體

    s1= 13(01101),    

    s2= 24(11000) ,    

    s3= 8(01000),    

    s4= 19(10011)

求適應度f (si) ,得

 f (s1) = f(13) = 132 = 169  ,

 f (s2) = f(24) = 242 = 576

 f (s3) = f(8) = 82 = 64 ,         

 f (s4) = f(19) = 192 = 361

再計算種群S1中各個體的選擇概率。

選擇概率的計算公式為

image

由此可求得

    P(s1) = P(13) = 0.14  ,  

    P(s2) = P(24) = 0.49 

    P(s3) = P(8) = 0.06 ,   

    P(s4) = P(19) = 0.31

賭輪選擇法

[圖片上傳中...(image-48e274-1633750784838-6)]

在算法中賭輪選擇法可用下面的子過程來模擬:

① 在[0, 1]區間內產生一個均勻分布的隨機數r。

② 若r≤q1,則染色體x1被選中。

③ 若qk-1<r≤qk(2≤k≤N), 則染色體xk被選中。

其中的qi稱為染色體xi (i=1, 2, …, n)的積累概率, 其計算公式為

image

設從區間[0, 1]中產生4個隨機數如下:

    r1 = 0.450126,   

    r2 = 0.110347  ,  

    r3 = 0.572496,   

    r4 = 0.98503 

[圖片上傳中...(image-9ba7ac-1633750784838-4)]

于是,經復制得群體:

    s1’ =11000(24),  

    s2’ =01101(13) , 

    s3’ =11000(24),  

    s4’ =10011(19)

交叉

設交叉率pc=100%,即S1中的全體染色體都參加交叉運算。

    設s1’與s2’配對,s3’與s4’配對。分別交換后兩位基因,得新染色體:

    s1’’=11001(25),  

    s2’’=01100(12),  

    s3’’=11011(27),  

    s4’’=10000(16)

變異

設變異率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)
image

假設這一輪選擇-復制操作中,種群S2中的 4個染色體都被選中,則得到群體:

     s1’=11001(25),  

    s2’= 01100(12),  

    s3’=11011(27),  

    s4’= 10000(16) 

做交叉運算,讓s1’與s2’,s3’與s4’ 分別交換后三位基因,得

    s1’’ =11100(28), 

    s2’’ = 01001(9), 

    s3’’ =11000(24), 

    s4’’ = 10011(19) 

這一輪仍然不會發生變異。

于是,得第三代種群S3:

    s1=11100(28), 

    s2=01001(9),  

    s3=11000(24), 

    s4=10011(19)

[圖片上傳中...(image-b1498d-1633750784838-2)]

設這一輪的選擇-復制結果為:

    s1’=11100(28),  

    s2’=11100(28), 

    s3’=11000(24),  

    s4’=10011(19)

做交叉運算,讓s1’與s4’,s2’與s3’ 分別交換后兩位基因,得

    s1’’=11111(31), 

    s2’’=11100(28),  

    s3’’=11000(24), 

    s4’’=10000(16) 

這一輪仍然不會發生變異。

于是,得第四代種群S4:

    s1=11111(31),  

    s2=11100(28),  

    s3=11000(24),  

    s4=10000(16)

顯然,在這一代種群中已經出現了適應度最高的染色體s1=11111。于是,遺傳操作終止,將染色體“11111”作為最終結果輸出。

然后,將染色體“11111”解碼為表現型,即得所求的最優解:31。

將31代入函數y=x2中,即得原問題的解,即函數y=x2的最大值為961。

[圖片上傳中...(image-bd675d-1633750784838-1)]

  • 遺傳算法之父——John Holland(1929.2.2-2015.8.9)

    密歇根大學心理學系、電機工程和計算機科學系教授;

    提出“復雜自適應系統”理論;

    美國圣菲研究所的創始人之一;

    復雜性科學領域的先驅者和杰出代表人物之一;

    美國“麥克阿瑟天才獎”、IEEE Nerual Network Society頒發的先鋒獎;

    《自然與人工系統的適應性》《隱次序》《涌現》

[圖片上傳中...(image-ad6563-1633750784837-0)]

基因組分析 微信公眾號推出 《50個經典算法講解》系列文章, 第2篇文章 《遺傳算法》,爭取每周更新一篇干貨帖子。

關注微信公眾號 ,**轉發 **給同學和同事,您的認可,是對我最大的支持 ,任何問題,后臺可以留言。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 遺傳算法(GA)屬于人工智能啟發式算法,啟發式算法的目標就是尋找原始問題的最優解,該算法的定義為 人類通過直觀常識...
    Pluto_38e5閱讀 1,854評論 0 1
  • 最近聽ES聽的有點多,想著了解一下。從幾篇博客里摘抄了筆記:適合初學者[https://blog.csdn.net...
    臻甄閱讀 5,325評論 0 4
  • github代碼:https://github.com/dongniu0927/algorithm-hub/blo...
    牛東閱讀 7,598評論 1 3
  • (1) 遺傳算法(Genetic Algorithm,GA)是一種進化算法,其基本原理是仿效生物界中的“物競天擇、...
    LLAYGDD閱讀 1,545評論 0 1
  • 干貨 | 嘿!你和遺傳算法的距離也許只差這一文(附C++代碼和詳細代碼注釋)[https://mp.weixin....
    予安雜記閱讀 1,219評論 0 1