Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Suche in Spielbäumen Suche in Spielbäumen KI SS2011: Suche in Spielbäumen 1/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Spiele in der KI Einschränkung von Spielen auf: 2 Spieler: Max und Min deterministische Spiele Runden basiert Spiele und zero-sum Spiele Z.B.: Schach, Mühle, Dame, Tic-Tac-Toe KI SS2011: Suche in Spielbäumen 2/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Spielbaum Ein Spielbaum ist gegeben durch: Startzustand Knoten repräsentieren Spielzustände Kanten repräsentieren Züge Spieler ziehen abwechselnd pro Ebene Spielbaum ist durch Nachfolgerfunktion (N F ) gegeben KI SS2011: Suche in Spielbäumen 3/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Spielbaum: Bewertungsfunktion Ein Spielbaum wird bis Tiefe b expandiert, die Blätter werden dort direkt bewertet: Entweder: Die Blätter sind Endzustände (Spiele mit wenig Endzuständen wie Tic-Tac-Toe): Max gewinnt: (1) oder Min gewinnt: (−1) oder das Spiel geht unentschieden aus: (0) Oder: Blätter in Tiefe b sind keine Endzustände (Spiele mit vielen Endzuständen wie Schach): Heuristische Bewertung der Spielzustände Tic-Tac-Toe: 9! = 362880 Endzustände Schach: 1040 Endzustände KI SS2011: Suche in Spielbäumen 4/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Bewertung von Tic-Tac-Toe Die einfachste Bewertung der Endzustände ist: 1 Gewinn: XXX in Reihe, Spalte oder Diagonale 0 Remis: X und O in jeder Zeile, Spalte oder Diagonale -1 Verlust: OOO in Reihe, Spalte oder Diagonale Heuristische Bewertung beliebiger Knoten: (#einfach x-besetzte Zeilen/Spalten/Diag) * 1 + (# doppelt x-besetzte Zeilen/Spalten/Diag) * 5 + (20, falls Gewinnsituation) (#einfach o-besetzte Zeilen/Spalten/Diag) * 1 (# doppelt o-besetzte Zeilen/Spalten/Diag) * 5 (20, falls Verlustsituation) XX-OO-X 0 KI SS2011: Suche in Spielbäumen X-X -OO-X 8 X-XOO-X −3 X--OX O-X 1 X--OOXX −3 5/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Strategie: Optimale Zugfolge Ziel: Algorithmisch den besten Zug (bzw. die beste Zugfolge für) einen Spieler bestimmen Problem: Der Gegenspieler versucht auch zu gewinnen Beide Spieler spielen optimal KI SS2011: Suche in Spielbäumen 6/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Optimale Strategie berechnen Sei p ∈ {Min,Max} der Spieler der in Zustand s zieht und p ist der Gegenspieler von p. Für alle Knoten s im Spielbaum berechne M inimax(s, p): wenn s Blatt:Bewertung von s wenn p = M in : min{M inimax(s0 , p) | s0 ist Nachfolger von s} M inimax(s, p) = wenn p = M ax : max{M inimax(s0 , p) | s0 ist Nachfolger von s} Minimax-Entscheidung: Für Max: Zug zum Nachfolger mit maximalem Wert Für Min: Zug zum Nachfolger mit minimalem Wert KI SS2011: Suche in Spielbäumen 7/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Minimax Algorithmus: Beispiel wenn s Blatt:Bewertung von s wenn p = M in : min{M inimax(s0 , p) | s0 ist Nachfolger von s} M inimax(s, p) = wenn p = M ax : max{M inimax(s0 , p) | s0 ist Nachfolger von s} Beispiel 89:; T ?>=< kkk A TTTTTT k k k TTTT k TTTT kkkk k k k T7654 k 7654 0123 0123 0123 7654 C D ?? M in B B @ v B | | @ v B | | ?? @ v B | | @ v B | v ? @ B || || vv M ax 3 KI SS2011: Suche in Spielbäumen 12 8 2 4 6 14 5 2 8/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Minimax Algorithmus Minimax M inimax(s, p) = S := N F (s) if S = ∅ then return Bewertung von s else if p = M ax then return max{M inimax(s0 , p) | s0 ∈ S} else return min{M inimax(s0 , p) | s0 ∈ S} KI SS2011: Suche in Spielbäumen 9/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Minimax Algorithmus: Beispiele http://wolfey.110mb.com/GameVisual/launch.php KI SS2011: Suche in Spielbäumen 10/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Minimax Algorithmus: Eigenschaften Für Spielbaum der Tiefe m mit Verzweigungsgrad b Durchsucht den Spielbaum vollständig per Tiefensuche Ressourcenbedarf: Zeit: O(bm ) (exponentiell in der Tiefe) Platz: O(bm) (linear in der Tiefe, falls b konstant) Fazit: Für echte Spiele (wie Schach) ist Minimax nicht geeignet. Abhilfe mit Tiefenschranke d und heuristischer Bewertung der Zustände in dieser Tiefe. Variante von Minimax für Mehrpersonen-Spiele KI SS2011: Suche in Spielbäumen 11/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Suche in Spielbäumen Alpha-Beta Suche KI SS2011: Suche in Spielbäumen 12/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Alpha-Beta Suche: Motivation Minimax: Besucht exponentiell viele Konten in Tiefe des Spielbaums Aber nicht alle Knoten müssen besucht werden Beispiel 89:; ?>=< A TTTT TTTT kkkk k k k TTTT kk k k TTTT k kkk 0123 7654 7654 0123 0123 7654 M in B C B @ | BB |D ??? vv @@ | | v BB | ?? @@ || vv B || || vv M ax 3 12 8 2 4 6 14 5 2 M inimax(s, M ax) = max{min{3, 12, 8}, min{2, x, y}, min{14, 5, 2}} = max{3, z, min{14, 5, 2}} mit z = min{2, x, y} ≤ 2 = max{3, z, 2} = 3 KI SS2011: Suche in Spielbäumen 13/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Alpha-Beta Suche: Idee Prinzip der Alpha-Beta Suche: Wie Minimax mit Modifikation Sei n Knoten im Spielbaum in Tiefe d und Zugmöglichkeit für p Wenn p einen besseren Knoten m in Tiefe d0 < d wählen kann, dann wird n von p nicht besucht Somit kann der ganze Teilbaum mit Wurzel n abgeschnitten werden Um den Abschnitt an Knoten n entschieden zu können, müssen einige Nachfolger von n betrachtet werden. KI SS2011: Suche in Spielbäumen 14/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Alpha-Beta Suche: Parameter Zwei Parameter kontrollieren die Entscheidung über Abschnitt: α: Der beste (maximale) bisher gefundene Wert an jedem Auswahlpunkt entlang des Pfades für Max β: Der beste (minimale) bisher gefundene Wert an jedem Auswahlpunkt entlang des Pfades für Min Alpha-Beta Suche aktualisiert die α, β Werte. KI SS2011: Suche in Spielbäumen 15/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Alpha-Beta Suche Start start(s, p) = if p = M ax then max-s(s, −∞, ∞) else min-s(s, −∞, ∞) Maximieren max-s(s, α, β) = S := N F (s) if S = ∅ then return B(s) αl := −∞ for each s0 in S do αl := max{αl , min-s(s0 , α, β)} if αl ≥ β then return αl else α := max{αl , α} return αl KI SS2011: Suche in Spielbäumen Minimieren min-s(s, α, β) = S := N F (s) if S = ∅ then return B(s) βl := ∞ for each s0 in S do βl := min{βl , max-s(s0 , α, β)} if βl ≤ α then return βl else β := min{βl , β} return βl 16/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Alpha-Beta Suche: Eigenschaften Effektivität ist Abhängig von der Reihenfolge in der Knoten besucht werden Beispiel 89:; T ?>=< kkk A TTTTTT k k k TTTT kkk TTTT kkkk k T7654 k 0123 7654 7654 0123 0123 M in C BB v B @@@ | |D ??? v | | v | | ?? @ | X XBB vv @ || || vv M ax 3 12 8 2 4 6 14 5 89:; ?>=< kk A SSSSSS k k k SSSS kkkk SSSS kkkk S7654 k k 0123 7654 7654 0123 0123 M in B @@ C BB v | D BB v | @ v | @@ X XBB | X XBB vv || vv 2 M ax 3 KI SS2011: Suche in Spielbäumen 12 8 2 4 6 2 5 14 17/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Alpha-Beta Suche: Eigenschaften Für Spielbaum der Tiefe m mit Verzweigungsgrad b Spielbaum muss nicht vollständig durchsucht werden Komplexität (Zeit): optimale Reihenfolge in der Knoten besucht werden: O(bm/2 ) zufällige Reihenfolge: O(b3m/4 ) Fazit: Laufzeit exponentiell in der Tiefe in des Spielbaums Im best-case kann Alpha-Beta Suche doppelt so tief im Spielbaum suchen wie Minimax KI SS2011: Suche in Spielbäumen 18/20 Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Reihenfolge der Knotenerzeugung: Schach Gute Reihenfolge der Knotenerzeugung für Schach: 1 Schlagen 2 Bedrohen 3 Vorwärts ziehen 4 Rückwärts ziehen Erzielt Laufzeit von O(2bm/2 ) KI SS2011: Suche in Spielbäumen 19/20