Bergsteigeralgorithmus
Evolution
Basiswissen
Der Bergsteigeralgorithmus ist ein Verfahren der Mathematik, mit dem sich lokale Hochpunkte von Funktionen durch eine Art intelligentes Probieren finden lassen. Dieser Algorithmus wird oft auch als einfachst mögliche Variante eines genetischen Algorithmus betrachtet.
Einführendes Beispiel
Wenn eine biologische Art durch Variation neue Körperformen oder Verhaltensweisen ausprobiert[2], so tut sie das immer unter einem gewissen Risiko. Weniger gut an die Umwelt angepasste Individuen sind wie eine Fehlinvestition in der Wirtschaft. Wenn ein Vogelpaar Nachkommen mit stark unterschiedlichen Flügelformen ausbrütet, und sind manche der Küken letztendlich flugunfähig, so hat dieses Vogelpaar unter bestimmten Umweltbedingungen einen Nachteil gegenüber einem Vogelpaar, dessen Küken alle flugfähig sind. Nach dieser Logik entsteht ein "Druck", dass einerseits neue Flügelformen ausprobiert werden, um mögliche Verbesserungen zu finden. Andererseits aber sollten diese Versuche selbst gleichzeitig auch selbst möglichst erfolgreich sein. Der nötigen Kreativität entgegen wirkt also gleichzeitig ein gewisser Erfolsgdruck. Mit welcher Strategie sollte man also vorgehen?
Eine Möglichkeit, einen Ausgleich zwischen Kreativität und Erfolg herzustellen ist die Strategie, dass man neue Versuche in der Nähe bekannter Erfolge platziert. Man könnte diese Strategie auch als konservativ bezeichnen. Angenommen man kennt den Verlauf einer Funktion nicht, soll aber mit möglichst wenigen Fehlversuchen möglichst hohe Punkte auf dem Graphen finden.[3] Wie würde man dann am besten vorgehen?
Man stelle sich vor, man kennt diesen Graphen noch nicht, aber man will mit stichprobenartigen Abfragen einzelner Punkte möglichst hohe Punkte finden. Man darf nur insgesamt 2 Fehlversuche machen.
- x = -2 -> y = -12 Start: noch 2 Fehlversuche
- x = -1 -> y = 1,5 gut: noch 2 Fehlversuche
- x = 0 -> y = 0 schlecht: noch 1 Fehlversuche
- x = -0,5 -> y = 0,375 gut: noch 1 Fehlversuch
- x = -0,6 -> y = 0,482 gut: noch 1 Fehlversuch
- x = -0,7 -> y = 0,5684 gut: noch 1 Fehlversuch
- x = -0,8 -> y = 0,5684 gut: noch 1 Fehlversuch
- x = -0,9 -> y = 0,5994 gut: noch 1 Fehlversuch
- x = -0,95 -> y ≈ 0,5618 nicht gut: Ende
Um die Logik und die Zwänge bei diesem Verfahren zu verstehen, lohnt es sich, die Versuche selbst einmal durchzuführen. Die Funktionswerte fragt man zum Beispiel mit einem Taschenrechner oder einem zweiten Mitspieler ab. Dazu sind hier drei weitere Funktionen, die im Intervall von x=-2 bis x=2 einen interessanten Kurvenverlauf haben:
- f(x) = x²:x
- f(x) = x+acos(cos(8x))
- f(x) = tan(8x)
Der Bergsteigeralgorithmus als Programm
Der Bergesteigeralgorithmus wird in verschiedenen Abwandlungen häufig als kleines Computerprogramm umgesetzt. Anders als im Beispiel oben, wird für jeden Zeitpunkt nicht immer nur ein Punkt ausprobiert, sondern es wird eine Population von Punkten erzeugt. Die Punkte mit den niedrigsten Funktionswerten, die also tiefer liegen, dürfen sich bei einem Generationswechsel dabei weniger stark vermehren als Punkte mit einem hohen Funktionswert. Der Kern der Programmlogik ist in den folgenden wenigen Zeilen enthalten:
ymax=ay
xmax=ax
if by>ymax then ymax=by : xmax=bx
if cy>ymax then ymax=cy : xmax=cx
ax=xmax
bx=xmax+rand*suchweite
cx=xmax-rand*suchweite
Visualiert man solche Programme, kann man beobachten, wie eine Population von Punkte wie eine wabernde Wolke langsam aber zielstrebig dem steilsten Weg bergauf hin zu einem Gipfel strebt. Den Quellcode für das vollständige Basic-Programm findet man auf der Seite Basic256 Programme genetischer Gipfelsucher 01 ↗
Die vorzeitige Konvergenz
Ein tiefer in die Logik evolutionärer Strategien führendes Problem ist die sogenannte vorzeitige Konvergenz: so bezeichnet man ein Hinlaufen auf eine nur lokal in enger Umgebung gute Lösung, während es etwas weiter entfernt vom momentanten Ort der Suche noch deutlich höhere Punkte gibt. Um das Problem zu verstehen hilft wieder die Metapher vom Wanderer im Nebel.
Man stelle sich vor, man versucht im dichten Nebel den Gipfel eines hohen Berges zu erwandern. Man kennt sich aber in der Landschaft nicht gut aus und weiß auch nicht, wie der Berg im einzelnen geformt ist. Hat der Gipfel dann einen oder mehrere niedrigere Nebengipfel, dann kann es gut sein, dass man im Nebel auf einen Nebelfipfel aufsteigt und von diesem nicht mehr wegkommt. Da man ja immer nur bergauf geht, würde man nicht weitsichtig handelnd erst herab steigen, dann ein Tal oder eine Senke durchschreiten, um letztendlich mit höherem Gewinn einen noch höheren Gipfel zu erklimmen. Tatsächlich droht mit dem Bergsteigeralgorithmus immer, dass man vorzeitig, vor dem Erreichen des wirklich höchsten Gipfels, mathematisch dem absoluten Hochpunkt, auf einem niedrigeren Nebengipfel, einen nur lokalen aber nicht absoluten Hochpunkt verharrt.[4]
Vorzeitige Konvergenz in der Evolution
In der biologischen Evolution veranschaulicht man sich die Suche der Individuen und Arten nach immer besser angepassten Phänotypen, also Körpern und Verhaltensweisen, mit Hilfe einer Erfolgslandschaft.[5] Wenn zum Beispiel die Nachkommen einer Art eine nur geringe Mutationsweite[6] haben, die genetischen Veränderungen also gering sind, entspricht dies einem eher lokalen Suchen in der Nähe der momentanen Aufenthaltspunkte. Siehe auch vorzeitige Konvergenz ↗
Fußnoten
- [1] Der Bergsteigeralgorithmus ist ein "heuristisches Optimierungsverfahren, bei dem die Lösung einer Problemstellung schrittweise jeweils an einer Stelle verändert wird. Dadurch wird die Lösung sukzessive verbessert, bis es keine Änderung mehr gibt, die zu einer Verbesserung führt und so ein Optimum gefunden ist." Als Nachteil wird genannt, dass "das gefundene Optimum wegen der schrittweisen Veränderung an einer Stelle nur lokal und nicht global ist." In: Markus Siepermann, Richard Lackes: der Artikel "Bergsteigeralgorithmus". Gabler Wirtschaftslexikon. Online. Stand vom 9. Februar2018. Online: https://wirtschaftslexikon.gabler.de/definition/bergsteigeralgorithmus-54003/version-277062
- [2] Wenn hier die Rede davon ist, dass die Evolution etwas "ausprobiert" soll das nicht heißen, dass die Evolution ein handelndes Wesen mit eigenem Willen oder Vermutungen ist. Gemeint ist, dass blind durch Zufall beeinflusste Variationen erzeugt werden, die anschließend einer Selektion unterliegen. Dass es keine willentliche Richtung in der Evolution gibt ist einer der Kernideen des Darwinismus ↗
- [3] Als Funktionsgleichung für das einführende Beispiel wurde die Funktion f(x)=-x⁴+0,5x³+2x² verwendet. Sie hat nahe am Koordinatenursprung einen hier interessanten Verlauf. Siehe dazu auch die Seite zu dieser ganzrationen Funktion vierten Gradess f(x)=-x^4+0,5x^3+2x^2 ↗
- [4] Das Verharren, oder das langsam immer bessere und nähere Erreichen eines Ziel bezeichnet man in der Mathematik als Konvergenz ↗
- [5] Der Graph von f(x)=-x⁴+0,5x³+2x² in einem xy-Koordinatensystem kann als Erfolgslandschaft in einem zweidimensionalen Raum aufgefasst werden. Üblicherweise modelliert man Erfolgslandschaften aber als gewellte Flächen in einem xyz-Koordinatensystem. Siehe mehr unter Erfolgslandschaft ↗
- [6] "Die Mutationsweite bestimmt den Wertebereich, in dem die Individuen mutieren." In: Maria Trommer: Beitrag zur Anwendung von