遺傳演算法詳解

2021-06-26 22:43:21 字數 3022 閱讀 3504

遺傳演算法(genetic algorithm)是一類借鑑生物界的進化規律(適者生存,優勝劣汰遺傳機制)演化而來的隨機化搜尋方法。它是由美國的j.holland教授2023年首先提出,其主要特點是直接對結構物件進行操作,不存在求導和函式連續性的限定;具有內在的隱並行性和更好的全域性尋優能力;採用概率化的尋優方法,能自動獲取和指導優化的搜尋空間,自適應地調整搜尋方向,不需要確定的規則。遺傳演算法的這些性質,已被人們廣泛地應用於組合優化、機器學習、訊號處理、自適應控制和人工生命等領域。它是現代有關智慧型計算中的關鍵技術。

1.種群規模    n

2.最大換代數 

3.交叉率    pc (一般為0.4 - 0.99)

4.變異率    pm (一般為0.0001 - 0.001)

5.染色體中基因長度    l

1.選擇-複製

2.交叉

3.變異

步1.在搜尋空間u上定義乙個適應度函式,給定種群規模n,交叉率pc,變異率pm。

步2.生成初始種群s0。

步3.計算適應度f。

步4.若終止條件滿足,則退出;否則轉步5。

步5.選擇,複製n次。生成種群s1。

步6:交叉,隨機確定c個染色體,生成種群s2。

步7:變異,變異次數m=pm * n * l,生成種群s3

;然後再次轉到步3。

遺傳演算法利用了生物進化和遺傳的思想。它不同於列舉法、啟發式演算法、搜尋演算法等傳統的優化方法,具有如下特點 :

a)自組織、自適應和智慧型性。遺傳演算法削除了演算法設計中的乙個最大障礙,即需要事先描述問題的全部特點,並說明針對問題的不同特點演算法應採取的措施。因此,它可用來解決複雜的非結構化 問題 , 具有很強的魯棒性 。

b)直接處理的物件是參 數編碼集 , 而不是問題引數本身。

c)易於並行化。

在許多問題求解中,編碼是遺傳演算法中首要解決的問題,對演算法的效能有很重要的影響。holland提出的二進位制編碼是遺傳演算法中最常用的一種編碼方法,它採用最小字元編碼原則,編/解碼操作簡單易行,利於交叉、變異操作的實現,也可以採用模式定理對演算法進行理論分析。但二進位制編碼用於多維、高精度數值問題優化時,不能很好地克服連續函式離散化時的對映誤差;不能直接反映問題的固有結構,精度不高,並且個體長度大、占用記憶體多 。針對二進位制編碼存在的不足,人們提出了多種改進方法,比較典型的有以下幾種:

格雷碼編碼

為了克服二進位制編碼在連續函式離散化時存在的不足,人們提出了用格雷 碼進行編碼的方法,它是二進位制編碼的變形。假設有乙個二進位制編碼為x=xmx

m-1…x2x

1 , 其對應的格雷碼為y=ymy

實數編碼

該方法適合於遺傳演算法中表示範圍較大的數,使遺傳演算法更接近問題空間,避免了編碼和解碼的過程。它便於較大空間的遺傳搜尋,提高了遺傳演算法的精度要;便於設計專門問題的遺傳運算元;便於演算法與經典優化方法的混合作用,改善了遺傳演算法的計算複雜性,提高了運算效率。

十進位制編碼

該方法利用十進位制編碼控制引數,緩解了「組合**」和遺傳演算法的早熟收斂問題。

非數值編碼

染色體編碼串中的基因值取乙個僅有**含義而無數值含義的符號集,這些符號可以是數字也可以是字元。非數值編碼的優點是在遺傳演算法中可以利用所求問題的專門知識及相關演算法。對於非數值編碼,問題的解和染色體的編碼要注意染色體的可行性 、染色體的合法性和對映的惟一性。

在遺傳演算法中通過一系列運算元來決定後代,運算元對當前群體中選定的成員進行重組和變異 。

1)選擇運算元

選擇操作通過適應度選擇優質個體而拋棄劣質個體,體現了「適者生存」的原理 。potts等人概括 了23種選擇方法。常見的選擇操作主要有以下幾種 :

a)輪盤賭選擇 。選擇某假設的概率是通過這個假設的適應度與當前群體中其他成員的適應度的比值而得到。此方法是基於概率選擇的,存在統計誤差,因此可以結合最優儲存策略以保證當前適應度最優的個體能夠進化到下一代而不被遺傳操作的隨機性破壞,保證演算法的收斂性。

b)排序選擇。對個體適應值取正值或負值以及個體適應度之間的數值差異程度無特殊要求 , 對群體中的所有個體按其適應度大小進行排序,根據排序來分配各個體被選中的概率。

c)最優個體儲存。父代群體中的最優個體直接進入子代群體中。該方法可保證在遺傳過程中所得到的個體不會被交叉和變異操作所破壞,它是遺傳演算法收斂性的乙個重要保證條件 ;它也容易使得區域性最優個體不易被淘汰,從而使演算法的全域性搜尋能力變強。

d)隨機聯賽選擇。每次選取n個個體中適應度最高的個體遺傳到下一代 群體中。具體操作如下:

從群體中隨機選取n個個體進行適應度大小比較,將其中適應度最高的個體遺傳到下一代群體中;將上述過程重複執行m(為群體大小)次,則可得到下一代群體。

2)交叉運算元

交叉是指對兩個相互交叉的染色體按某種方式相互交換其部分基因,從而形成兩個新的個體。它是產生新個體的主要方法,決定了遺傳演算法的全域性搜尋能力,在遺傳演算法中起關鍵作 用。potts等人概括了17種交叉方法。幾種常用的適用於 二進位制編碼或實數編碼方式的交叉運算元如下 :

a)單點交叉。

在個體編碼串中隨機設定乙個交叉點後在該點相互交換兩個配對個體的部分基因 。

b)兩點交叉。

在相互配對的兩個個體編碼串中隨機設定兩個交叉點,並交換兩個交叉點之間的部分基因 。

c)均勻交叉。

兩個相互配對個體的每一位基因都以相同的概率進行交換,從而形成兩個新個體。

d)算術交叉。

由兩個個體的線性組合而產生出新的個體。

3)變異運算元

d)高斯變異。在進行變異時用乙個均值為μ、方差為σ2的正態分佈的乙個隨機數來替換原有基因值。其操作過程與均勻變異類似。

雖然遺傳演算法在許多領域中都有成功的應用,但其自身也存在不足,如區域性搜尋能力差、存在未成熟收斂

和隨機遊走等現象,導致演算法的收斂效能差,需要很長時間才能找到最優解等問題 。

參考文獻: 遺傳演算法研究綜述,葛繼科,邱玉輝,吳春明

,蒲國林 計算機應用研究,第25卷第10期2023年10月

本作品採用

知識共享署名-非商業性使用-相同方式共享 3.0 中國大陸許可協議進行許可。

python遺傳演算法 Python 遺傳演算法實現

關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...

遺傳演算法 python 簡書 遺傳演算法

優化的演算法有很多種,從最基本的梯度下降法到現在的一些啟發式演算法,如遺傳演算法 ga 差分演化演算法 de 粒子群演算法 pso 和人工蜂群演算法 abc 舉乙個例子,遺傳演算法和梯度下降 梯度下降和遺傳演算法都是優化演算法,而梯度下降只是其中最基礎的那乙個,它依靠梯度與方向導數的關係計算出最優值...

遺傳演算法簡單例題的詳解

主函式 int main srand unsigned time null init ga system pause return 0 init函式 void init 初始化 建立乙個種群 inttmp for int i 0 itmp randi n for int j 0 jcur i x j...