1. 程式人生 > >遺傳算法簡述

遺傳算法簡述

目前 美國 ble 數值 改進 .com 優勢 限制 熱點

引言

首次由美國的 Holland 教授於 1975 年在他的專著《自然界和人工系統的適應性》中首先提出的,它是一類借鑒生物界自然選擇和自然遺傳機制的隨機搜索算法。遺傳算法模擬自然選擇和自然遺傳過程中發生的繁殖、交叉和基因突變現象,在每次叠代中都保留一組候選解,並按某種指標從解群中選取較優的個體,利用遺傳算子( 選擇、交叉和變異) 對這些個體進行組合,產生新一代的候選解群,重復此過程,直到滿足某種收斂指標為止。具體實現的方法可以描述成如下圖: 技術分享圖片

優勢: 依托初始化種群,利用適應度函數,從多個不同的初始值範圍內,逐個變異向最優解靠近,極大了降低了在全局尋找最優解的復雜度,同時避免陷入局部最優解的尷尬。

一、原理

遺傳算法的核心思想:先隨機創造很多很多的解,然後找一個靠譜的評價體系去篩選適應性高的解,再用這些適應性高的解衍生出更好的解,然後再篩選,再衍生。反復叠代一定次數,可以得到近似最優解。

二、過程

以“背包問題”為例,說明遺傳算法怎麽實現最優的組合問題求解。

“背包問題(Knapsack problem)”是一種組合優化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,我們如何選擇,才能使得物品的總價格最高。問題的名稱來源於如何選擇最合適的物品放置於給定背包中。

這個問題的衍生簡化問題“0-1背包問題” 增加了限制條件:每件物品只有一件,可以選擇放或者不放,更適合我們來舉例,這樣的問題如果數量少,當然最好選擇窮舉法,比如一共3件商品,用0表示不取,1表示取,那麽就一共有

000 001 010
011 100 101
110 111
這樣8種方案,然後讓計算機去累加和,與重量上限比較,留下來的解裏取最大即可。
但如果商品數有300,3000,甚至3w種呢,計算量太大窮舉法可能就不適用了,這時如果遺傳算法使用得當,就能在較短的時間內幫我們找到近似的最優解,我們繼續往下看:
新的問題是12件商品的0-1背包問題
我們先讓計算機隨機產生1000個12位的二進制數。把總重量超過背包上限的解篩掉,剩下的兩兩一對隨機交換“基因片段”產生下一代
交換前:
0000 1100 1101
0011 0101 0101
交換後:
0000 0101 1101
0011 1100 0101
再篩選,再交配,如此反復幾代,留下的“基因型“差不多就是最好的了,如此這般與生物進化規律是一樣的。

同時,在生物繁殖過程中,新產生的基因是有一定幾率突變的,這是很多優良性狀的重要來源,遺傳算法中可也不能忽略它
比如:

變異前:

000101100101

變異後:

000101110101

產生突變的位置,就是一個概率問題。在設計算法的時候,會給每個基因位設置一個突變概率(當然是非常了)同樣的在基因交換階段交換哪些基因呢,也是一個算法設置問題。

三、說明

遺傳算法包含:

一個基本函數:適度函數f(x)
三個基本操作:選擇,交叉,變異

一.適度函數
適度函數其實就是指解的篩選標準,比如上文所說的把所有超過上限重量的解篩選掉,但是不是有更好的篩選標準呢?這將直接影響最後結果的接近程度以及求解所耗費的時間,所以設置一個好的適度函數很重要

二.選擇
在遺傳算法中選擇也是個概率問題,在解的範圍中適應度更高的基因型有更高的概率被選擇到。所以,在選擇一些解來產生下一代時,一種常用的選擇策略是“比例選擇”,也就是個體被選中的概率與其適應度函數值成正比。假設群體的個體總數是M,那麽那麽一個體Xi被選中的概率為f(Xi)/( f(X1) + f(X2) + …….. + f(Xn) )。常用的選擇方法――輪盤賭(Roulette Wheel Selection)選擇法。

三.交叉
在均等概率下基因位點的交叉,衍生出新的基因型。上述例子中是通過交換兩個基因型的部分”基因”,來構造兩個子代的基因型。

四.變異
在衍生子代的過程中,新產生的解中的“基因型”會以一定的概率出錯,稱為變異。變異發生的概率設置為Pm,記住該概率是很小的一個值。因為變異是小概率事件!

五.基本遺傳算法優化
為了防止進化過程中產生的最優解被變異和交叉所破壞。《遺傳算法原理及應用》介紹的最優保存策略是:即當前種群中適應度最高的個體不參與交叉運算和變異運算,而是用它來替換掉本代群體中經過交叉、變異等遺傳操作後所產生的適應度最低的個體。

四、總結

優點總結:

1、 與問題領域無關且快速隨機的全局搜索能力。傳統優化算法是從單個初始值叠代求最優解的;容易誤入局部最優解。遺傳算法從串集開始搜索,復蓋面大,利於全局擇優。

2、 搜索從群體出發,具有潛在的並行性,可以進行多個個體的同時比較,魯棒性高!

3、 搜索使用評價函數啟發,過程簡單。

4、使用概率機制進行叠代,具有隨機性。遺傳算法中的選擇、交叉和變異都是隨機操作,而不是確定的精確規則。這說明遺傳算法是采用隨機方法進行最優解搜索,選擇體現了向最優解迫近,交叉體現了最優解的產生,變異體現了全局最優解的復蓋。

5、具有可擴展性,容易與其他算法結合。遺傳算法求解時使用特定問題的信息極少,僅僅使用適應值這一信息進行搜索,並不需要問題導數等與問題直接相關的信息。遺傳算法只需適應值和串編碼等通用信息,故幾乎可處理任何問題,容易形成通用算法程序。

6、具有極強的容錯能力。遺傳算法的初始串集本身就帶有大量與最優解甚遠的信息;通過選擇、交叉、變異操作能迅速排除與最優解相差極大的串;這是一個強烈的濾波過程;並且是一個並行濾波機制。故而,遺傳算法有很高的容錯能力。

缺點總結:

1、遺傳算法的編程實現比較復雜,首先需要對問題進行編碼,找到最優解之後還需要對問題進行解碼

2、三個算子的實現也有許多參數,如交叉率和變異率,並且這些參數的選擇嚴重影響解的品質,而目前這些參數的選擇大部分是依靠經驗

3、沒有能夠及時利用網絡的反饋信息,故算法的搜索速度比較慢,要得要較精確的解需要較多的訓練時間

4、算法對初始種群的選擇有一定的依賴性(下圖所示),能夠結合一些啟發算法進行改進

5、算法的並行機制的潛在能力沒有得到充分的利用,這也是當前遺傳算法的一個研究熱點方向。

遺傳算法簡述