Ich arbeite an einem rundenbasierten Spiel AI mit einer neuronalen Netzwerk-Technik bekannt als NEAT. Ich versuche, ein Netzwerk zu trainieren, das sich um einen zweidimensionalen (X & Y coords) Raum bewegen kann, der eine Vielzahl von Werten enthält, die in einem zweidimensionalen Array gespeichert sind.Darstellen einer 2D-Karte von Doppel in so wenigen "Parametern" wie möglich
I zwei Strategien für die Verwendung des neuronalen Netzes unter:
Für jede „Zelle“ in dem Gitter, die Scores aus den verschiedenen Heuristiken als Eingaben an Neuronen sorgen und einen NN schaffen, die effektiv ist ein sehr kompliziertes "Scoring" -System. Verschiebe den nicht spielenden Charakter (NPC) zum Ort mit der höchsten Punktzahl.
Erstellen Sie einen komprimierten Wert für jedes heuristische Maß (irgendwie komprimiert in so wenig Bits wie möglich) und stellen Sie ein Eingabe-Neuron für jedes dieser Maße bereit.
Ich bin sehr daran interessiert, Option zwei, weil es die geringste Menge an Berechnungen erforderlich (die Laufzeit des Spiels ist ziemlich lang) präsentiert, aber wie ich bin verwirrt, was Ansatz, den ich die „kleinen schaffen nutzen könnte Repräsentation "Version der zweidimensionalen heuristischen Werte. Ich weiß, dass es Techniken wie Fourier-Transformationen gibt, aber ich weiß nicht, ob diese meinem Problem entsprechen. Im Grunde bin ich auf der Suche nach einer Möglichkeit, ein 50x50 Array von Double in einen oder sogar zwei Double-Werte zu konvertieren. Diese zwei doppelten Werte können verlustbehaftet komprimiert sein, ich muss nicht in der Lage sein, die ursprünglichen Werte zurück zu bekommen, ich brauche nur einen vernünftigen Mechanismus, um die Eingabedaten in einen kleinen Footprint zu ändern.
Eine Alternative zu diesen beiden Möglichkeiten besteht darin, irgendwie eine "Region" basierend auf einer gewissen Entfernung vom NPC zu kodieren (so erhalten Sie die tatsächlichen Werte für eine "nahe" Zelle und eine Annäherung für eine "ferne" Zelle). Ich weiß nicht genau, wie ich das einrichten würde, aber es wird zumindest die Notwendigkeit beseitigt, jede Zelle in jeder Runde des Spiels zu bewerten (vorausgesetzt, ich betrachte ungefähr 5 Millionen Runden bei ungefähr 1 Sekunde pro Runde, jede Vereinfachung) Ich kann mir vorstellen, würde sehr helfen).
Ich entschuldige mich, wenn das nicht viel Sinn macht, es ist ein ziemlich schwieriges Problem, das mich für eine Weile ratlos hat, und ich kann mir nicht eine einfache Möglichkeit vorstellen, es zu beschreiben.
Thankyou,
Aidan
HINZUFÜGEN EDITED (und ändern Titel):
Dank Chris haben wir verfeinert, was ich suche. Was ich suche, ist eine Möglichkeit, eine Linie (ich kann die 2D-Karte in eine Linie umwandeln) in so wenigen Parametern wie möglich anzunähern. Ich habe zuvor kubische Splines für die Interpolation verwendet, aber ich brauche etwas viel Machbareres für einen Datensatz, der ziemlich aggressiv zwischen 0,0 und 1,0 variiert. Was ich suche, nehme ich an, ist ein "Hash" der Karte.
Ich weiß, es gibt Techniken wie kubische Splines, aus denen ich einige "Schlüsselpunkte" ausarbeiten kann, und diese Werte sind eine sinnvolle Analogie für das, wonach ich suche. Ich brauche einen Weg, um die 2500 Werte zu nehmen und eine kleine Repräsentation dieser Werte zu finden, die ich für das neurale Netzwerk verwenden kann. Ich denke, der NN kann trainiert werden, um die wahre Bedeutung dieser Repräsentationen abzuleiten, oder zumindest um eine Korrelation zwischen der Repräsentation und der realen Welt zu bestimmen, also muss es nicht notwendigerweise eine reversible Funktion sein, aber ich denke nicht Viele One-Way-Funktionen (wie MD5, SHA) sind tatsächlich sehr hilfreich, entweder ...
Kann ich es auf zwei oder vorzugsweise eine Zahl komprimieren? Ich dachte, dass die meisten Grafikkomprimierungsalgorithmen darauf abzielen, die gleiche grobe Pixelgröße beizubehalten, indem einfach klügere Möglichkeiten zum Speichern der Farbinformationen verwendet werden. – Aidos
Ich denke nicht, dass Sie es in der Lage sein werden, es auf ein oder zwei Doubles zu reduzieren und es zu etwas reversibel zu machen, das als Ihr ursprüngliches 50x50-Array erkennbar ist. Das ist ein Komprimierungsverhältnis von 1250: 1. –
Ich denke, dass ich durch die Verwendung des Begriffs Komprimierung irreführend gewesen sein könnte. Im Grunde brauche ich eine Art Berechnung, die mir einige Werte geben kann, die eine "Landkarte" beschreiben. Ich könnte diese in ein einfaches Liniendiagramm umwandeln, ich brauche eine Möglichkeit, die "Funktion" für diese Linie zu bestimmen, wie die Paramter eines kubischen Splines. – Aidos