Benedikt gewinnt Code Competition und 500€ Preisgeld!
Benedikt hat seine Lösung zur Code Competition “Kampf gegen Mühlen” in JavaScript entwickelt und dabei eine ganze Menge gelernt. Seine Lösung hat überzeugt und Benedikt den ersten Platz eingebracht – herzlichen Glückwunsch!
IT-Talents: Hallo Benedikt, herzlichen Glückwunsch zu Deinem ersten Platz bei der Code Competition „Kampf gegen Mühlen 2017“! Erzähl den anderen IT-Talenten doch kurz etwas über Dich.
Benedikt:
Vielen Dank! Hallo, ich bin Benedikt. Ich bin 28 Jahre alt und bin in den letzten Zügen meines Masterstudiums der Informatik an der RWTH Aachen
IT-Talents: Was hat Dich motiviert, an der Competition teilzunehmen und wie bist Du auf den Wettbewerb aufmerksam geworden?
Benedikt:
Mühle reizte mich schon als kleines Kind. Meine Oma hat es mir damals beigebracht, mich aber immer besiegt… Ich habe zwar im Studium Grundlagen der Spieltheorie in Pflichtfächern gehabt, aber das Thema KI war bisher eigentlich bei mir nie so sehr ein Schwerpunkt von mir. Umso mehr hat es mich einmal motiviert mich in Dinge wie Alpha-Beta Pruning, Q-Learning und diverse Optimierungen dazu von Grund auf einzulesen. Zusätzlich hatte ich relativ früh die Idee, das ich ermöglichen wollte zwei AIs gegeneinander antreten zu lassen.
Ich verfolge die Coding Competitions und die Angebote auf it-talents.de schon seit längerer Zeit. Ich glaube, initial bin ich durch einen E-Mail-Verteiler auf it-talents aufmerksam geworden und bin dort auch in diversen Talentpools und habe bereits im Februar 2017 an der Code Competition „Der Handlungsreisende“ den 3. Platz belegt. Jetzt ergab sich zeitlich wieder die Möglichkeit teilzunehmen umso mehr freut es mich dass es diesmal sogar für den 1. Platz gereicht hat.
IT-Talents: Wie bist Du an die Lösung der Aufgabenstellung herangegangen? Hattest Du schon Erfahrung mit der Entwicklung von Spielen bzw. KI?
Benedikt:
Ich habe vorher keine Erfahrungen mit AI Entwicklung gehabt und wollte einfach mal damit rumspielen. Zunächst habe ich mir diverse Videos auf Youtube zu ähnlichen Aufgabestellungen (Schach AIs) angeschaut. Gleichzeitig habe ich mir auf GitHub Implementierungen von Schach Ais angeschaut und mir die entsprechenden Wikipedia Artikel durchgelesen. Zusätzlich war mir klar, dass ich darueber hinaus noch etwas mit Machine Learning machen wollte und habe mir diverse Videos zu dem Thema angeschaut.
Ich habe für mich selbst versucht einen agilen Entwicklungsprozess zu verfolgen: Ich wollte möglichst schnell einen lauffähigen bespielbaren Prototypen. Aus diesem Grund habe ich mit der GUI gestartet die ich in fabric.js implementiert habe. Anschliessend habe ich die ganze Spiellogik und Gewinnbedingungen eingebaut. Dies habe ich zunächst mit einer Zufallsstrategie als Gegenspieler getestet. Im nächsten Schritt habe ich mich dann auf die AI konzentriert und zu nächst klassisches MiniMax mit Alpha-Beta Pruning implementiert. Als Optimierung habe ich Transposition Tables mit Zobrist Hashing und Iterative Deepening implementiert. Mühle ist hier durch die Symmetrie sehr interessant. Anschliessend habe ich zwei Machine-Learning Strategien implementiert, was zunächst etwas Forschung in dem Bereich erforderte, weil ich a) ein Trainingsframework brauchte und b) rausfinden musste wie man das in JavaScript macht.
IT-Talents: Du hast Dich für eine Lösung der Aufgabenstellung in JavaScript entschieden, wieso?
Benedikt:
Ich habe mir gedacht ich will auch bei der Code Competition was neues Lernen so wollte ich mich schon immer mal mit vue.js auseinandersetzen und gleichzeitig hat mich interessiert, wie viel JavaScript Performance mittlerweile so in einem Browser abrufbar ist.
Da KI doch sehr rechenlastig sein kann, ich aber auf eine klassische Client-Server architektur verzichten wollte, hat es mich gereizt das ganze als eine App im Browser zu implemtieren die ggf. eben auch Offline verfügbar sein könnte.
IT-Talents: Welche Probleme sind bei der Entwicklung der Software aufgekommen? Wie lange hat die Entwicklung gedauert?
Benedikt:
Die Entwicklung hat ca. 1 Woche gedauert. Ich habe den Kleinkram unterschätzt den so eine GUI mit sich bringen kann. Darüberhinaus habe ich lange überlegt, wie ich eine Instanz eines Mühle Spiels geschickt encodieren kann. Insbesondere gerade auf den letzten Metern bis kurz vor der Deadline, war es zeitlich tatsächlich kritisch und doch noch ganz schön hektisch.
IT-Talents: Und was hast Du durch die Entwicklung gelernt?
Benedikt:
Sehr viel über JavaScript insbesondere ES6. Ich habe mir vue.js angeguckt, auch mit fabric.js habe ich bisher nie was gemacht und ich habe gelernt wie man in JavaScript mithilfe von synaptic neuronale Netze trainieren kann. Darüberhinaus habe ich theoretisch auch viel neues über Spieltheorie gelernt und das gleichzeitig auch anwenden können.
IT-Talents: Zu guter Letzt: Was würdest Du Dir thematisch gerne einmal als Code Competition wünschen?
Benedikt:
Gerne mehr Optimierungsprobleme oder vielleicht praktische Probleme aus dem Bereich Verteile Systeme (IoT, Cloud, SDN) oder der IT-Sicherheit. Ich fände es z.B. cool wenn man ein neues Protokoll entwerfen müsste und das gescheit spezifizieren müsste.
IT-Talents: Vielen Dank für Deine Teilnahme, das Interview und viel Spaß mit Deinem Gewinn 😉