knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Um Simulationsdaten für die zu untersuchenden Spiele zu gewinnen, wurden mehrere technische Komponenten einbezogen, weil sich aus den verschiedenen Stadien der Datengewinnung unterschiedliche Herausforderungen ergaben. Auf diese Stadien und die entsprechende technische Umsetzung soll im Folgenden kurz eingegangen werden. Bisher ist ausschließlich das Spiel Begriffix implementiert, die getroffenen Aussagen sind jedoch auch auf ähnlich konstruierte Spiele übertragbar.

Implementierung von Spielen

Das Spiel selbst ist besonders performance-kritisch, weil ein Spiel für die Simulation in häufiger Wiederholung gespielt werden muss. Außerdem ist Begriffix kombinatorisch rechenintensiv, weil je Zug alle validen Anlegestellen auf dem Spielfeld gefunden werden sollen und die Wörter, die der eingestellte Spieler zu jeder Anlegestelle kennen würde. Die häufig für Datenanalysen genutzten Skriptsprachen wie R, Matlab oder Python wären hierfür sehr langsam. Mit kompilierenden Sprachen erreicht man eine höhere Performance, jedoch leidet vereinfacht ausgedrückt die Verständlichkeit des Codes bei extremer Optimierung auf Performance.

Um einen Kompromiss zwischen Performance und Verständlichkeit zu wählen, wurde das Spiel in der Sprache Swift implementiert. Es handelt sich um eine moderne kompilierende Sprache mit eleganter Syntax. Solche Sprachen sind nicht speziell auf Numerik ausgelegt, eignen sich aber gut um Datenstrukturen und Prozeduren konzeptuell abzubilden. Viele Denkfehler werden durch die starke Typisierung schon beim Kompilieren entdeckt und nicht erst zur Laufzeit. Solche Programme sind deutlich statischer als die interaktiven Skriptsprachen, erlauben aber genug Dynamik für die Simulationen. Eine praktische einschränkung von Swift ist, dass es noch keine offizielle Umsetzung für Windows-Betriebssysteme gibt, die Programme laufen nur unter Mac OS und Linux. Keine Sprache mit vergleichbaren Eigenschaften unterstützt alle Plattformen gleich gut, daher richtete sich die Wahl auch nach der Arbeitsumgebung der Autorin.

Der Code für die Spiele-Implementierung ist auf Github einsehbar. Installationsanweisungen sind dort einzusehen. Das Package bringt ein Kommandozeilenprogramm mit, das es dem Benutzer gestattet, Begriffix-Spiele zu simulieren oder gegen den Computer zu spielen.

Das Modul Utility enthält allgemeine Datenstrukturen wie Präfixbaum oder Matrix, die von Spiel und Simulation genutzt werden. Games enthält spielbezogenen Code. HangmanCLI enthält das Kommandozeilentool und Code zur Durchführung von Spielsimulationen.

Datenaustausch

Die durchzuführenden Simulationen müssen konfiguriert werden (Input), und die Simulationsdaten müssen abgespeichert werden (Output). Es stellt sich also die Frage nach der Kommunikation zwischen Hangman und anderen Systemen. Die Simulationsdaten sollten in einem effizienten Datenaustauschformat abgespeichert (serialisiert) werden, also einerseits für andere Systeme allgemein zugänglich sein, andererseits sollte die Performance und der Speicherplatz nicht zu sehr unter diesem Vorgang leiden. Außerdem ist es sinnvoll, wenn die Datenstruktur der Simulationsdaten an irgendeiner Stelle standardisiert ist, also ein Schema definiert ist. Externe Systeme können sich an diesem Schema ausrichten um die Daten lesen zu können. Nach einigen unbefriedigenden Versuchen mit textbasierten Formaten wie JSON fiel die Wahl schließlich auf Protocol Buffers, ein binäres, schemagestütztes Datenaustauschformat. Das Arbeitsprinzip ist hier im Allgemeinen, dass anhand des einmalig definierten Schemas der Code zum Lesen und Schreiben von Daten automatisch für das gewünschte System generiert wird. Es werden viele Zielsprachen unterstützt, was den Ausschlag für die Wahl gab, auch wenn es noch einige andere Formate dieser Art gibt. Das Datenschema für die Simulationsdaten ist hier einzusehen. Es ist ein eigenes Projekt, damit es sich leicht an verschiedenen Stellen einbinden lässt ohne zu viel Balast mitzubringen. Bei Hangman ist das Schema eingebunden, wodurch die Simulationsdaten (Konfiguration und Ergebnisse) Als Protocol Buffer in Dateien geschrieben werden können. Das Serialisieren ist sehr effizient, verlangsamt den Ablauf also nicht nennenswert. Außerdem gestattet es das Format, neue Daten einfach an die Datei anzuhängen, so dass die Menge des genutzten Arbeitsspeichers konstant bleibt und die Daten im Falle eines Absturzes nicht verloren wären. Eine solche Datei enthält sowohl die Konfiguration und einige Metadaten, als auch die Ergebnisse.

Datenanalyse und Archivierung

Dieses R-Paket (ebenfalls auf Github) ist im Grunde nur ein Beispiel dafür, wie mit dem bisher beschriebenen inhaltlich gearbeitet werden kann. R-Pakete können Code, Daten und Dokumentation enthalten und durch Pakete wie Devtools wurde es deutlich erleichtert, eigene Pakete zu erstellen um sie zur Organisation der eigenen Arbeit zu gebrauchen. Das oben genannte Datenschema ist hier ebenfalls eingebunden.



strategic-games/sg.data documentation built on June 21, 2020, 8:30 a.m.