Ü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.
© Copyright 2025 ExpyDoc