Dieses Repository beinhaltet den Beitrag von Team Chillow mit den Teammitgliedern @Florian3007 und @jonashellmann von der Universität Oldenburg zum informatiCup 2021.
Die gestellte Aufgabe mit dem Titel spe_ed kann in dem Repo zum informatiCup 2021 nachvollzogen werden.
Zur Verwendung muss das Projekt lokal heruntergeladen werden, entweder durch Klonen des Repositorys oder durch einen Download als ZIP-Datei. Das Projekt kann unter folgendem Link eingesehen werden: https://github.com/jonashellmann/informaticup21-team-chillow
Falls Sie Docker auf Ihrem Rechner installiert haben, lässt sich für das Projekt aufgrund des vorhandenen Dockerfile
s
mit folgendem Befehl ein neuer Container erstellen:
docker build -t informaticup21-team-chillow .
Dieser Container kann mit folgendem Befehl gestartet werden, bei dem die URL zum spe_ed-Server, der API-Key und die URL zur Abfrage der Server-Zeit entsprechend angepasst werden müssen, wobei TIME_URL optional ist:
docker run -e URL=SERVER_URL -e KEY=API_KEY -e TIME_URL=TIME_URL informaticup21-team-chillow
In der Konsole des Docker-Containers lässt sich dann der Spiel-Verlauf nachvollziehen.
Neben der Docker-Installation kann das Projekt auch eigenständig gebaut werden. Dafür ist erforderlich, dass neben Python in der Version >=3.8 auch Poetry als Build-Tool installiert ist.
Die erforderlichen Abhängigkeiten lassen sich anschließend mittels poetry install
installieren.
Um ein Spiel mit einer simplen grafischen Oberfläche zu starten, in dem gegen die implementierten KIs gespielt werden
kann, genügt der Befehl python ./main.py
.
Wenn gegen andere KI-Konstellationen gespielt werden soll, muss dies im OfflineController
bei der Erstellung des
initialen Spiels manuell angepasst werden.
Um ein Online-Spiel der KI auf dem Server zu starten, müssen folgende Umgebungsvariablen verwendet werden, die im Docker-Container automatisch gesetzt bzw. als Parameter übergeben werden:
URL=[SERVER_URL]
KEY=[API_KEY]
TIME_URL=[TIME_URL]
(optional)
Mittels dem Kommandozeilen-Parameter --deactivate-pygame
kann entschieden werden, ob eine grafische Oberfläche benutzt
werden soll oder die Ausgabe wie im Docker-Container über die Konsole erfolgt.
Wenn die Python-Bibliothek PyGame nicht vorhanden ist, muss dieser Wert entweder auf False
gesetzt werden oder
es ist eine manuelle Installation von PyGame bspw. mittels Pip notwendig.
Wenn das Programm im Online-Modus gestartet wird, ist keine weitere Eingabe des Benutzers zu tätigen.
Sobald der Server das Spiel startet, kann entweder auf der Konsole oder in der grafischen Oberfläche der Spielverlauf
nachvollzogen werden.
Hier muss der Parameter --play-online
auf TRUE
gesetzt werden.
Bei einer Ausführung im Offline-Modus wird – je nach manueller Anpassung im OfflineController
- auf eine
Eingabe von keinem, einem oder mehreren Spielern gewartet, bis die nächste Runde des Spiels gestartet wird.
Der Tabelle kann entnommen werden, mit welchen Eingaben eine Aktion ausgeführt werden kann.
Der Parameter --play-online
muss für diesen Modus auf FALSE
gesetzt werden.
turn_right | turn_left | speed_up | slow_down | change_nothing | |
---|---|---|---|---|---|
Konsole | r | l | u | d | n |
Grafische Oberfläche | → | ← | ↑ | ↓ | Leertaste |
Darüber hinaus ist eine Offline-Simulation mehrerer Spiele hintereinander möglich, in dem KIs mit zufälliger
Konfiguration auf einem Spielfeld mit zufälliger Größe gegeneinander antreten, um die bestmögliche KI zu ermitteln.
Dazu ist es notwendig, dass zusätzlich zum normalen Offline-Spiel den Parameter --ai-eval-runs
auf eine Zahl größer
als Null gesetzt wird.
Mit dem Parameter --ai-eval-db-path
kann statt dem Standardwert auch individuell der Pfad zu einer SQLite3-Datenbank
festgelegt werden.
Weiterhin steuert --ai-eval-type
, welche Art der Evaluation ausgeführt werden soll.
Bei Wert 1 werden alle KIs betrachtet und jeweils maximal eine zufällige Konfiguration von einer Klasse zu einem
Spiel hinzugefügt.
Bei Wert 2 hingegen sind die nach unserer Evaluation aus dem ersten Lauf heraus ermittelten KI-Konfigurationen
hinterlegt und es werden nur aus diesen möglichen Konfigurationen KIs für ein Spiel ausgewählt.
Andere Werte als 1 und 2 sind für diesen Parameter ungültig.
Um das Projekt weiterzuentwickeln, können neue Issues geöffnet werden oder Pull Requests gegen den main
-Branch zum
Review geöffnet werden. Durch das Öffnen eines Pull Requests wird automatisch eine Code- und Test-Analyse mittels
Github Actions durchgeführt.
Das Projekt unterliegt der MIT Lizenz.