ANMERKUNG: Diese Herausforderung ist derzeit nicht aktiv, da ich die für die Ausführung eines Matches erforderlichen Sprachen nicht installieren kann. Wenn jemand anderes die Zeit und das Interesse dazu hat, bin ich nicht dagegen.
Eine Rangliste finden Sie unten im Beitrag.
Dies ist eine semi-kooperative King-of-the-Hill-Herausforderung, bei der die Bots Pfade durch ein zweidimensionales Gitterdiagramm konstruieren. Der Bot, der die Knoten mit dem meisten Verkehr kontrolliert, ist der Gewinner. Es sind jedoch mehr als die Ressourcen eines Bots erforderlich, um tatsächlich einen Verbindungspfad zu erstellen, sodass die Bots in gewissem Maße zusammenarbeiten müssen.
Gameplay
Geben Sie im Folgenden N > 0
die Anzahl der im Spiel befindlichen Bots an.
Das Gitter
Das Spiel wird auf einem zweidimensionalen, ganzzahligen Gitter gespielt , dessen linke untere Koordinate bei liegt . Jede Koordinate mit hat ausgehende Kanten für die drei Koordinaten , und darüber, wo die -Koordinaten modulo getroffen werden . Dies bedeutet, dass das Gitter an den Ost- und Westkanten umläuft. Jede untere Koordinate ist eine Quelle und jede obere Koordinate ist eine Senke .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
Das folgende Bild zeigt ein 8 × 8
Raster.
Jeder Scheitelpunkt des Diagramms ist entweder inaktiv , aktiv oder unterbrochen . Alle Vertices beginnen inaktiv und können von Bots aktiviert werden, die dann ihre Eigentümer sind. Außerdem können Bots Scheitelpunkte brechen und können nicht repariert werden.
Turn Order
Eine Runde besteht aus einer Zerstörungsphase und einer Aktivierungsphase . In der Zerstörungsphase kann jeder Bot einen inaktiven Vertex brechen. Dieser Scheitelpunkt ist von da an unterbrochen und darf von niemandem aktiviert werden. In der Aktivierungsphase kann jeder Bot einen inaktiven Vertex aktivieren. Von da an besitzen sie diesen Scheitelpunkt und er kann von niemand anderem reaktiviert werden. Mehrere Bots können einen einzigen Vertex besitzen, wenn sie ihn alle im selben Zug aktivieren. In jeder Phase werden die Scheitelpunktauswahlen gleichzeitig durchgeführt.
Wertung
Eine Runde dauert genau Drehungen. Danach wird die Runde wie folgt gewertet. Von jedem aktiven Quellscheitelpunkt führen wir mal eine zufällige Tiefensuche entlang der aktiven Scheitelpunkte durch (was bedeutet, dass die Kinder jedes Scheitelpunkts in einer zufälligen Reihenfolge besucht werden). Wenn ein Pfad von der Quelle zu einer Senke gefunden wird, erhält jeder Eigentümer des Scheitelpunkts für alle Scheitelpunkte entlang dieses Pfads einen Punkt.N2
N
Das gesamte Spiel dauert 100 Runden und der Bot mit den meisten Punkten ist der Gewinner. Ich kann diese Zahl erhöhen, wenn die Varianz der Ergebnisse zu hoch ist.
Zusätzliche Regeln
- Kein Durcheinander mit dem Controller oder anderen Einsendungen.
- Höchstens eine Einreichung pro Teilnehmer.
- Keine externen Ressourcen außer einer privaten Textdatei wurden zu Beginn des Spiels gelöscht.
- Gestalten Sie Ihren Bot nicht so, dass er bestimmte Gegner schlägt oder unterstützt.
- Stellen Sie Befehle bereit, um Ihren Bot zu kompilieren und auszuführen. Jeder Compiler / Interpreter, der für Debian Linux frei verfügbar ist, ist akzeptabel.
Der Controller
Der Controller ist in Python 3 geschrieben und befindet sich in GitHub . Ausführliche Anweisungen finden Sie in der README-Datei. Hier ist eine API, mit der Sie loslegen können:
- Bots werden zu Beginn jeder Runde gestartet und bleiben bis zum Ende der Runde bestehen. Die Kommunikation mit der Steuerung erfolgt über STDIN und STDOUT unter Verwendung von Nachrichten mit Zeilenumbruch.
BEGIN [num-of-bots] [num-of-turns] [side-length]
wird am Anfang eingegeben.DESTROY [turn]
wird zu Beginn jeder Zerstörungsphase eingegeben. Ihr Bot antwortet entwederVERTEX x,y
mit, um einen Scheitelpunkt auszuwählen, oderNONE
.BROKEN [turn] [your-choice] [other-choices]
wird am Ende jeder Zerstörungsphase eingegeben. Die Reihenfolge der anderen Bots wird zu Beginn eines jeden Spiels zufällig festgelegt, bleibt jedoch dabei festgelegt. Die Auswahlmöglichkeiten werden alsx,y
oder dargestelltN
.ACTIVATE [turn]
undOWNED [turn] [your-choice] [other-choices]
sind die Äquivalente der oben genannten für die Aktivierungsphase und haben die gleiche Semantik.SCORE [your-score] [other-scores]
wird am Ende des Spiels eingegeben.- Ihr Bot hat 1 Sekunde Zeit , um die Ergebnisse einer Phase zu analysieren und den nächsten Scheitelpunkt auszuwählen, und 1 Sekunde , um nach der Bewertung zu beenden. Ich werde die Einsendungen auf meinem relativ alten Laptop testen, also ist es besser, hier etwas Spielraum zu lassen.
Bitte denken Sie daran, Ihren Ausgabepuffer zu leeren. Andernfalls kann der Controller in einigen Umgebungen hängen bleiben.
Bestenliste
Aktualisiert 13.03.2015
Peacemaker ist in Betrieb und auch Funnelweb hat ein Update erhalten. Die Punktzahlen stiegen um eine Größenordnung. Connector hat das Zeitlimit in zwei Spielen überschritten.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Das vollständige Protokoll mit ASCII-Grafiken finden Sie im Repository des Controllers unter graphical_log.txt
.
Einige Beobachtungen:
- Der Konnektor kann sehr einfach gestoppt werden, indem ein einzelner Scheitelpunkt davor gebrochen wird. Ich vermute, dass Ärger dies häufig tut. Derzeit ist dies jedoch wenig sinnvoll, da möglicherweise nur Connector einen Pfad erstellen kann.
- Wassermelone kann eine anständige Punktzahl erzielen, indem sie sich zufällig auf einem Verbindungspfad befindet (da die DFS sehr wahrscheinlich ihre Scheitelpunkte verwendet).
- Forscher mag Reben von den Wassermelonen anbauen.
- Das aktualisierte Funnelweb erzielt wirklich gute Ergebnisse, da Connector normalerweise in der unteren Hälfte des Rasters einrastet.
- Die Spiele werden ziemlich lang, die durchschnittliche Runde auf meinem Computer dauert ungefähr 25 Sekunden.
4/3*N^2
, und selbst dort hatten die Bots Probleme, gültige Pfade zu bilden. Connector wurde jedoch vorübergehend aufgrund eines Fehlers disqualifiziert, und jetzt, da es behoben wurde, erwarte ich, dass die Spiele interessanter werden. Ich werde heute Abend eine weitere Charge ausführen.