dotnetpro.contest 1/2017 - Auswertung 16.03.2017, 00:00 Uhr

Licht am Ende des Quoridors

Eine Bot-KI für das Brettspiel Quoridor entwickeln
Manchmal sieht man den Ausgang vor lauter Wänden nicht … oder etwa doch? Im letzten Programmierwettbewerb der dotnetpro wurde Taktikern und kühnen Planern die Aufgabe gestellt, eine KI zu entwickeln.
Diese KI sollte in der Lage sein, dass Brettspiel Quoridor gegen andere Computergegner zu spielen und natürlich im Idealfall auch gegen alle anderen Teilnehmer zu gewinnen. Insgesamt sieben kühne Strategen waren letztendlich angetreten, um sich den Sieg zu sichern.
Turnier: Matrix mit dem jeweiligen Spielergebnis (Bild 1)
Um zu ermitteln, wer sich denn nun den Titel des besten Quoridor Bots auf die Fahnen schreiben darf, traten alle Kontrahenten jeweils gegeneinander an. Dabei mussten sie je einmal mit der unteren und einmal mit der oberen Startposition zurechtkommen. Bei sieben Teilnehmern ergaben sich also insgesamt 42 Spielpaarungen, die in Bild 1 visualisiert sind. In dieser Matrix kann man auch gleichzeitig sehen, wer das entsprechende Spiel gewonnen hat und warum. Die Spielbedingungen waren die gleichen wie in der Testumgebung PlayerVsBot: 60 Sekunden maximale Denkzeit und ein Spielabbruch nach 100 Zügen eines Bots.
Folgende Gründe für einen Sieg waren möglich:
  • Regulärer Sieg: Der Bot hat seinen Kontrahenten regelkonform besiegt.
  • Sieg durch invaliden Zug: Der Gegner hat einen nicht gültigen Zug als Antwort zurückgegeben.
  • Sieg durch Timeout: Der Gegner brauchte zu lange, um seinen Zug zu übermitteln, sei es durch zu langes Rechnen oder durch eine Exception innerhalb des Bots.
Tabelle 1: Turnierstatistiken A
Bots summed moving time average moving time sum placed walls avg placed walls avg placed walls (when winning)
QMinatorBotJochenBaier 16149 s 51,594 s 64 5,333 5,364
LukasBot 15,831 s 0,047 s 101 8,417 7,889
StefanBoos 2,902 s 0,008 s 100 8,333 7,500
DonkeyBot 0,524 s 0,002 s 86 7,167 3,800
Qbot 1068,433 s 3,370 s 76 6,333 5,800
CrazyBot 17792,909 s 59,508 s 60 5 3
MazeMakerDuelBot 109,626 s 9,135 0 0
Tabelle 1: Turnierstatistiken A
Bots summed moving time average moving time sum placed walls avg placed walls avg placed walls (when winning)
QMinatorBotJochenBaier 16149 s 51,594 s 64 5,333 5,364
LukasBot 15,831 s 0,047 s 101 8,417 7,889
StefanBoos 2,902 s 0,008 s 100 8,333 7,500
DonkeyBot 0,524 s 0,002 s 86 7,167 3,800
Qbot 1068,433 s 3,370 s 76 6,333 5,800
CrazyBot 17792,909 s 59,508 s 60 5 3
MazeMakerDuelBot 109,626 s 9,135 0 0
Interessehalber wurden während des laufenden Turniers neben den Siegen und Niederlagen der Teilnehmer noch verschiedene Statistiken mitgeloggt. Diese sind in Tabelle 1 und Tabelle 2 zusammengefasst. Interessanterweise haben nicht alle Bots die maximal erlaubte Zugzeit ausgenutzt, um sich beispielsweise möglichst lange einen Spielbaum mit potenziell vorteilhaften Zügen zu errechnen. Die schnellste KI hatte hierbei eine mittlere Zugzeit von gerade einmal 0,002 Sekunden. Das andere Extrem dagegen war eine mittlere Zugzeit von 59,51 Sekunden.
Tabelle 2: Turnierstatistiken B
Bots avg placed walls (when losing) sum  moves avg moves per game avg moves (when winning) avg moves (when losing)
QMinatorBotJochenBaier 5 313 26,083 25,909 28
LukasBot 10 336 28 25,222 36,333
StefanBoos 10 370 30,833 26,500 39,500
DonkeyBot 9,571 318 26,500 15,400 34,429
Qbot 6,714 317 26,417 23,200 28,714
CrazyBot 6 297 24,750 18,750 27,750
MazeMakerDuelBot 0 12 1 1
Tabelle 2: Turnierstatistiken B
Bots avg placed walls (when losing) sum  moves avg moves per game avg moves (when winning) avg moves (when losing)
QMinatorBotJochenBaier 5 313 26,083 25,909 28
LukasBot 10 336 28 25,222 36,333
StefanBoos 10 370 30,833 26,500 39,500
DonkeyBot 9,571 318 26,500 15,400 34,429
Qbot 6,714 317 26,417 23,200 28,714
CrazyBot 6 297 24,750 18,750 27,750
MazeMakerDuelBot 0 12 1 1
Auch bei der Zuganzahl der verschiedenen Bots fanden sich große Unterschiede. So sind es knapp elf Züge Unterschied bei durchschnittlicher Zuganzahl bei siegreichen Spielen. Im ganzen Turnier wurden insgesamt 1963 Züge gespielt. Die letzten Kennzahlen, die noch mitprotokolliert wurden, verrieten etwas über den Einsatz der zu Verfügung stehenden Wände. Insgesamt wurden im Verlaufe des Wettkampfes 487 Wände platziert.
Doch genug der ganzen Statistiken und Theorie! Soweit man es nachvollziehen konnte, hielten sich alle Einsendungen an eine faire Spielweise. Kein Bot hat versucht, den gegnerischen Prozess zu beenden oder dem Gegner wertvolle Rechenzeit zu klauen.
Tabelle 3: Platzierungen der Teilnehmer
Platzierung Bot Siege
1 QMinatorBotJochenBaier 11
2 LukasBot 9
3 StefanBoos 8
4 DonkeyBot 5
5 Qbot 5
6 CrazyBot 4
7 MazeMakerDuelBot 0
Tabelle 3: Platzierungen der Teilnehmer
Platzierung Bot Siege
1 QMinatorBotJochenBaier 11
2 LukasBot 9
3 StefanBoos 8
4 DonkeyBot 5
5 Qbot 5
6 CrazyBot 4
7 MazeMakerDuelBot 0
Nachdem alle teilnehmenden Bots sich bis auf die letzte zu setzende Wall duelliert hatten, ergaben sich folgende Platzierungen (Tabelle 3): Den ersten Platz belegt der Bot QMinatorBotJochenBaier von Jochen Baier. Somit darf er sich über eine Freedev-Premium Lizenz für IncrediBuild freuen. IncrediBuild beschleunigt Builds, Testläufe, Paketierung und vieles mehr um das bis zu 30-Fache. An neuen Quoridor-Strategien darf fortan Lukas Slizik tüfteln, denn er sichert sich mit seinem virtuellen Strategen LukasBot den zweiten Platz und damit ein Quoridor Mini als Brettspiel. Den dritten Platz gewinnt Stefan Boos mit seinem nach ihm benannten Bot. Er erhält dafür ein Buch zum Thema Softwareentwicklung aus dem Fundus der Redaktion. Die Redaktion gratuliert den Gewinnern herzlich und sagt Danke für die tollen Einsendungen.
Im dotnetpro-Repository [1] des Contests findet sich jetzt eine logHistory.txt. In dieser Datei finden Sie alle Spiele des Turniers in Form von komprimierten Zeichenketten. Diese Strings können in den Replayviewer des OpenQuoridor Frameworks geladen werden. So können alle Interessierten noch einmal die Spiele nachverfolgen. Der Sourcecode des OpenQuoridor Frameworks lässt sich auch auf Github unter [2] finden. Die Autoren freuen sich, wenn sich der ein oder andere Teilnehmer dazu entschließen sollte, den entwickelten Bot per Pull Request in das Projekt mit einzubringen.
Dokumente
Artikel als PDF herunterladen


Das könnte Sie auch interessieren