Information Technology Reference
In-Depth Information
Die Crossover-Arten werden vollständig in der Methode crossover(Indivi-
duum, Crossoverschema) abgearbeitet. Durch den Parameter art wird ausge-
wählt, ob ein One-Point-, Two-Point- oder Uniform-Crossover durchgeführt wird. Weitere
Crossover-Arten sind in der switch -Anweisung zu definieren und damit auszuführen.
Die temporäre Variable temp muss an den Typ der Atome angepasst werden. Gekreuzt
werden das aktuelle Individuum (dessen Methode ausgeführt wird) und das in der Variab-
len übergebene. Zurückgegeben wird nichts, da direkt auf den Individuen operiert wird!
Zufällig werden der oder die Schnittpunkte mit der schon erwähnten nextInt -Methode
festgelegt. Beim Uniform Crossover wird für jedes Atom ein Zufallsexperiment durch-
geführt.
Der Konstruktor erzeugt das Objekt und legt das Array individual[] in der ge-
wünschten Länge an. Die Methode print() zeigt alle Atome sowie deren Fitnesswerte
an. Zur Herstellung einer Kopie des Individuums wird die clone() - Methode ver-
wendet. Zur Erstellung einer Kopie des Individuums muss das Array mit den Atomen
elementweise kopiert werden. Dies ist auch technisch beim Aufruf des Vererbungsschritts
in der Klasse Population bedingt. Hier wird eine Methode aus der Klasse Object
überschrieben, deshalb auch das Casting beim Aufruf. Ebenfalls wird die Klasse Popu-
lation für den Algorithmus benötgt. Ein Objekt dieser Klasse besteht aus einem Array
von Objekten der Klasse Individuum .
Als Vitalfunktionen gelten die Methoden selektieren() und schritt() . Ers-
tere dient zur Auswahl von Elementen zur Reproduktion und letztere zum Ausführen von
Crossover und Mutation. Komplettiert werden diese Vitalfunktionen durch die folgenden
Auswertungsmethoden. In der Methode selektieren() wird zunächst die Gesamt-
fitness als Summe aller Fitnesswerte der vorhandenen Individuen berechnet. Die Variable
cut bekommt dann einen zufälligen Wert zwischen 0 und der Gesamfitness zugewiesen.
Daran anschließend werden die Fitnesswerte aus der Population wieder aufsummiert, al-
lerdings nur bis zu dem Punkt, an dem der cut-Wert erreicht ist. Der Index des Individu-
ums, das erreicht wurde, bevor der Wert überschritten wurde, wird zurückgegeben.
Die Methode schritt() benötigt drei Parameter, nämlich die Variable cross-
overschema , die beim Aufruf von crossover() übergeben werden muss, dazu
crossoverws , also die Wahrscheinlichkeit, mit der überhaupt ein Crossover durch-
geführt wird, und schließlich mutationsws , die Wahrscheinlichkeit, dass ein einzel-
nes Atom mutiert wird (dieser Wert wird an mutieren() weitergegeben). In diesem
Schritt wird zunächst eine neue Population erzeugt, in die als erstes - durch Aufruf von
bester() bestimmt - das beste Individuum kopiert wird. Die folgende Schleife wird
so oft durchlaufen, bis die neue Population gefüllt ist. Zwei Eltern werden selektiert und
in die Variablen kind1 und kind2 kopiert. Diese werden mit der Wahrscheinlichkeit,
die durch crossoverws festgelegt wurde, einem Crossover unterzogen. Nachdem dann
beide Kinder mutiert wurden, wird das Kind mit der besseren Fitness der neuen Popula-
tion zugeschlagen.
Search WWH ::




Custom Search