Sie kennen wahrscheinlich Conways Spiel des Lebens , den berühmten Zellularautomaten, den der Mathematiker John Conway erfunden hat. Das Leben besteht aus einer Reihe von Regeln, mit denen Sie zusammen eine zweidimensionale Zelle simulieren können. Die Regeln entscheiden, welche Zellen auf dem Brett leben und welche sterben. Mit einigem Einfallsreichtum könnte man sagen, dass Life ein Null-Spieler-Spiel ist: ein Spiel mit dem Ziel, Muster mit interessantem Verhalten zu finden, wie der berühmte Segelflugzeug.
Ein Zero-Player-Spiel ... Bis heute. Sie müssen ein Programm schreiben, das das Spiel des Lebens spielt - und es spielt, um zu gewinnen, im King of the Hill-Stil. Ihr Gegner (Singular) versucht natürlich dasselbe. Der Gewinner ist entweder der letzte Bot mit lebenden Zellen oder der Spieler mit den meisten lebenden Zellen nach 10000 Generationen.
Spielregeln
Die Regeln sind fast die gleichen wie normal (B3 / S23)
- Eine lebende Zelle mit weniger als zwei freundlichen Nachbarn stirbt an Hunger.
- Eine lebende Zelle mit zwei oder drei freundlichen Nachbarn überlebt.
- Eine lebende Zelle mit mehr als drei befreundeten Nachbarn stirbt an Überbevölkerung.
- Eine tote Zelle mit genau drei Nachbarn desselben Spielers wird lebendig, um für diesen Spieler zu kämpfen, vorausgesetzt, es gibt keine feindlichen Nachbarn .
... aber nach jeder Generation haben Sie und Ihr Gegner die Möglichkeit, einzugreifen. Sie können bis zu 30 Zellen aufwecken, um für Sie zu kämpfen. (Wer zuerst geht, entscheidet der Server.)
Die Tafel ist ein (x, y) Zellenquadrat. Alle Felder sind anfangs tot. Die Grenzen wickeln sich nicht um (dies ist keine torusförmige Welt) und sind dauerhaft tot.
Dies ist ein Wettbewerb im Geiste von Battlebots und Core Wars . Es gibt einen zentralen Server, auf dem Bots ausgeführt werden. Diesen finden Sie hier
Protokoll
Der Arena-Server spricht ein einfaches JSON-Protokoll, das über argv kommuniziert wird
Wobei Werte eine JSON-codierte Zeichenfolge ist
y_size
: Die maximale y-Koordinate der Kacheln, bevor sie verschwindenx_size
: die maximalen x Kacheln, bevor sie verschwindentick_id
: die aktuelle Ticknummerboard
: ein Wörterbuch mit Schlüsseln in der Form '(y, x)' und Werten in der Formbot_id
(int)bot_id
: Fliesen in der Tafel mit dieser ID gehören dir
Beispiel:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
Teilen Sie dem Server Ihre Wahl mit:
- Schicken Sie dem Server eine Liste mit Kacheln, um Ihre Farbe zu ändern.
- Nur die leeren werden geändert
- Listenformat für verschachtelte Koordinaten
[[0,0], [0,1], [100,22]...]
HINWEIS: Ihr Bot muss die Kacheln überhaupt nicht aktualisieren - der Server führt die Aktualisierung selbst durch
Wettbewerbsregeln
- Wenn Ihre Implementierung das Protokoll nicht befolgt, verfällt der Spielzug. Der Server nimmt keine Statusänderung an
- Sie dürfen einen Fehler im Arenaserver nicht vorsätzlich ausnutzen.
- Lassen Sie Ihre KI in einer vernünftigen Zeit über Züge entscheiden. Bitte senden Sie Ihren nächsten Schritt so schnell wie möglich.
- Zum Schluss sei bitte nett zum Server. Es ist für Ihren Genuss da.
- Die Nichtbeachtung dieser Regeln kann zur Disqualifikation führen.
- Im Falle eines Unentschieden haben beide Spieler 1 Gewinn zu ihrer Gesamtsumme hinzugefügt
Führen Sie den Controller selbst aus
Die Quelle für den Controller finden Sie hier . Es gibt zwei Möglichkeiten, den Controller auszuführen:
- Wettbewerbsmodus (Terminal)
- Eingerichtet mit
python3 get_answers.py
- Führen Sie einen Alles-gegen-Alles-Wettbewerb durch, bei dem jeder Bot gegeneinander antritt.
- Eingerichtet mit
- Testmodus (GUI)
- Lauf
python3 nice_gui.py
- Klicken
Pull Answers
- Wenn Sie vor dem Posten eine eigene Antwort hinzufügen möchten, klicken Sie auf,
File -> Add manual answer
suchen Sie die Datei und wählen Sie die Sprache aus, in der sie geschrieben ist. - Wenn Ihre Sprache nicht vorhanden ist, rufen Sie mich an und ich werde versuchen, sie auf dem Server zu installieren. Ich werde sie ausführen (Installations- und Ausführungsanweisungen wären auch nett!)
- Wähle 2 Bots, um gegeneinander anzutreten
- Klicken
Run
- Schau das Spiel...
- Lauf
- Installation
- Benötigt python3
- get_answers benötigt bs4 und html5lib
- Controller erfordert eine Möglichkeit zum Ausführen von .sh-Dateien (MinGW unter Windows)
Wertung
Der Bot mit den meisten Gewinnen ab dem 12/07/2016
12. Juli14/07/2016
(14. Juli) konnte nicht herausfinden, wie man einen Bot ausführt), gewinnt.
In diesem Chatraum kann um Hilfe beim Controller / der GUI gebeten werden
Diese Frage befindet sich seit 2014 in der Entwicklung und war die am häufigsten gestellte Frage im Sandkasten. Besonderer Dank geht an Wander Nauta (Originalautor und Konzept), PPCG Chat (Kommentare und Hilfe) und alle, die im Sandbox-Beitrag kommentiert haben (weitere Kommentare).
Antworten:
Python 3, Exploder
Legt kleine Sprengsätze um den Platz, ohne Rücksicht darauf, ob sich dort bereits ein Block befindet.
quelle
Ruby, InterruptingBlockMaker
Anstatt Segelflugzeuge wie den TrainingBot zu initialisieren, wird versucht, an einer beliebigen Stelle im Labyrinth eine 5x5-Blockschaltmaschine zu erstellen, wie auf Wikipedia erwähnt . Bei den verbleibenden Aktivierungen werden nur noch feindliche Punkte gefunden und versucht, die Umgebung mit Ihren Zellen zu pfeffern, um sie daran zu hindern, zu wachsen und möglicherweise ihre Muster durcheinander zu bringen. Ihre Zellen werden in der nächsten Generation sterben, aber vielleicht haben sie auch ein wenig Wachstum gestoppt, um Ihren Gegner zu verlangsamen!
v2: Leicht optimiert (?), um Zeitüberschreitungen zu minimieren.
v3: Optimierter Unterbrechungscode, um eine Teilmenge der aktiven Blöcke vorab abzutasten, bevor unsere eigenen Zellenstandorte abgelehnt werden, um Zeitüberschreitungen weiter zu vermeiden, was zu einer gewissen Wirksamkeit der Angriffe auf Unterbrechungszellen führt.
quelle
bot_score
zeigen, wie viele Siege jeder Bot gegen andere Bots hatPython 2, TrainingBot
Weil jeder eine davon braucht!
quelle
Java, Troll Bot
Troll Bot hat darüber nachgedacht und bemerkt, dass er sich NICHT um den Feind kümmert. Tatsächlich spammt er diese Fabriken nur, um mehr seiner Leute zufällig auf der ganzen Karte zu produzieren. Nach einer Weile stellte er fest, dass zusätzliche Zellen am besten in Klumpen verwendet werden. Diese Viererblöcke halten zusammen und halten Segelflugzeuge auf ihren Spuren an! Er glaubt nicht, dass er nur kämpft. Er ist auch ein großer Befürworter der ausführlichen objektorientierten Programmierung. Der Troll geht auch davon aus, dass die Koordinaten im Format y, x vorliegen und bittet darum, getestet zu werden. Legen Sie ihn einfach in eine Datei mit dem Namen "TrollBot.java" und er wird eingestellt!
quelle
Python 3, RandomBot
Dieser Bot hat Probleme, intelligente Entscheidungen zu treffen, aber er weiß zumindest, dass er nicht versuchen soll, Dinge über andere Dinge zu stellen. Es werden nach dem Zufallsprinzip Segelflugzeuge, Boote, C / 2-Orthogonale und 2x2-Blöcke mit verschiedenen Ausrichtungen erstellt, um sicherzustellen, dass sie sich nicht mit etwas anderem, Verbündeten oder Feinden überlappen, wenn sie platziert werden.
Dieser Bot wurde nicht getestet, da ich beim Versuch, die GUI auszuführen, alle möglichen Fehler erhalte. Außerdem habe ich den TrainingBot als Basis verwendet und nur bearbeitet, sodass Ähnlichkeiten im Code wahrscheinlich darauf zurückzuführen sind.
quelle
print(sys.argv[1])
Benutzeroberfläche schlägt höchstwahrscheinlich aufgrund Ihrer Online-Verbindung 3 fehl, wodurch die Ausgabe durcheinander gebracht wird (der Simulator erwartet nur die Koordinatenfolge, die Sie aufwachen möchten). Außerdem fehlt in der letzten Zeile Ihres Programms eine abschließende Klammer.html5lib
, nicht den Ordner zu finden , der alle Bots enthielt (ich musste den Code für beide ändern), und seitdem hat das Ausführen eines der beiden Python-Bots zu einem Nicht-0-Rückkehrcode geführt 1.Python, GuyWithAGun
Er ist ein Typ, er hat eine Waffe; er ist verrückt. Er wirft einfach überall Flugwaffen ab, ohne Rücksicht darauf, was jemand anderes tut
quelle
Python 3, SquareBot
Platziert überall - vielleicht
Quadrate sind statische Objekte im Leben - sie bewegen sich nicht. Wenn ich also genügend träge Gegenstände um den Ort platziere, werden die Segelflugzeuge und Explosionen, die andere verursachen, möglicherweise blockiert oder zumindest gedämpft.
-Angepasst von TrainingBot
Obwohl ich Probleme habe, es zu testen
quelle