Speziell spreche ich über die Programmierung für diesen Wettbewerb: Ссылка
Der Wettbewerb beinhaltet, dass Sie sich anderen Teams mit einem Schwarm von Raumschiffen in einer zweidimensionalen Welt stellen. Die Schiffe sind durch eine Grenze eingeschränkt (wenn sie aussteigen, sterben sie), und sie müssen ständig Monde vermeiden (die die Schiffe mit ihrer Schwerkraft einziehen). Das Ziel ist es, die gegnerische Königin zu töten.
Ich habe versucht, ein paar relativ einfache Techniken zu programmieren, aber ich habe das Gefühl, dass mir etwas Grundlegendes fehlt.
Zum Beispiel habe ich einige der Verhaltensweisen von Boids implementiert ( Ссылка ), aber ihnen schien es an einem .. Ziel, sozusagen.
Gibt es irgendwelche gebräuchlichen Techniken (oder, vorzugsweise, Kombinationen von Techniken) für diese Art von Spiel?
BEARBEITEN
Ich würde das gerne mit einem Kopfgeld wieder eröffnen, da ich glaube, dass mir noch immer wichtige Informationen fehlen. Das Folgende ist mein NodeWar-Code:
%Vor%Ich habe potentielle Felder möglicherweise falsch implementiert, da alle Beispiele, die ich finden konnte, über diskrete Bewegungen sind (während NodeWar kontinuierlich und nicht exakt ist).
Das Hauptproblem ist mein A.I. Bleibt nie länger als 10 Sekunden im Spielbereich, ohne vom Bildschirm zu fliegen oder in einen Mond zu stürzen.
Sie können den boids-Algorithmus leicht dazu bringen, das Spiel von Nodewar zu spielen, indem Sie einfach nur zusätzliche Steuerverhaltensweisen zu Ihren boids hinzufügen und / oder die Standardeinstellungen ändern. Zum Beispiel würden Sie ein Lenkverhalten hinzufügen, um den Mond zu vermeiden, und ein Lenkverhalten für feindliche Schiffe (Abstoßung oder Anziehung, abhängig von der Position zwischen Ihnen und dem feindlichen Schiff). Die Gewichte der Anziehungs- / Abstoßungskräfte sollten dann optimiert werden (möglicherweise durch genetische Algorithmen, die unterschiedliche Konfigurationen gegeneinander spielen).
Ich glaube, dieser Ansatz würde Ihnen bereits einen relativ starken Basisspieler geben, zu dem Sie kollaborative Strategien hinzufügen können.
Mit der Kontrolltheorie können Sie das bestmögliche Beflockungsverhalten erreichen. Wir können damit beginnen, den Zustand eines Schiffes (einen Vektor von Positionen und Geschwindigkeiten) als Variable X auszudrücken. Wir verwenden x, um eine kleine Abweichung von einem Zustand X0 darzustellen. Linearisieren Sie für jeden Knoten den Zustand, in dem die einzelnen Schiffe sein sollen:
d / dt (X) = f (X - X0)
wobei X0 der Zustand ist, in dem das Schiff sein soll. f () kann nichtlinear sein (wie im Falle Ihres potentiellen Feldes). Bis zu diesem Punkt wird der Wille gehorchen
d / dt (x) = Ax
A ist eine feste Matrix, die Sie optimieren sollten, um Stabilität zu erreichen. Ein großer Teil der Kontrolltheorie sagt Ihnen, wie Sie dies tun können. Es ist sehr wichtig für Sie, dass A zu einem stabilen System führt und dass es schnell konvergiert. Sie sollten jetzt MATLAB oder GNU Octave ausbrechen. Sie sollten auch lesen, welche Pole in der Steuerungstheorie bedeuten, und Laplace transformiert. Die Pole des Systems (Eigenwerte der Matrix A) charakterisieren die Reaktion des Schiffes auf Störungen jeglicher Art, seine Stabilität und seine Konvergenzgeschwindigkeit. Es wird Ihnen auch sagen, ob sich das Schiff in Richtung X0 bewegt oder um X0 schwingt.
Es gibt mehrere Möglichkeiten, A zu wählen (Sie haben wahrscheinlich wegen der begrenzten Physik des Spiels keine volle Kontrolle über A), ohne selbst viel analysieren zu müssen. Zwei solcher Algorithmen sind die optimale Steuerung (Sie definieren die Kosten für die Steuerung des Systems gegenüber den Kosten der Abweichung von X0) und die Pole-Platzierung (Sie wählen, wohin die Pole gehen werden).
Die Zustandsraumtheorie gilt auch für eine ganze Schiffsflotte, abweichend von der von jedem Schiff zu diesem Zeitpunkt gewünschten Konfiguration. Wenn das System nichtlinear ist, können Sie möglicherweise nicht garantieren, dass alle Konfigurationen stabil sind.
Fazit:
Verwenden Sie die Steuerungstheorie, um die individuelle Stabilität zu garantieren, indem Sie X0 basierend auf den Schiffen in Ihrer Umgebung berechnen und ein potenzielles Feld hinzufügen, um zu verhindern, dass Schiffe in einander und Monde stoßen.
Haftungsausschluss:
Es gibt mehrere Möglichkeiten, ein Zustandsraumsystem auszudrücken. Dies ist das Einfachste, aber Sie müssen es anders ausdrücken, wenn Sie das Open-Loop-System betrachten (teilen Sie A in ein anderes "A" auf, das Ihnen das physikalische System und einige andere Matrizen gibt, die Ihnen die Kontrollparameter geben)
Tags und Links machine-learning artificial-intelligence