Meine Frage ist mit dieser verbunden: Roulette-wheel selection in Genetic algorithm. Population needs to be sorted first? Wenn wir nicht die Bevölkerung sortieren, was ist die Art der Roulette-Rad-Auswahl für sie zu organisieren? Sicherlich müssen wir jetzt linear suchen. Haben Sie in diesem Fall Code-Snippets in C++ oder Java?Wie sollte die Rouletteradauswahl für nicht sortierte Populationen im genetischen Algorithmus organisiert werden?
Antwort
Die Population muss überhaupt nicht sortiert werden - der Schlüssel zur Rouletteauswahl ist, dass die Wahrscheinlichkeit, dass ein bestimmtes Individuum für die Reproduktion ausgewählt wird, proportional zu seiner Fitness ist.
Sagen Sie bitte eine unsortierte Bevölkerung haben, mit Fitnessen wie folgt:
[12, 45, 76, 32, 54, 21]
Roulette Auswahl auszuführen, müssen Sie nur eine Zufallszahl im Bereich von 0 bis 240 (die Summe der Bevölkerung der Fitness) wählen müssen. Beginnen Sie dann bei dem ersten Element in der Liste, subtrahieren Sie die Fitness jedes einzelnen, bis die Zufallszahl kleiner oder gleich Null ist. Also, im obigen Fall, wenn wir nach dem Zufall 112 holen, tun wir folgendes:
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.
Daher wählen wir einzelne # 3 für die Wiedergabe. Beachten Sie, dass die Population nicht sortiert werden muss.
Also, in Pseudo-Code, kocht es auf:
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.
Beachten Sie, dass die - 1
in der letzten Zeile der increment i
entgegenzuwirken ist, die innerhalb der letzten Iteration der Schleife (denn auch getan, obwohl wir haben fand die Person, die wir wollen, erhöht es unabhängig).