遺傳算法是一種大致基於模擬進化的學習方法,假設常被描述為二進制串。在遺傳算法中,每一步都根據給定的適應度評估准則去評估當前的假設,然后用概率的方法選擇適應度最高的假設作為產生下一代的種子。產生下一代的辦法有交叉和變異兩種方法。
遺傳算法和遺傳編程是進化計算的兩種普遍方法。
遺傳算法原理
在遺傳算法中各個假設首先表示成二進制位串。用if-then的編碼規則將某個屬性轉換為二進制串。假設一個屬性
Outlook可以取Sunny、Overcast和Rain,則該屬性可以通過三個二進制位來描述,相應的位表示取某個值的屬性。
例子:
(Outlook屬性 = Overcast||Rain)&&(Wind屬性=Strong)則二進制表示為
Outlook Wind
011 10
表示了假設以后,再應用下面的迭代函數。
GA(Fitness,Fitness_threshold,p,r,m) Fitness:適應度評分函數; Fitness_threshold:指定終止迭代的門限; p:群體中假設的數量; r:每一步通過交叉取代群體成員的比例; m:變異率;
算法的每一次迭代都從概率的方法選擇(具體選擇那些個體,與個體的適應度有關)(1-r)p直接進入下一代群體,rp個體通過交叉產生群體進入下一代。然后再從下一代選擇mp的成員變異,得到這一輪迭代的下一代群體。
個體選擇:適應度比例選擇,錦標賽選擇和排序選擇。
交叉算子:兩點交叉,多點交叉和均勻交叉。(可以自定義交叉規則)。
變異算子:從父親位串中選擇一位取反。(當然也可以選擇多位)。
遺傳算法實現難題:擁擠問題,群體中某個體適應度大大高於其他個體,因此它迅速繁殖,降低了群體的多樣性。解法辦法:修改選擇函數、適應度共享等。
遺傳編程(GP)
遺傳編程是遺傳算法的一種應用,只不過現在的個體計算機程序,通過GA學習可以得到那種算法的適應性最強。在遺傳編程的實現中,GP操作的程序被表示為解析樹,然后遺傳交叉的時候,交叉解析數的某個子樹節點。
進化和學習模型
拉馬克進化:如果個體在生命周期內學會了避開某種有毒食物,它能把這種特性遺傳給后代。科學證明這種理論沖突,但是它可以提高計算機遺傳算法的效率。
鮑德溫效應:如果個體具有學習的性能,則個體就會較少地依賴遺傳中“基因的不足”,這種個體容易生存下來;如果沒有學習能力的個體則單靠遺傳的基因,會處於劣勢。因此,個體的學習能力間接加速群體適應性進化。Hinton&Nowlan對一個簡單的神經網絡,運用鮑德溫效應進行了實踐,即讓一些權值固定,另一些權值可以通過樣本訓練的。實驗中,允許學習的時候,群體適應度迅速提高。
並行遺傳算法
GA算法適合並行實現。並行方法把群體細分成相對獨立的個體群,每個群成為一個類屬(deme),每個類屬分配一個計算節點,在這些節點上應用GA算法。類屬與類屬之間可以通過遷移來復制或交換其他特性,但是將這種概率設置的比類屬內部的基因交換概率比低。