2

我試圖實現輪盤選擇。我發現了一些僞代碼,但是我已經實現了它,但是有一些我不瞭解0健身的基因組。遺傳算法:輪盤選擇

我發現psudocode是這樣

for each genome in population: 
    totalFitness = totalFitness + genome.fitness 

x = random(0, totalFitness) 

currentCount = 0 

for each genome in population: 
    currentCount = currentCount + genome.fitness 
    if currentCount >= x: 
     parent = genome 
     break 

我關心的是以下幾點:說我有5個基因組,其得分如下健身

G1 = 11 
G2 = 0 
G3 = 0 
G4 = 0 
G5 = 0 

基於上述算法,想必只有G1上可能會被選中,這會殺死基因多樣性......我有理解這個權利嗎?

+0

那麼考慮到人口,我會說'G1'贏了,其餘的都輸了,對吧?如果一個基因組完全沒有適應性,爲什麼你會期望它存活? – AakashM

回答

4

是的,你理解正確。如果你想有更好的多樣性,你應該給予個人不完全的信任,當他們不是很好時,不要只是零。

一個簡單的方法來實現這個是通過計數個人的錯誤,然後讓健身1 /(1 +錯誤)。但只是找到一種方法,讓你的個人一些點將解決你的問題。

您可能還想研究縮放適應值。現在選擇的機會與健身成正比。

1

您已理解正確。正如上面的答案所述,改變適應度函數使得0不可能是一個好的解決方案。一般來說,對於這類問題,輪盤選擇並不是最佳選擇。

如果您使用的是遺傳算法,其中某些羣體的得分爲0,但您仍然希望將它們包含在選擇過程中,則應考慮使用不同的選擇方法。基於等級的輪盤賭選擇方法會更好地適應問題。它不僅可以爲每一個基因組提供選擇的可能性,而且還可以阻止離羣值控制輪盤。

與遺傳算法的大多數實現一樣,您的選擇受到問題的嚴重影響。有時候你想要一個適應度爲0的基因組從人羣中挑選出來,然後你就可以像上面那樣使用輪盤賭選擇。

+0

是的。還有其他的選擇機制可以使用。我有*錦標賽選擇*的經驗。 – Matsemann