遺傳算法改進

遺傳算法(Genetic Algorithm, GA)是近幾年發展起來的一種嶄新的全局優化算法。本文將講解這種算法,並介紹如何 Robocode Java 坦克機器人中採用此算法以實現機器人進化。

遺傳算法

遺傳算法(Genetic Algorithm, GA)是近幾年發展起來的一種嶄新的全局優化算法。1962年霍蘭德(Holland)教授首次提出了GA算法的思想,它借用了仿真生物遺傳學和自然選擇 機理,通過自然選擇、遺傳、變異等作用機制,實現各個個體的適應性的提高。從某種程度上說遺傳算法是對生物進化過程進行的數學方式仿真。

這一點體現了自然界中"物競天擇、適者生存"進化過程。與自然界相似,遺傳算法對求解問題的本身一無所知,它所需要的僅是對算法所產生的每個染色體 進行評價,把問題的解表示成染色體,並基於適應值來選擇染色體,使適應性好的染色體有更多的繁殖機會。在算法中也即是以二進制編碼的串。並且,在執行遺傳 算法之前,給出一羣染色體,也即是假設解。然後,把這些假設解置於問題的“環境”中,也即一個適應度函數中來評價。並按適者生存的原則,從中選擇出較適應 環境的染色體進行復制, 淘汰低適應度的個體,再通過交叉,變異過程產生更適應環境的新一代染色體羣。對這個新種羣進行下一輪進化,至到最適合環境的值。

遺傳算法已用於求解帶有應用前景的一些問題,例如遺傳程序設計、函數優化、排序問題、人工神經網絡、分類系統、計算機圖像處理和機器人運動規劃等。

術語說明

由於遺傳算法是由進化論和遺傳學機理而產生的搜索算法,所以在這個算法中會用到很多生物遺傳學知識,下面是我們將會用來的一些術語說明:

一、染色體(Chronmosome)

染色體又可以叫做基因型個體(individuals),一定數量的個體組成了羣體(population),羣體中個體的數量叫做羣體大小。

二、基因(Gene)

基因是串中的元素,基因用於表示個體的特徵。例如有一個串S=1011,則其中的1,0,1,1這4個元素分別稱爲基因。它們的值稱爲等位基因 (Alletes)。

三、基因地點(Locus)

基因地點在算法中表示一個基因在串中的位置稱爲基因位置(Gene Position),有時也簡稱基因位。基因位置由串的左向右計算,例如在串 S=1101 中,0的基因位置是3。

四、基因特徵值(Gene Feature)

在用串表示整數時,基因的特徵值與二進制數的權一致;例如在串 S=1011 中,基因位置3中的1,它的基因特徵值爲2;基因位置1中的1,它的基因特徵值爲8。

五、適應度(Fitness)

各個個體對環境的適應程度叫做適應度(fitness)。爲了體現染色體的適應能力,引入了對問題中的每一個染色體都能進行度量的函數,叫適應度函 數. 這個函數是計算個體在羣體中被使用的概率。

操作算法

霍蘭德(Holland)教授最初提出的算法也叫簡單遺傳算法,簡單遺傳算法的遺傳操作主要有三種:選擇(selection)、交叉 (crossover)、變異(mutation)這也是遺傳算法中最常用的三種算法:

1.選擇(selection)

選擇操作也叫複製操作,從羣體中按個體的適應度函數值選擇出較適應環境的個體。一般地說,選擇將使適應度高的個體繁殖下一代的數目較多,而適應度較 小的個體,繁殖下一代的數目較少,甚至被淘汰。最通常的實現方法是輪盤賭(roulette wheel)模型。令Σfi表示羣體的適應度值之總和,fi表示種羣中第i個染色體的適應度值,它被選擇的概率正好爲其適應度值所佔份額fi/Σfi。如 下圖表中的數據適應值總和Σfi=6650,適應度爲2200變選擇的可能爲fi/Σfi=2200/6650=0.394.


圖1. 輪盤賭模型 
圖1. 輪盤賭模型

Fitness 值: 2200 1800 1200 950 400 100
選 擇概率: 3331 0.271 0.18 0.143 0.06 0.015

2.交叉(Crossover)

交叉算子將被選中的兩個個體的基因鏈按一定概率pc進行交叉,從而生成兩個新的個體,交叉位置pc是隨機的。其中Pc是一個系統參數。根據問題的不 同,交叉又爲了單點交叉算子(Single Point Crossover)、雙點交叉算子(Two Point Crossover)、均勻交叉算子 (Uniform Crossover),在此我們只討論單點交叉的情況。

單點交叉操作的簡單方式是將被選擇出的兩個個體S1和S2作爲父母個體,將兩者的部分基因碼值進行交換。假設如下兩個8位的個體:

S1	1000  1111	S2	1110  1100

 

產生一個在1到7之間的隨機數c,假如現在產生的是2,將S1和S2的低二位交換:S1的高六位與S2的低六位組成數串10001100,這就是 S1和S2的一個後代P1個體;S2的高六位與S1的低二位組成數串11101111,這就是S1和S2的一個後代P2個體。其交換過程如下圖所示:

Crossover 11110000 Crossover 11110000
S1 1000 1111 S2 1110 1100
P1 1000 1100 P2 1110 1111

3.變異(Mutation)

這是在選中的個體中,將新個體的基因鏈的各位按概率pm進行異向轉化,最簡單方式是改變串上某個位置數值。對二進制編碼來說將0與1互換:0變異爲 1,1變異爲0。

如下8位二進制編碼:

1	1	1	0	1	1	0	0

 

隨機產生一個1至8之間的數i,假如現在k=6,對從右往左的第6位進行變異操作,將原來的1變爲0,得到如下串:

1	1	0	0	1	1	0	0

 

整個交叉變異過程如下圖:


圖2. 交叉變異過程 
圖2. 交叉變異過程 圖2. 交叉變異過程

4.精英主義 (Elitism)

僅僅從產生的子代中選擇基因去構造新的種羣可能會丟失掉上一代種羣中的很多信息。也就是說當利用交叉和變異產生新的一代時,我們有很大的可能把在某 箇中間步驟中得到的最優解丟失。在此我們使用精英主義(Elitism)方法,在每一次產生新的一代時,我們首先把當前最優解原封不動的複製到新的一代 中,其他步驟不變。這樣任何時刻產生的一個最優解都可以存活到遺傳算法結束。

上述各種算子的實現是多種多樣的,而且許多新的算子正在不斷地提出,以改進GA某些性能。比如選擇算法還有分級均衡選擇等等。

遺傳算法的所需參數

說簡單點遺傳算法就是遍歷搜索空間或連接池,從中找出最優的解。搜索空間中全部都是個體,而羣體爲搜索空間的一個子集。並不是所有被選擇了的染色體 都要進行交叉操作和變異操作,而是以一定的概率進行,一般在程序設計中交叉發生的概率要比變異發生的概率選取得大若干個數量級。大部分遺傳算法的步驟都很 類似,常使用如下參數:

Fitness函數:見上文介紹。

Fitnessthreshold(適應度閥值):適合度中的設定的閥值,當最優個體的適應度達到給定的閥值,或者最優個體的適應度和羣體適應度不 再上升時(變化率爲零),則算法的迭代過程收斂、算法結束。否則,用經過選擇、交叉、變異所得到的新一代羣體取代上一代羣體,並返回到選擇操作處繼續循環 執行。

P:種羣的染色體總數叫種羣規模,它對算法的效率有明顯的影響,其長度等於它包含的個體數量。太小時難以求出最優解,太大則增長收斂時間導致程序運 行時間長。對不同的問題可能有各自適合的種羣規模,通常種羣規模爲 30 至 160。

pc:在循環中進行交叉操作所用到的概率。交叉概率(Pc)一般取0.6至0.95之間的值,Pc太小時難以向前搜索,太大則容易破壞高適應值的結 構。

Pm:變異概率,從個體羣中產生變異的概率,變異概率一般取0.01至0.03之間的值變異概率Pm太小時難以產生新的基因結構,太大使遺傳算法成 了單純的隨機搜索。

另一個系統參數是個體的長度,有定長和變長兩種。它對算法的性能也有影響。由於GA是一個概率過程,所以每次迭代的情況是不一樣的,系統參數不同, 迭代情況也不同。

遺傳步驟

瞭解了上面的基本參數,下面我們來看看遺傳算法的基本步驟。

基本過程爲:

  1. 對待解決問題進行編碼,我們將問題結構變換爲位串形式編碼表示的過程叫編碼;而相反將位串形式編碼表示變換爲原問題結構的過程叫譯碼。
  2. 隨機初始化羣體P(0):=(p1, p2, … pn);
  3. 計算羣體上每個個體的適應度值(Fitness)
  4. 評估適應度,對當前羣體P(t)中每個個體Pi計算其適應度F(Pi),適應度表示了該個體的性能好壞
  5. 按由個體適應度值所決定的某個規則應用選擇算子產生中間代Pr(t)
  6. 依照Pc選擇個體進行交叉操作
  7. 仿照Pm對繁殖個體進行變異操作
  8. 沒有滿足某種停止條件,則轉第3步,否則進入9
  9. 輸出種羣中適應度值最優的個體

程序的停止條件最簡單的有如下二種:完成了預先給定的進化代數則停止;種羣中的最優個體在連續若干代沒有改進或平均適應度在連續若干代基本沒有改進 時停止。

根據遺傳算法思想可以畫出如右圖所示的簡單遺傳算法框圖:


圖3. 簡單遺傳算法框圖 
圖3. 簡單遺傳算法框圖

下面僞代碼簡單說明了遺傳算法操作過程:

choose an intial population

For each h in population,compute Fitness(h)

While(max Fitness(h) < Fitnessthreshold)

do selection

    do crossover

do mutation  

 update population

For each h in population,compute Fitness(h)

Return best Fitness
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章