Zwei-Spieler-Spiele Zwei-Spieler-Spiele Einführung in die Methoden der Künstlichen Intelligenz Ziel dieses Abschnitts Intelligenter Agent für Zweipersonenspiele Beispiele: Schach, Dame, Mühle, . . . Suche bei Spielen Annahme zunächst: Prof. Dr. Manfred Schmidt-Schauß Spiele mit genau zwei Gegnern Kein Zufall im Spiel (keine Würfel, Kartenmischen) etc. SoSe 2016 Stand der Folien: 12. Mai 2016 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 1 Zwei-Spieler-Spiele 2/40 Zwei-Spieler-Spiele Schach Schach (2) Gute Strategien zum Schachspielen wurden schon entwickelt bevor es Computer gab. Untersuchungen zu Gewinnstrategien (Eröffnungen, Endspiel ...) Moderne erfolgreiche Schachprogramme: verwenden im wesentlichen das Absuchen Bewerten von Spielsituationen verwenden statische Bewertung der Spielsituationen Im wesentlichen 2 Ansätze für Programme zum Schachspielen 1 2 zusätzlich Bibliotheken für Eröffnung und Endspiel Verwende bekannte Schachtheorien (Verteidigung, Angriff, Bedrohung, Decken, Mittelfeld, . . . ). Versuche die menschliche Methode“ zu Programmieren ” Absuchen aller Möglichkeiten, um den nächsten guten Zug zu finden. M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 3/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 4/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele Spielbäume Beispiel: TicTacToe Zwei Spieler: genannt Maximierer und Minimierer Spielfeld: Zustand (Knoten): Darstellung der Spielsituation und welcher Spieler am Zug ist X X O Wurzel: Aktuelle Spielsituation O X X O Kinder von Knoten K: mögliche Spielsituationen nach einem Zug Spieler wechselt Maximierer: X Blätter mit Gewinnwert bewertet. Schach: schreiben abwechselnd ihr Symbol in ein freies Feld Minimierer: O Gewinner: Spieler hat sein Symbol in einer Reihe (horizontal, vertikal, diagonal) −1 = Minimierer hat gewonnen 1 = Maximierer hat gewonnen 0 = Remis M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 5/40 Zwei-Spieler-Spiele M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 6/40 Zwei-Spieler-Spiele Beispiel:TicTacToe, Spielbaum MinMax-Suche (1) X OX O OX Max Eingabe: Spielsituation, Nachfolgerfunktion, Bewertung X OX XO OX Min X OX OX OX Ausgabe: Nächster optimaler Zug X OX O OXX Informelle Beschreibung der MinMax-Suche: X OX Max X O O OX X OX XO OX O X OX O OX OX X OX OX OX O X OX OO OXX X OX OO OXX X OX XOO OXX 0 X OX X OX OX O 0 X OX O OX OXX 1 X OX X OX OX O 0 X OX O OX OXX 1 X OX XOO OXX 0 Bewerte alle Blätter Berechne den Wert der anderen Knoten: Stufenweise von unten nach oben über die Werte der Kinder wird maximiert bzw. minimiert je nachdem welcher Spieler am Zug ist Dabei: Züge merken, damit der optimale Zug bekannt ist Welchen Zug soll Max machen? M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 7/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 8/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele MinMax-Suche (2) Beispiel, TicTacToe Algorithmus MinMax-Suche Datenstrukturen: Nachfolgerfunktion, Wert(Zustand) für Endsituationen, Datenstruktur für Spielzustand, Spieler Funktion Minmax(Zustand,Spieler): N F := alle Nachfolgezustände zu (Zustand,Spieler); if N F = ∅ then return Wert(Zustand) else if Spieler == Maximierer then return max{Minmax(Z, Spieler) | Z ∈ N F } else // Spieler ist Minimierer return min{Minmax(Z, Spieler) | Z ∈ N F } endif endif 9/40 Zwei-Spieler-Spiele X OX OX OX 0 X OX O OXX 0 X OX Max X O O OX 0 X OX XO OX O 0 X OX O OX OX 1 X OX OX OX O 0 X OX OO OXX 1 X OX OO OXX 0 X OX XOO OXX 0 X OX X OX OX O 0 X OX O OX OXX 1 X OX X OX OX O 0 X OX O OX OXX 1 X OX XOO OXX 0 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 10/40 Zwei-Spieler-Spiele MinMax in Haskell MinMax-Eigenschaften MinMax kann als Tiefensuche durchgeführt werden minmax endZustand wert nachfolger spieler zustand = go (zustand,[]) spieler where go (zustand,p) spieler | endZustand zustand = (wert zustand,reverse $ zustand:p) | otherwise = let l = nachfolger spieler zustand in case spieler of Maximierer -> maximumBy (\(a,_) (b,_) -> compare a b) [go (z,zustand:p) Minimierer | z <- l] Minimierer -> minimumBy (\(a,_) (b,_) -> compare a b) [go (z,zustand:p) Maximierer | z <- l] M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen X OX XO OX 0 Min wobei Spieler = der jeweils anderen Spieler Implementierung: sollte zus. den Weg speichern, damit der nächste optimale Zug als Ausgabe zur Verfügung steht. M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen X OX O OX 0 Max Laufzeit O(cd ) bei mittlerer Verzweigungrate c und Blättern in Tiefe d Praktisches Problem: Bei mittelschweren Spielen: unmöglich in annehmbarer Zeit berechenbar TicTacToe: Vom leeren Spielfeld aus: 9! = 362.880 Zugfolgen, geht gerade noch Daher: Abwandlung des Verfahrens! 11/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 12/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele MinMax mit Tiefenschranke Beispiel: Heuristische Bewertung für TicTacToe Suche nur bis zur einer bestimmten Tiefe k + + - Bewerte die Knoten in Tiefe k mit einer Heuristik Beispiele für die Bewertungsfunktion: Schach: Materialvorteil, evtl. Stellungsvorteil, Gewinnsituation, ... (#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) Mühle: Material, #Mühlen, Bewegungsfreiheit, . . . M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 13/40 Zwei-Spieler-Spiele 14/40 Zwei-Spieler-Spiele Bewertungsfunktionen Beispiel: TicTacToe Güte der Bewertungsfunktion bestimmt Güte des Verfahrens; Bewertung 1 Bewertung 2 Bewertung 3 muss algorithmisch (möglichst schnell) berechenbar sein sollte Endzustände entsprechend minimal und maximal bewerten Sieg 1 100 1 Niederlage -1 10 0 Unentschieden 0 50 0 Bewertung 1 und Bewertung 2 führen zum gleichen optimalen Zug, da Sieg > Unentschieden > Niederlage Es gilt (in Spielen ohne Zufall): Berechnung des besten Zuges ist unabhängig von den exakten Werten der Bewertungsfunktion; Die Ordnung zwischen den Spielsituationen bestimmt. M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen Bewertung 3 hat eine andere Ordnung: Sieg > Unentschieden = Niederlage und kann daher zu anderem optimalen Zug führen 15/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 16/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele Einwand Einwand Eine schnelle und exakte Bewertungsfunktion kann es i.a. nicht geben: Wenn man ein sehr gute Bewertungsfunktion hat: Die Frage, ob man gewinnen kann, kann in einem Spiel PSPACE-hart sein. (Spielserie mit Parameter) Warum MinMax ausführen und nicht gleich nur die Bewertungen der Kinder anschauen? z.B. Erfüllbarkeit von QBFs ∀x1 ∃x2 ∀x3 ∃x4 . . . F (x1 , . . . , xn ) Im allgemeinen: Je tiefer man geht, umso besser wird die Bewertungsfunktion! Eine in polynomieller Zeit berechenbare Bewertungsfunktion die exakt ist, würde einen Polynomial-Zeit Algorithmus für ein PSPACE-hartes Problem ergeben. Fazit: Bewertungsfunktionen sind i.a. Schätzungen. M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 17/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen Zwei-Spieler-Spiele 18/40 Zwei-Spieler-Spiele Tiefenbeschränkte MinMax-Suche Optimierung der MinMax-Suche: Beispiele Max Mittlere Verzweigungrate c A Min B E Tiefenschranke m Laufzeit O(cm ), wenn die Heuristik in konstanter Zeit berechenbar ist Max C D F G H MinMax(A, M ax) = max{MinMax(B, M in), MinMax(E, M in)} = max{min{MinMax(C, M ax), MinMax(D, M ax)}, min{MinMax(F, M ax), MinMax(G, M ax), MinMax(H, M ax)}} M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 19/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 20/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele Optimierung der MinMax-Suche: Beispiele Max Beispiel mit konkreten Werten A k Max B Min A E k ×× 3 Min Max C D F k0 G ×× MinMax(A, M ax) = max{MinMax(B, M in), MinMax(E, M in)} = max{k, min{k 0 , MinMax(G, M ax), MinMax(H, M ax)}} Wenn k ≥ k 0 : = k =⇒ Knoten (bzw. Teilbäume) G und H braucht man nicht betrachten! M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 21/40 Max 3 4 2 -2 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen Zwei-Spieler-Spiele 5 22/40 Zwei-Spieler-Spiele Symmetrischer Fall Alpha-Beta-Suche Min A Max B C Kürzt genau diese Fälle weg E l Min E H Durch Verwendung eines Suchfensters [α, β] ×× D F l 0 G Tiefensuche mit Tiefenschranke notwendig Anpassung der Tiefenschranke im folgenden Algorithmus implizit H MinMax(A, M in) = min{MinMax(B, M ax), MinMax(E, M ax)} = min{l, max{l0 , MinMax(G, M in), MinMax(H, M in)}} Wenn l ≤ l0 : = l M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 23/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 24/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele In Haskell Algorithmus α − β-Suche Aufruf: AlphaBeta(Zustand,Spieler,−∞,+∞) Funktion: AlphaBeta(Zustand,Spieler,α,β) 1 Wenn Tiefenschranke erreicht, bewerte die Situation, return Wert 2 Sei NF die Folge der Nachfolger von (Zustand,Spieler) 3 Wenn Spieler = Minimierer: βl := ∞; for-each L ∈ NF βl := min{βl , AlphaBeta(L,Maximierer,α,β)} if βl ≤ α then return βl endif// verlasse Schleife β := min{β, βl } end-for return βl 4 Wenn Spieler = Maximierer αl := −∞; for-each L ∈ NF αl := max{αl , AlphaBeta(L,Minimierer,α,β)} if αl ≥ β then return αl endif// verlasse Schleife α := max{α, αl } end-for return αl M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen alphaBeta wert nachfolger maxtiefe neginfty infty spieler zustand = ab 0 neginfty infty spieler zustand where ab tiefe alpha beta spieler zustand | null (nachfolger spieler zustand) || maxtiefe <= tiefe = wert zustand | otherwise = let l = nachfolger spieler zustand in case spieler of Maximierer -> maximize tiefe alpha beta l Minimierer -> minimize tiefe alpha beta l maximize tiefe alpha beta xs = it_maximize alpha neginfty xs where it_maximize alpha alpha_l [] = alpha_l it_maximize alpha alpha_l (x:xs) = let alpha_l’ = max alpha_l (ab (tiefe+1) alpha beta Minimierer x) in if alpha_l’ >= beta then alpha_l’ else it_maximize (max alpha alpha_l’) alpha_l’ xs minimize tiefe alpha beta xs = it_minimize beta infty xs where it_minimize beta beta_l [] = beta_l it_minimize beta beta_l (x:xs) = let beta_l’ = min beta_l (ab (tiefe+1) alpha beta Maximierer x) in if beta_l’ <= alpha then beta_l’ else it_minimize (min beta beta_l’) beta_l’ xs 25/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 26/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele Alpha-Beta-Suche: Beispiel Reihenfolge der Nachfolger a Max a 5 Max Min a 5 Max c b c 5 b 1 Min c 5 Min b 4 ××× 1 2 4 -1 6 a Max -2 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 0 Beide Bäume sind gleich α = −∞ β =∞ αl = −∞ Außer: Nachfolger in umgekehrter Reihenfolge Reihenfolge bestimmt Güte von Alpha-Beta Min 2 Max 4 Abhilfe: Nachfolger vorsortieren c b Heuristik zum Sortieren verwenden -1 6 a M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen α = −∞ β =∞ αl = −∞ -2 0 27/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 28/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele Eigenschaften Alpha-Beta Optimierungen von Alpha-Beta Zur Erinnerung: MinMax: Laufzeit O(cd ) bei Tiefenschranke d und Verzweigungrate c Optimierungen Alpha-Beta-Suche: Speicherung von bewerteten Stellungen Worst-Case: Wie MinMax Nutzung von Symmetrien d 2 Best-Case O(c ) Probleme: d 2 Manchmal: Tiefere Suche schlechter als nicht so tiefe Suche Bei guter Vorsortierung O(c ) (Daumenregel) 3d 4 Horizonteffekt: Durch Tiefenschranke wird genau der gute Zug übersehen Bei zufälliger Vorsortierung O(c ) Bei guter Vorsortierung: Bei gleichen Ressourcen kann man mit Alpha-Beta-Suche doppelt so tief vorausschauen als bei MinMax-Suche! M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 29/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen Zwei-Spieler-Spiele Zwei-Spieler-Spiele Strategie zur Vermeidung des Horizonteffekts Spiele mit Zufall Falls bei Suche in Tiefe d ein Zug am Knoten K besonders gut (Maximierer) ist: Wir betrachten nur 2-Spieler-Spiele Mit Zufall: Z.B. Würfeln, Kartenmischen, etc. besonders gut: alle Brüder von K haben schlechtere Bewertung Naiver Ansatz: Verwende MinMax (bzw. α − β) über alle Möglichkeiten Dann Suche K mit größerer Tiefe ab Tiefere Suche ist auch ratsam bei Zugzwang, denn Besser: Benutze die Wahrscheinlichkeit und den Erwartungswert (der Bewertungsfunktion) Erhöht den Suchhorizont ohne Vergrößerung des Suchraums M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 30/40 31/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 32/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele Spielbaum mit Zufallsknoten Eigenschaften Max (würfelt) p Max (Zug) 3.2 A Min (würfelt) 3.2 B 0.6 Min (Zug) 0.4 4 D 4 2.3 C (= 0.6*4 + 0.4*2) 6 2 (=0.3*3+0.7*2) 0.3 2 E 0.7 3 F 9 3 Satz Es gilt: Wenn Wahrscheinlichkeit eine Rolle spielt, dann ist die Berechnung des Zuges mit dem besten Erwartungswert abhängig von den exakten Werten der Bewertungsfunktion; nicht nur von der relativen Ordnung auf den Situationen. 2 G 7 6 2 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 33/40 Zwei-Spieler-Spiele Mehr als 2 Spieler (ohne Zufall) 7.4 6.7 Wir erläutern nur die Probleme (keine Lösung) Min (würfelt) 6.7 0.7 Min (Zug) 34/40 Zwei-Spieler-Spiele Beweis durch Gegenbeispiel Max (Zug) M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 1 7.4 5.7 (=0.7+0.3*20) 0.3 20 vorher: 0.1 (=0.1*2+0.9*8) (=0.1*3+0.9*6) Erkenntnis: Probleme sind wesentlich schwieriger 0.9 32 68 2 8 Vereinfachung: Genau 3 Spieler Blattbewertung: Statt Wert, nun Drei-Tupel (A, B, C): Ergebnis des jeweiligen Spielers =⇒ Die Bewertungsfunktion muss vorsichtig gewählt werden! M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 35/40 M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 36/40 Zwei-Spieler-Spiele Zwei-Spieler-Spiele 3-Spieler-Baum 3-Spieler-Baum: Bewertung (1) Strategie: Jeder maximiert sein eigenes Ergebnis Spieler S1 Spieler S1 (1,3,2) Spieler S2 Spieler S2 (0,1,3) (1,3,2) Spieler S3 Spieler S3 (1,2,0) (0,1,3) (1,0,4) (0,1,2) (3,0,2) (4,0,1) (1,3,2) (0,1,3) (1,2,0) M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 37/40 (0,1,3) Spieler S1 (1,0,4) M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen (4,0,1) (1,3,2) (0,2,0) (0,1,2) (3,0,2) (3,0,2) (4,0,1) (1,-1,-1) (0,0,0) ? Spieler S2 (0,2,0) (1,0,4) (3,0,2) 38/40 Spieler S1 (0,1,3) (0,1,3) (0,1,2) Strategie: Jeder maximiert sein eigenes Ergebnis (0,1,3) (1,2,0) (1,0,4) Nicht-eindeutige Strategie Strategie: Spieler 1 und Spieler 3 verbünden sich Ziel: Minimiere Ergebnis von Spieler 2 (0,1,3) (1,3,2) Zwei-Spieler-Spiele 3-Spieler-Baum: Bewertung (1) Spieler S3 (3,0,2) M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen Zwei-Spieler-Spiele Spieler S2 (1,0,4) (0,2,0) Spieler S3 (0,2,0) (1,3,2) (0,2,0) 39/40 (0,0,0) (0,0,0) (1,-1,-1) (-1,-1,1) ? (0,0,0) (1,-1,-1) (-1,-1,1) (0,0,0) (1,-1,-1) (-1,1,-1) (0,0,0) (1,-1,-1) (1,-1,-1) (-1,-1,1) (0,0,0) M. Schmidt-Schauß · KI · SoSe 2016 · Suche bei Spielen 40/40