Heim > Web-Frontend > js-Tutorial > Eine Einführung in genetische Algorithmen

Eine Einführung in genetische Algorithmen

Christopher Nolan
Freigeben: 2025-02-10 16:09:14
Original
296 Leute haben es durchsucht

An Introduction to Genetic Algorithms

genetische Algorithmen sind ein Programm, das die beste Lösung für das Problem sucht, indem natürliche Evolutionsprozesse wie "Überleben des Fittest", das Chromosomenkreuzung und die Mutation simuliert werden. In diesem Artikel wird kurz die Schreibmethoden genetischer Algorithmen vorgestellt, einige wichtige Faktoren erörtert, die beim Schreiben Ihrer eigenen Algorithmen berücksichtigt werden müssen, und einige Beispiele für praktische Anwendungen genetischer Algorithmen angeben.

Schlüsselpunkte

  • genetische Algorithmen simulieren evolutionäre Prozesse wie "Überleben der Stärksten" und verwenden Mechanismen wie Selektion, Crossover und Mutation, um die optimalen Lösungen für komplexe Probleme zu finden.
  • In genetischen Algorithmen wird die potenzielle Lösung als Chromosomen ausgedrückt, und ihre Anwendbarkeit wird durch eine Fitnessfunktion bewertet, die die Wahrscheinlichkeit bestimmt, dass sie für die Reproduktion ausgewählt wird.
  • Der Crossover -Prozess kombiniert Merkmale aus einem Paar elterlicher Lösungen, um neue Nachkommen zu erstellen, während Variationen zufällige Veränderungen in den Nachkommen einführt, wodurch die genetische Vielfalt aufrechterhalten und möglicherweise neue Lösungen entdeckt werden.
  • Da genetische Algorithmen große und komplexe Lösungsräume effektiv erforschen können, sind sie sehr effektiv für Probleme, die bei herkömmlichen Such- und Optimierungsmethoden schwer zu lösen sind.
  • Die praktischen Anwendungen genetischer Algorithmen reichen von der Gestaltung von Antennen mit verbesserten Leistungsmerkmalen bis hin zur Optimierung des Webdesigns, was ihre Vielseitigkeit und Leistung bei der Lösung praktischer Probleme veranschaulicht.

Unbekannte Informationen

Die Zeit beträgt 2369 Jahre und Menschen haben sich auf dem Meer der Sterne ausgebreitet. Sie sind ein junger und intelligenter Arzt, der in einer geschäftigen Tiefensternbasis stationiert ist und mit interstellaren Reisenden, Händlern und gelegentlichen Outlaws gefüllt ist. Kurz nach Ihrer Ankunft interessierte sich ein Ladenbesitzer an der Basis für Sie. Er behauptet, er sei nur ein einfacher Schneider, aber Gerüchte sagen, er sei ein Geheimagent, der für ein besonders böses Regime arbeitet.

Sie beginnen jede Woche zusammen zu Mittag zu essen und über Themen von Politik bis Gedichten zu diskutieren. Auch nach ein paar Monaten sind Sie sich immer noch nicht sicher, ob er romantische Gefühle ausdrückt oder Geheimnisse nimmt (Sie haben sicherlich keine Geheimnisse). Vielleicht beides.

Eines Tages beim Mittagessen forderte er Sie heraus: "Ich habe eine Nachricht, die Sie sagen sollten, lieber Arzt! Ich kann Ihnen sicher nicht sagen, was es ist. Aber ich sage Ihnen, es sind 12 Charaktere lang. Diese Charaktere können irgendjemand sein Buchstaben, Platz oder Interpunktion

Sie kehrten ins Büro in der medizinischen Kabine zurück und überlegten immer noch, was er gerade gesagt hat. Plötzlich gab Ihnen ein Gensequenzierungssimulationsexperiment, das Sie zuvor auf einem nahe gelegenen Computer durchgeführt hatten, eine Idee. Sie sind kein Kennwortentschlüsselungsexperte, aber vielleicht können Sie Ihr Fachwissen in der Genetik verwenden, um seine Informationen zu entschlüsseln!

Einige Theorien

Wie ich zu Beginn erwähnt habe, ist ein genetischer Algorithmus ein Programm, das Operationen verwendet, die die Entwicklung nach Lösungen vorantreiben. Nach vielen Iterationen wählt der Algorithmus die besten Kandidaten aus einer Reihe möglicher Lösungen aus, rekombiniert sie und prüft, welche Kombinationen es näher an der Lösung bringen. Arme Kandidaten werden verworfen.

In der obigen Szene kann jeder Charakter in der geheimen Nachricht A-Z, Raum oder grundlegende Interpunktion sein. Angenommen, dies gibt uns die folgenden 32 Zeichen "Alphabet": Abcdefghijklmnopqrstuvwxyz -.,!? sie sind korrekt. Es dauert zu lange, um jede Möglichkeit zu überprüfen. Stattdessen wählt der genetische Algorithmus zufällig 12 Zeichen aus und bittet den Schneider/Spion, wie nahe das Ergebnis an seinen Informationen liegt. Dies ist effektiver als Brute Force-Suche, da die Punktzahlen es uns ermöglichen, zukünftige Kandidaten zu optimieren. Durch Feedback können wir die Fitness jeder Vermutung messen und hoffentlich die Zeitverschwendung in einer Sackgasse vermeiden. Angenommen, wir haben drei Vermutungen vorgenommen: Homlk? WSRZDJ, BGK Ka! Der erste Kandidat erzielte 248,2, der zweite betrug 632,5 und der dritte betrug 219,5. Die Art und Weise, wie die Bewertungen berechnet werden, hängt von der Situation ab, die wir später diskutieren werden, aber nun nehmen wir an dasselbe), eine höhere Punktzahl bedeutet eine größere Abweichung. Die Vermutungen mit Punktzahlen von 248,2 und 219,5 liegen näher am Inhalt der geheimen Informationen als die Vermutung mit 635,5. Die zukünftige Vermutung erfolgt durch die Kombination der besten Versuche. Es gibt viele Möglichkeiten, Kandidaten zu kombinieren, aber jetzt betrachten wir einen einfachen Crossover-Ansatz: Jeder Charakter in der neuen Vermutung hat eine 50-50-Wahrscheinlichkeit, die vom ersten oder zweiten Elternkandidaten kopiert wurde. Wenn wir die beiden Vermutungen von Homlk? WSRZDJ und Xelpocv.xlf! bald. Der Nachkommen kann Hallo sein? W.RLD!.

generieren neue Kandidaten durch Crossover

Wenn wir jedoch nur die Werte des übergeordneten Kandidaten verwenden, kann es in mehreren Iterationen ein Problem geben: mangelnde Vielfalt. Wenn wir einen Kandidaten haben, besteht aus allen A und der andere aus allen B, dann bestehen alle durch Crossover erzeugten Nachkommen nur aus A und B. Wenn die Lösung C enthält, wären wir unglücklich.

An Introduction to Genetic Algorithms Um dieses Risiko zu mildern und die Vielfalt aufrechtzuerhalten und gleichzeitig den Umfang der Lösungen einzuschränken, können wir leichte Änderungen vornehmen. Anstatt direkt eine 50-50-Segmentierung durchzuführen, lassen wir eine geringe Wahrscheinlichkeit, einen Wert im Alphabet zu ersetzen. Durch diese Mutation kann die Nachkommen zu Hello World!.

An Introduction to Genetic Algorithms

Mutation hält die Dinge frisch!
Nach den Erwartungen leihen genetische Algorithmen eine große Anzahl von Vokabeln der genetischen Wissenschaft. Bevor wir weiter diskutieren, lassen Sie uns einige Begriffe verfeinern:

  • Allele: Ein Mitglied des genetischen Alphabets. Die Definition von Allele hängt vom Algorithmus ab. Beispielsweise können 0 und 1 Allele von genetischen Algorithmen sein, die zur Verarbeitung binärer Daten verwendet werden, und Algorithmen, die zur Verarbeitung von Codes verwendet werden, können Funktionszeiger usw. verwenden. In unserem geheimen Informationsszenario sind Allele Briefe, Räume und verschiedene Interpunktionsmarken im Alphabet.
  • Chromosom: eine gegebene Allelsequenz; In unserem Szenario sind Homlk? WSRZDJ, Xelpocv.xlf!
  • Gen: Allele an bestimmten Stellen in Chromosomen. Für Chromosomen Homlk? Wsrzdj ist das erste Gen H, das zweite Gen ist o, das dritte Gen ist M und so weiter.
  • Bevölkerung: Eine Sammlung eines oder mehrerer Kandidatenchromosomen, die als Lösung für das Problem vorgeschlagen wurden.
  • Generationen: Bevölkerung während algorithmusspezifischer Iterationen. Kandidaten in einer Generation bieten Gene zur Herstellung der nächsten Generation von Populationen.
  • Fitness: Ein Maß dafür, wie nahe ein Kandidat an der gewünschten Lösung ist. Adaptive Chromosomen übergeben ihre Gene eher an zukünftige Kandidaten, während weniger adaptive Chromosomen eher verworfen werden.
  • Wählen Sie: Der Prozess der Auswahl einiger Kandidaten für die Fortpflanzung (zur Erstellung neuer Kandidatenchromosomen) und anderer Kandidaten wegwerfen. Es gibt eine Vielzahl von Auswahlstrategien, die in der Toleranz für die Auswahl schwächerer Kandidaten variieren.
  • Fortpflanzung: Der Prozess der Kombination der Gene eines oder mehrerer Kandidaten zur Herstellung neuer Kandidaten. Das Spenderchromosom heißt Vater und das produzierte Chromosom wird als Nachkommen bezeichnet.
  • Mutation: Zufällig eingeführte abnormale Gene in Nachkommen, um in vielen Generationen den Verlust der genetischen Vielfalt zu verhindern.

Zeigen Sie mir einen Code!

Ich vermute, dass Sie angesichts der erweiterten Übersicht und der Begriffsliste möglicherweise versucht sind, einen Code zu sehen. Schauen wir uns also einen JavaScript -Code an, der unser geheimes Informationsproblem löst. Während des Lesevorgangs lade ich Sie ein, darüber nachzudenken, welche Methoden als "Boilerplate -Code" angesehen werden können und welche Implementierungen enger mit dem Problem zusammenhängen, das wir lösen möchten:

// ... (Candidate class and GeneticAlgorithm class code as provided in the original text) ...
Nach dem Login kopieren

Wir definieren zuerst ein Kandidatendatenobjekt, um Chromosomen mit ihren Fitnesswerten zu kombinieren. Zur Bequemlichkeit ist auch eine statische Sortiermethode beigefügt.

Als nächstes haben wir eine genetische Klasse, die den genetischen Algorithmus selbst implementiert.

Der Konstruktor verwendet Objekte, die verschiedene für die Simulation erforderliche Parameter lösen. Es bietet eine Möglichkeit, genetisches Alphabet, Zielnachrichten und andere Parameter anzugeben, die die Einschränkungen definieren, unter denen die Simulation ausgeführt wird. Im obigen Beispiel erwarten wir eine Bevölkerung von 100 Kandidaten pro Generation. Aus diesem Grund werden nur 40 Chromosomen zur Reproduktion ausgewählt. Wir haben eine 3% ige Chance, eine Mutation einzuführen, und wenn sie auftritt, werden wir bis zu zwei Gene ändern. Der Wert von MaxGenerationen wird als Schutzmaßnahme verwendet.

Es ist erwähnenswert, dass die Bevölkerung, die Auswahlgröße und die maximale Anzahl von Altersgruppen beim Ausführen des Algorithmus recht klein sind. Komplexere Probleme erfordern möglicherweise einen größeren Suchraum, was wiederum die Speicherverwendung des Algorithmus und die Zeit zum Laufen erhöht. Es wird jedoch dringend empfohlen, kleinere Variantenparameter zu verwenden. Wenn sie zu groß werden, verlieren wir aufgrund von Fitness den Vorteil von Zuchtkandidaten, und die Simulation wird zu einer zufälligen Suche.

Methoden wie Randomint (), Init () und Run () können als Kesselplatte betrachtet werden. Aber nur weil es eine Kesselplatte gibt, heißt das nicht, dass es keinen praktischen Einfluss auf die Simulation hat. Zum Beispiel verwenden genetische Algorithmen Zufälligkeit stark. Während die integrierte Mathematik.Random () -Funktion für unsere Zwecke geeignet ist, benötigen Sie für andere Probleme einen genaueren Zufallsgenerator. Crypto.getrandomvalues ​​() liefert stärkere kryptografische Zufallswerte.

Leistung ist ebenfalls eine Überlegung. Ich bemühe mich, in diesem Artikel klar und leicht zu verstehen, aber denken Sie daran, dass die Operation wiederholt wird. Möglicherweise müssen Sie den Code in einer Schleife mikrooptimieren, effizientere Speicherdatenstrukturen verwenden und den Code in Line investieren, anstatt ihn in Funktionen/Methoden zu trennen, alle ohne Rücksicht auf Ihre Implementierungssprache.

Die Implementierung von CalcFitness (), Select (), Reproce () und sogar Stop () -Methoden ist spezifisch für das Problem, das wir lösen möchten.

calcFitness () gibt einen Wert zurück, der die Fitness eines Chromosoms basierend auf bestimmten erwarteten Kriterien misst - in unserem Fall ist es, wie gut es einer geheimen Nachricht entspricht. Die Berechnung der Fitness ist fast immer situationsspezifisch. Zum Beispiel kann ich den Hamming -Abstand oder den Levinstein -Abstand zwischen zwei Werten berechnen und sogar mehrere Messungen kombinieren. Letztendlich ist es wichtig, dass die Fitnessfunktion nützliche Messungen zurückgibt, die auf dem vorliegenden Problem basieren, nicht nur die Boolesche "Anpassung"/"nicht passend".

select () Methode zeigt eine Elite -Auswahlstrategie - nur die am besten geeigneten Kandidaten in der gesamten Bevölkerung werden für die Zucht ausgewählt. Wie ich bereits erwähnt habe, gibt es andere Strategien wie die Turnierauswahl, die den am besten geeigneten Kandidaten aus dem Satz einzelner Kandidaten in der Bevölkerung und der Boltzmann -Selektion auswählen, die die Auswahl des Drucks der Kandidaten immer größere und größere Kandidaten auferlegt. Der Zweck dieser unterschiedlichen Methoden besteht darin, sicherzustellen, dass Chromosomen die Möglichkeit haben, Gene zu liefern, die sich später als vorteilhaft erweisen können, auch wenn dies möglicherweise nicht sofort ersichtlich ist. Eingehende Beschreibungen dieser und anderer Auswahlstrategien sowie Beispielimplementierungen sind leicht online zu finden.

An Introduction to Genetic Algorithms

Beschreibung verschiedener Auswahlstrategien
Es gibt viele Methoden zum Kombinieren von Genen. Unser Code erstellt Nachkommen mit einheitlicher Crossover, bei denen jedes Gen die gleiche Wahrscheinlichkeit von einem Elternteil ausgewählt hat. Andere Strategien können eher zum Gen eines Elternteils als zum anderen tendieren. Eine weitere beliebte Strategie ist die K-Punkt-Überfahrt, bei der Chromosomen bei K Punkten geteilt werden, was zu 1 Fragmenten führt, die sich zusammenschließen, um Nachkommen zu produzieren. Die Kreuzungen können fest oder zufällig ausgewählt werden.

An Introduction to Genetic Algorithms Beschreibung der K-Punkt-Kreuzungsstrategie

Wir sind nicht auf zwei Elternchromosomen beschränkt; Betrachten Sie einen Algorithmus, der Bilder durch Zeichnen zufälliger Polygone entwickelt. In diesem Fall werden unsere Chromosomen als Bilddaten implementiert. In jeder Generation wird das am besten geeignete Bild aus der Bevölkerung als Eltern ausgewählt, und alle Kinderkandidaten werden erzeugt, indem ihre eigenen Polygone auf die übergeordnete Kopie gezogen werden. Elternchromosomen/Bilder sind die eindeutigen Variationen/Zeichnungen des Elternteils.

Praktische Anwendung des genetischen Algorithmus

genetische Algorithmen können sowohl zur Unterhaltung als auch für die Rentabilität verwendet werden. Die beiden beliebtesten Beispiele für die praktische Anwendung genetischer Algorithmen sind die X-Band-Antennen, die von Boxcar 2D und NASA entwickelt wurden.

boxcar 2d ist eine Simulation, die genetische Algorithmen verwendet, um die besten "Autos" zu entwickeln, die durch simuliertes Gelände reisen können. Das Auto besteht aus acht zufälligen Vektoren und verbindet die Räder mit den zufälligen Punkten. Die Website des Projekts finden Sie auf BoxCar2d.com, auf dem kurz den Algorithmus auf seiner About -Seite vorgestellt wird und eine Rangliste enthält, die einige der besten Designs zeigt. Leider verwendet die Site Flash und kann jetzt für viele Personen unzugänglich sein. In diesem Fall können verschiedene Bildschirmaufnahmen auf YouTube gefunden werden, wenn Sie neugierig sind. Möglicherweise möchten Sie auch eine ähnliche (ausgezeichnete) Simulation von Rafael Matsunaga unter Verwendung der HTML5 -Technologie ansehen, die auf rednuht.org/genetic_cars_2 zu finden ist.

An Introduction to Genetic Algorithms

Autos, die in Boxcar 2D entwickelt wurden, Bilder von Boxcar 2D -Rankings
2006 haben die Space Technology 5 Mission der NASA verschiedene neue Technologien im Weltraum getestet. Eine dieser Technologien ist eine neue Art von Antennen, die mit genetischen Algorithmen entwickelt wurde. Das Entwerfen neuer Antennen kann ein sehr teuer und zeitaufwändiger Prozess sein. Es erfordert spezielles Fachwissen und häufig treten Rückschläge auf, wenn Nachfrageänderungen oder Prototypen nicht wie erwartet abschneiden. Die Entwicklung der Evolved Antenne ist kürzer, mit höherer Verstärkung und geringem Stromverbrauch. Der vollständige Text des Papiers über den Entwurfsprozess ist kostenlos online verfügbar (automatisiertes Antennenentwurf mit evolutionären Algorithmen). Genetische Algorithmen wurden auch verwendet, um vorhandene Antennendesigns für eine höhere Leistung zu optimieren.

An Introduction to Genetic Algorithms

Die besten evolutionären Antennen in ihrer Kategorie stammen von automatisierten Antennen -Designpapieren
genetische Algorithmen wurden sogar im Webdesign verwendet! Ein fortschrittliches Projekt von Elijah Mensch (Optimierung des Website -Designs durch Anwendung interaktiver genetischer Algorithmen) verwendet sie, um Nachrichtenartikel -Karussells durch Manipulation von CSS -Regeln und Bewertungsfitness mithilfe von A/B -Tests zu optimieren.

An Introduction to Genetic Algorithms

Das beste Layout für das erste und neunte Generationen, das Bild stammt aus dem Papier auf optimiertem Website -Design
Schlussfolgerung

Bisher sollten Sie ein grundlegendes Verständnis dafür haben, welche genetischen Algorithmen mit ihrem Vokabular vertraut genug sind, um alle Ressourcen zu interpretieren, denen Sie möglicherweise in Ihrer eigenen Forschung begegnen. Das Verständnis von Theorien und Begriffen ist jedoch nur die Hälfte der Arbeit. Wenn Sie vorhaben, Ihren eigenen genetischen Algorithmus zu schreiben, müssen Sie auch Ihr spezifisches Problem verstehen. Bevor Sie beginnen, finden Sie hier einige wichtige Fragen, die Sie sich stellen sollten:

  • Wie repräsentiere ich mein Problem als Chromosom? Was ist mein gültiges Allel?
  • weiß ich, was das Ziel ist? Was ist, wonach suche ich? Ist es ein bestimmter Wert oder eine Lösung mit Fitness, die einen bestimmten Schwellenwert überschreitet?
  • Wie quantifiziere ich die Fitness der Kandidaten?
  • Wie kombiniere und mutiere ich Kandidaten, um neue Kandidatenlösungen zu generieren?

Ich hoffe, ich helfe Ihnen auch, zu verstehen, wie Programme inspiriert werden - nicht nur in Form, sondern auch in Prozess und Funktion. Fühlen Sie sich frei, Ihre eigenen Gedanken im Forum zu teilen.

Häufig gestellte Fragen zu genetischen Algorithmen

  • Was ist ein genetischer Algorithmus (GA)? Genetische Algorithmen sind eine heuristische Suche und Optimierungstechnik, die vom natürlichen Selektionsprozess inspiriert ist. Es wird verwendet, um ungefähre Lösungen für Optimierungs- und Suchprobleme durch die Prinzipien der Simulationsentwicklung zu finden.
  • Wie funktioniert genetische Algorithmen? Genetische Algorithmen arbeiten, indem sie die Populationen von Kandidatenlösungen über aufeinanderfolgende Generationen entwickeln. Das Verfahren umfasst Selektion, Crossover (Rekombination), Mutation und Bewertung von Personen in der Bevölkerung, die darauf abzielen, die Qualität der Lösung iterativ zu verbessern.
  • Welche Arten von Problemen sind genetische Algorithmen geeignet? Genetische Algorithmen werden häufig verwendet und können auf eine Vielzahl von Optimierungs- und Suchproblemen angewendet werden, einschließlich, aber nicht beschränkt auf Planung, Routing, maschinelles Lernen und Funktionsoptimierung.
  • Wie wähle ich Parameter für genetische Algorithmen aus? Parameter wie Bevölkerungsgröße, Variabilität und Crossover -Rate hängen von den Eigenschaften des spezifischen Problems und des Lösungsraums ab. Experiment und Abstimmung sind häufige Praktiken, um die besten Parameterwerte für ein bestimmtes Problem zu finden.
  • Welche Rolle spielt die Fitnessfunktion in genetischen Algorithmen? Die Fitnessfunktion quantifiziert, wie einzelne Lösungen in einem bestimmten Problem abschneiden. Es leitet den Auswahlprozess und erleichtert Lösungen, die positiv zu Optimierungszielen beitragen.

Das obige ist der detaillierte Inhalt vonEine Einführung in genetische Algorithmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage