Übungsblatt 6

Übungsblatt 6
•
•
•
•
Die Übungsaufgaben sollen in Gruppen von 2-3 Personen bearbeitet werden.
Abgabe per Mail an [email protected] bis spätestens Montag, den 14.7. um
12 Uhr.
Webseite zur Übung: http://www.techfak.uni-bielefeld.de/~sptock/tutki/index.html
Um die Übung zu bestehen müssen 60% der Punkte erreicht werden!
„Prisoner's Dilemma“ - Die Spielregeln:
Zwei Spieler werden eines Verbrechens beschuldigt und müssen eine Aussage abgeben. Die Spieler
können entweder schweigen oder den Gegner beschuldigen, jedoch ohne zu wissen, was dieser
aussagen wird. Verhalten sich beide kooperativ und schweigen, erhalten sie beide eine
Gefängnisstrafe von 5 Jahren, beschuldigen sie sich gegenseitig, so beträgt die Strafe 10 Jahre.
Beschuldigt Spieler 1 seinen Gegner (Spieler 2), während dieser schweigt, wird Spieler 1
freigesprochen und Spieler 2 erhält eine Gefängnisstrafe von 20 Jahren. Daraus ergibt sich die
folgende Matrix:
Spieler 1 schweigt
Spieler 1 sagt aus
Spieler 2 schweigt
Spieler 1: 5 Jahre
Spieler 2: 5 Jahre
Spieler 1: 0 Jahre
Spieler 2: 20 Jahre
Spieler 2 sagt aus
Spieler 1: 20 Jahre
Spieler 2: 0 Jahre
Spieler 1: 10 Jahre
Spieler 2: 10 Jahre
Gespielt werden mehrere Runden, wobei die einzige Information über den Gegner dessen Aussage
der vorherigen Runde ist. In der ursprünglichen Version des Spiels ist keinerlei Kommunikation
zwischen den beiden Spielern möglich.
Erweiterung:
Wir erweitern das Spiel um eine Variable: Die emotionale Reaktion auf die Aussage des Gegners.
Nach jeder Aussage wird dem Spieler mitgeteilt, welche Aussage der Gegner gemacht hat.
Daraufhin muss eine Reaktion abgegeben werden. Diese ist entweder positiv, negativ oder neutral.
Für die nächste Spielrunde erhalten die Spieler als zusätzliche Information die Reaktion des
Gegners auf die vorherige Spielrunde.
Turnier:
Im letzten Tutorium am 16. Juli treten alle Gruppen in einem Turnier gegeneinander an. Wie viele
Runden jeweils gespielt werden, ist den Teilnehmern unbekannt. Es gewinnt die Gruppe, die
insgesamt die wenigsten Strafen kassiert hat.
Technische Anleitung
Es liegen folgende Dateien im Archiv prisoner.zip bereit:
• prisoner_server.py: Server, der das Spiel verwaltet
• prisoner_client.py: Client eines Spielers, der mit dem Server kommuniziert
• PrisonerHuman.py: Client für menschlichen Spieler (Kommandozeileneingabe)
• PrisonerRandom.py: Client, der automatisch mit einer Random-Taktik spielt
• PrisonerAI.py: KI-Client (noch nicht implementiert)
Um zwei Spieler gegeneinander antreten zu lassen, muss zunächst der Spielserver gestartet werden:
> python prisoner_server.py
Um als Spieler teilzunehmen, wird ein Client gestartet und als Parameter angegeben, ob dieser
durch einen Menschen über Kommandozeileneingaben bedient wird („human“), ein zufällig
agierender Agent ist („random“) oder ob es sich um eine richtige KI handelt („ai“):
> python prisoner_client.py human
oder
> python prisoner_client.py random
oder
> python prisoner_client.py ai
Das Spiel beginnt, sobald zwei Clients beim Server angemeldet sind. Der Spielserver läuft auf Port
50000, den Clients werden automatisch freie Ports zugewiesen. Die Voreinstellungen sind für eine
lokale Ausführung (localhost) gesetzt. IPv6 wird nicht unterstützt.
Anfragen an den Client werden (im Falle einer KI, Parameter „ai“) an die Klasse PrisonerAI
weitergeleitet. In der ersten Runde werden beide Clients nach ihrer ersten Aussage gefragt. Dazu
wird die Methode onFirstTurn() aufgerufen, deren Rückgabewert die erste Aussage ist (COOP oder
DEFECT).
Anschließend erhält der Client über die Methode onMoodRequest(othersDecision) die Information
über die Aussage des Gegners und muss eine Reaktion darauf abgeben, die ehrlich sein kann aber
nicht muss (HAPPY, NEUTRAL oder ANGRY).
Dann wird dem Client vom Server über die Methode onTurnRequest(othersMood) die Reaktion des
Gegners mitgeteilt und die nächste Aussage als Rückgabewert verlangt (COOP oder DEFECT).
Im weiteren Verlauf eines jeden Einzelspiels wechseln sich so die Aufrufe der Methoden
onMoodRequest und onTurnRequest bis zum Ende des Spiels ab. Es ist also immer bekannt, welche
Aussage der Gegner als letztes getroffen hat und wie er auf meine Aussage der letzten Runde
reagiert hat.
Aufgabe 1 (25 Punkte)
Implementiert eine KI für die erweiterte Variante des Spiels „Prisoner's Dilemma“. Dazu soll die
vorgegebene Klasse PrisonerAI (PrisonerAI.py) als Vorlage genutzt und erweitert werden. Die
Dateien prisoner_server.py und prisoner_client.py sollen unverändert bleiben und müssen daher
auch nicht mit abgegeben werden.
Folgende Kriterien müssen erfüllt werden:
– Das Programm muss automatisch ein Spiel absolvieren können.
– Mindestens eine der folgenden Techniken muss im Spiel verwendet werden:
•
Bayes-Netz
•
Dynamisches Bayes-Netz
•
Decision Tree
•
MDP
•
POMDP
Kriterien für das Turnier (für Punktevergabe nicht relevant):
– Pro Entscheidung sollten durchschnittlich nicht mehr als 10 Sekunden benötigt werden
•
Konsequente Überschreitung führt zur Disqualifikation aus dem Wettbewerb
•
Referenzsystem: Dell-Laptop, i5-2520M, 4GB, SSD, Ubuntu 12.04 LTS (64 Bit)
– Fehlerhafte Aussagen, fehlerhafte Reaktionen oder Programmabstürze bedeuten automatisch
die Niederlage im aktuellen Spiel und werden mit Strafpunkten belegt.
Aufgabe 2 (5 Bonuspunkte)
Dokumentiert eure Lösung. Sowohl der Code als auch die allgemeine Strategie sollen für Dritte
verständlich und nachvollziehbar beschrieben werden.