Schlangen-KI entwerfen

9

Ich bin neu in diesem Gamedev-Stackechange, habe aber schon einmal die Mathe- und CS-Sites verwendet.

Ich bin also in einem Wettbewerb, um KI für eine Schlange zu erstellen, die in 5-Minuten-Runden mit vier anderen Schlangen konkurriert, wobei die Regeln dem traditionellen Nokia-Schlangenspiel sehr ähnlich sind, außer dass es fünf Schlangen gibt, das Brett 30x30 ist und es gibt eine Reihe kleiner Hindernisse auf dem Feld.

Wie beim Nokia-Spiel wächst Ihre Schlange, wenn Sie an die Frucht kommen und wenn Sie gegen sich selbst, eine andere Schlange oder die Wand stoßen, sterben Sie. Das Spiel läuft mit einer Verzögerung von 30 ms zwischen den Zügen und der Server sendet alle 50 ms den neuen Spielstatus, den der Code analysieren muss und was nicht, und gibt den nächsten Zug aus.

Der Gewinner ist die Schlange, die zu jedem Zeitpunkt im Spiel die längste Länge hatte. Tie Breaker werden durch Kills entschieden.

Bisher habe ich eine A * -Diagrammsuche für jede Schlange implementiert, um festzustellen, ob meine Schlange dem Apfel am nächsten ist, und wenn ja, für den Apfel. Ansonsten habe ich einen kleinen Algorithmus erstellt, um den leersten Bereich des Bretts zu bestimmen, für den sich meine Schlange entscheidet, um den nächsten Apfel vorwegzunehmen.

Abgesehen davon habe ich einige kleine Überlebensprüfungen, um sicherzustellen, dass meine Schlange nicht in eine Falle gerät, aus der sie nicht herauskommen kann, und wenn sie stecken bleibt, habe ich etwas, um ihr eine bessere Chance zu geben, herauszukommen.

...

Wie auch immer, ich habe meine Schlange auf einem Testserver getestet und es funktioniert ganz gut. Im Allgemeinen gewinnt meine Strategie, nur dann auf den Apfel zu setzen, wenn er sicher ist, und Platz zu finden, wenn er nicht schneller wächst als alle anderen Schlangen (einige Schlangen tun etwas Ähnliches, gehen aber oft nur in die Mitte oder in eine Ecke), manchmal gewinnt er Diese Probespiele werden aber meistens von derselben Schlange geschlagen, die den Vorteil der Überlebensfähigkeit zu haben scheint (meine Schlange wächst schneller, stirbt dann aber irgendwie und diese andere Schlange schreitet nur langsam voran und gewinnt an Beständigkeit.

Also habe ich mich über Ideen gewundert, die jemand haben muss, um meine Schlange zu verbessern. Oder vielleicht Ideen für einen neuen Ansatz. Meine Funktionen und Klassen sind gut, daher sollten Änderungen, die drastisch erscheinen könnten, nicht schlecht sein. Ich ermutige alle Ideen.

Irgendwelche Gedanken?

Rawb
quelle

Antworten:

5

Eine gute Verteidigungsstrategie könnte darin bestehen, eine perfekte Form zu erreichen (Kopf und Rücken sind also immer 1 Feld voneinander entfernt, und Sie bilden ein volles Quadrat oder was auch immer in Ihrer gegebenen Länge möglich ist). Dies würde Sie ziemlich stark machen unsterblich, da keine Schlange jemals in Ihren geschlossenen Bereich gelangen könnte und Sie niemals in sich selbst geraten werden (es sei denn, ein Apfel ist irgendwie in Ihrem Mund aufgetaucht, aber ich würde mir vorstellen, dass dies unmöglich ist, wenn kein Platz vorhanden ist).

Dies würde es so machen, dass wenn der Apfel tatsächlich in Ihrem geschlossenen Bereich erscheint, Sie so programmiert werden könnten, dass Sie ihn nicht anstreben und die anderen Schlangen wahrscheinlich sterben werden, wenn Sie versuchen, ihn zu bekommen. Nach einiger Zeit könnten Sie ihn so zum Übergang bringen zurück in deine Form so gut wie möglich (könnte ein etwas kniffliger Algorithmus sein, scheint aber machbar)

Wann Sie sich für Äpfel entscheiden, hängt nur davon ab, wie weit sie entfernt sind. Wenn Sie mit Abstand am nächsten sind, können Sie sich dafür entscheiden, aber ansonsten bleiben Sie konservativ. Schwer zu sagen, müsste es wahrscheinlich aufgrund von Versuch und Irrtum optimieren , aber ich denke, es wäre eine gute Strategie.

Kevin DiTraglia
quelle
1
Im Grunde genommen sollte seine "Schlange" "Schildkröte" sein. xD +1 gute Idee.
Cypher
Gut. Aber es gibt Hindernisse auf dem Brett. Andere Schlangenprogrammierer müssen also ihre Schlangen gemacht haben, um zu überprüfen, ob es ein Hindernis gibt (ob Wand oder andere Schlange, die den Apfel umschließt). Sie dürfen nicht kommen und einfach sterben. Um dieses Problem zu vermeiden, kann ein beträchtlicher Abstand zwischen Kopf und Schwanz eingehalten werden.
Shashwat
hmm interessante Idee, ich denke, ich könnte so etwas implementieren, wenn meine Schlange nur herumhängt und darauf wartet, dass der nächste Apfel laicht Tod und diese Spiele werden oft durch einen vorzeitigen Tod entschieden
Rawb
@Ronald Wenn Sie beim Laichen von Äpfeln in Ihrem Mund feststellen, können Sie sich einfach nach innen und außen drehen und fortfahren, da die KI einen perfekten Reflex hat. Es sollte tatsächlich leicht zu beheben sein (und sich möglicherweise sogar selbst beheben), je nachdem, wie Sie es implementieren.
Kevin DiTraglia
0

Die Schlange sollte ihre Strategie an ihre aktuelle Länge anpassen.

Eine sehr lange Schlange kann ihren Körper benutzen, um Gegner einzuzäunen. Dies bedeutet, dass es eine Abdichtung mit einer Wand machen sollte.

Wenn sich die Schlange nach Osten bewegt, mit einem Apfel nordöstlich davon, sollte sie sich bis zur Wand bewegen, bevor sie nach Norden abbiegt, sodass die möglichen Routen für andere Schlangen stark eingeschränkt sind.

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

Diese Schlange mit Kopf C sollte sich bei e9 nach Norden drehen, nicht bei e8, damit jeder Gegner darunter gefangen ist und keine Äpfel fressen kann, die über der 'e'-Linie erscheinen.

Je größer der Bereich ist, den Sie abschneiden können, und je länger Sie ihn halten können, desto besser.

Bram
quelle