Information Technology Reference
In-Depth Information
Wechselspiel zwischen der natürlichen Selektion, die der Vielfalt Grenzen setzt und den
vielen Kräften, die eine immer stärkere Variation begünstigen, führt in der Welt des Le-
bendigen zu einer Komplexität, die zahlreiche Rückkopplungsschleifen beinhaltet und
von der Verlaufsgeschichte und dem Umfeld abhängt (Dobzhansky 1937 ). Trotz dieser zu
erwartenden Komplexität wird in diesem Abschnitt versucht, sich den genetischen Algor-
tihmus durch übersichtliche und handhabbare Implementierungskonzepte zu erschließen.
Insofern ist die basale Lösungsidee, die in der folgenden Implementierung steckt, bewusst
recht einfach gehalten:
Intialisierung : Es wird eine initiale Population von Individuen erzeugt, wobei die In-
dividuen per Zufallsgenerator genetisch vorbelegt werden. Die Größe der Population
liegt im Ermessen des Entwicklers und kann sich von Problemstellung zu Problem-
stellung zwischen einigen wenigen Individuen bis hin zu mehreren tausend Individuen
bewegen.
Evaluation : Jedes Mitglied der Population wird hinsichtlich seiner Fitness in Bezug auf
die Lösungsnähe bewertet. Diese Fitness orientiert sich an der Nähe zwischen Problem-
stellung und Lösungsnähe des Individuums.
Selektion : Unabhängig der Vielzahl an möglichen Selektionsstrategien wird in dieser
Implementierung das jeweils fitteste Individuum zur Beeinflussung der nächste Gnene-
ration ausgewählt.
Crossover : Neue Individuen werden erzeugt, indem die hierzu vorgesehenen Individu-
en aus der Kreuzung von Eltern hervorgehen.
Mutation : Die Mutation der genetischen Ausstattung erfolgt zufallsgesteuert, wobei die
Zufallsrate bewusst niedrig gehalten ist, um große Sprünge bzw. eine zu große Varietät
zwischen den Generationen zu vermeiden.
Wiederholung : Die Lösungssuche basiert auf der Wiederholung der eben beschrieben-
en Schritte und zwar solange, bis die vermeintlich beste Lösung gefunden ist.
Die Abhängigkeiten der einzelnen Klassen zeigt das folgende UML-Diagramm (Abb. 5.4 ).
Die Klassen des eigentlichen Algorithmus sind dabei bewusst recht einfach gehalten und
entsprechen dem Entwicklungsprinzip dieses Buch „keep it simple“. Auf unterster Ebene
wird das Individuum behandelt, es stellt damit die kleinste Einheit (als Objekt) dar. Die
Einheit „Gen“ existiert somit praktisch nur im Rahmen der Fitnessfunktion, nicht aber für
die Rekombination und Mutation.
Ein Objekt der Klasse Individuum besteht aus einem Array von Atomen, die je
nach Codierung beispielsweise Bits (also boolean-Variablen), ganze Zahlen, Fließkom-
mazahlen etc. sind. Zunächst wird hier auf Bits gearbeitet und diese werden als Integer-
Zahl gespeichert. Weiterhin ist jedem Objekt noch eine Fitness zugewiesen (die aber im
Programm nicht direkt, sondern über die Methode getFitness() ausgelesen wird, die
nur bei Bedarf den Wert ermittelt). Die Dimensionierung von individuell[] erfolgt
im Konstruktor. Sowohl die Bewertung als auch die genetischen Operatoren operieren auf
diesem Objekt und sind demnach in der Klasse Individuum definiert.
Search WWH ::




Custom Search