KOBALTMEERCODE. FLOTTE. WETTKAMPF.
Anleitungen & Inhalt

ANLEITUNGEN

AUF DIESER SEITE

Vergleichen und Turniere

Eine einzelne gewonnene Partie sagt wenig. Karten und Startplätze beeinflussen das Ergebnis stark. Kobaltmeer bringt deshalb drei Werkzeuge für faire Vergleiche mit.

Reproduzierbar spielen

Die Engine liefert bei gleichem Seed und gleichen Befehlen immer exakt dieselbe Partie. Damit auch dein Bot reproduzierbar bleibt, beziehe jeden Zufall aus self.rng und nutze keine Uhrzeit. Teste Verbesserungen immer auch auf neuen, bisher unbenutzten Seeds. Sonst optimierst du leicht nur auf die paar Karten, die du gerade kennst.

Benchmark: alle Startplätze durchrotieren

bots/test_bot.py ist die Kopie aus der Bot-Anleitung, in der du etwas geändert hast. Sind beide Dateien noch gleich, sind es auch die Ergebnisse.

./start.sh benchmark --bots bots/mein_bot.py bots/test_bot.py --seeds 42 43 44 \
  --output runs/mein-vergleich.json

Jeder Bot spielt auf jeder Karte jeden Startplatz. Bei zwei Bots und drei Seeds sind das sechs Partien, bei vier Bots zwölf. Der Bericht enthält alle Einzelpartien, mittleren Rang (niedriger ist besser), mittleres Lager, Siege und Botfehler. Gleichstände an der Spitze zählen als geteilter Sieg.

Versionsvergleich A/B

Zwei Versionen deines Bots spielen jeweils gegen denselben Gegner, auf denselben Karten und auf beiden Startplätzen. Lege dafür zwei Dateien an und ändere in version_b.py eine einzige Sache, zum Beispiel die Frachtgrenze für die Heimfahrt:

cp bots/mein_bot.py bots/version_a.py
cp bots/mein_bot.py bots/version_b.py
# version_b.py im Editor öffnen und eine Zahl ändern

Dann vergleichen:

./start.sh compare --a bots/version_a.py --b bots/version_b.py --opponent collector \
  --seeds 42 43 44 --output runs/vergleich-ab.json

Für jeden Seed und Startplatz zeigt der Bericht das Lager von A und B, die Differenz B − A, Fehler und die Pfade der Replays. Öffne die passenden A- und B-Replays im Replay-Viewer unter „Versionsvergleich“: Beide Karten laufen dann synchron.

Der Mittelwert B − A ist kein Signifikanztest, und Botfehler zählen dort nicht als eigene Niederlage. Lies die Fehlerliste deshalb immer mit.

Turnier mit Elo-Liga

./start.sh tournament --bots bots/mein_bot.py collector courier pioneer raider \
  --seeds 42 43 44 --league runs/meine-liga.json --output runs/mein-turnier.json

Jede Paarung spielt auf jedem Seed beide Startplätze. Vier Bots und drei Seeds ergeben 36 Zweierpartien. Die Liga-Datei bewahrt die Rangliste; weitere Turniere mit derselben Liga-Datei setzen die Wertung fort.

  • Elo startet bei 1.500 mit K = 32.
  • Es zählen die Ränge der Engine, einschließlich Classic-Regeln wie Ausscheiden.
  • Gleicher Rang ist ein Remis.
  • Ein Botfehler bedeutet eine Niederlage; fallen beide aus, bleibt die Partie ungewertet.
  • Jede Codeversion bekommt einen eigenen Eintrag. Für Python-Bots wird der Quellcode im Botordner als Schnappschuss gespeichert (höchstens 256 Dateien und 10 MB). Modelle und andere Datendateien werden dabei nicht mitkopiert.

Andere Regeln, ein anderes Zeitlimit oder eine neue Engine-Version brauchen eine neue Liga-Datei. Dadurch werden nie Ergebnisse unter verschiedenen Bedingungen vermischt. Die Liga kannst du im Replay-Viewer unter „Elo-Liga“ ansehen.

Alle drei Befehle verstehen --size, --turns, --timeout-ms, --profile und die Regelschalter. compare und tournament spielen Zweierpartien und kennen zusätzlich --replay-dir.

Gemeinsam spielen

Am einfachsten tauscht ihr Bots als Datei aus: Lass dir die Bot-Datei eines Freundes schicken, lege sie in bots/ und lass sie in einem Turnier gegen deinen Bot antreten. Gerechnet wird dabei auf deinem Rechner. Lokal gestartete Bots laufen ohne Sandbox; nimm deshalb nur Dateien von Leuten an, denen du vertraust, oder lies den Code vorher.

Wer mit anderen um die beste Strategie wetteifern möchte, kann eine Heimnetz-Arena betreiben: mit Konten, Bot-Uploads, Warteschlange und gemeinsamer Elo.