Ich möchte einen genetischen Algorithmus implementieren, der Programme schreibt und versucht, ein bestimmtes Problem zu lösen.Genetischer Algorithmus in .Net - Variable Chromosomen - Alien Spaceship Scenario
Das 'Programm' ist nicht mehr als eine Liste von Funktionen, die von einer Fitness-Funktion ausgewertet werden, damit ich wissen kann, was das beste 'Programm' ist. Die Reihenfolge ist für mich nicht relevant, beeinflusst die Fitnessbewertung nicht.
Die BIG CATCH, die ich ist, um herauszufinden, dass ich versuche, die so genannte Liste der Funktionen variabel sein sollte, wie eine Variable cromossomes Nummer. Ich habe Funktionen, die aufgerufen werden müssen, mit variablen Parametern und Funktionen, die COULD (optional) aufgerufen werden können, auch mit variablen Parametern.
Ich fand schon das große GA-Frameworks, aber ich bin wirklich neu zu genetischer Programmierung, und ich weiß nicht, was der beste Rahmen für dieses Problem zu verwenden ist:
also vorstellen, dieses Problem:
- In einem offenen Feld, wie ein 2D-Raum, eine Alien Raumschiff Notwendigkeit von Punkt A nach Punkt B in der kürzesten möglichen Zeit zu gehen. Aber das Programm weiß nicht, wo Punkt B ist.
- Sie können sich das offene Feld als ein Gitter vorstellen, wie ein Schachbrett, aber größer (100X100).
- Das offene Feld kann Hindernisse haben. Das Raumschiff sollte versuchen zu vermeiden.
- Das Programm muss einige Funktionen, wie das Modell des Raumschiffs wählen und mit Gas füllen.
- Dann kann das Raumschiff Funktionen wie gehen vorne, hinten, links und rechts ausführen.
- Das Raumschiff kann auch Hyper-Geschwindigkeit verwenden, die wie ein Transport zu einem beliebigen Punkt im Raster funktioniert.
- Die optionalen Funktionen können mehr als einmal aufgerufen werden, aber wäre toll, wenn dies wie eine Art von Mutation funktioniert, die nur 5% der Zeit funktioniert.
- Alle verwendeten Funktionen und Parameter beeinflussen die Fitnessbewertung.
- Reihenfolge der Funktionen hat keinen Einfluss auf die Fitnessbewertung.
Für eine bessere undertanding, wenn ich meine INPUT als JSON beschreiben könnte, wäre es so etwas wie dieses:
{
"FixedFunctions":[
{"Name":"ChooseModel", "Parameters":[{"Name":"Type", "MinValue":1, "MaxValue":5,"Step":1}]},
{"Name":"FillUp", "Parameters":[{"Name":"Litters", "MinValue":1, "MaxValue":100,"Step":2}]}
]
"OptionalFunctions":[
{"Name":"GoFront", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":50,"Step":5}]},
{"Name":"GoBack", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":50,"Step":2}]},
{"Name":"GoRight", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":25,"Step":2}]},
{"Name":"GoLeft", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":25,"Step":2}]},
{"Name":"HyperTeleport", "Parameters":[
{"Name":"PointX", "MinValue":1, "MaxValue":100,"Step":2},
{"Name":"PointY", "MinValue":1, "MaxValue":100,"Step":2}]}
]
}
So ist die cromossome einfach etwas sein könnte, als etwas komplexer:
- [ChooseModel(1), FillUp(30), HyperTeleport(3,5), GoBack(50)]
- [ChooseModel(3), FillUp(60), HyperTeleport(20,50), GoRight(2)]
- [ChooseModel(4), FillUp(40), GoFront(10), GoRight(2), GoLeft(30), GoBack(80), HyperTeleport(20,30), GoRight(5)]
...
Also hier bitte ich um Hilfe. Was ist der beste Weg, um mein Problem zu lösen? Alle Beispiele, die ich gefunden habe, sprechen über Cromossome fester Größe, aber in meinem Problem habe ich eine variable Anzahl von Optionen. Wäre toll, Heuristiclab zu benutzen, da ich pausieren und fortfahren könnte, wie man die Operationen sehen kann.
Vielen Dank, wenn Sie bis hier gelesen haben !!!
Entschuldigung für die lange Post. 'O'
Ist nicht möglich zu diesem Zweck verwenden "konventionellen" Algorithmus wie A *, Breite erste Suche, Tiefe erste Suche ....? – viceriel
Ich denke ich könnte, aber es gibt viele Möglichkeiten für meine Funktionen und ihre Parameter. Es wäre nicht möglich, jeden einzelnen Knoten zu besuchen. Deshalb denke ich über genetische Programmierung nach. Das Überleben der Stärksten. Könnte ich etwas ähnliches mit BFS DFS tun? –
Wahrscheinlich nicht, aber für Pfadfindung Mission werden diese Algorithmen besser als genetische Algorithmus, so dass Sie einige dieser Algorithmen für Pfadfindung und genetischen Algorithmus für verbleibende Aufgaben verwenden können. – viceriel