Hartkodierte Intelligenz
In einem ersten Schritt wollen wir nun unsere Erfahrungen, die wir mit
dem Spiel gemacht haben, in ein Computerprogramm übersetzen, das das
Spiel spielt.
Ein Teil des Programmtextes ist bereits vorgefertigt. In den Dateien,
die in Spiel_Anfang.zip
aus dem vorigen Abschnit verpackt
sind, befinden sich u.a. zwei Dateien, die wir jetzt benötigen:
-
spiel_ki.py
Diese Datei müssen wir im Normalfall nicht verändern. Sie steuert den Spielablauf mitsamt der graphischen Benutzeroberfläche etc. -
q_agent.py
In dieser Datei können wir schrittweise unsere Künstliche Intelligenz programmieren. Die Datei wird vonspiel_ki.py
aufgerufen; deshalb darf man den Namen nicht einfach ändern. Wenn du Zwischenergebnisse in derq_agent.py
speichern willst, speichere sie dann später einfach unter einem anderen Namen. Dann kannst du später durch Umbenennen der Dateien wieder auf die alten Ergebnisse zurückgreifen.
Damit du immer wieder "von Null" anfangen kannst, gibt es noch eine Dateiq_agent.tpl
. Diese entspricht genau der am Anfang leeren Dateiq_agent.py
. Durch Kopieren dieser Datei kannst du also immer eine "leere"q_agent.py
erzeugen.
Aufgabe 1: Dokumentieren der besten Aktionen
In einem ersten Schritt solltest du dasspiel-mensch.py
noch einmal spielen und dir für jede Situation die deiner Meinung nach
beste Aktion notieren. Da alle Situationen und Aktionen durchnummeriert
sind, kann man das in einer einfachen Tabelle tun.
Aufgabe 2: Test der vorgefertigten Funktion "beste_aktion"
Betrachte die Python-Funktionbeste_aktion(s,moegliche_aktionen)
in der Datei
q_agent.py
:
def beste_aktion(s,moegliche_aktionen):
'''
Sucht zu einer bestimmten Situation s die (nach seinem Wissen) beste Aktion aus.
Der Parameter moegliche_aktionen ist dabei eine Liste von Aktions-Nummern,
die in der Situation s überhaupt möglich sind.
'''
return 0
Man sieht: Die bisherige Funktion beste_aktion(s,moegliche_aktionen)
gibt
als beste Aktion immer nur die Aktion Nummer 0 zurück, das entspricht
der Aktion "Weglaufen". Unser Agent in dieser Form könnte deshalb guten
Gewissens als "Feigling" bezeichnet werden.
Den Effekt kann man sich anschauen: Man startet das Programm
spiel_ki.py
und drückt den Button "Optimal spielen". Man
sieht den Effekt des Weglaufens: Der Drache freut sich und beleidigt
den Agenten als "Versager".
Aufgabe 3: Implementation einer hartkodierten Fallunterscheidung
Ändere nun den Code so ab, dass eine Fallunterscheidung für den Agenten entscheidet, welche Aktion er in welchen Situationen ausführt. Die Listemoegliche_aktionen
ist hierbei noch uninteressant, da die beste
von uns ausgewählte Aktion mit Sicherheit auch einer der möglichen
Aktionen entsprechen wird.