Seit kurzem ziert unsere „Turnhalle“ eine neue Errungenschaft: eine Tischtennisplatte! Lange Jahre waren die zwei Profi-Kickertische das Highlight in der Mittagspause und nach Feierabend – nun ist Tischtennis angesagt und es werden schon regelmäßig hitzige Duelle ausgetragen. Coole Sache, jedoch konnten wir bis Dato eine wichtige Frage noch nicht klären:


Welchem Scandianer gehört die Krone des besten Tischtennisspielers?

Turniere sind in Zeiten von Corona wohl keine gute Idee. Und so kam bei einem gemütlichen Feierabendplausch die Idee eines Ranglistensystems, in welchem die täglichen Einzelspiele eingetragen werden können und so die Rangliste über einen längeren Zeitraum hinweg entsteht. Vom Ehrgeiz gepackt, wurde auch direkt mit der Konzipierung und Implementierung angefangen.


Das Konzept

Als Ergebnis der Konzipierung haben wir uns auf einen Slack-Bot festgelegt, da wir Slack für firmeninterne Kommunikation benutzen. Als MVP (Minimal Viable Product) sollte es möglich sein, Einzelspiele einzugeben und sich die aktuelle Rangliste jederzeit anzuzeigen. Alles andere, wie Spieler-Paarungen oder Anzahl der Spiele, soll jedem selbst überlassen sein.

Bei jeder Eingabe eines Spielresultats sollen dann die Ratings der beteiligten Spieler anhand dessen angepasst werden. Da es genau dafür schon renommierte Algorithmen gibt, die auch berücksichtigen, wie stark die Spieler aktuell eingeschätzt werden, haben wir uns dazu entschieden, den Glicko-2-Algorithmus, der z. B. aus Schach bekannt ist, zu verwenden.


Glicko-2

Statt allen Spielern eine einzelne Zahl als Rating zuzuordnen, wird bei Glicko-2 für jeden Spieler darüber hinaus auch eine Rating Deviation (RD) und eine Rating Volatility bestimmt. Die Rating Deviation gibt die Unsicherheit über das wahre Rating des Spielers wider und entspricht einer Standardabweichung. Diese ist bei neuen Spielern recht hoch und nimmt mit einer zunehmenden Zahl an Spielen ab, aber nach Inaktivität wieder zu. Die Rating Volatility beziffert hingegen Schwankungen in der Spielstärke. Ratings werden dann rundenweise aktualisiert. Da manche Kollegen viel häufiger spielen als andere, haben wir uns an der Gruppierung von Matches von Online-go.com orientiert. Nun müssen wir über einen gewissen Zeitraum hinweg Spielergebnisse sammeln, um die Parameter von Glicko-2 so kalibrieren zu können, dass wir die besten Vorhersagen über Tischtennispartien erhalten.


Die Implementierung

Die erste lauffähige Version des Bots wurde noch am selben Tag pünktlich um Mitternacht deployt. Im Wesentlichen wurde eine kleine API, geschrieben in Python (Fast API) und PostgreSQL für die Persistierung, implementiert und in der AWS Cloud gehostet. In Slack musste dann lediglich eine neue App registriert werden, welche mit unserer API kommuniziert. Für die Slack-User entstanden so zwei neue Kommandos:

/pp : Öffnet den Dialog zum Eintragen eines neuen Spielergebnisses

/ranking : Öffnet die Übersicht der aktuellen Rangliste

Fazit

Der Bot ist sehr gut angekommen bei den Scandianern und es wird fleißig gespielt und sich an seinen Kollegen gemessen. Obwohl es nichts zu gewinnen gibt, so ist doch ein kleiner Wettkampf entstanden um den ersten Rang.

➡️
Hier gehts zu einem weiteren Scandio-internen Projekt, das uns den Alltag erleichtert: Innovationssieger der Shipit Days 2020 - Virtual Office goes live