深入淺出遺傳算法,透析GA本質(zhì) 收藏經(jīng)典算法研究系列:七、遺傳算法初探 ---深入淺出、透析GA本質(zhì)
作者:July 二零一一年一月十二日。 本文參考:維基百科 華南理工大學(xué)電子講義 互聯(lián)網(wǎng) -------------------------------------------------------------------------------
一、初探遺傳算法 Ok,先看維基百科對遺傳算法所給的解釋: 遺傳算法是計算數(shù)學(xué)中用于解決最優(yōu)化的搜索算法,是進(jìn)化算法的一種。進(jìn)化算法最初是借鑒了進(jìn)化生物學(xué)中的一些現(xiàn)象而發(fā)展起來的,這些現(xiàn)象包括遺傳、突變、自然選擇以及雜交等。
遺傳算法通常實現(xiàn)方式為一種計算機模擬。對于一個最優(yōu)化問題,一定數(shù)量的候選解(稱為個體)的抽象表示(稱為染色體)的種群向更好的解進(jìn)化。傳統(tǒng)上,解用二進(jìn)制表示(即0和1的串),但也可以用其他表示方法。進(jìn)化從完全隨機個體的種群開始,之后一代一代發(fā)生。在每一代中,整個種群的適應(yīng)度被評價,從當(dāng)前種群中隨機地選擇多個個體(基于它們的適應(yīng)度),通過自然選擇和突變產(chǎn)生新的生命種群,該種群在算法的下一次迭代中成為當(dāng)前種群。
光看定義,可能思路并不清晰,咱們來幾個清晰的圖解、步驟、公式: 基本遺傳算法的框圖:
所以,遺傳算法基本步驟是: 1) 初始化 t←0進(jìn)化代數(shù)計數(shù)器;T是最大進(jìn)化代數(shù);隨機生成M個個體作為初始群體 P(t); 2) 個體評價 計算P(t)中各個個體的適應(yīng)度值; 3) 選擇運算 將選擇算子作用于群體; 4) 交叉運算 將交叉算子作用于群體; 5) 變異運算 將變異算子作用于群體,并通過以上運算得到下一代群體P(t + 1); 6) 終止條件判斷 t≦T:t← t+1 轉(zhuǎn)到步驟2; t>T:終止 輸出解。
好的,看下遺傳算法的偽代碼實現(xiàn): ▲Procedures GA: 偽代碼 begin initialize P(0); t = 0; //t是進(jìn)化的代數(shù),一代、二代、三代... while(t <= T) do for i = 1 to M do //M是初始種群的個體數(shù) Evaluate fitness of P(t); //計算P(t)中各個個體的適應(yīng)度 end for for i = 1 to M do Select operation to P(t); //將選擇算子作用于群體 end for for i = 1 to M/2 do Crossover operation to P(t); //將交叉算子作用于群體 end for for i = 1 to M do Mutation operation to P(t); //將變異算子作用于群體 end for for i = 1 to M do P(t+1) = P(t); //得到下一代群體P(t + 1) end for t = t + 1; //終止條件判斷 t≦T:t← t+1 轉(zhuǎn)到步驟2 end while end
二、深入遺傳算法 1、智能優(yōu)化算法概述 智能優(yōu)化算法又稱現(xiàn)代啟發(fā)式算法,是一種具有全局優(yōu)化性能、通用性強且適合于并行處理的算法。 這種算法一般具有嚴(yán)密的理論依據(jù),而不是單純憑借專家經(jīng)驗,理論上可以在一定的時間內(nèi)找到最優(yōu)解或近似最優(yōu)解。 遺傳算法屬于智能優(yōu)化算法之一。
常用的智能優(yōu)化算法有: 遺傳算法 、模擬退火算法、禁忌搜索算法、粒子群算法、蟻群算法。 (本經(jīng)典算法研究系列,日后將陸續(xù)闡述模擬退火算法、粒子群算法、蟻群算法。)
2、遺傳算法概述 遺傳算法是由美國的J. Holland教授于1975年在他的專著《自然界和人工系統(tǒng)的適應(yīng)性》中首先提出的。 借鑒生物界自然選擇和自然遺傳機制的隨機化搜索算法。 模擬自然選擇和自然遺傳過程中發(fā)生的繁殖、交叉和基因突變現(xiàn)象。
在每次迭代中都保留一組候選解,并按某種指標(biāo)從解群中選取較優(yōu)的個體,利用遺傳算子(選擇、交叉和變異)對這些個 體進(jìn)行組合,產(chǎn)生新一代的候選解群,重復(fù)此過程,直到滿足某種收斂指標(biāo)為止。
基本遺傳算法(Simple Genetic Algorithms,GA)又稱簡單遺傳算法或標(biāo)準(zhǔn)遺傳算法),是由Goldberg總結(jié)出的一種最基本的遺傳算法,其遺傳進(jìn)化操作過程簡單,容易理解,是其它一些遺傳算法的雛形和基礎(chǔ)。
3、基本遺傳算法的組成 (1)編碼(產(chǎn)生初始種群) (2)適應(yīng)度函數(shù) (3)遺傳算子(選擇、交叉、變異) (4)運行參數(shù)
接下來,咱們分門別類,分別闡述著基本遺傳算法的五個組成部分: 1、編碼 遺傳算法(GA)通過某種編碼機制把對象抽象為由特定符號按一定順序排成的串。 正如研究生物遺傳是從染色體著手,而染色體則是由基因排成的串。 基本遺傳算法(SGA)使用二進(jìn)制串進(jìn)行編碼。
初始種群:基本遺傳算法(SGA)采用隨機方法生成若干個個體的集合,該集合稱為初始種群。 初始種群中個體的數(shù)量稱為種群規(guī)模。
2、適應(yīng)度函數(shù) 遺傳算法對一個個體(解)的好壞用適應(yīng)度函數(shù)值來評價,適應(yīng)度函數(shù)值越大,解的質(zhì)量越好。 適應(yīng)度函數(shù)是遺傳算法進(jìn)化過程的驅(qū)動力,也是進(jìn)行自然選擇的唯一標(biāo)準(zhǔn), 它的設(shè)計應(yīng)結(jié)合求解問題本身的要求而定。
3.1、選擇算子 遺傳算法使用選擇運算對個體進(jìn)行優(yōu)勝劣汰操作。 適應(yīng)度高的個體被遺傳到下一代群體中的概率大;適應(yīng)度低的個體,被遺傳到下一代群體中的概率小。 選擇操作的任務(wù)就是從父代群體中選取一些個體,遺傳到下一代群體。 基本遺傳算法(SGA)中選擇算子采用輪盤賭選擇方法。
Ok,下面就來看下這個輪盤賭的例子,這個例子通俗易懂,對理解選擇算子幫助很大。
輪盤賭選擇方法 設(shè)群體大小為N,個體xi 的適應(yīng)度為 f(xi),則個體xi的選擇概率為:
輪盤賭選擇法可用如下過程模擬來實現(xiàn):
積累概率實例:
輪盤賭選擇方法的實現(xiàn)步驟: 例如,有染色體 假定適應(yīng)度為f(s)=s^2 ,則 染色體的選擇概率為:
染色體的累計概率為:
根據(jù)上面的式子,可得到:
例如設(shè)從區(qū)間[0, 1]中產(chǎn)生4個隨機數(shù):
r1 = 0.450126, r2 = 0.110347 r3 = 0.572496, r4 = 0.98503
3.2、交叉算子 交叉運算,是指對兩個相互配對的染色體依據(jù)交叉概率 Pc 按某種方式相互交換其部分基因, 交叉運算是遺傳算法區(qū)別于其他進(jìn)化算法的重要特征,它在遺傳算法中起關(guān)鍵作用, 單點交叉運算
3.3、變異算子 變異運算,是指改變個體編碼串中的某些基因值,從而形成新的個體。 交叉運算和變異運算的相互配合,共同完成對搜索空間的全局搜索和局部搜索。 基本位變異算子是指對個體編碼串隨機指定的某一位或某幾位基因作變異運算。 基本位變異算子的執(zhí)行過程:
4、運行參數(shù) (1)M :種群規(guī)模
三、淺出遺傳算法 遺傳算法的本質(zhì) 遺傳算法本質(zhì)上是對染色體模式所進(jìn)行的一系列運算,即通過選擇算子將當(dāng)前種群中的優(yōu)良模式遺傳 遺傳算法的主要有以下八方面的應(yīng)用:
四、遺傳算法的應(yīng)用 遺傳算法的應(yīng)用舉例、透析本質(zhì)(這個例子簡明、但很重要) 已知x為整數(shù),利用遺傳算法求解區(qū)間[0, 31]上的二次函數(shù)y=x2的最大值。
[分析] 原問題可轉(zhuǎn)化為在區(qū)間[0, 31]中搜索能使 y 取最大值的點 a 的問題。 這樣, 只要能給出個體x的適當(dāng)染色體編碼, 該問題就可以用遺傳算法來解決。 [解] (1) 設(shè)定種群規(guī)模,編碼染色體,產(chǎn)生初始種群。 s1= 13 (01101), s2= 24 (11000) (2) 定義適應(yīng)度函數(shù), 取適應(yīng)度函數(shù) (3) 計算各代種群中的各個體的適應(yīng)度, 并對其染色體進(jìn)行遺傳操作, 首先計算種群S1中各個體: 再計算種群S1中各個體的選擇概率: 由此可求得 再計算種群S1中各個體的積累概率:
選擇-復(fù)制 設(shè)從區(qū)間[0, 1]中產(chǎn)生4個隨機數(shù)如下:
于是,經(jīng)復(fù)制得群體:
交叉 設(shè)交叉率pc=100%,即S1中的全體染色體都參加交叉運算。
變異 設(shè)變異率pm=0.001。 于是,得到第二代種群S2: 第二代種群S2中各染色體的情況:
假設(shè)這一輪選擇-復(fù)制操作中,種群S2中的4個染色體都被選中,則得到群體: 做交叉運算,讓s1’與s2’,s3’與s4’ 分別交換后三位基因,得 這一輪仍然不會發(fā)生變異。 第三代種群S3中各染色體的情況: 設(shè)這一輪的選擇-復(fù)制結(jié)果為: 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)
這一輪仍然不會發(fā)生變異。
于是,得第四代種群S4: s1=11111(31)(出現(xiàn)最優(yōu)解), s2=11100(28) s3=11000(24), s4=10000(16)
顯然,在這一代種群中已經(jīng)出現(xiàn)了適應(yīng)度最高的染色體s1=11111。
于是,遺傳操作終止,將染色體(11111)作為最終結(jié)果輸出。 然后,將染色體“11111”解碼為表現(xiàn)型,即得所求的最優(yōu)解:31。 將31代入函數(shù)y=x2中,即得原問題的解,即函數(shù)y=x2的最大值為961。
所以,綜合以上各代群的情況,如下:
|
|