PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Auswertung] Coding Contest 2017



Barny
19.04.2017, 15:16
Ergebnis der Auswertung:

Die Auswertung wurde soeben abgeschlossen und wir möchten Easysurfer gerne zum 1. Platz gratulieren! Dein Bot hat grandiose Runden gespielt und sich den Sieg verdient! ;)
Ich bin total gespannt auf deinen Code! Vielleicht schreibst du noch ein paar Zeilen darüber?

Den Code der Serveranwendung werde ich nun auch zeitnah veröffentlichen.
Ich habe soeben den Code der Serveranwendung veröffentlicht. Ihr findet ihn im Git-Repo. :)
Des Weiteren findet ihr die detaillierte Auswertung am Ende dieses Beitrages. Die Serverlogs der einzelnen Runden stehen dort zum Download bereit.

Ich bedanke mich bei allen die teilgenommen und mich unterstützt haben!




Auswertung Coding Contest 2017 ["Mau Mau"-Bot]

Hiho!

Am Sonntag ist es soweit und der Coding Contest 2017 wird ausgewertet!
Hierzu wurden bereits alle vorläufig angemeldeten Teilnehmer per PM benachrichtigt und ich warte noch auf die restlichen Antworten. Derzeit definitiv zugesagt haben:


cruzz
lrg0
Leange
Easysurfer
zaub9rwald
blackberry
Dailox
wacked


Der Ablauf:
Am Sonntag (23.04.2017) um 15:00 Uhr treffen sich alle Teilnehmer auf dem FH-Jabberserver im Channel #codingcontest2017. Wer von den Teilnehmern also noch keinen Jabberaccount hat, den möchte ich bitten einen zu erstellen. Wie dies funktioniert könnt ihr diesem Thread hier entnehmen: Free-Hack Jabber Server (https://free-hack.com/showthread.php?76871-Free-Hack-Jabber-Server)

Haben wir uns alle eingefunden, dann werden insgesamt 7 Matches (1 Match = 11 Runden) gespielt. Dies gilt natürlich nur, wenn tatsächlich alle vorangemeldeten Teilnehmer auch ihren Bot antreten lassen. Kommen wir auf eine ungerade Anzahl an Teilnehmern, so spielen wir eine Qualifikationsrunde, in der entschieden wird, wer automatisch in Runde 2 landet.
Die Qualifikationsrunde sieht so aus, dass jeder Spieler gegen jeden anderen Spieler eine Runde spielt. Die Punkte werden gezählt. Wer die meisten Punkte hat, der findet sich in Runde 2 vor. :)

Der generelle Ablaufplan wird wie nachfolgend aussehen:
http://fs5.directupload.net/images/170422/dpaz7mih.png (http://www.directupload.net)
Wer an welchem Platz spielen wird, wird per Zufall entschieden. Da sich nun alle Teilnehmer gemeldet haben und teilnehmen, habe ich die obige Grafik einmal ergänzt. Man beachte auch meine Künste in der Bildbearbeitung. :D

Dies erstmal zum Ablauf. Sollten noch Fragen bei den Teilnehmern auftauchen, so würde ich mir wünschen, dass ihr mir diese per PM stellt. Ich möchte diesen Thread so sauber wie möglich halten und ich möchte auch nicht, dass eine Frage untergeht.

Ich werde diesen Thread auch nutzen, um die Sieger der einzelnen Matchen unten zu ergänzen. Selbstverständlich wird hier später auch noch der Gesamtsieger ernannt.

Viele Grüße,

Barny

Nachträglich hinzugefügte Informationen:


Es haben sich nun alle Teilnehmer zurückgemeldet und die Teilnahme bestätigt. Nicht alle spielen aber selber. Dies aus Zeitgründen. Ich werde die Codes die mir die User zugeschickt haben selber laufen lassen.
Teilnehmer die nicht zum vereinbarten Termin auftauchen werden automatisch disqualifiziert und scheiden aus dem Contest aus. Dies bedeutet für den geplanten Gegner den Gewinn des Matches.
Grafik ergänzt


--------------------------------------------------------------------------------------------------------------------------------------------------------------
Auswertung:

Match 1 (Dailox gegen Easysurfer):
Gewinner: Easysurfer (Dailox ist ausgeschieden weil sein Code leider nicht fertig geworden ist :( )

Match 2 (lrg0 gegen zaub9rwald):
Gewinner: lrg0 (mit 6:0) Download Serverlogs (https://www.barny-blog.de/Matches/Ebene_1/lrg0_gegen_zaub9rwald.zip)

Match 3 (Leange gegen Blackberry):
Gewinner: Blackberry (mit 6:3) Download Serverlogs (https://www.barny-blog.de/Matches/Ebene_1/Leange_gegen_blackberry.zip)

Match 4 (cruzz gegen wacked):
Gewinner: cruzz (mit 6:0) Download Serverlogs (https://www.barny-blog.de/Matches/Ebene_1/cruzz_gegen_wacked.zip)


Match 5 (Easysurfer gegen lrg0):
Gewinner: Easysurfer (mit 6:3) Download Serverlogs (https://www.barny-blog.de/Matches/Ebene_2/Easysurfer_gegen_lrg0.zip)

Match 6 (Blackberry gegen cruzz):
Gewinner: Blackberry (mit 6:2) Download Serverlogs (https://www.barny-blog.de/Matches/Ebene_2/blackberry_gegen_cruzz.zip)

Match 7 (Easysurfer gegen Blackberry):
Gewinner: Easysurfer (mit 6:3) Download Serverlogs (https://www.barny-blog.de/Matches/Ebene_3/blackberry_gegen_Easysurfer.zip)

zzurc
20.04.2017, 12:53
like weil selbst gemalt.

Barny
22.04.2017, 20:00
Ich habe eben weitere Informationen zur Auswertung oben hinzugefügt. Unter anderem sind jetzt die Aufstellungen für Morgen zu erkennen. :)

Viele Grüße,

Barny

wacked
23.04.2017, 15:05
So während der Contest läuft, schreib ich hier mal was zu meinem Code (https://git.free-hack.com/wacked/manuellmaumau).

Ich weiß ehrlich gesagt nichtmehr wieso aber mir war schon beim Lesen der Doku klar das ich eine (sehr sehr simple) state machine machen werde. Das ist eigentlich auch ganz hübsch geworden -- funktioniert aber leider gar nicht :D

Irgendwie hängt mein Code nach dem Statuswechsel in recv() und wartet auf die nächste Nachricht. Und der Server halt auf mich...
Ist mir auch vorher aufgefallen, habe ich aber nicht lösen können (Mit einer älteren Serverversion ging es mal) -- aber immerhin hab ich hierfür das erste mal Unittests geschrieben!

Danke Barny, war ein cooler Wettbewerb.

NSK
23.04.2017, 16:57
Herzlichen Glückwunsch an den Gewinner und natürlich auch an alle anderen Teilnehmer, die sich der Herausforderung gestellt haben.
Konnte aus zeittechnischen Gründen leider nicht dabei sein, wobei ich auch wirklich nicht der beste Coder bin.
Aber ich finde es schön zu sehen, dass Free-Hack durch solche Projekte wieder etwas aufblüht und, trotz des Bildes was sich in anderen Communitys abzeichnet, nicht zu einem Fraud/Crime-Forum wird.
Das findet man heutzutage leider viel zu selten.

J0hn.X3r
24.04.2017, 14:51
Ahoi!

Auch von mir: Herzlichen Glueckwunsch an den Gewinner! :)

Vielen Dank auch an alle, die mitgemacht haben - der Spaß stand an erster Stelle und ich denke das hatten die meisten auch :D

Auch einen riesen Dank an Barny fuer die Planung und Durchfuehrung dieser Aktion - sehr fein gemacht!

Ein Teil des Gewinns wurde heut morgen ausgeschuettet, der rest folgt, sobald ich Feedback vom Gewinner habe.

Bei einem Punkt sind wir uns aber vermutlich einig: Mehr solcher Ablaufplaene/Zeichnungen! :D

Easysurfer
24.04.2017, 17:41
Danke erstmal für die Glückwünsche :) Hat echt Spass gemacht sich intensiver mit dem Thema auseinanderzusetzen ! An dieser Stelle natürlich auch nochmal ein Danke an Barny und J0hn für die Organisation! Für die nächsten Coding Conteste stelle ich mich auch gerne als Organisator/Helfer zu Verfügung

Der Code vom Bot ist inzwischen ins Repo (https://git.free-hack.com/easysurfer/MauMauContest) gepusht. Ich werde noch ein paar Kommentare hinzufügen und die Test-Spieler auf ein einheitliches Level bringen, gibt also noch paar Commits.


Ich bin total gespannt auf deinen Code! Vielleicht schreibst du noch ein paar Zeilen darüber?

Ich hatte mehrere Ansätze die ich über seeeehr viele Simulationen und Tests evaluiert habe. Dabei habe ich stehts ein Feature in einen Spieler implementiert und diesen gegen den bisher besten Spieler antreten lassen. Schließlich hat sich "HumanStrategy9 (https://git.free-hack.com/easysurfer/MauMauContest/src/master/MauMau.Game/Players/HumanStrategy9.cs)" als bestes rausgestellt, knapp nach "HumanStrategy4c (https://git.free-hack.com/easysurfer/MauMauContest/src/master/MauMau.Game/Players/HumanStrategy4c.cs)" und "HumanStrategy6 (https://git.free-hack.com/easysurfer/MauMauContest/src/master/MauMau.Game/Players/HumanStrategy6.cs)"

Die wichtigste Erkenntnis war dabei: Wenn man die Möglichkeit hat eine Karte von Farbe X zu spielen oder eine Karte der Farbe Y zu spielen sollte man die Karte spielen wovon man weniger hat. Das scheint erstmal nicht logisch, hat sich aber in den Tests als besser rausgestellt:

Player 1 vs Player 2: 5402 vs 4598 =54.02%
mit der sonst gleichen Strategy.

Gegen einen Spieler welcher zufällig Karten legt und sich zufällig Farben wünscht hatte ich am Ende eine Gewinnrate von 72%. Dieser Wert war stehts mein Referenzwert wie gut der Spieler wirklich ist.
Über weitere Strategien wird es bald noch etwas auf meinem Blog geben.

Ein weitere Ansatz der leider nicht so viel Benefit gebracht hat war ein Suchbaum. Das Problem bei MauMau ist einfach die hohe Komplexität wenn man die Gegnerkarten nicht kennt. Daher macht ein solcher Suchbaum erst Sinn wenn man die Gegnerkarten auf ein Minimum einschränken kann bzw die eigene Hand so wenig Karten hält dass der Suchbaum einigermaßen Berechnenbar ist.
Dadurch war es auch möglich Situationen zu Erkennen die zu einem 100%igen Sieg führen, Beispielsweise:


TopCard: Karo 10
Player 1 Hand: Herz Bube, Karo 9
Player 2 Hand: [ALLE KARTEN AUßER Karo 7, Karo 8]

Dadurch dass Karo 7 und Karo 8 bereits gespielt worden können sich diese nicht in der Gegnerhand befinden. Wenn man zuerst den Bube mit Wunschfarbe Karo spielt kann man nicht mehr verlieren, wenn man als erstes allerdings die Karo 9 spielt ist noch ein Verlust möglich (wenn der Gegner darauf mit einem Bube Antwortet).
Solche Situationen ergeben sich auch wenn man viele 8ter auf der Hand hat und den Gegner mit "einem Zug" besiegen kann ohne dass er Antworten kann.

Eine Suchbaumevalution durch eine Heuristik mit Suchbaumstufe 4 ist zwar implementiert, hat aber keinen wirklichen Vorteil gebracht (1-2% gegen Spieler ohne Heuristik).

Bei Fragen gerne stellen :)

Grüße