Binäre Baumgenetische Programmierung

8

Ich habe gerade angefangen mit Genetische Programmierung und ich habe Probleme, meine Bevölkerung zu initialisieren.

Ich brauche einen Baum, um jede mögliche Lösung darzustellen - Das Problem ist, dass ich mit Bäumen nicht vertraut bin.

Es gibt zwei Arten der Initialisierung, die ich brauche, nämlich Grow (Baum variabler Größe) und Voll (ausgewogener Baum mit gleicher Form und Größe).

%Vor%

Ich habe meine Tree-Klasse initialisiert, aber ich weiß nicht, wie ich von hier fortfahren soll, um den Baum zu füllen (entweder Full oder Grow).

%Vor%

Könnte mir jemand freundlicherweise sagen, wie das gemacht werden kann, oder auch nur ein Anstoß in die richtige Richtung.

Ich versuche zufällig die Bäume bis zu einer vordefinierten Tiefe zu bevölkern.

  • Operatoren (+ - / *) werden überall eingefügt, außer Blattknoten.
  • Die Operanden (1-100) werden NUR auf den Blattknoten
  • eingefügt

Danke.

    
Leo 01.08.2015, 17:45
quelle

3 Antworten

2

Es ist nicht sehr klar, was Sie wollen. Fragen Sie, wie Sie die von Ihnen gegebenen Beispiele darstellen oder Methoden implementieren, um zufällige Bäume nach einer der beiden Strategien zu generieren?

Ihre Beispiele können auf diese Weise mit Ihrer Tree-Klasse dargestellt werden:

%Vor%

[EDIT]

Sie können Bäume mit den Methoden der folgenden Klasse nach dem Zufallsprinzip generieren:

%Vor%

Dann können Sie einfach tun:

%Vor%     
Helder Pereira 01.08.2015, 19:12
quelle
1

Sie müssen zwei Funktionen erstellen, die Elemente zu einem Baum hinzufügen. Für die GROW-Funktion könnten Sie etwas tun wie unten ...

Grundsätzlich müssen Sie die Blattknoten basierend auf den von Ihnen festgelegten Kriterien einstellen. Dies ist kein perfektes Beispiel, kann Ihnen aber helfen, in die richtige Richtung zu gehen.

Ich habe das nicht ausgeführt, aber das sollte zeigen, wie man einen Baum anbaut. Möglicherweise müssen Sie Funktionen hinzufügen, damit es funktioniert, wie Sie möchten.

%Vor%

Baum:

%Vor%

Wert:

öffentliche Klasse Value {              Zeichenfolge oper;              Ganzzahl val

%Vor%     
Pumphouse 01.08.2015 18:02
quelle
0

Sie können sich die Implementierung von Tiny GP ansehen Ссылка (erstellt von Ricardo Poli) . Diese Implementierung erfordert jedoch tiefgehende Kenntnisse der C-Programmiersprache.

Alternativ können Sie GP-Varianten mit linearer Darstellung von Chromosomen verwenden (z. B. Linear GP, Kartesisches GP, Genexpressionsprogrammierung, Multi-Expressionsprogrammierung usw.). Diese haben eine einfachere und leichter verständliche Implementierung. Schauen Sie sich zum Beispiel den Quellcode von Multi Expression Programming an: Ссылка

    
Mihai Oltean 09.08.2015 12:22
quelle