1. 程式人生 > >2018-3-27 遺傳演算法中的輪盤賭

2018-3-27 遺傳演算法中的輪盤賭

原出處:http://my.oschina.net/u/1412321/blog/192454

一、遺傳演算法的應用

函式優化(遺傳演算法的經典應用領域);
組合優化(實踐證明,遺傳演算法對於組合優化中的NP完全問題,如0-1揹包問題,TSP等,非常有效);
自動控制;

機器人智慧控制;

組合影象處理和模式識別;

人工生命;

遺傳程式設計;

二、遺傳學基本概念與術語

  • 基因型(genotype):性狀染色體的內部表現;
  • 表現型(phenotype):染色體決定性狀的外部表現,或者說,根據基因型形成的個體;
  • 進化(evolution):逐漸適應生存環境,品質不斷得到改良。生物的進化是以種群的形式進行的。
  • 適應度(fitness):度量某個物種對於生存環境的適應程度。
  • 選擇(selection):以一定的概率從種群中選擇若干個個體。一般,選擇過程是一種基於適應度的優勝劣汰的過程。
  • 複製(reproduction):細胞分裂時,遺傳物質DNA通過複製而轉移到新產生的細胞中,新細胞就繼承了舊細胞的基因。
  • 交叉(crossover):兩個染色體的某一相同位置處DNA被切斷,前後兩串分別交叉組合形成兩個新的染色體。也稱基因重組或雜交;
  • 變異(mutation):複製時可能(很小的概率)產生某些複製差錯,變異產生新的染色體,表現出新的性狀。
  • 編碼(coding):DNA中遺傳資訊在一個長鏈上按一定的模式排列。
    • 遺傳編碼可看作從表現型到基因型的對映。
  • 解碼(decoding):基因型到表現型的對映。
  • 個體(individual):指染色體帶有特徵的實體;
  • 種群(population):個體的集合,該集合內個體數稱為種群的大小;

三、遺傳演算法的基本思路

在開始介紹一個例項之前,有必要了解一下輪盤賭選擇法,因為基本遺傳演算法就是用的這個選擇策略。

輪盤賭選擇
又稱比例選擇方法.其基本思想是:各個個體被選中的概率與其適應度大小成正比.

具體操作如下:
(1)計算出群體中每個個體的適應度f(i=1,2,…,M),M為群體大小;
(2)計算出每個個體被遺傳到下一代群體中的概率;

(3)計算出每個個體的累積概率;

(q[i]稱為染色體x[i] (i=1, 2, …, n)的積累概率)

(4)在[0,1]區間內產生一個均勻分佈的偽隨機數r;
(5)若r<q[1],則選擇個體1,否則,選擇個體k,使得:q[k-1]<r≤q[k] 成立;
(6)重複(4)、(5)共M次

四、一個簡單的例項

1. 產生初始種群

s1= 13 (01101)

s2= 24 (11000) 

s3= 8   (01000)

s4= 19 (10011)


2. 計算適應度

假定適應度為f(s)=s^2 ,則

f (s1) = f(13) = 13^2 = 169

f (s2) = f(24) = 24^2 = 576

f (s3) = f(8) = 8^2 = 64

f (s4) = f(19) = 19^2 = 361

3. 選擇

染色體的選擇概率為:

染色體的累計概率為:

根據上面的式子,可得到:

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

   r1 = 0.450126,    r2 = 0.110347 

   r3 = 0.572496,    r4 = 0.98503 

4. 交叉

基本遺傳演算法(SGA)中交叉運算元採用單點交叉運算元。

單點交叉運算

5. 變異

6. 至下一代,適應度計算→選擇→交叉→變異,直至滿足終止條件

五、遺傳演算法應用

這裡使用具體的應用例子:函式優化

  • 問題的提出

     一元函式求最大值:

用微分法求取f(x)的最大值:

可求得最大值點:f(1.85)=3.85

0. 編碼

     表現型:x
     基因型:二進位制編碼(串長取決於求解精度)
     串長與精度之間的關係:
     若要求求解精度到6位小數,區間長度為2-(-1)=3,即需將區間分為3/0.000001=3&times;106等份。
          所以編碼的二進位制串長應為22位。

1. 產生初始種群

     產生的方式:隨機
     產生的結果:長度為22的二進位制串
     產生的數量:種群的大小(規模),如30,50,…
          1111010011100001011000
          1100110011101010101110
          1010100011110010000100
          1011110010011100111001  
          0001100101001100000011    
          0000011010010000000000

2. 計算適應度

     不同的問題有不同的適應度計算方法
     本例:直接用目標函式作為適應度函式
     ①將某個體轉化為[-1,2]區間的實數:
        s=<1000101110110101000111> → x=0.637197
     ②計算x的函式值(適應度):
        f(x)=xsin(10πx)+2.0=2.586345

     (0000000000000000000000)→-1
     (1111111111111111111111)→2

     上面的①其實就是二進位制與十進位制之間的轉換:
     第一步,將一個二進位制串(b21b20…b0)轉化為10進位制數:
        

      第二步,x’對應的區間[-1,2]內的實數:

     

3. 遺傳操作

    選擇:輪盤賭選擇法;
    交叉:單點交叉;
    變異:小概率變異

  • 模擬結果

     設定的引數:
     種群大小50;交叉概率0.75;變異概率0.05;最大代數200。
     得到的最佳個體:
     smax=<1111001100111011111100>;
     xmax=1.8506;
     f(xmax)=3.8503;

  • 執行結果

六、總結

編碼原則
完備性(completeness):問題空間的所有解都能表示為所設計的基因型;
健全性(soundness):任何一個基因型都對應於一個可能解;
非冗餘性(non-redundancy):問題空間和表達空間一一對應。

適應度函式的重要性
     適應度函式的選取直接影響遺傳演算法的收斂速度以及能否找到最優解。
     一般而言,適應度函式是由目標函式變換而成的,對目標函式值域的某種對映變換稱為適應度的尺度變換(fitness scaling)。

適應度函式設計不當有可能出現欺騙問題:
(1)進化初期,個別超常個體控制選擇過程;
(2)進化末期,個體差異太小導致陷入區域性極值。

欺騙問題舉例:

可以想象一下,假設地球像類似災難電影《後天》一樣,出現有毒的霧霾,喜馬拉雅山脈下有100只猴子(種群大小),只有爬上珠穆朗瑪峰頂端的猴子才能生存下來,

因為喜馬拉雅山脈有很多山峰,我們以高度作為適應度,case(1):如果不在珠峰的猴子若比在珠峰半山腰的猴子要高,因為種群大小不變,在珠峰的猴子可能就會被淘汰;

case(2):100只猴子都不在珠峰;

1. 選擇的作用:優勝劣汰,適者生存;

2. 交叉的作用:保證種群的穩定性,朝著最優解的方向進化;

3. 變異的作用:保證種群的多樣性,避免交叉可能產生的區域性收斂;

下圖很好地表現了遺傳演算法的精髓。

遺傳演算法的特點

    • 自組織、自適應和自學習性
      在編碼方案、適應度函式及遺傳運算元確定後,演算法將利用進化過程中獲得的資訊自行組織搜尋。

    • 本質並行性
      內在並行性與內含並行性

    • 不需求導
      只需目標函式和適應度函式

    • 概率轉換規則
      強調概率轉換規則,而不是確定的轉換規則

七、補充

因為遺傳演算法的每個操作對不同的應用選擇的策略各有優劣,所以具體情況,具體分析,在此附上:

1. 選擇

適應度計算:
按比例的適應度函式(proportional fitness assignment)
基於排序的適應度計算(Rank-based fitness assignment)

選擇演算法:
輪盤賭選擇(roulette wheel selection)

隨機遍歷抽樣(stochastic universal selection)
區域性選擇(local selection)
截斷選擇(truncation selection)
錦標賽選擇(tournament selection)

2. 交叉

因為編碼分二進位制和浮點數編碼,所以交叉和變異都有兩類;

實值重組(real valued recombination):

  • 離散重組(discrete recombination)
  • 中間重組(intermediate recombination)
  • 線性重組(linear recombination)
  • 擴充套件線性重組(extended linear recombination)

二進位制交叉(binary valued crossover):

  • 單點交叉(single-point crossover)
  • 多點交叉(multiple-point crossover)
  • 均勻交叉(uniform crossover)
  • 洗牌交叉(shuffle crossover)
  • 縮小代理交叉(crossover with reduced surrogate)

3. 變異

實值變異
二進位制變異

另外,遺傳演算法背後的理論支撐——模式定理,可以在對遺傳演算法有深入研究和優化的時候再詳看。

讀後感:

閱讀文章的主要目的啊是為了理解輪盤賭,經過這個blog理解了。應該是為了做到合理的模擬生活中最優可能的解區域的概率應該最大,但是有不知道怎樣合理的設計而構造的一種輪盤或區間,每個區間的長度不同,長度大的也就是區間跨度比較大,通過隨機的設定一個數字,記錄這個資料在屬於哪個區間。通過最終的記錄,使用頻度代替概率的思想從而合理的安排概率。  也即是當隨機數產生的次數越多,頻率越接近於概率。