Software-Challenge Dokumentation

Computerspieler abgabefertig machen

Damit das Wettkampfsystem mit dem Computerspieler arbeiten kann, muss er als ausführbares Programm in ein ZIP-Archiv verpackt werden.

Je nach Programmiersprache, in der der Spieler entwickelt wurde, sind unterschiedliche Schritte notwendig.

In der Regel enthält die Spielervorlage alle nötigen Instruktionen zum Packen.

Offizielle Spielervorlagen

Inoffizielle Spielervorlagen

Das Hochladen des Spielers im Wettkampfsystem wird detailliert unter Wettkampfsystem->Computerspieler beschrieben.

Andere Programmiersprache

Bei Computerspielern in einer anderen Programmiersprache muss das ZIP-Archiv ein Shell-Script mit genauen Instruktionen zum Start des Computerspielers enthalten. Dieses muss nach dem Hochladen im Wettkampfystem als Hauptdatei ausgewählt werden.

Beachten Sie hierbei, dass diesem Script vom Wettkampfsystem Parameter übergeben werden, die an Ihr Programm weitergegeben werden müssen. Diese Parameter sind mindestens Host und Port des Spielservers sowie die Reservierungsnummer des Spiels, dem der Computerspieler beitreten soll. Ein Aufruf sieht also in etwa wie folgt aus (falls start.sh als Hauptdatei eingestellt ist):

start.sh -h gameserver -p 13050 -r 590e5e6f-cf93-488e-a12d-5c194ecf95c2

Die Parameter folgen dabei den GNU Getopt Konventionen. Das heißt, die drei Parameter können in beliebiger Reihenfolge und als kurze oder lange Version übergeben werden. Folgende Variante muss also auch von Ihrem Programm korrekt verarbeitet werden können:

start.sh --reservation 590e5e6f-cf93-488e-a12d-5c194ecf95c2 --host gameserver --port 13050

Auch die grafische Oberfläche ruft Ihr Programm mit diesen Parametern auf. Ihr Programm wird also nur von der grafischen Oberfläche richtig gestartet, wenn es die Parameter richtig verarbeitet.

Für die meisten Programmiersprachen gibt es Bibliotheken, die die Kommandozeilenparameter nach diesem Schema verarbeiten können, Sie müssen diese Funktion also nicht unbedingt selbst implementieren.

Weiterhin ist es wichtig, den Interpreter in der ersten Zeile des Script anzugeben, da das Script nicht von einer Shell aufgerufen wird. Ein start.sh Script sieht also in etwa so aus:

#!/bin/sh
chmod +x hauptprogramm_dateiname
./hauptprogramm_dateiname "$@"
  • Script soll von /bin/sh interpretiert werden, es ist also ein einfaches Shell-Script.
  • Die Binärdatei wird ausführbar gemacht (das ist nötig, da in einem ZIP-Archiv das Ausführbar-Attribut nicht gespeichert wird).
  • Die Binärdatei wird aufgerufen und alle Parameter, die das Script bekommen hat, werden weitergereicht ("$@").

Die start.sh muss in UTF-8 und mit UNIX(LF) Zeilenenden kodiert sein. Andere Kodierungen führen zu Fehlern bei der Ausführung auf dem Server. In Notepad++ kann die Kodierung einfach in dem Tab Kodierung angepasst werden, die Zeilenenden in Bearbeiten > Format Zeilenende.

Bei kompilierten Sprachen müssen die Computerspieler für 64bit Linux kompiliert werden, bei interpretierten Sprachen muss ein passender Interpreter auf dem Wettkampfsystem vorhanden sein. Weiterhin müssen Abhängigkeiten wie z.B. genutzte Bibliotheken vorhanden sein oder mitgeliefert werden.

Technische Daten für die Ausführung der Computerspieler

Bei allen im Wettkampfsystem ausgetragenen Spielen laufen die Computerspieler auf den Servern des Wettkampfsystems.

Betriebssystem:64 Bit Linux
Prozessor:Ein Thread eines Intel Xeon E5-2620 v4, 2,1 GHz
Arbeitsspeicher:1,5 GB

Die Begegnungen

Jede Begegnung besteht aus jeweils sechs Spielen, wobei das Recht des ersten Zuges abwechselt.

Die Zugzeit ist für jeden Zug auf zwei Sekunden begrenzt. Dabei gilt für die Rechenzeit die im Institut verwendete Hardware als Referenz. Jeder Computerspieler wird dabei auf einer eigenen virtuellen Maschine mit unten stehenden Spezifikationen ausgeführt.

Sollte ein Spieler einen ungültigen Zug setzen oder die maximale Zugzeit überschreiten, so hat dieser Spieler verloren. In allen anderen Fällen wird das Spiel gemäß der Spielregeln zu Ende gespielt und der Gewinner ermittelt.

Log-Ausgabe

Die Computerspieler laufen im Wettkampfsystem ohne eine grafische Oberfläche, sie können also keine Fenster oder ähnliches anzeigen. Der Versuch eines Computerspielers, so etwas trotzdem zu tun, wird wahrscheinlich zum Absturz des Computerspielers führen.

Die Computerspieler können jedoch Text auf die beiden Standard-Ausgabedatenströme "stdout" und "stderr" schreiben. Diese Ausgaben finden sich dann in den Log-Dateien wieder, die nach Beenden eines Spiels über das Wettkampfsystem verfügbar sind.

Lesen von Daten

Zugriff auf das Internet ist nicht möglich. Schreiben auf die Festplatte ist möglich, es kann jedoch nicht auf Daten, die in früheren Spielen geschrieben wurden, zugegriffen werden.

Ausführungsumgebung

Der Computerspieler wird in einem Docker container ausgeführt, welcher die verfügbaren Bibliotheken und Programme bestimmt. Die verfügbaren Container-Vorlagen sind im Wettkampfsystem einsehbar, und bieten unter anderem Java, Python, Ruby, Node.js, Swift, .NET, C++ Boost, Tensorflow oft in mehreren Versionen.

BezeichnungImage-NameBeschreibung
Java 17openjdk:17Open Source Java Platform, Standard Edition, Version 17 (bzw. 1.17). Für alle Computerspieler auf Basis des Java Zufallsspielers.
Java 8openjdk:8u151-jreOpen Source Java Platform, Standard Edition, Version 1.8.
Java 18openjdk:18Open Source Java Platform, Standard Edition, Version 18 (bzw. 1.18)
Ruby 2ruby:2.7.5Ruby Interpreter, Version 2.7.5 mit installiertem Software-Challenge-Gem. Für alle Computerspieler auf Basis des Ruby Zufallsspielers.
Python 3python:3.10.1Python Interpreter, Version 3.10.1. Für selbst entwickelte Computerspieler in Python.
.NET Runtime mcr.microsoft.com/dotnet/runtime:6.0Offizielle Microsoft .NET Laufzeitumgebung, Version 6.0. Für selbst entwickelte Computerspieler basierend auf dem Microsoft .NET Framework.
Mono 5.4 (C# .NET)mono:6.12.0Mono Laufzeitumgebung, Version 6.12.0. Für selbst entwickelte Computerspieler basierend auf dem Microsoft .NET Framework.
Swift 5.5.1swift:5.5.1Swift (core libraries), Version 5.1.3. Für selbst entwickelte Computerspieler in der Programmiersprache Swift.
Node.js 17.2.0node:17.2.0Node.js, Version 17.2.0. Für selbst entwickelte Computerspieler in der Programmiersprache Javascript.
C++ Boost Librarycpp-boost basierend auf ubuntu:20.04Container mit vorinstallierten C++ Boost Bibliotheken (libboost-program-options1.71.0, libboost-atomic1.71.0, libboost-system1.71.0)
Deep Learningfloydhub/dl-dockerImage mit Bibliotheken für diverse deep learning Ansätze (TensorFlow, Caffe, Theano, Keras, Lasagne und Torch). Bitte das Wettkampfsystem nicht zum trainieren verwenden. Das Image soll nur verhindern, dass die für den Betrieb des fertig trainierten Clients notwendigen Bibliotheken jedesmal mit hochgeladen werden müssen.
Python Tensorflowsc-tensorflowPython 3 mit Tensorflow Bibliotheken. Bitte das Wettkampfsystem nicht zum trainieren verwenden. Das Image soll nur verhindern, dass die für den Betrieb des fertig trainierten Clients notwendigen Bibliotheken jedesmal mit hochgeladen werden müssen.
PyPypypy:3.9PyPy is a fast, compliant alternative implementation of the Python language. Version 3.9

Wenn Ihr Computerspieler eine speziellere Umgebung benötigt (zum Beispiel ein hier nicht angebotener Interpreter), nehmen Sie bitte mit uns Kontakt auf (tech@software-challenge.de). Wir stellen gern weitere Images zur Verfügung.