Bild vom Autor
Genetische Algorithmen sind auf natürlicher Selektion basierende Techniken, die zur Lösung komplexer Probleme eingesetzt werden. Sie werden eher als andere Methoden eingesetzt, um zu vernünftigen Lösungen für das Downside zu gelangen, da die Probleme kompliziert sind. In diesem Artikel behandeln wir die Grundlagen genetischer Algorithmen und wie sie in Python implementiert werden können.
Genetische Komponenten
Fitnessfunktion
Die Fitnessfunktion misst die Nähe einer in Betracht gezogenen Lösung zur bestmöglichen Lösung des Issues. Sie gibt für jede Individual in der Inhabitants einen Fitnessgrad an, der die Qualität oder Effizienz der aktuellen Era beschreibt. Dieser Wert definiert die Wahl, während der höhere Fitnesswert eine verbesserte Lösung nahelegt.
Nehmen wir beispielsweise an, wir sind mit der tatsächlichen Funktion f(x) beschäftigt, wobei x eine Reihe von Parametern ist. Der optimale zu findende Wert ist x, sodass f(x) den größten Wert annimmt.
Auswahl
Dabei handelt es sich um einen Prozess, der bestimmt, welche Individuen innerhalb der gegenwärtigen Era bevorzugt werden und sich somit fortpflanzen und zur nächsten Era beitragen. Es lassen sich viele Auswahlmethoden identifizieren, und jede davon hat ihre eigenen Merkmale und geeigneten Kontexte.
- Auswahl des Rouletterads:
Abhängig vom Fitnesslevel des Einzelnen ist auch die Wahrscheinlichkeit der Auswahl des Einzelnen maximal. - Turnierauswahl:
Es wird eine Gruppe nach dem Zufallsprinzip ausgewählt und der Beste von ihnen wird ausgewählt. - Rangbasierte Auswahl:
Die Personen werden nach Health sortiert und die Auswahlchancen werden proportional zu den Fitnesswerten verteilt.
Frequenzweiche
Crossover ist ein grundlegendes Konzept eines genetischen Algorithmus, der auf den Austausch genetischer Informationen zweier Elternindividuen abzielt, um einen oder mehrere Nachkommen zu erzeugen. Dieser Prozess ist dem Crossover und der Rekombination der Biologie in der Natur sehr ähnlich. Unter Anwendung der Grundprinzipien der Vererbung versucht Crossover, Nachkommen zu erzeugen, die wünschenswerte Eigenschaften der Eltern verkörpern und somit eine bessere Anpassung an die nächsten Generationen besitzen. Crossover ist ein relativ weit gefasstes Konzept, das in mehrere Typen unterteilt werden kann, von denen jeder seine Besonderheiten und den Bereich hat, in dem er effektiv angewendet werden kann.
- Einpunkt-Crossover: Auf den Chromosomen der Eltern wird ein Kreuzungspunkt ausgewählt, und tatsächlich findet nur eine Kreuzung statt. Vor dieser Place werden alle Gene vom ersten Elternteil übernommen, und alle Gene ab dieser Place werden vom zweiten Elternteil übernommen.
- Zweipunkt-Crossover: Es werden zwei Bruchpunkte ausgewählt und der Teil zwischen ihnen wird zwischen den beiden Elternchromosomen ausgetauscht. Dies begünstigt auch den Austausch genetischer Informationen im Gegensatz zu einem einzelnen Punkt-Crossover.
Mutation
Bei genetischen Algorithmen ist die Mutation von größter Bedeutung, da sie für Diversität sorgt, die ein entscheidender Faktor ist, wenn eine Konvergenz direkt in Richtung des Bereichs der optimalen Lösungen vermieden werden soll. Daher ermöglicht das Erhalten zufälliger Änderungen in der Zeichenfolge einer einzelnen Mutation dem Algorithmus, in andere Bereiche des Lösungsraums vorzudringen, die er allein durch Crossover-Operationen nicht erreichen kann. Dieser stochastische Prozess stellt sicher, dass sich die Inhabitants auf jeden Fall weiterentwickelt oder ihre Place in den Bereichen des Suchraums ändert, die vom genetischen Algorithmus als optimum identifiziert wurden.
Schritte zur Implementierung eines genetischen Algorithmus
Versuchen wir, den genetischen Algorithmus in Python zu implementieren.
Downside Definition
Downside: Berechnen Sie die spezifische Funktion; f(x) = x^2f(x) = x^2; nur ganzzahlige Werte von x.
Fitnessfunktion: Im Fall eines binären Chromosoms x könnte ein Beispiel für die Fitnessfunktion f(x)= x^2 sein.
def health(chromosome):
x = int(''.be a part of(map(str, chromosome)), 2)
return x ** 2
Populationsinitialisierung
Erzeugen Sie ein zufälliges Chromosom einer bestimmten Länge.
def generate_chromosome(size):
return (random.randint(0, 1) for _ in vary(size))
def generate_population(measurement, chromosome_length):
return (generate_chromosome(chromosome_length) for _ in vary(measurement))
population_size = 10
chromosome_length = 5
inhabitants = generate_population(population_size, chromosome_length)
Fitnessbewertung
Bewerten Sie die Health jedes Chromosoms in der Inhabitants.
fitnesses = (health(chromosome) for chromosome in inhabitants)
Auswahl
Verwenden Sie die Rouletterad-Auswahl, um Elternchromosomen basierend auf ihrer Health auszuwählen.
def select_pair(inhabitants, fitnesses):
total_fitness = sum(fitnesses)
selection_probs = (f / total_fitness for f in fitnesses)
parent1 = inhabitants(random.selections(vary(len(inhabitants)), selection_probs)(0))
parent2 = inhabitants(random.selections(vary(len(inhabitants)), selection_probs)(0))
return parent1, parent2
Frequenzweiche
Verwenden Sie Single-Level-Crossover, indem Sie eine zufällige Crossover-Place in der Zeichenfolge einer Mutter auswählen und alle Genwerte nach dieser Place zwischen den beiden Zeichenfolgen austauschen.
def crossover(parent1, parent2):
level = random.randint(1, len(parent1) - 1)
offspring1 = parent1(:level) + parent2(level:)
offspring2 = parent2(:level) + parent1(level:)
return offspring1, offspring2
Mutation
Implementieren Sie eine Mutation, indem Sie Bits mit einer bestimmten Wahrscheinlichkeit umdrehen.
def mutate(chromosome, mutation_rate):
return (gene if random.random() > mutation_rate else 1 - gene for gene in chromosome)
mutation_rate = 0.01
Einpacken
Zusammenfassend lässt sich sagen, dass genetische Algorithmen konsistent und effizient sind, um Optimierungsprobleme zu lösen, die nicht direkt gelöst werden können, da sie die Evolution der Arten nachahmen. Sobald Sie additionally die Grundlagen von GAs verstanden haben und wissen, wie Sie sie in Python in die Praxis umsetzen können, wird die Lösung komplexer Aufgaben viel einfacher sein. Auswahl-, Crossover- und Mutationsschlüssel ermöglichen es Ihnen, Änderungen an Lösungen vorzunehmen und ständig die besten oder nahezu besten Antworten zu erhalten. Nach der Lektüre dieses Artikels sind Sie bereit, die genetischen Algorithmen auf Ihre eigenen Aufgaben anzuwenden und so verschiedene Aufgaben und Problemlösungen zu verbessern.
Jayita Gulati ist eine Enthusiastin für maschinelles Lernen und technische Autorin, die von ihrer Leidenschaft für die Erstellung von Modellen für maschinelles Lernen angetrieben wird. Sie hat einen Grasp-Abschluss in Informatik von der Universität Liverpool.