3

我在理解算法時遇到了問題。這裏是最流行的在線看到的遺傳算法輪盤選擇

for all members of population 
    sum += fitness of this individual 
end for 

for all members of population 
    probability = sum of probabilities + (fitness/sum) 
    sum of probabilities += probability 
end for 

loop until new population is full 
    do this twice 
    number = Random between 0 and 1 
     for all members of population 
      if number > probability but less than next probability 
      then you have been selected 
     end for 
     end 
    create offspring 
end loop 


for all members of population 
    probability = sum of probabilities + (fitness/sum) 
    sum of probabilities += probability 
end for 

^^^這件作品特別讓我困惑。在一個人羣中,什麼是「概率總和」,甚至是「概率」?這些就像個人在開始時的價值觀?

回答

1

這是一個非常模糊的代碼段。

在第二個代碼塊中,probability是一個附屬於每個成員的變量,而sum of probabilities是整個人口的全局變量。

現在,輪盤賭比喻說的是,整個人口可以表示爲一個輪盤賭輪,並且每個成員的人口在該輪盤賭輪中具有與其相對適合度成比例的切片。該代碼正在做隱喻背後的骯髒工作 - 而不是輪子上的楔子,現在成員在線段[0,1]上用比例間隔表示,這是表示概率的常用方式。

要做到這一點,您在技術上需要兩個數字,一個開始和一個結束,爲每個成員。但第一個成員的開始將是0;第二名成員的開始將是第一名成員的結束;直到最後一個成員,其結束爲1.

這就是代碼所做的事情。 Sum of probabilities從0開始,並且第一次通過循環時,probability就是你直覺上認爲的那樣。它標誌着第一個成員的終點。然後更新「概率之和」。通過循環第二次,「概率」就是你直覺上認爲它會......被「概率之和」轉移。事情就這樣了。

所以第一個循環是將健身值加在一起作爲標準化事物的前奏。你問的第二個循環是規範化和排列單位間隔內的歸一化概率。第三個(最複雜的)循環是挑選兩個隨機數字,將它們與兩個人口成員匹配並匹配它們。 (請注意,假設這些成員處於某種類似數組的格式,以便您可以依據您所滾動的隨機數順序檢查其端點。)

1

的關鍵是

probability = sum of probabilities + (fitness/sum) 

if number > probability but less than next probability 
     then you have been selected 

​​是個人的機會創造後代的測量;它在輪盤上的切片大小。 sum of probabilities是輪盤的總大小。 每個人的probability是它的健身功能。

我發現this link有助於理解算法。

+1

那麼爲什麼算法將概率之和加到(健身/總和)爲每個成員的人口得到概率...概率應該是(健身/總和)儀式? – user1013905