Sorum ile bağlantılıdır bu bir: Roulette-wheel selection in Genetic algorithm. Population needs to be sorted first? bunun için rulet çarkı seçimini organize yolu nedir nüfus sıralamak yoksa? Şüphesiz, şimdi lineer bir şekilde aramak zorunda. Bu dava için C++ veya Java'da herhangi bir kod parçacığınız var mı?nasıl rulet çarkı seçimi genetik algoritma asortisiz nüfus için organize edilmelidir?
cevap
nüfus hiç sıralanabilir gerekmez - rulet seçimi anahtarı, belirli bir bireyin olasılık onun fitness orantılıdır üreme seçilme olmasıdır.
şu şekilde uyumu yapılmıştır ile, bir sıralanmamış nüfusu olduğunu varsayalım:[12, 45, 76, 32, 54, 21]
rulet seçimini gerçekleştirmek için, sadece aralık 0 (nüfusun uygunluk toplamı) 240 için rastgele bir numara seçmek gerekir. rasgele sayı daha az ya da sıfıra eşit olana kadar sonra, listedeki ilk eleman başlayarak her bireyin formunu çıkarılır.
Step 1: 112 - 12 = 100. This is > 0, so continue.
Step 2: 100 - 45 = 55. This is > 0, so continue.
Step 3: 55 - 76 = -21. This is <= 0, so stop.
nedenle, üreme bireysel 3. belirleyin: rastgele 112 almak Yani, yukarıdaki durumda, biz aşağıdakileri yapın. Bunun, nüfusun hiç sıralanmamasını gerektirmediğini unutmayın.
Yani, pseudocode, bu aşağı kaynar: Nihai doğrultusunda - 1
(döngü son yineleme içinde yapılabilir biz ettik çünkü rağmen oluyor increment i
karşı koymak olduğunu
let s = sum of population fitness
let r = random number in range [0, s].
let i = 0.
while r > 0 do:
r = r - fitness of individual #i
increment i
select individual #i - 1 for reproduction.
Not İstediğimiz bireyi bulduk, bu sayede artar).