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.
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: Wir definieren zuerst ein Kandidatendatenobjekt, um Chromosomen mit ihren Fitnesswerten zu kombinieren. Zur Bequemlichkeit ist auch eine statische Sortiermethode beigefügt. 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.
Praktische Anwendung des genetischen Algorithmus
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: 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 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!.
// ... (Candidate class and GeneticAlgorithm class code as provided in the original text) ...
Beschreibung der K-Punkt-Kreuzungsstrategie
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!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Es gibt drei g?ngige M?glichkeiten, HTTP-Anforderungen in Node.js zu initiieren: Verwenden Sie integrierte Module, Axios und Knotenfetch. 1. Verwenden Sie das integrierte HTTP/HTTPS-Modul ohne Abh?ngigkeiten, das für grundlegende Szenarien geeignet ist, jedoch eine manuelle Verarbeitung von Datengen?hten und Fehlerüberwachung erfordert, z. 2.Axios ist eine auf Versprechen basierende Bibliothek von Drittanbietern. Es verfügt über eine kurze Syntax und leistungsstarke Funktionen, unterstützt Async/Auseait, automatische JSON -Konvertierung, Interceptor usw. Es wird empfohlen, asynchrone Anforderungsvorg?nge zu vereinfachen. 3.Node-Fetch bietet einen Stil ?hnlich dem Browser-Abruf, basierend auf Versprechen und einfacher Syntax

JavaScript -Datentypen sind in primitive Typen und Referenztypen unterteilt. Zu den primitiven Typen geh?ren String, Anzahl, Boolesche, Null, undefiniertes und Symbol. Die Werte sind unver?nderlich und Kopien werden bei der Zuweisung von Werten kopiert, sodass sie sich nicht gegenseitig beeinflussen. Referenztypen wie Objekte, Arrays und Funktionen speichern Speicheradressen, und Variablen, die auf dasselbe Objekt zeigen, wirkt sich gegenseitig aus. Typeof und Instanz k?nnen verwendet werden, um die Typen zu bestimmen, aber auf die historischen Probleme der TypeOfnull zu achten. Das Verst?ndnis dieser beiden Arten von Unterschieden kann dazu beitragen, einen stabileren und zuverl?ssigeren Code zu schreiben.

Welches JavaScript -Framework ist die beste Wahl? Die Antwort besteht darin, die am besten geeigneten nach Ihren Bedürfnissen zu w?hlen. 1.React ist flexibel und kostenlos und für mittlere und gro?e Projekte geeignet, für die hohe Anpassungs- und Teamarchitekturf?higkeiten erforderlich sind. 2. Angular bietet vollst?ndige L?sungen, die für Anwendungen auf Unternehmensebene und langfristige Wartung geeignet sind. 3.. Vue ist einfach zu bedienen, geeignet für kleine und mittlere Projekte oder schnelle Entwicklung. Unabh?ngig davon, ob es einen technologischen Stack, die Teamgr??e, der Projektlebenszyklus gibt und ob SSR erforderlich ist, sind auch wichtige Faktoren für die Auswahl eines Rahmens. Kurz gesagt, es gibt keinen absolut besten Rahmen, die beste Wahl ist die, die Ihren Bedürfnissen entspricht.

Hallo, JavaScript -Entwickler! Willkommen in den JavaScript -Nachrichten dieser Woche! Diese Woche konzentrieren wir uns auf: Oracas Markenstreit mit Deno, neue JavaScript -Zeitobjekte werden von Browsern, Google Chrome -Updates und einigen leistungsstarken Entwickler -Tools unterstützt. Fangen wir an! Der Markenstreit von Oracle mit dem Versuch von Deno Oracle, ein "JavaScript" -Marke zu registrieren, hat Kontroversen verursacht. Ryan Dahl, der Sch?pfer von Node.js und Deno, hat eine Petition zur Absage der Marke eingereicht, und er glaubt, dass JavaScript ein offener Standard ist und nicht von Oracle verwendet werden sollte

Versprechen ist der Kernmechanismus für den Umgang mit asynchronen Operationen in JavaScript. Das Verst?ndnis von Kettenanrufen, Fehlerbehebung und Kombination ist der Schlüssel zum Beherrschen ihrer Anwendungen. 1. Der Kettenaufruf gibt ein neues Versprechen durch .then () zurück, um asynchrone Prozessverkampferung zu realisieren. Jeder. Dann () erh?lt das vorherige Ergebnis und kann einen Wert oder ein Versprechen zurückgeben; 2. Die Fehlerbehandlung sollte .Catch () verwenden, um Ausnahmen zu fangen, um stille Ausf?lle zu vermeiden, und den Standardwert im Fang zurückgeben, um den Prozess fortzusetzen. 3. Combinatoren wie Promise.All () (erfolgreich erfolgreich erfolgreich nach allen Erfolg), Versprechen.Race () (Die erste Fertigstellung wird zurückgegeben) und Versprechen.Allsettled () (Warten auf alle Fertigstellungen)

Cacheapi ist ein Tool, das der Browser zur Cache -Netzwerkanfragen bereitstellt, das h?ufig in Verbindung mit dem Servicearbeiter verwendet wird, um die Leistung der Website und die Offline -Erfahrung zu verbessern. 1. Es erm?glicht Entwicklern, Ressourcen wie Skripte, Stilbl?tter, Bilder usw. Zu speichern; 2. Es kann die Cache -Antworten entsprechend den Anfragen übereinstimmen. 3. Es unterstützt das L?schen bestimmter Caches oder das L?schen des gesamten Cache. 4.. Es kann Cache -Priorit?ts- oder Netzwerkpriorit?tsstrategien durch Servicearbeiter implementieren, die sich auf Fetch -Ereignisse anh?ren. 5. Es wird h?ufig für die Offline -Unterstützung verwendet, die wiederholte Zugriffsgeschwindigkeit, die Vorspannungs -Schlüsselressourcen und den Inhalt des Hintergrundaktualisierungss beschleunigen. 6. Wenn Sie es verwenden, müssen Sie auf die Cache -Versionskontrolle, Speicherbeschr?nkungen und den Unterschied zum HTTP -Caching -Mechanismus achten.

JavaScript-Array-integrierte Methoden wie .Map (), .filter () und .Reduce () k?nnen die Datenverarbeitung vereinfachen. 1) .Map () wird verwendet, um Elemente eins in eins um Neuarrays zu konvertieren; 2) .Filter () wird verwendet, um Elemente durch Bedingung zu filtern; 3) .Reduce () wird verwendet, um Daten als einzelner Wert zu aggregieren; Missbrauch sollte bei der Verwendung vermieden werden, was zu Nebenwirkungen oder Leistungsproblemen führt.

Die Ereignisschleife von JavaScript verwaltet asynchrone Vorg?nge, indem sie Call -Stapel, Webapis und Task -Warteschlangen koordinieren. 1. Der Anrufstack führt synchronen Code aus, und wenn er auf asynchrone Aufgaben begegnet, wird er zur Verarbeitung an Webapi übergeben. 2. Nachdem das Webapi die Aufgabe im Hintergrund abgeschlossen hat, wird der Rückruf in die entsprechende Warteschlange (Makroaufgabe oder Micro -Aufgabe) eingebaut. 3. Die Ereignisschleife prüft, ob der Anrufstapel leer ist. Wenn es leer ist, wird der Rückruf aus der Warteschlange herausgenommen und zur Ausführung in den Anrufstapel geschoben. V. 5. Das Verst?ndnis der Ereignisschleife hilft zu vermeiden, den Haupt -Thread zu blockieren und die Codeausführungsreihenfolge zu optimieren.
