遺傳演算法的交叉變異操作雜記

2021-09-21 18:32:51 字數 1200 閱讀 4772

100個個體,交叉概率為0.1,並不代表交叉個體數為10個.這是乙個概率問題.

另外,交叉概率一般會取0.5-1這個範圍內,0.1未免有點小.

自適應的遺傳演算法,一般在迭代初期會有較大的交叉概率,越往迭代後期,交叉概率越小.

而變異概率則相反.

標準的交叉如下: 假設六個個體的編號為從1至6,兩兩配對共分為3對母代個體。 第1對母代個體:隨機生成乙個隨機數r,如果r<=0.6,則進行交叉。交叉點仍然是隨機產生的。如果是單點交叉就隨機產生乙個點,如果是兩點交叉就隨機產生兩個點,其他還有均勻交叉、融合交叉等。如果r>0.6,則不進行交叉,子代個體用母代個體代替。 然後繼續判斷第2對母代個體,照此方法依次進行。 一輪下來,進行交叉的個體數量大致是6*0.6=3.6個。但絕對不會是小數或奇數。

遺傳演算法中的交叉變異概率在編子函式時,應該是rand(1)產生的隨機數小於交叉率pc,或交叉率pm才能進行交叉變異操作。

因為遺傳演算法中,交叉變異操作是以一定的交叉率pc和一定的變異率pm執行的。所以首先選擇參與交叉或變異操作的個體進入到交配池,選擇過程是隨機選擇的,即滿足rand(1) 交叉概率太大的話,就失去意義了,就變成隨機演算法了;太小的話,收斂太慢.通常的做法是採用自適應的方法.

固定交叉概率:0.9-0.97之間取;

# mutate

import numpy as np

mutation_rate =0.003

child = [1,0,1,1,0,0,1,0,0,0]

for point in range(10):

if np.random.rand() < mutation_rate:

if child[point]==0:# 也可寫為 child[point] = 1 if child[point]==0 else 0

child[point] =1

else:

child[point] =0

print(child)

輸出:求解過程中需要評價的目標函式和約束條件,而不需要其他更複雜資訊。遺傳演算法具有隨機性特點,使其能避免陷入區域性最優的優勢。遺傳演算法第一步是產生一組可行的解,將其作為初始種群。演算法收斂速度、演算法的效能受初始種群影響極大,因此初始種群確定尤為重要。

定義1:隨機產生乙個個體,若該個體滿足約束條件,則該個體稱為可行個體,若該個體不滿足所有約束條件,則該個體為非可行個體;

定義2:最初可行個體的全體稱為初始種群,初始種群中個體的數量稱為種群規模;

遺傳演算法 變異操作

對於不同問題以上變異可能是較大的變異也可能是較小的變異,比如,inversion對於鄰接關係是較小的變異,而對於絕對位置和相對位置關係卻是很大的變異。乙個變異應該是具有較小的變化,這樣才能有平滑的適應度變化。1 alberto moraglio.2007.towards a geometric un...

遺傳演算法 變異演算法

遺傳演算法系列 4 變異演算法 在基因交叉之後產生的子代個體,其變數可能以很小的概率或者步長發生轉變,這個過程稱為變異 mutation 如果進化的目標函式極值是單峰值的,那麼,將變異概率p設定為種群數量n的倒數是乙個比較好的選擇。如果變異概率很大,那麼整個搜尋過程就退化為乙個隨機搜尋過程。所以,比...

遺傳演算法 交叉操作 NWOX 2006

執行步驟如下 c1,c2 是其父本 p1,p2的副本 在 1,l 上隨機選擇兩個位置a,b,假設a b figure 2 a 在子代c1種找到父代p2中a,b之間的值v2 a v2 a 1 v2 b 並用holes取代,figure 2 b 同理,c2也具有相似的步驟,在c2中找到 v1 a v1 ...