Frage

Etwas ziemlich ärgerlich in der Evolutions Computing ist, dass leicht unterschiedliche und überlappende Konzepte dramatisch unterschiedliche Namen wählen neigen. Meine letzte Verwirrung, weil dieser ist, dass Gen-Expression-Programmierung sehr ähnlich scheint kartesische-genetische Programmierung.

  1. (wie) Sind diese grundsätzlich unterschiedliche Konzepte?
  2. Ich habe gelesen, dass indirekte Codierung von GP Anweisungen ist eine effektive Technik (beide GEP und CGP tun). Hat es eine Art von Konsens erreicht worden, dass indirekte Codierung klassische Baumscheiben GP veraltet ist?
War es hilfreich?

Lösung

Nun, so scheint es, dass es ein Unterschied zwischen Genexpression Programmierung (GEP) und kartesischer genetischer Programmierung (CGP oder was ich sehe wie klassische genetische Programmierung), aber der Unterschied könnte mehr hyped up sein als es wirklich sein sollte. Bitte beachten Sie, dass ich noch nie GEP verwendet, so dass alle von mir auf meiner Erfahrung mit CGP basieren.

In CGP gibt es keinen Unterschied zwischen Genotyp und Phänotyp, in anderen Worten: wenn man sich die „Gene“ eine CGP freut Sie auch in ihrem Ausdruck. Es gibt keine Codierung hier, das heißt der Ausdrucksbaum ist das Gen selbst.

GEP der Genotyp in einem Phänotyp exprimiert wird, so dass, wenn Sie an die gesuchte Gene Sie nicht ohne weiteres wissen, was der Ausdruck aussehen wird. Der "Erfinder" von GP, ??Cândida Ferreira, hat geschrieben, um ein wirklich gutes Papier und es gibt einige andere Ressourcen die versuchen, einen kürzeren Überblick über das gesamte Konzept zu geben.

sagt Ferriera, dass die Vorteile sind „offensichtlich“, aber ich sehe nichts wirklich nicht, dass unbedingt GEP besser als CGP machen würde. Offenbar ist GEP multigenic, was bedeutet, dass mehrere Gene, die in der Expression eines Merkmals beteiligt sind (d.h. ein Ausdruck Baum). In jedem Fall wird die Fitness auf dem Baum ausgedrückt berechnet, so dass es nicht wie GEP scheint sie etwas zu tun, die Fitness zu erhöhen. Was der Autor Ansprüche ist, dass GEP die Geschwindigkeit erhöht, die Fitness erreicht wird (dh in weniger Generationen), aber ehrlich gesagt Sie einen anderen Algorithmus zur Auswahl, indem er nur dramatische Leistungsverschiebungen von einem CGP sehen können, eine andere Turnierstruktur, Spaltung der Bevölkerung in Stämme, Proben zwischen den Stämmen der Migration, einschließlich der Vielfalt in die Fitness, etc.

Auswahl:

  • zufällig
  • Roulette-Rad
  • top-n
  • Nehmen Sie eine halbe
  • etc.

Turnier Frequenz:

  • einmal pro Epoche
  • einmal pro jeder Dateninstanz
  • einmal pro Generation.

Turnierstruktur:

  • Nehmen Sie 3, töten 1 und ersetzen Sie es mit dem Kind von den beiden anderen.
  • Sortieren alle Personen in dem Turnier von Fitness, die untere Hälfte töten und es mit den Nachkommen der oberen Hälfte ersetzen (wobei niedrigeren schlechte Fitness ist und die obere ist besser Fitness).
  • Randomly Personen aus dem Turnier holen, um die überschüssigen Individuen zu paaren und zu töten.

Tribes
Eine Population kann aufgeteilt in Stämme sein, die unabhängig voneinander-andere entwickeln:

  • Migrations- regelmäßig einzelne (n) aus einem Stamm würde zu einem anderen Stamm bewegt werden
  • Die Stämme logisch getrennt sind, so dass sie wie ihre eigenen abgegrenzte Populationen sind in getrennten Umgebungen ausgeführt werden.

Diversity Fitness
Incorporate Vielfalt in die Fitness, wo man, wie viele Personen zählt den gleichen Fitness-Wert hat (also wahrscheinlich den gleichen Phänotyp haben) und Sie ihre Fitness durch einen anteiligen Wert bestrafen: Je mehr Personen mit dem gleichen Fitness-Wert ist, desto mehr Gebühren für diejenigen Personen. Auf diese Weise Proben mit einzigartigen Phänotypen werden ermutigt, daher wird es viel weniger Stagnation der Bevölkerung sein.

Das sind nur einige der Dinge, die stark die Leistung eines CGP beeinflussen können, und wenn ich stark sage, meine ich, dass es in der gleichen Reihenfolge ist oder größer als Ferriera Leistung. Also, wenn Ferriera tat nicht basteln mit diesen Ideen zu viel, dann konnte sie viel langsamer Leistung der CGPs gesehen haben ... vor allem, wenn sie nichts zu bekämpfen Stagnation zu tun haben. So würde ich vorsichtig sein, wenn Lesung durchführenance Statistiken über GEP, weil die Leute manchmal für alle „Optimierungen“ da draußen zu Konto fehlschlagen.

Andere Tipps

Im Allgemeinen ist GEP von GP einfacher. Angenommen, Sie haben die folgenden Knoten in Ihrem Programm ermöglichen: Konstanten, Variablen, +, -, *, /, wenn ... Für jeden dieser Knoten mit GP müssen Sie die folgenden Operationen erstellen: - randomize - mutieren - Crossover - und wahrscheinlich auch andere genetische Operatoren als auch

In GEP für jeden dieser Knoten nur eine Operation erforderlich ist, umgesetzt werden: deserialize, die Anordnung von Zahlen (wie Doppel in C oder Java) hat, und gibt den Knoten. Es ähnelt Objekt Deserialisierung in Sprachen wie Java oder Python (der Unterschied, dass die Deserialisierung ist Sprachen Anwendungen Bytefeldgruppen bei der Programmierung, wo wir hier Arrays von Zahlen haben). Auch diese ‚deserialize‘ Operation muss nicht vom Programmierer implementiert wird. Es durch einen generischen Algorithmus implementiert werden kann, so wie es in Java oder Python Deserialisierung getan

Diese Einfachheit von einem Standpunkt aus kann die besten Lösung macht die Suche weniger erfolgreich, aber von den anderen Seite: erfordert weniger Arbeit von Programmierern und einfacheren Algorithmen ausführen kann schneller (einfacher zu optimieren, mehr Code und Daten passen in CPU-Cache, und bald). Also ich würde sagen, dass GEP ist etwas besser, aber natürlich die definitive Antwort auf Problem abhängt, und für viele Probleme kann das Gegenteil der Fall sein.

Es scheint eine gewisse Verwirrung in diesen Antworten zu sein, die geklärt werden müssen. Cartesianischen GP unterscheidet sich von klassischen GP (auch bekannt als Baum-basierte GP) und GEP. Auch wenn sie viele Konzepte und nehmen Inspiration aus den gleichen biologischen Mechanismen teilen, die Darstellung der Individuen (Lösungen) variiert.

CGP die Darstellung (Mapping zwischen Genotyp und Phänotyp) ist indirekt, mit anderen Worten, nicht alle Gene in einem CGP-Genom wird in der phenome (ein Begriff, auch in GEP und vielen anderen gefunden) ausgedrückt werden. Die Genotypen können in einem Gitter oder Array von Knoten kodiert werden, und die sich ergebende Programmdiagramm ist die Expression von aktiver Knoten nur.

GEP die Darstellung ist auch indirekt, und in ähnlicher Weise nicht alle Gene in ausgedrückt werden die Phänotyp. Die Darstellung ist in diesem Fall sehr verschieden von treeGP oder CGP, aber die Genotypen sind auch in ein Programm Baum ausgedrückt. Meiner Meinung nach GEP ist eine elegante Darstellung, einfacher zu implementieren, sondern leidet auch unter einigen Mängeln wie: Sie haben die entsprechenden Schwanz und Kopfgröße zu finden, das Problem spezifisch ist, ist die mnltigenic Version ein bisschen Zwang Klebstoff zwischen Ausdrucksbäumen und es hat schließlich zu viel aufblasen .

Unabhängig davon, welche Darstellung besser sein kann als die anderen in bestimmten Problembereich, sie sind universell, so lange für alle Domain angewendet werden, wie Sie es kodieren kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top