Minimax
Mit dem Minimax-Algorithmus können optimale Züge berechnet werden. Dabei wird von zwei
Spielern Max und Min ausgegangen, die abwechselnd ziehen und beide optimal spielen.
Wenn Max gewonnen hat, wird der Spielausgang mit +1 bewertet, wenn Min gewonnen hat
mit -1, und mit 0 sonst. Damit hat man ein sogenanntes "Nullsummenspiel" (der Gewinn des
einen Spielers ist der Verlust des anderen) und kann den Algorithmus so gestalten, dass
Max stets den Zug wählt, der das Spielergebnis maximiert und Min entsprechend den
Zug wählt, der das Spielergebnis minimiert (daher auch die Namen der Spieler).
Minimax baut den gesamten Spielbaum bis zu den Blättern auf. Die Blätter (Spielausgang)
werden mit einer Utility-Funktion bewertet, und diese Bewertung wird dann im Spielbaum
nach oben gereicht.
- (K3) Minimax-Algorithmus
Spiele als Suchproblem: Minimax
Terminologie
-
Zwei abwechselnd spielende Spieler:
MAXundMIN, wobeiMAXbeginnt- Beide Spieler spielen in jedem Zug optimal
- Spielergebnis wird aus Sicht von
MAXbewertet:- $+1$, wenn Spieler
MAXgewinnt - $-1$, wenn Spieler
MINgewinnt - $0$, wenn unentschieden
- $+1$, wenn Spieler
- Spieler
MAXversucht, das Spielergebnis zu maximieren - Spieler
MINversucht, das Spielergebnis zu minimieren
-
Startzustand: Initialer Zustand des Spielbrettes
-
Aktionen: Legale Züge, abhängig vom Spielzustand
-
Zieltest: Ist das Spiel vorbei?
=> Startzustand und anwendbare Aktionen definieren den Zustandsraum.
-
Nutzenfunktion: $\operatorname{UTILITY}(s,p)$: Wert des Spiels für Spieler $p$ im Spielzustand $s$
-
Strategie: Spieler benötigen Strategie, um zu gewünschtem Endzustand zu kommen (unabhängig von den Entscheidungen des Gegenspielers) => einfacher Pfad von Start zu Ziel reicht nicht
Hinweis: Nullsummenspiel! (Der Gewinn des einen Spielers ist der Verlust des anderen Spielers.)
Eine mit dem Minimax-Algorithmus berechnete Strategie wird auch Minimax-Strategie genannt. Sie sichert dem betreffenden Spieler den höchstmöglichen Gewinn, der unabhängig von der Spielweise des Gegners erreichbar ist.
Bei Nicht-Nullsummenspielen, bei denen die Niederlage des Gegners nicht zwangsläufig mit dem eigenen Gewinn zusammenfällt (d.h. Gewinn des einen Spielers $\ne$ Verlust des anderen Spielers), liefert der Minimax-Algorithmus nicht unbedingt eine optimale Strategie.
Spielbaum TTT
Minimax (Idee)
- Erzeuge kompletten Suchbaum mit Tiefensuche
- Wende Nutzenfunktion (Utility) auf jeden Endzustand an
- Ausgehend von Endzuständen => Bewerte Vorgängerknoten:
- Knoten ist
Min-Knoten: Nutzen ist das Minimum der Kindknoten - Knoten ist
Max-Knoten: Nutzen ist das Maximum der Kindknoten
- Knoten ist
- Startknoten:
Maxwählt den Zug, der zum Nachfolger mit der höchsten Bewertung führt
Annahme: Beide spielen perfekt. Fehler verbessern das Resultat für den Gegner.
Minimax-Algorithmus: Funktionen für MAX- und MIN-Knoten
def Max-Value(state):
if Terminal-Test(state): return Utility(state)
v = -INF
for (a, s) in Successors(state):
v = MAX(v, Min-Value(s))
return vdef Min-Value(state):
if Terminal-Test(state): return Utility(state)
v = +INF
for (a, s) in Successors(state):
v = MIN(v, Max-Value(s))
return vHinweis I: Auf wikipedia.org/wiki/Minimax
finden Sie eine Variante mit einem zusätzlichen Tiefenparameter, um bei einer bestimmten
Suchtiefe abbrechen zu können. Dies ist bereits eine erweiterte Version, wo man beim
Abbruch durch das Erreichen der Suchtiefe statt Utility() eine Eval()-Funktion
braucht (vgl. Minimax: Heuristiken).
Wenn man ohne Suchtiefenbeschränkung arbeiten will, braucht man diesen Parameter nicht! Der Algorithmus terminiert auch ohne Suchtiefenbeschränkung!
Hinweis II: Im [Russell2020, S. 196, Abb. 6.3] findet sich eine Variante, die die
auf der nächsten Folien gezeigte Startfunktion mit den hier gezeigten Min-Value()-
und Max-Value()-Funktionen verschmilzt. Dabei wird in den beiden Hilfsfunktionen
nicht nur der min- bzw. max-Wert optimiert, sondern auch der jeweils beste Zug
gespeichert und als Rückgabe zurückgeliefert.
Minimax-Algorithmus: Sonderbehandlung Startknoten
def Minimax(state):
(val, action) = (-INF, null)
for (a, s) in Successors(state):
v = Min-Value(s)
if (val <= v):
(val, action) = (v, a)
return action- Startknoten ist ein MAX-Knoten
- Nicht nur Kosten, sondern auch die zugehörige Aktion speichern
Minimax Beispiel
Aufwand Minimax
- maximale Tiefe des Spielbaums: $m$
- in jedem Zustand $b$ gültige Züge
- => Zeitkomplexität $O(b^m)$
Gedankenexperiment:
- erster Zug: $b$ Möglichkeiten,
- zweiter Zug: jeweils wieder $b$ Möglichkeiten $\rightarrow$ $b \star b = b^2$,
- dritter Zug: jeweils wieder $b$ Möglichkeiten $\rightarrow$ $b \star (b \star b) = b^3$,
- ...,
- $m$. Zug: jeweils wieder $b$ Möglichkeiten $\rightarrow$ $b^m$
Wrap-Up
- Minimax: Entwickelt Spielbaum, bewertet Zustände entsprechend
MaxundMin- Gewinn von
Max: +1, Gewinn vonMin: -1 Maxwählt das Maximum der möglichen Züge vonMinMinwählt das Minimum der möglichen Züge vonMax- Spielbaum wird bis zu den Blättern entwickelt, Bewertung mit
Utility
- Gewinn von
Optimale Spiele und MiniMax
Auf einem Tisch liegen nebeneinander 5 Streichhölzer. Es gibt zwei Spieler - Weiß und Schwarz - die abwechselnd ein oder zwei Streichhölzer wegnehmen dürfen (es muss mind. ein Streichholz genommen werden). Wer das letzte Streichholz nehmen muss, hat verloren. Zu Beginn ist Weiß am Zug.
- Spielbaum
Zeichnen Sie den kompletten Spielbaum auf. Geben Sie an den Kanten jeweils die Zahl der genommenen und der verbleibenden Hölzer an.
Beispiel: Wenn in einem Zug ein Holz genommen wird und 3 Hölzer verbleiben, steht an der entsprechenden Kante "1/3". Geben Sie jeweils an, welcher Spieler am Zug ist.
- Minimax
Geben Sie die Bewertung aller Spielzustände mit Hilfe des Minimax-Algorithmus an. Bewerten Sie die Endzustände mit +1, wenn Spieler Weiß gewonnen hat, mit -1, falls Schwarz gewonnen hat.
- Optimaler Zug
Mit welchem Zug muss Weiß beginnen, um das Spiel garantiert zu gewinnen (beide Spieler verhalten sich stets optimal)? Argumentieren Sie mit der Minimax-Bewertung.
- [Ertel2017] Introduction to Artificial Intelligence
Ertel, W., Springer, 2017. ISBN 978-3-319-58487-4. DOI 10.1007/978-3-319-58487-4. - [Russell2020] Artificial Intelligence: A Modern Approach
Russell, S. und Norvig, P., Pearson, 2020. ISBN 978-0134610993.
Minimax: Abschnitt 6.2

