Skip to content

Instantly share code, notes, and snippets.

@paulsonnentag
Created November 17, 2016 13:15
Show Gist options
  • Save paulsonnentag/51b64bc4871a5316e38f3849141339dd to your computer and use it in GitHub Desktop.
Save paulsonnentag/51b64bc4871a5316e38f3849141339dd to your computer and use it in GitHub Desktop.
Der Genetische Algorithmus besteht aus 5 Schritten
Berechnung der Fitness: für jedes Individum wird der Fitnesswert berechnet, die Fitnessfunktion bewertet, wie gut eine Individum das Optimierungsziel erfüllt
Selektion: Es werden zufällig 2 Individuen zum kreuzen ausgewählt, wobei die Wahrscheinlichkeit ausgewählt zu werden umso höher is je besser der Fitnesswert eines Individums ist
Crossover: Zwei Individuen (A, B) werden mit einander kombiniert um 2 neue Individuen zu erzeugen. Dabei wird ein zufälliger Kreuzungspunkt im Zustandsvektor gewählt an dem dieser gesplitet wird. Es wird dann die erste Hälfte des Zustandvektors von Individum A mit der zweiten Hälfte des Zustandvektors von Individum B kombiniert. Analog funktioniert es mit dem 2. Nachkommen Individum.
Mutation: Mit einer relative kleinen Wahrscheinlichkeit werden 2 Stellen im Zustandsvektor vertauscht
Austausch: Die 2 Individuen mit dem schlechtesten Fitnesswert werden durch die 2 besten Induvidien, welche neu generiert wurden, ersetzt. Voraussetzungen:
Der Zustandsvektor der Induvidien unterscheidet sich von schon existierenden Individuen
Die neuen Induvidien haben einen besseren Fitnesswert als die 2 schlechtesten
Der Zustand ist ein Vektor mit 42 Stellen. Jede Stelle kann entweder 0 oder 1 enthalten. 1 Bedeutet das Merkmal wird in die Bewertung mit einbezogen. 0 Bedeutet das Merkmal wird nicht mit einbezogen.
Eine Mögliche Erweiterung währe hier statt einfachem ein oder aus auch Zwischenwerte zuzulassen, somit könnten die Mermale unterschiedlich stark gewichtet werden.
Fitnessfunktion:
Es werden die selektierten Merkmale für den 1. Abschnitt und den 2. Abschnitt des Musikstücks separat berechnet. Davon berechnet man die Ähnlichkeit (z.B. Euklidische Distanz). Das Inverse davon ist dann der Fitnesswert
Kreuzung
Es wird ein zufälliger Kreuzungspunkt ausgewählt und die Vektoren an dieser Stelle gesplittet und neu kombiniert
Bsp:
a = [x1, x2, x3, x4, x5, .... x42]
b = [y1, y2, y3, y4, y5, .... y42]
^
Kreuzungspunkt
a' = [x1, x2, x3, y4, y5, .... y42]
b' = [y1, y2, y3, x4, x5, .....x42]
Mutation
Zwei Stellen im Zustandsvektor werden vertauscht
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment