1. 程式人生 > >遺傳演算法入門C1

遺傳演算法入門C1

遺傳演算法入門C1

覺得有用的話,歡迎一起討論相互學習~Follow Me

參考文獻

遺傳演算法歷史

  • 遺傳演算法(GA)是從生物進化的角度考慮提出來的方法,19世紀達爾文在大量觀察基礎上總結了大自然進化規律,即優勝劣汰:後來孟德爾通過豌豆實驗發現了遺傳規律、分離規律和自由組合規律。遺傳是指父代的基因將會遺傳到子代中去,父代和子代具有相似性,同時,父代與子代也會有不同點,否則,從進化角度考慮,父代和子代無差別,物種沒有出現進化。當子代中出現不適應生存的個體時,將會逐漸被環境淘汰,具有環境生存優勢的個體將生存下來,這樣遺傳通過基因傳遞,並和環境相互作用,讓基因朝著有利於生存的方向進化,優良的基因庫就得以儲存。
  • 在19世紀60年代,科學家Fraser在其論文中首先提到了選擇和突變操作。密西
    根大學教授J.Holland在20世紀70年代研究自然和人工自適應系統時,首先提出了遺傳演算法基本形式。在80年代Goldberg根據前人研究成果,將遺傳演算法主要過程分為 選擇、遺傳和變異三部分由於遺傳演算法適應能力較強,同時具備較強的全域性搜尋能力,使遺傳演算法在各個領域都得到了廣泛的應用,同時也促使遺傳演算法在理論上得到了很大的發展
  • 運用遺傳演算法求解實際問題時, 我們需要將目標問題同遺傳演算法建立聯絡, 即通過遺傳編碼建立關聯。 每一個編碼可以稱為個體或者染色體,多個解的個體構成了種群。 遺傳演算法通過模擬生物進化對種群中個體進行 選擇、交叉、變異操作
    ,能將優秀的基因保留下來,傳遞給後代,使種群向最優方向進化。

遺傳編碼

  • 運用遺傳演算法尋求最優解時,在確定目標函式後,需要把函式變數轉化成染色體表現形式,編碼的過程必須滿足以下條件:
    1. 必須保證解的空間中的所有解都在編碼空間內
    2. 每一個解都能通過交叉和變異操作轉化成解的空間中其他任意解
    3. 每一個染色體都是對應解的空間內的一個特定解
  • 遺傳編碼方式很重要,同一問題不同的編碼方式可能使遺傳演算法的出來的結果出現較大的差異,好的編碼方式能提高求解效率,因此,需要根據求解問題的特點決定編碼方式。根據前人總結,編碼方式一般有二進位制編碼、浮點數編碼和格雷碼編碼等編碼形式。

適應度函式

  • 遺傳演算法為了保證種群向著對環境適應能力較強的方向進化,就需要一個 評價標準 保證某一代中較優秀的個體能 有較大的概率將基因遺傳給下一代 ,因此,遺傳演算法中就引入了 適應度函式 的概念。 個體中適應度值較大,其個體就有較大的概率遺傳給下一代 反之,適應度值小的,其個體淘汰的概率就比較高,模擬進化過程中的優勝劣汰。

遺傳操作

選擇

選擇操作的目的是為了將 當代 種群中 適應度值較高 的個體儲存下來,將 適應度值低的個體淘汰 ,選擇操作的過程中 本身不會產生任何新的個體 。但是選擇操作由於是一個 隨機選擇過程 ,只是表示適應度值較高的個體將 有較高的概率 將自身基因遺傳給下一代,並不表示適應度值較低的個體一定會淘汰, 但是,總體的趨勢會是基因庫中的基因越來越好,適應度值越來越高。選擇操作的方法目前主要有 輪盤賭選擇、最優保留法、期望值法 等等。

輪盤賭選擇法

  • 輪盤賭選擇法又稱為比例選擇法,其選擇方式是隨機的,不過適應度值較高的被選擇的概率大。設定種群規模為N,其中個體i的適應度值為 f i f_i ,在選擇操作中其被選中的概率為: P i = f i i = 1 N f i P_i=\frac{f_i}{\sum^{N}_{i=1}f_{i}}
    由於輪盤賭選擇法是隨機選擇的,因此,有可能將適應度值較大的個體淘汰,導致最終結果可能不能尋找到最優解,通常,可以將 最優保留法和輪盤賭選擇法結合選擇 ,先通過 最優保留法 將適應度值最高的個體保留,之後再進行 輪盤賭選擇法進行選擇

交叉

  • 交叉操作在遺傳演算法中佔據比較重要的作用,遺傳演算法中 產生新個體的主要就是通過交叉操作完成的 交叉操作的具體過程是 父代隨機選取兩個個體,按照某種規則對染色體上的基因相互交換,形成新的個體 ,這樣做的目的是 為了將優秀的基因段通過交叉的方式有效進行整合,使下一代個體的適應度值比上一代更高 。常見的交叉規則有 單點交叉、多點交叉和均勻交叉 三種方式。
    • 單點交叉 的方式是在染色體上隨機選定一個基因點作為交叉位置,父代中兩染色體在此處的基因資訊互換,這樣就形成了兩個子代個體。如下圖所示,對其基因採用二進位制編碼,若隨機交叉點為第三基因位。
    • 多點交叉 是指染色體中有 兩個或兩個以上的基因位點交叉 ,圖中染色體同樣採用二進位制編碼,假定多點交叉為隨機取兩個基因位點交叉。若交叉點發生在第二、三基因位。
    • 均勻交叉 其交叉通過兩父代染色體之間設定一個遮蔽碼來實現的, 遮蔽碼的長度需要與染色體上的基因為長度一致 如下圖所示,圖中在父代染色體中出現了一串遮蔽碼,使用規則為: 凡是遮蔽碼中碼為1時,父代染色體中與之對應的基因位發生交叉互換;凡是遮蔽碼中碼為0,則與之對應的父代染色體基因位不進行交叉操作
  • 遺傳交叉操作方式的選取對遺傳演算法效率影響較大,具體採用何種交叉方式取決於實際問題情況,總之無論採取哪種交叉方式,都需要 保證種群基因多樣性,不然容易使遺傳演算法陷入早熟。但是,交叉點太多,又極可能導致遺傳演算法無法收斂

變異

  • 生物進化過程中,在外在環境發生較大變化時,某些物種大部分個體由於環境變化而消亡,但是有極少數個體能夠生存下來,其原因是因為環境發生大的變化時,其個體內的基因發生了突變,基因突變導致出現了新的基因出現,而此基因能適應改變後的環境。顯然,變異操作也在遺傳演算法中對保持種群多樣性、防止早熟、豐富基因庫有著重大意義。
  • 變異操作的概念是指種群中任意個體以一定的概率使其染色體中一個或幾個基因位發生突變。這種操作很有可能出現原有種群通過交叉獲取不到的基因表現形式,在豐富種群基因庫同時也能防止遺傳演算法過早的收斂。下圖為對基因位的變異操作過程,取變異基因位為第一位
  • 遺傳編碼、選擇、交叉和變異組成了遺傳演算法的基本框架 ,即遺傳演算法的標準組成部分,其操作過程都是採用隨機操作,有一定能力 跳出區域性最優 ,具有較好的 全域性搜尋能力 。通過對遺傳演算法的編碼形式的分析,可以得出遺傳演算法在面對 非線性、不連續、離散型 問題時,具有較強的處理能力,在解決實際問題中具有較強的適應能力。下圖是一個標準遺傳演算法的程式流程圖,嚴格按照選擇、交叉和變異來進行,在達到終止條件時,遺傳進化停止,輸入所求得最優解。