Spielbäume Richard Göbel
Spieltheorie Berücksichtigung von einem oder mehreren Gegenspielern Spiel beginnt mit Anfangszustand Spieler haben Aktionsmöglichkeiten um gleichzeitig oder wechselseitig den Zustand zu beeinflussen
okönomische Anwendungen: Anwendungsbeispiele okönomische Anwendungen: Erstellen von Angeboten Einsatz absatzpolitischer Instrumente Tarifverhandlungen politische Anwendungen militärische Anwendungen
Beispiel: Nim-Spiel Spielregeln: n Hölzchen Spieler nehmen abwechselnd bis zu m Hölzchen auf Sieger ist der Spieler, der das letzte Hölzchen wegnimmt Hier Analyse des Spiels mit: 4 Hölzchen (n = 4) Jeder Spieler darf 1 oder 2 Hölzchen wegnehmen (m = 2)
Spielbaum für die 4,2-Version des Nim-Spiels
Formale Beschreibung eines Spielbaums Spieler A und B Menge der Zustände Z = { z1, . . ., zn } Anfangszustand z0 aus Z Endzustände: EA als Teilmenge von Z: A hat gewonnen EB als Teilmenge von Z: B hat gewonnen Folgezustände: NA : Z -> 2Z: Folgezustände für Spieler A NB : Z -> 2Z: Folgezustände für Spieler B
Spielbaum: Struktur NA(z0) = { z1, . . ., zn } NB(z1) = {z11, . . ., z1m }
Ermittlung der optimalen Strategie für einen Spielbaum gesamten Spielbaum erzeugen. Markiere für jeden Endzustand ob A oder B gewonnen hat. Markiere schrittweise alle anderen Zustände, deren Nachfolger bereits markiert wurden: Spieler A am Zug, mindestens ein Nachfolger ist mit A markiert: Markiere den Knoten mit A Spieler A am Zug, alle Nachfolger sind mit B markiert: Markiere den Knoten mit B Spieler B am Zug, mindestens ein Nachfolger ist mit B markiert: Markiere den Knoten mit B Spieler B am Zug, alle Nachfolger sind mit A markiert: Markiere den Knoten mit A
Anwenden der Strategie während des Spiels Spieler A: existiert ein mit A markierter Nachfolger für den aktuellen Zustand, dann wähle diesen Zustand aus (Spiel gewonnen!) sind alle Nachfolger mit B markiert, dann wähle einen beliebigen Zustand aus Spieler B: existiert ein mit B markierter Nachfolger für den aktuellen Zustand, dann wähle diesen Zustand aus (Spiel gewonnen!) sind alle Nachfolger mit A markiert, dann wähle einen beliebigen Zustand aus
Problem: Größe des Spielbaums Tiefe des Baums: Anzahl der Zustände auf einem Pfad Nim-Spiel: Tiefe des Baums gleich Anzahl der Hölzchen (n) Verzweigungsgrad des Baums: Anzahl der Nachfolger für einen Zustand Nim-Spiel: Maximale Anzahl der Hölzchen für einen Zug (m) Obere Schranke für die Anzahl der Zustände in einem Baum: mn 20,5 Variante des Nim-Spiels: 520 = 9,5 1013 Der Spielbaum läßt sich in der Regel nicht vollständig erzeugen!
Unvollständiger Spielbaum - Minimax-Verfahren Der Spielbaum wird nur bis zu einer vorher definierten Tiefe erzeugt. Die Zustände ohne Nachfolger (in der Regel keine Endzustände) werden numerisch bewertet -> Bewertungsfunktion Allen anderen Zustände, deren Nachfolger bereits numerisch Werteenthalten, werden schrittweise wie folgt bewertet (Minimax-Prinzip): Ist Spieler A am Zug, dann wird der Zustand mit dem maximalen Wert aller Nachfolgezustände bewertet Ist Spieler B am Zug, dann wird der Zustand mit dem minimalen Wert aller Nachfolgezustände bewertet
Anwenden des Minimax-Verfahrens auf die 10,3-Version des Nim-Spiels
Analyse des Minimax-Verfahrens Die Qualität des Verfahrens ist abhängig von: der gewählten Bewertungsfunktion der Tiefe des unvollständigen Spielbaums Die Anzahl der Zustände wächst exponentiell mit der Tiefe des Baums! Verbesserung des Minimax-Verfahrens mit der Alpha-Beta-Strategie
Alpha-Beta-Strategie - Maximum bestimmen Die weiteren Teilbäume unter zj brauchen nicht mehr betrachtet zu werden!
Alpha-Beta-Strategie - Minimum bestimmen Die weiteren Teilbäume unter zj brauchen nicht mehr betrachtet zu werden!
Methoden für die Erzeugung eines Spielbaums class ReversiBoard { . . . public int assess () {...} public int searchMax(int depth,BoardPos bestMove) {...} public int searchMin(int depth,BoardPos bestMove) public int bestMoveMinMax(byte col,int depth,BoardPos bestMove) {...} }
Implementierung des Spielbaums