zum Inhalt

Der lise Blog:
Einsichten, Ansichten, Aussichten

Evolutionäre Algorithmen: eine Einführung mit Beispielen genetischer Algorithmen

05. August 2019 von Avatar of KevinKevin

In diesem Blogbeitrag möchte ich einen kurzen Überblick über den Aufbau und die Anwendungsmöglichkeiten evolutionärer Algorithmen geben. Dabei beschränke ich mich auf genetische Algorithmen und werde deren Funktionsweise anhand der biologischen Evolution erklären.

Evolutionäre Algorithmen sind eine Klasse von Optimierungsverfahren, die Prinzipien natürlicher Strukturen und Prozesse nachahmen. Genetische Algorithmen ahmen dabei das Prinzip der biologischen Evolution nach. Um eine Näherungslösung für ein Optimierungsproblem zu finden, werden Evolutionsprinzipien wie zum Beispiel Mutation oder Selektion auf Populationen von Lösungskandidaten angewendet.

Metaheuristiken. Ein allgemeines nicht problemspezifisches und somit generisches Prinzip und Schema zur Entwicklung heuristischer Methoden.

Aufgrund dessen, dass Metaheuristiken ein Optimierungsproblem näherungsweise in mehreren Schritten lösen, eignen sie sich am besten für solche Probleme, bei denen es nur bekannte Algorithmen gibt, die eine Zeitkomplexität haben, welche exponentiell ist.

Biologische Evolution

Die ältesten und beliebtesten Metaheuristiken sind die evolutionären Algorithmen. Sie beruhen im weitesten Sinne auf der von Charles Darwin entwickelten Theorie der biologischen Evolution, die er in seinem wegweisenden Buch “Über die Entstehung der Arten“ vorstellte.

Das Grundprinzip der biologischen Evolution kann so formuliert werden:

Aus zufälliger Variation hervorgehende vorteilhafte Eigenschaften werden durch natürliche Auslese bevorzugt.

D.h., dass Individuen, die vorteilhafte Eigenschaften besitzen, eine bessere Chance haben, sich fortzupflanzen und zu vermehren. Diese veränderten Eigenschaften können durch unterschiedliche Prozesse hervorgerufen werden. Die blinde und rein zufällige Veränderung von Genen wird Mutation genannt. Diese tritt sowohl bei sich sexuell als auch bei sich nicht-sexuell fortpflanzenden Lebensformen auf.

Obwohl der weitaus größere Teil dieser genetischen Veränderungen unvorteilhaft und das Individuum nicht überlebensfähig ist, gibt es auch eine geringe Chance, dass diese Veränderungen zu kleinen Verbesserungen führen. Um dies festzustellen, wird das Individuum in seinem natürlichen Lebensraum einem Test unterzogen. Hat es eine hohe Fitness, so besteht eine gute Chance, zu überleben, sich fortzupflanzen und zu vermehren. Bei einer geringen Fitness sind die Chancen nicht so gut, sodass es selbst und/oder seine Eigenschaften verschwinden. Lebensformen, deren Eigenschaften besser an ihren Lebensraum angepasst sind, haben gewöhnlich im Durchschnitt mehr Nachkommen, um eben diese Eigenschaften mit jeder Generation von Individuen häufiger werden zu lassen. Es ist wichtig zu verstehen, dass eine Eigenschaft nicht an sich vorteilhaft oder nachteilig ist, sondern nur relativ zur Umgebung.

Beispiele biologischer Evolution

Als erstes Beispiel möchte ich hier die dunkle Hautfarbe vieler Menschen nennen, die in der Nähe des Äquators leben. Diese schützt die Haut vor intensiver Sonneneinstrahlung. Wohin sich in Gegenden mit wenig Sonneneinstrahlung die Wahrscheinlichkeit für eine Vitamin-D-Mangelerkrankung erhöht [2] , weil Vitamin D in der menschlichen Haut durch die Einstrahlung von ultraviolettem Licht produziert wird. Menschen mit einer helleren Haut sind davon nicht so sehr betroffen, müssen dafür ihre Haut gegen intensive Sonneneinstrahlung schützen, um das Risiko von vorzeitiger Hautalterung und Hautkrebs zu verringern [3]. Ein weiteres Beispiel ist die Sichelzellenanemie. Dabei handelt es sich um eine Verformung des Hämoglobins, also der roten Blutkörperchen. Diese ist normalwerweise schädlich, da die Fähigkeit zum Sauerstofftransport im Blut verringert wird. Da diese Verformung jedoch bestimmte schützende Eigenschaften gegen eine Infektion mit Malaria hat, kann sie zu einem Vorteil werden, wenn Menschen in einer Gegend leben, in der das Risiko einer Infektion hoch ist [4].

Obwohl die Variationen zufällig sind, ist es die Auslese eben nicht. Sie ist bestimmt durch die Vor- und Nachteile, die eine Eigenschaft für das Überleben und die Fortpflanzung der Individuen mit sich bringt.

Ein Erklärungsansatz für biologische Evolution

Wenn man nur den Zufall bei der Variation der Gene betrachtet, die für bestimmte Eigenschaften eines Menschen notwendig ist, kann man zu dem Schluss kommen, dass es eigentlich unmöglich ist, wie sich komplexes Leben auf diesem Planeten entwickelt hat. Der Grund, warum wir die Wahrscheinlichkeit von komplexen und angepassten Lebensformen falsch einschätzen, ist das Modell, welches wir hierfür zugrunde legen: Stellen wir uns einen Kasten mit Autoteilen vor. Wenn wir den Kasten lange genug schütteln, besteht eine gewisse Chance, dass nach einiger Zeit ein fahrtüchtiges Auto in dem Kasten zusammengebaut ist. Dieses Modell des zufälligen Erzeugens macht es extrem unwahrscheinlich, dass etwas annähernd komplexes, geschweige denn ein lebendiger Organismus, entstehen könnte. Dadurch, dass in der Evolution jede Variation sofort einem Test bezüglich seiner Umgebung unterzogen wird und nur die vorteilhaften behalten und erweitert werden, passt das folgende Modell besser: Nehmen wir an, wir möchten Menschen davon überzeugen, dass wir Ergebnisse von Pferderennen vorhersagen können. Wir schicken an 10.000 Personen eine E-Mail, in der wir das Gewinnerpferd im nächsten Pferderennen vorhersagen. In jedem Pferderennen starten zehn Pferde, aber, weil wir natürlich keine Ahnung haben, welches Pferd gewinnen wird, sagen wir den ersten 1.000 Personen vorher, dass das Pferd Nummer 1 gewinnen wird, den nächsten 1.000 Personen, dass Pferd Nummer 2 gewinnen wird, usw. Nachdem das Rennen gelaufen ist, haben wir so auf jeden Fall 1.000 Personen, denen wir das richtige Pferd vorhergesagt haben, während wir die restlichen 9.000 unbeachtet lassen. Wir wiederholen diesen Vorgang mit einem weiteren Pferderennen, wobei wir den ersten 100 Personen (von den 1.000, die nach dem ersten Rennen noch übrig sind) Pferd Nummer 1 vorhersagen, den zweiten 100 Personen Pferd Nummer 2 usw. Nach dem Rennen haben wir 100 Personen, denen wir zweimal das richtige Pferd vorhergesagt haben, während wir die restlichen 900 unbeachtet lassen. Wenn wir eine weitere Runde auf die gleiche Weise durchführen, bleiben 10 Personen, denen wir in drei aufeinander folgenden Rennen das Gewinnerpferd richtig vorhergesagt haben. In einer weiteren E-Mail an diese Personen schlagen wir nun vor, das Gewinnerpferd in einem weiteren Rennen vorherzusagen, doch diesmal verlangen wir eine Gebühr. Versetzen wir uns in die Lage dieser 10 Personen: Sie wissen, dass wir das Gewinnerpferd dreimal in Folge richtig vorhergesagt haben. Die Wahrscheinlichkeit, eine solche Vorhersagegenauigkeit allein durch Raten zu erzielen, ist ein Promille (1 zu 1000) und damit höchst unwahrscheinlich. Folglich könnten diese 10 Personen geneigt sein, zu denken, dass wir über besonderes Wissen aus dem Umkreis der Pferdebesitzer o.ä. verfügen, durch das wir in der Lage sind, das Gewinnerpferd viel besser vorherzusagen, als reines Raten erlauben würde. Sie könnten daher bereit sein, die Gebühr zu bezahlen.

Die Evolution arbeitet im Wesentlichen auf die gleiche Weise. Sie konzentriert sich auf die Erfolge und nicht auf die Misserfolge. Und wir sind geneigt, diese Misserfolge der Evolution ebenfalls zu übersehen, da sie nicht mehr existieren. In den Milliarden von Jahren, seit sich die ersten Zellen formten, konnten sich durch Variation und Selektion kleine Verbesserungen akkumulieren und so komplexes Leben entstehen.

Optimierungsproblem

Dass die biologische Evolution komplexe Lebensformen hervorgebracht hat, ist eine Tatsache. Dabei hat sie schwierige Anpassungsprobleme gelöst. Es liegt also nahe anzunehmen, dass das gleiche Prinzip auch auch angewendet werden kann, um Lösungen zu (komplexen) Optimierungsproblemen zu finden.

Optimierungsproblem. Ein Optimierungsproblem ist ein Paar (Ω, f ), bestehend aus einem (Such-)Raum Ω von potentiellen Lösungen und einer Bewertungsfunktion f : Ω → R die jedem Lösungskandidaten ω ∈ Ω eine Bewertung f ( ω ) zuordnet. Ein Element ω ∈ Ω heißt (exakte) Lösung des Optimierungsproblems (Ω, f ) genau dann, wenn es ein globales Maximum von f ist, d.h., wenn ∀ ω 0 ∈ Ω : f ( ω 0 ) ≤ f ( ω ) .

Obwohl in der Definition ein Maximieren gefordert ist, besteht auch die Möglichkeit, nach einem Minimum zu suchen. Dazu muss man lediglich − f in die Definition einsetzen. Um das explizit zu machen, sprechen wir im Folgenden nur noch von einem globalen Optimum. Es gibt eine ganze Reihe von Anwendungsbereichen für Optimierungsprobleme.

Einige sind hier aufgelistet:

Parameteroptimierung

Hier gilt es, eine Menge von Parametern einer reellwertigen Funktion zu optimieren.

Wegprobleme

Bekannt ist das Problem des Handlungsreisenden.

Pack- und Schnittprobleme

Bekannt ist hier das Rucksackproblem. Praxisrelevanter ist wohl das Schneiderproblem (engl. cutting stock problem)

Anordnungs- und Ortsprobleme

Ein bekanntes Problem dieses Anwendungsbereichs ist das Standortproblem (engl. facility location problem).

Planungsprobleme

Eines unserer Beispiele ist ebenfalls ein Aufgabenplanungsproblem. Hier werden Aufgaben       oder Tätigkeiten einer Ressource zu einem bestimmten Zeitpunkt zugeordnet.

Strategieprobleme

Beispiele sind das iterierte Gefangenendilemma oder andere Modelle der Spieltheorie.

Wenig überraschend werden evolutionäre Algorithmen auch für die biologische Modellierung verwendet. Ein Beispiel ist die Art und Weise, wie bestimmte Arten von Spinnen ihr Netz bauen. Parameter können hier die Anzahl Speichen oder die Winkel der Spirale sein. Bewertet wird ein solches Netz dann hinsichtlich der metabolischen Kosten des Netzbaus und der Wahrscheinlichkeit des Fangs von Insekten.

Optimierungsprobleme können auf unterschiedliche Art und Weise gelöst werden:

Analytische Lösung

Hierbei wird garantiert, dass die gefundene Lösung optimal ist. Für viele praktische Probleme existiert jedoch keine effiziente Methode, um das zu erreichen.

Vollständige Durchforstung

Auch hier wird garantiert eine optimale Lösung gefunden. Aufgrund der Größe des Suchraums vieler Probleme, ist dieses Vorgehen oftmals gar nicht möglich.

(Blinde) Zufallssuche

Statt den gesamten Suchraum zu durchsuchen, werden zufällig einzelne Elemente ausgewählt. Das Ganze ist sehr performant und kann jederzeit unterbrochen werden, hängt jedoch vom puren Zufall ab. Dieses Vorgehen entspricht dem Modell des Kastens mit den Fahrzeugteilen, der geschüttelt wird, um ein fahrtüchtiges Auto zu erhalten.

Geleitete (zufällige) Suche

Hierbei werden die Informationen, die beim Auswerten bestimmter Lösungskandidaten gesammelt werden, um die Wahl des nächsten auszuwertenden Lösungskandidaten zu leiten. Wichtig ist, dass ähnliche Elemente auch ähnlich bewertet werden. Trotz der Informationen ist die Wahl des nächsten Elements nicht deterministisch, wird jedoch durch die vorherige Bewertung eingeschränkt.

Alle Metaheuristiken, evolutionäre Algorithmen eingeschlossen, fallen in die letzte Kategorie. Dadurch bestehen gute Chancen, zufriedenstellende Lösungen zu finden. Diese sind in der Regel nicht optimal, was für viele praktische Anwendungen jedoch vollkommen ausreichend ist.

Begriffe und Konzepte

In diesem Abschnitt möchte ich die Grundbegriffe evolutionärer Algorithmen einführen und diese ihren biologischen Gegenstücken zuordnen.

Begriff

Biologie

Informatik

Individuum

Lebewesen

Lösungskandidat

Chromosom

DNS-Histon-Protein Srang

Folge von Datenobjekten

beschreibt den Bauplan und damit (einige) Eigenschaften

eines Individuums in kodierter Form

meist mehrere Chromosomen je

Individuum

meist nur ein Chromosom je Individuum

Gen

Teil eines Chromosoms

Datenobjekt (z.b. Bit, Zeichen,

Zahl, etc.)

Grundeinheit der Vererbung, die eine (Teil-)Eigenschaft eines Individuums bestimmt

Allel

Ausprägung eines Gens

Wert eines Datenobjekts

Phänotyp

äußere Erscheinung eines Lebewesens

Implementierung / Anwendung eines Lösungskandidaten

Genotyp

genetische Ausstattung eines

Lebewesens

Kodierung eines Lösungskandidaten

Population

Menge von Lebewesen

Multimenge von Chromosomen

Generation

Population zu einem Zeitpunkt

Population zu einem Zeitpunkt

Reproduktion

Erzeugen von Nachkommen aus einem oder mehreren Elternorganismen

Erzeugen von (Kind-)Chromosomen aus einem oder mehreren (Eltern-)Chromosomen

Fitness

Eignung / Anpassung eines Lebenwesens

Eignung / Güte eines Lösungskandidaten

bestimmt Überlebens und Reproduktionschancen

 

Aufbau evolutionärer Algorithmen

Kodierung der Lösungskandidaten

Da wir die Population von Lösungskandidaten weiterentwickeln wollen, benötigen wir eine geeignete Repräsentation. Dies kann einer der schwierigsten und am besten durchdachten Schritte sein, da hiervon nicht nur die Größe des Suchraums abhängt, sondern auch die Wirksamkeit des evolutionären Algorithmus. Das macht die Kodierung auch sehr problemspezifisch, weshalb ich diese in den Beispielen noch einmal detailliert diskutiere. Es gibt im Grund drei wünschenswerte Eigenschaften, die eine Kodierung mitbringen sollte:

  • Ähnliche Phänotypen sollten durch ähnliche Genotypen kodiert werden (Hamming-Klippen).
  • Ähnlich kodierte Lösungskandidaten sollten ähnliche Fitness haben (Epistasie).
  • Soweit möglich, sollte der Suchraum Ω unter den verwendeten genetischen Operatoren abgeschlossen sein.

Erzeugen einer Anfangspopulation

Bei der Anfangspopulation handelt es sich um Lösungskandidaten, die in Form der darzustellenden Chromosomen erzeugt werden. Oftmals handelt es sich hier um Zufallsfolgen. Je nach zu lösendem Problem können hier auch kompliziertere Methoden nötig sein. Besonders, wenn die Lösungskandidaten bestimmte Nebenbedingungen erfüllen müssen.

Fitness und Selektion

Die Fitness-Funktion ahmt die Umgebung der biologischen Evolution nach. Oftmals ist diese mit der zu optimierenden Funktion identisch. Sie kann jedoch auch zusätzliche Elemente enthalten, wie zum Beispiel einzuhaltende Nebenbedingungen oder zusätzliche wünschenswerte Eigenschaften.

Die Auslese der biologischen Evolution wird durch eine Methode zur Auswahl der Lösungskandidaten gemäß ihrer Fitness simuliert. Eine einfache Methode ist, die Fitness in eine Selektionswahrscheinlichkeit umzurechnen, welche dann genutzt wird, um zu entscheiden, welche Individuen ohne Änderung in die nächste Generation übernommen werden.

Genetische Operatoren (Mutation und Crossover)

Die Zufällige Variation von Chromosomen wird durch sogenannte genetische Operatoren implementiert. Der Mutationsoperator verändert beispielsweise zufällig einzelne Gene, während der Crossover-Operator ganze Teile der Elternchromosomen austauscht, um die Kinder zu erzeugen. Je nach Problemstellung kann auf diese Operatoren auch einige Mühe verwendet werden. Besonders im Zusammenhang mit der gewählten Codierung.

Beispielanwendungen

Optimierung von Ablaufplänen in Fertigungsstraßen

Ich beginne mit dem Beispiel, welches wohl am nächsten an der Praxis und gleichzeitig das am einfachsten zu implementierende ist. Wir definieren das Problem wie folgt:

Diese Problembeschreibung in der α | β | γ-Notation sagt aus, dass wir mehrere parallele Maschinen M haben, auf denen Job j ausgeführt werden kann. Und als Bedingung soll die Zykluszeit Cmax minimiert werden. Diese ist folgendermaßen definiert.

Ein beispielhaftes Problem mit fünf Jobs und drei Maschinen kann wie in der dargestellten Tabelle aussehen. pjstellt die Bearbeitungszeit eines Jobs dar und Mjauf welchen Maschinen der Job ausgeführt werden kann.

j

pj

Mj

0

1

{0, 1, 2}

1

3

{0, 1, 2}

2

4

{0}

3

2

{0, 1, 2}

4

5

{0, 1}

5

6

{0, 1, 2}

Zur Implementierung in einem evolutionären Algorithmus mit Hilfe einer angepassten Version der GaLib[1] , möchte ich zunächst auf die Problemrepräsentation eingehen. Die Anzahl Gene, welche für die Kodierung verwendet wurden, entspricht der Anzahl Jobs. Jede Maschine m ∈ Mj entspricht einem möglichen Allel. Deshalb besteht ein Genom aus einer Menge von Allel-Sets.

Bei der Implementierung kann eine sogenannte One-Point-Crossover-Funktion verwendet werden. Zur Mutation wird an zufälligen Punkten der Wert verändert. Beides sind Standardoperatoren. Lediglich die Fitnessfunktion benötigte eine eigene Implementierung.

 

Als nächstes muss man sich Gedanken über die Belegung der Parameter machen. Die wichtigsten lauten:

 

NUMBER_POPULATION                                                            Größe der Population pro Generation

NUMBER_GENERATIONS                                                                             Anzahl der Generationen

MUTATION_PROBABILITY                                                      Wahrscheinlichkeit für eine Mutation

CROSSOVER_PROBABILITY                                               Wahrscheinlichkeit für einen Crossover

 

Es ist leicht möglich, Parametereinstellungen zu finden, die zu einer guten Lösung führen. Um jedoch eine möglichst perfekte Parametereinstellung hinsichtlich der Geschwindigkeit und dem passenden Verhältnis von optimalen, guten und schlechten Ergebnissen zu finden, müssen viele Parametereinstellungen durchprobiert werden. Im Folgenden zeige ich, dass dabei schon kleinste Abweichungen potenziell schlechtere Ergebnisse liefern. Dazu wurden die oben genannten Parameter in einer Simulation durchpermutiert. Und zwar in folgenden Intervallen und pro Permutation zehn Durchläufe:

 

NUMBER_POPULATION                                                                    [100;1000] mit Schrittweite 100

NUMBER_GENERATIONS                                                                 [100;1000] mit Schrittweite 100

MUTATION_PROBABILITY                                                                      [0.1;1] mit Schrittweite 0.2

CROSSOVER_PROBABILITY                                                                   [0.1;1] mit Schrittweite 0.2

 

Ein naiver Ansatz ist die Größe der Populationen und die Anzahl der Generationen zu maximieren. Der Zufall wird bei ausreichend langer Laufzeit schon ein ausreichend gutes Ergebnis liefern. Erstrebenswert ist es jedoch, das beste Ergebnis in kürzester Zeit zu bekommen.

Ein etwas aufwendigeres Problem, als das oben gezeigte, besteht aus 30 Jobs und fünf Maschinen. Für diese Problemstellung wurden die Parametereinstellungen und das Ergebnis nach zehn Durchläufen in eine CSV-Datei geschrieben.

Gesucht ist also eine möglichst geringe Fitness und Laufzeit. Deshalb wurden die Daten aufsteigend nach Fitness und Größe der Population sortiert. Dabei konnten folgende Parametereinstellungen abgeschätzt werden, die möglichst häufig den Fitnesswert 16 (geringster aufgetretener Wert) oder 17 (häufigster aufgetretener Wert) hervorgebracht haben.

 

NUMBER_POPULATION                                                                                                           100

NUMBER_GENERATIONS                                                                                                        800

MUTATION_PROBABILITY                                                                                                     0.1

CROSSOVER_PROBABILITY                                                                                                  0.7

 

Allgemein konnte bei den besseren Ergebnissen eine geringe Mutationswahrscheinlichkeit festgestellt werden. Die Crossover-Wahrscheinlichkeit lag verteilt zwischen 0.5 und 0.9. Mit diesen Ergebnissen wurden noch einmal 100 Durchläufe getestet. Außerdem wurden kleinere Abweichungen in den Parametern Crossover, Generation und Population getestet. Es hat sich gezeigt, dass sich die Ergebnisse nach oben hin verschlechtern. Also weniger Lösungen mit einem Cmax von 16 gefunden wurden und noch mehr, welche größer als 17 waren.

 

Das Durchprobieren von so vielen unterschiedlichen Parametern kostet extrem viel Zeit. Es ist also nur für wiederkehrende Probleme geeignet. Durch eine Recherche im Internet oder in entsprechender Literatur kann auch einiges über passende Parameter in Erfahrung gebracht werden. Ansonsten bleibt häufig nur das Ausprobieren und wiederholte Ausführen, um ein besseres Ergebnis zu erreichen. Bei unterschiedlichen Problemgrößen ist es oftmals notwendig, die Parameter anzupassen.

Das N-Damen-Problem

Das N-Damen-Problem besteht aus der Aufgabe, n Damen auf einem NxN Schachbrett anzuordnen. Dabei darf keine Dame, gemäß den Zugregeln beim Schach, so stehen, dass diese eine andere Dame schlagen kann.

Ein bekannter Ansatz dieses Problem zu lösen, ist der Rückverfolgungsalgorithmus (engl. backtracking). Hierbei wird der Lösungsraum mit Hilfe der Tiefensuche vollständig durchsucht. Obwohl dieser Algorithmus bei hinreichend kleinem n sehr effektiv ist, kann es bei größeren n sehr lange dauern. Zum Glück gibt es für dieses Problem auch eine analytische Lösung.

Trotz dieser analytischen Lösung, möchte ich das Problem hier mit einem evolutionären Algorithmus lösen, um auf bestimmte Eigenschaften bei der Modellierung und der Fitnessfunktion einzugehen. Ein erster Ansatz bei der Modellierung wäre es, wenn das Schachbrett als zweidimensionales Array abgebildet wird. Dann lassen wir den Algorithmus die Damen positionieren, um zu prüfen, ob sich mindestens zwei Damen im Weg stehen.

Der zweite Ansatz ist die Abbildung in einem eindimensionalen Array. Die Position im Array (Gen) stellt die Zeile dar und der Wert an dieser Position (Allel) die Spalte. Damit wird nicht nur der Lösungsraum verkleinert, sondern es wird sogar eine Prüfung in der Fitnessfunktion gespart. Und zwar die Prüfung, ob zwei Damen in einer Reihe stehen. Das ist nämlich durch die Datenstruktur sichergestellt. Die Prüfung auf eine gültige Permutation der Werte ist ebenfalls trivial. Bleibt also nur noch die Prüfung auf die Diagonalen. Die Aufgabenstellung lässt zudem, anders als bei dem vorherigen Beispiel mit den Ablaufplänen, eine optimale Lösung erkennen. Eine optimale Lösung ist genau dann gegeben, wenn keine Dame eine andere schlägt. Die Fitnessfunktion also 0 ergibt. Anderenfalls ist keine gültige Lösung gefunden worden. Damit kann dieses Kriterium als Abbruchbedingung implementiert werden.

 

Zusammenfassung

Abschließend lässt sich sagen, dass evolutionäre Algorithmen sehr interessant sind. Allerdings: Wenn es notwendig ist, dass ein evolutionärer Algorithmus in eine Software eingebaut werden soll, welche von einem Endanwender benutzt wird, dann sollten die beiden folgenden Punkte beachtet werden:

  1. Die Problemgröße muss gleich bleiben. Dem Anwender der Software ist nicht zuzumuten, dass er eigenständig die Parameter einstellt. Solange diese also nicht von der Problemgröße abhängen, ist der Einsatz nicht möglich.
  2. Der zweite Punkt ist, dass der Algorithmus im Browser laufen muss. Die meisten neuen Anwendungen sind browserbasiert. Die meisten Backends sind möglichst klein dimensioniert und besitzen nicht die Rechenkraft, eine größere Simulation durchzuführen. Außerdem haben wir im Frontend mehr Möglichkeiten, um dem Anwender Rückmeldungen zum aktuellen Stand der Simulation zu geben.

 

Literatur

  1. Charles Darwin. The origin of species: By means of natural selection of the preservation of favoured races in the struggle for life. Kennebec Large Print, 2010.

  2. Susan S. Harris. Vitamin D and African Americans. The Journal of Nutrition, 136(4):1126–1129, 04 2006.

  3. Michaela Brenner and Vincent J. Hearing. The protective role of melanin against uv damage in human skin†. Photochemistry and Photobiology, 84(3):539–549, 2008.

  4. Michael Aidoo, Dianne J Terlouw, Margarette S Kolczak, Peter D McElroy, Feiko O ter Kuile, Simon Kariuki, Bernard L Nahlen, Altaf A Lal, and Venkatachalam Udhayakumar. Protective effects of the sickle cell gene against malaria morbidity and mortality. The Lancet, 359(9314):1311–1312, 2002.

  5. GALib: http://lancet.mit.edu/ga/

Foto: Billion Photos, shutterstock.com

Newsletter-Anmeldung

Newsletter-Anmeldung
* Dieses Formular speichert Ihre E-Mail-Adresse. Weitere Informationen in unseren Datenschutzbestimmungen.