Ich habe diese Frage erst kürzlich gestellt und die Schlussfolgerung scheint zu sein, dass es nicht wirklich gelungen ist, genetische Programmierung ( GP ) für die Erstellung prozeduraler Spielinhalte zu verwenden. Ich möchte das ändern.
Ich bin mir ziemlich sicher, dass GP eingesetzt werden könnte, um einen neuen Geländegenerator zu finden. Die Frage, auf die ich komme, ist, wie dies erreicht werden kann.
Alle Hausärzte haben einige grundlegende Teile, die für alle Hausärzte verallgemeinert werden können (Elternselektion, Rekombination, Mutation, Überleben). Ich kann das selbst herausfinden. Das Problem tritt in den problemspezifischen Teilen auf. Auf diese Weise stellen Sie das Problem im Code dar (normalerweise wird ein Baum verwendet) und bewerten, wie gut ein Generator sein kann (dies können ein oder mehrere Werte sein).
Die Fragen auf den Punkt gebracht:
Wie würden Sie einen Geländegenerator so darstellen, dass er in einen Baum zerlegt werden kann?
Welches Terrain müsste das erzeugen? (Höhenkarte, Scheitelpunktdiagramm, ...)
Je weniger dies auf einer Hightmap basiert, desto besser.
Was würde verwendet, um die Eignung einer Lösung zu bewerten?
Beispiel: Wir möchten ein interessantes Terrain, damit einer der Werte die durchschnittliche Änderung der Normalen für jeden Scheitelpunkt im Terrain ist.
quelle
Antworten:
Vielleicht haben Sie etwas Glück mit einem Ansatz , der den genetischen Bildern von Karl Sims ähnelt .
Er verwendet eine einfache Menge von Operatoren in einer LISP-ähnlichen Sprache, so dass die Ausgabe jedes Operators verwendet werden kann, um das Bild zu beeinflussen, ähnlich wie in einigen Shader-Sprachen (dh ein Skalar wäre ein Graustufenwert, ein
vector3
wäreRGB
usw.). ).Obwohl ich denke, dass das Implementierungsmaterial ist, möchten Sie wahrscheinlich seine Schlüsselwörter, die (iirc) alle Grundlagen enthalten:
sin, cos, tan
, etc ..)x, y
)sqrt, pow, abs, inverse
)fBm, noise2, noise3
)mandelbrot, julia
)lerp, quad, step, smoothstep
)(Einige der oben genannten Punkte sind möglicherweise nicht in seiner Implementierung enthalten. Ich habe seine Arbeit vor langer Zeit gefunden und tatsächlich ein paar Versuche unternommen, was Sie im Laufe der Jahre beschrieben haben - so dass möglicherweise Erinnerungen verloren gehen :)
Interessant (und schnell) bleiben
Ich hatte ein bisschen Glück mit einem vielschichtigen Ansatz, der die Anzahl toter Entwicklungen massiv reduzierte.
Jedoch...
Jetzt habe ich den Fitness- Algorithmus übersprungen. Ich habe hauptsächlich Karl Sims Ansatz der "unnatürlichen Selektion" verwendet, bei dem Sie die aktuelle Generation auf dem mittleren Feld einer Gruppe von Nachkommen sehen (damals bekannt durch Kai's Power Tools) ein bild von dem was ich meine ) ..
Allerdings könnten Sie wahrscheinlich eine Reihe von Trainingsbildern haben, möglicherweise einige aus Satellitenbildern und einige künstliche Bilder mit bestimmten Qualitäten, und dann möglicherweise eine Wavelet- oder 2D-FFT-Analyse auf ihnen im Vergleich zu dem Gelände, das Sie testen?
Dies ist ein interessantes Thema, aber ich bezweifle, dass Sie eine Antwort auf :) brauchten
EDIT: ahh. musste eine Reihe von Links entfernen, weil ich ein neuer Benutzer bin: - |
quelle
Ich bin mir nicht sicher, ob Sie diese Frage beantworten können, aber ich fühle eine Erklärung, warum diese Antwort hilfreich genug sein könnte. Also, Antworten auf den Punkt gebracht:
Genetische Algorithmen werden normalerweise verwendet, um ein bekanntes Problem zu lösen, bei dem Sie die Umgebung durch Regeln definieren können. Anschließend können Sie Datensätze erstellen, die verschiedene Eigenschaften darstellen, die sich darauf auswirken, wie die Dinge auf die Regeln reagieren. Der Computer spielt dann eine "Runde" mit dem ursprünglichen Datensatz, wählt die oberste X - Zahl aus, mischt ihre Werte nach dem Koppeln und führt eine weitere Runde durch Finde eine Reihe von Werten, bei denen der Troll im Allgemeinen in seiner Umgebung sehr gut abschneidet (Kann jagen und fressen, töten oder sich von Dorfbewohnern fernhalten, Beute sammeln und all die glänzenden Gegenstände anhäufen, die er wünscht usw.).
Ich bin mir einfach nicht sicher, was Sie erreichen wollen, wenn es um die Geländegenerierung geht. Das Einzige, was ich mir einfallen lassen kann, sind Bewertungen von Spielinhalten, bei denen Sie keine Welt planen wollten, sondern eine erstellen wollten, in der AI-Pfade gut berechnet werden können. Trotzdem suchen Sie nach einer einzigen oder zumindest einer begrenzten Anzahl von Welten.
quelle
Definitiv ein Vertex-Graph (ein Mesh), ist er kompakt in Bezug auf den Speicher und kann bei Bedarf gerastert (tesseliert) werden.
Zelluläre Automaten. Ich kann mir zwei Implementierungen vorstellen:
Regelsatzautomaten, möglicherweise mit Elementen von endlichen Automaten (wenn der aktuelle Status, wie Versuchszähler oder Leerlaufzeit, berücksichtigt wird).
Regelsatz selbst kann als Verzweigungsentscheidungsbaum oder einfacher Befehlsstapel dargestellt werden (nicht sicher, ob er funktioniert)
Es ist nur ein Regelsatz für jeden Knoten
Weltenbauer. Anstatt einen Solver für jeden einzelnen Knoten anzuwenden, können Sie nur eine Reihe von Solvern erstellen und ihnen erlauben, durch das Netz zu navigieren.
Trotzdem befürchte ich, dass der zweite Ansatz vom ersten unterstützt werden muss: Die anfängliche Zufälligkeit muss geglättet werden, und ich bin nicht sicher, ob die Bauherren den Trick machen können. Schließlich hat jede lebende Zelle Mitochondrien.
Die Integrität des resultierenden Terrains - es sollte nicht wie ein Mischmasch aussehen. Und die Vielfalt - im Allgemeinen möchten wir, dass möglichst viele verfügbare Variationen dargestellt werden (die flache Einöde von einer Kante zur anderen macht keinen Spaß). Vielleicht etwas komplexeres wie die gegenseitige Anpassung benachbarter Knoten (Tundra mitten in der Wüste, was?)
Muss ich selber mit meinem Netzgenerator ausprobieren, wenn ich etwas Freizeit habe =)
quelle