遺傳演算法通識

2021-07-27 12:51:44 字數 2742 閱讀 3900

遺傳演算法(genetic algorithms ,ga)**於自然界自然選擇和遺傳進化的思想,主要用於解決最優化問題(optimization problems)。遺傳演算法最早在20世紀70年代由john holland提出。但實際上,我更認為其發明者是達爾文。遺傳演算法本質上是達爾文「優勝劣汰,適者生存」的演化論思想在計算機中的對映。

一、基本概念

與演化論相似,遺傳演算法有幾個核心概念。知道演化論或學過生物的很容易理解。

個體(individual):乙個猴子,乙個猩猩,乙個人。

種群(population):一群猴子,一群猩猩,一群人。

基因(gene):個體攜帶的基因。

染色體(chromosome):由基因拼接組成;作為個體的藍本,在演算法中一般代表個體自身。

遺傳演算法基於如下進化理論的模擬:

(1)個體在種群中因為資源或配偶進行競爭;

(2)優秀的個體在競爭中更有優勢;

(3)優秀個體相互結合能夠產生更優秀的後代。

二、怎樣判斷優秀個體?

那麼,怎麼知道哪個是優秀的個體,哪個是不優秀的個體呢?在遺傳演算法中用「適應度值(fitness)」來度量,至於適應度值高是優秀還是低是優秀,看具體的問題了。

在演算法實施過程中需要乙個「適應度值計算函式」,來計算種群中每個個體的適應度值(fitness)。

三、怎樣實施進化過程?

遺傳演算法的過程不複雜。

1)根據問題需要,隨機生成個體,個體的數量可自行控制。

2)將個體組成乙個種群。這前2個過程一般合併在一起。

3)計算個體適應度值。

4)根據適應度值選擇優秀的個體。

5)將優秀的個體進行結合,產生乙個或多個後代。

6)某個個體產生基因變異,變成了乙個新個體。

7)將所有新個體加入到種群中,根據適應度值淘汰較差個體,使種群中個體數量保持不變。

8)滿足退出條件就退出,不滿足就轉向步驟3)。

四、三個核心步驟

(1)選擇(selection)

關鍵思想:優秀的個體有更多的機會把基因傳給下一代。

選擇的基準就是個體的適應度。而選擇的策略根據問題和程式設計師自身意圖,可以採用多種策略。一般使用較廣、且易於實現的是輪盤賭策略(roulette wheel selection)。

假設種群中有6個個體,適應度值分別是[2,3,10,5,12,19],其輪盤是如下形式:

我們轉動輪盤,顯然適應度越大的有更大的概率被選中。其簡單的解釋性**可以表示如下:

# -*- coding: utf-8 -*-

import numpy as np

s = [2, 3, 10, 5, 12, 19] # 種群和個體

s_sum = sum(s) # 所有適應度的和

m = 0

r = np.random.random() # 0-1之間的隨機數

c = 0

for i in range(len(s)):

m += s[i] / s_sum

if r <= m:

c = i

break

print(c) # 最後選中個體的序號

可以看出,用輪盤賭也有一定的限制。如果適應度值有正有負,就不好處理。所以輪盤賭只是選擇策略的一種。最簡單的是隨機選擇策略,在種群中隨機選擇個體進行進化。

(2)結合(或稱交叉,crossover)

交叉過程根據問題和程式設計師的意圖可自行設計。下面給出單點交叉法的過程示意圖。

兩個個體parent1和parent2,各分成2部分基因片段。分別將parent1的前部分基因片段和parent2的後部分基因片段,parent1的後部分基因片段和parent2的前部分基因片段相結合,生成了2個後代child1和child2。每個後代都擁有parent1和parent2的一部分基因。

在每一代進化中,交叉過程不是一定發生的,一般基於設定的概率發生。而這個概率設定的較高,一般在0.6以上。如果交叉不發生,parent1和parent2直接複製進入新種群。如果交叉發生,則對child1,child2,parent1,parent2進行適應度比較後,保留較好的進入新種群,也可以都進入新種群,具體怎麼做沒有標準,可以根據具體問題自行選擇。

(3)變異(mutation)

為了確保種群的多樣性,允許種群中有個體的基因變異。在實際問題中是跳出區域性最優解。下圖表示種群中某個個體的一段基因編碼發生變異,生成了乙個新個體。在每一代進化中,變異概率設定的較低,一般在0.1以下。注意:交叉概率和變異概率乙個較大,乙個較小,但不是交叉概率和變異概率之和一定等於1,沒有這種說法,這兩個概率沒有相關性。

變異可以基於交叉後產生的個體,也可以基於種群中的所有個體,這個可以根據具體問題自行決策。

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

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

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

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

遺傳演算法歸納

遺傳演算法 genetic algorithm 是一類借鑑生物界的進化規律 適者生存 優勝劣汰遺傳機制 演化而來的隨機化搜尋方法。其主要特點是直接對結構物件進行操作,不存在求導和函式連續性的限定 具有內在的隱並行性和更好的全域性尋優能力 採用概率化的尋優方法,能自動獲取和指導優化的搜尋空間,自適應地...