🎮 Adversariale Suche & Minimax¶
📚 1️⃣ Spielbaum & Rollen¶
-
Spielbaum
– Jeder Knoten = eine Spielsituation.
– Kanten = mögliche Züge. -
Max‑ vs. Min‑Knoten
– Max (unsere KI) will die Bewertung maximieren.
– Min (Gegner) will sie minimieren. -
Blatt‑Bewertung
Tiefe erreicht oder Spielende → Heuristik liefert einen Zahlenwert \(E(s)\)
🤖 2️⃣ Minimax‑Verfahren¶
-
Rekursion
– Wechsle abwechselnd zwischen Max und Min, bis Tiefe 0 oder terminal. -
Entscheidung
– Max nimmtmax(…)
über alle Kinder‑Werte.
– Min nimmtmin(…)
. -
Komplexität
- Zeit: \(O(b^d)\) mit Verzweigungsfaktor \(b\) und Tiefe \(d\)
- Platz: \(O(d)\) (Rekursionstiefe)
📝 Zusammenfassung Minimax¶
Begriff | Beschreibung |
---|---|
Max‑Knoten | wählt das größte Kind >>> |
Min‑Knoten | wählt das kleinste Kind <<< |
E(s) | Bewertungsfunktion an den „Blättern“ |
Parameter | sss: Stellung, ddd: Tiefe, player∈{Max,Min}player\in{Max,Min}player∈{Max,Min} |
✂️ 3️⃣ Alpha‑Beta‑Pruning¶
-
α (Alpha)
– Beste bisher bekannte Bewertung für Max. -
β (Beta)
– Beste bisher bekannte Bewertung für Min. -
Pruning‑Kriterium
Sobald \(\beta \le \alpha\) gilt, kann der Rest des Teilbaums abgebrochen werden. -
Vorteil
Im besten Fall: \(O(b^{\frac{d}{2}})\) statt \(O(b^d)\)
function alphabeta(s, d, α, β, player):
if d=0 oder s terminal: return E(s)
if player=Max:
v = −∞
for Zug z:
v = max(v, alphabeta(s nach z, d−1, α, β, Min))
α = max(α, v)
if β ≤ α: break
return v
else:
v = +∞
for Zug z:
v = min(v, alphabeta(s nach z, d−1, α, β, Max))
β = min(β, v)
if β ≤ α: break
return v
📝 Kurzzusammenfassung αβ¶
Symbol | Bedeutung |
---|---|
α | Max’s bisher beste Option (untere Schranke) |
β | Min’s bisher beste Option (obere Schranke) |
Pruning | Wenn β≤α\beta \le \alphaβ≤α, keine weitere Expansion nötig |
4. Heuristische Zugreihenfolge (Move Ordering)¶
Um Alpha‑Beta effektiver zu machen, sollten „gute“ Züge zuerst untersucht werden, damit Schnittkriterien früher greifen:
- Kaptur‑Züge: Züge, die einen Eroberungszug auslösen, oft hohe Bewertung → Priorität.
- Bonus‑Züge: Züge, die in die eigene Kalah enden und einen weiteren Zug erlauben.
- “Killer‑Moves”: Aus früheren Knoten gespeicherte besonders stark prunende Züge.
- Partial‑Evaluator: Kurze, schnelle Heuristik, um Züge vorab grob zu bewerten und zu sortieren.
Mit guter Zugreihenfolge nähert sich die Laufzeit \(O(b^\frac{d}{2})\)
im Durchschnitt an.