Was evolutionäre Algorithmen überhaupt sind und wie sie funktionieren, haben wir in den letzten beiden Artikeln besprochen. Das Problem mit der bisherigen Erklärung von evolutionären Algorithmen ist jedoch, dass sie sehr problemgebunden sind; für jedes zu lösende Problem muss ein neues Programm geschrieben werden, da insbesondere die Mutation und Rekombination von den jeweiligen Eigenschaften der Individuen – der Lösungskandidaten – abhängen. Dass dies eleganter zu lösen ist, habe ich ja schon das letzte Mal angedeutet. Heute möchte ich nun auch darlegen, wie sich das bewerkstelligen lässt.
Rekapitulieren wir noch einmal das Problem. Um die Eigenschaften eines Individuums zu mutieren, muss natürlich jede einzelne Eigenschaft bekannt und zudem vorgegeben sein, wie und vor allem in welchem Rahmen sie geändert werden darf. Auch für die Rekombination – die Verschmelzung der Eigenschaften zweier Individuen zu einem Kind – müssen natürlich sämtliche Eigenschaften der Individuen bekannt sein. Prinzipiell ist das natürlich kein Problem, führt jedoch dazu, dass ein einmal geschriebenes Programm nur zur Lösung exakt des Problems geeignet ist, für welches es entworfen wurde. Hinzu kommt, dass die Rekombination einzelner Eigenschaften zu einer insgesamt geringeren Variabilität zwischen den einzelnen Generationen von Individuen führt. Denken wir etwa an das Beispiel aus dem letzten Artikel: ein Individuum bestand bestand dort aus jeweils 2 Eigenschaften – der vertikalen und der horizontalen Position -, deren Rekombination nur zu ganz bestimmten Kindern führen konnte, wobei pro Elternpaar jeweils nur 2 verschiedene Kinder überhaupt möglich waren. Mit steigender Anzahl von Eigenschaften würde übrigens auch der Programmieraufwand immer weiter ansteigen, da die Funktionen zum Mutieren und Rekombinieren immer mehr Eigenschaften beachten müssten. Ein Ansatz, der sowohl allgemeingültig (und damit problemunabhängig) ist und auch problemlos auf “größere” Individuen angewandt werden kann, wäre also von Vorteil.
Zur Lösung der genannten Problematik(en) haben sich schlaue Informatiker einmal mehr in der Natur umgeschaut und von dort ein “Verfahren” übernommen, welches auch passenderweise bereits die Grundlage für die Evolution liefert: die Genetik. Wie wir alle wissen, werden die Erbinformationen eines jeden Lebewesens durch die DNA gespeichert. Die DNA ist – vereinfacht gesagt – eine Kette, bestehend aus den Nukleinbasen Adenin, Thymin, Cytosin und Guanin, in welcher durch die sequentielle Anordnung der vier Basen Informationen codiert werden (siehe Bild rechts, via Wikipedia). Diese Informationen bestimmen zu einem großen Teil, wie das Lebewesen später aussieht und sich verhält; die DNA bildet somit den Genotyp – die Gesamtheit der Gene – eines Lebewesens und codiert seinen Phänotyp, sein Erscheinungsbild. Denkt man aber einmal genauer darüber nach, so stellt die DNA nichts anderes als eine Kette von Werten dar, wobei jeweils 4 Werte für jede Position in der Kette zur Verfügung stehen. Die DNA ähnelt damit einer einfachen Bitkette, nur dass bei letzterer eben für jede Position nur 2 Werte – 0 und 1 – möglich sind. Und genau hier setzen die evolutionären Algorithmen an.
Die Idee ist relativ einfach: anstatt ein Individuum durch seine konkreten Eigenschaften – seinen Phänotyp – zu beschreiben, werden diese Eigenschaften in Form einer Bitkette codiert. Im Kontext unseres Beispiels aus dem letzten Artikel (wer sich nicht erinnert, möge noch einmal nachlesen) würde das bedeuten, dass die beiden Positionen (die vertikale und die horizontale) einfach durch Bitketten repräsentiert und aneinandergereiht werden. Nehmen wir an, ein Individuum hat die Position (12,7) und die möglichen Positionen befinden sich im Intervall (0,0) bis (15,15); es reichen also 4 Bit aus, um eine Komponente der Position zu beschreiben (wir erinnern uns). Dual codiert erhalten wir damit die Position (1100,0111); in einer einzigen Bitkette zusammengefasst können wir also durch die Kette 11000111 das Individuum beschreiben, welches an Position (12,7) liegt. Diese codierte Bitkette wollen wir – analog zur Genetik – als Genom bezeichnen.
Kommentare (11)