Ich versuche, einen genetischen Algorithmus zur Maximierung einer Funktion von n Variablen zu implementieren. Das Problem ist jedoch, dass die Fitnesswerte negativ sein können und ich nicht sicher bin, wie ich mit negativen Werten umgehen soll, wenn ich eine Auswahl mache. Ich lese diesen Artikel Lineare Fitness-Skalierung im genetischen Algorithmus produziert negativ Fitnesswerte aber mir ist nicht klar, wie die negativen fitness-werte behandelt wurden und wie die Skalierungsfaktoren a und b berechnet wurden.
Auch aus dem Artikel weiß ich, dass die Auswahl des Rouletterads nur für einen positiven Fitnesswert funktioniert. Ist das auch bei der Turnierauswahl so?
Die Turnierauswahl ist von diesem Problem nicht betroffen. Es vergleicht einfach die Fitnesswerte einer gleichmäßig abgetasteten Teilmenge der Größe n der Population und nimmt diejenige mit dem besten Wert. Natürlich bedeutet dies, dass, wenn Sie ohne Wiederholung sampeln, die schlechtesten n-1 Personen niemals ausgewählt werden. Wenn Sie mit Wiederholung probieren, haben sie eine Chance ausgewählt zu werden.
Wie bei der proportionalen Auswahl: Es funktioniert nicht mit negativen Fitnesswerten. Sie können nur "Windowing" oder "Skalierung" Ihrer Fitnesswerte anwenden, in welchem Fall sie wieder funktionieren.
Ich habe einmal einige Stichprobenmethoden programmiert > als Erweiterung Methoden für C # IEnumerable unter ihnen ist eine SampleProportional und SampleProportionalWithoutRepetition-Erweiterung-Methode. Sie sind Teil von HeuristicLab unter GPL-Lizenz.
Wenn Sie negative Werte haben, können Sie versuchen, den kleinsten Fitnesswert in Ihrer Population zu finden und jedes Gegenteil zu seinem Gegenteil hinzufügen. Auf diese Weise haben Sie keine negativen Werte mehr, während die Unterschiede zwischen den Fitnesswerten gleich bleiben.
Tags und Links genetic-algorithm