Informatik I/II PVK
DonnerstagInformatik II, 2. Teil
Informatik I/II PVK 2
Ablauf heute
Binärsuche Backtracking Spieltheorie, Spielbäume Minimax-Algorithmus α-β-Algorithmus Mergesort Heap-Sort
Informatik I/II PVK 3
Binärsuche
Wir suchen ein Element in einem sortierten Array Dabei vergleichen wir jeweils die Mitte des Arrays mit
dem gesuchten Wert und können so in jedem Schritt den Suchraum halbieren
links neues rechts
mitte
if (value < mitte) if (value > mitte)
rechtslinks
neues links rechts
… …
neue mitte neue mitte
Informatik I/II PVK 4
Optimierte Binärsuche
Die Binärsuche lässt sich optimieren indem wir die „Mitte“ vom gesuchten Wert abhängig machen
Wir nehmen an, dass die Werte ungefähr gleichmässig verteilt sind
Wir verwenden den Ansatz Ist der gesuchte Wert eher gross oder klein, verglichen
mit dem Wert ganz links und dem Wert ganz rechts?
Wertmitte−links
=A[rechts ]−A[ links ]rechts−links
Informatik I/II PVK 5
Backtracking
Wir suchen eine Lösung zu einem Problem in einem grossen, endlichen Lösungsraum
Das Prinzip ist trial and error Besser als Brute Force
Den Lösungsraum stellen wir mit einem Baum dar (jeder Schritt ist ein Knoten)
Sind wir in einem Blatt angekommen, aber haben die richtige Lösung noch nicht, gehen wir wieder hoch und probieren etwas anderes
Anwendungsgebiete Wegfindung in Labyrinths Rätsel (Sudoku ...)
Informatik I/II PVK 6
Backtracking
Der Zustandsbaum wird „depth first“ durchlaufen
Wenn möglich frühzeitig abbrechen Verwende Nebenbedingungen für Tree-Pruning Verwende problembezogene Heuristiken
Informatik I/II PVK 7
Backtracking an der Prüfung
Meistens ist das durchführen aller Möglichkeiten kein Problem
Die Schwierigkeit liegt beim Finden der Nebenbedingungen, damit frühzeitig abgebrochen werden kann.
Labyrinth: Nicht durch Wände gehen! Rätsel: Nur gültige Variationen testen. Regeln in
Arrays oder so
Informatik I/II PVK 8
Das n-Damen Problem
Wenn wir eine Dame setzen so sind die Regeln, dass wir in der selben Spalte, Zeile und Diagonalen keine weitere setzen dürfen.
Es gilt also diese Züge irgendwie zu blockieren.
Wir können 3 Arrays machen (für die beiden Diagonalen und für die Zeile)
Bei der Suche nach einem gültigen Zug setzen wir dann in jeder Spalte eine Dame sofern möglich, ansonsten kehren wir ohne Lösung zurück
Informatik I/II PVK 9
Spieltheorie
Eine Theorie aus der Soziologie Untersuchung von rationalem Verhalten von
zwei oder mehr konkurrierenden Parteien Gewinnmaximierung Wirtschaftstheorie Politik und Militär Kooperationsuntersuchung (Tit-for-Tat)
Informatik I/II PVK 10
Endliche rein strategische 2-Personen-Nullsummenspiel mit vollständiger Information
Viele traditionelle Brettspiele fallen in diese Kategorie Kein Zufall, keine Wahrscheinlichkeiten
Der Gewinn des einen Spielers ist jeweils der Verlust des anderen.
Eine (End-)Situation braucht eine payoff function Die Strategien des Gegners sind den eigenen
Interessen entgegengesetzt Niemand besitzt mehr Informationen wie der andere
(z.B.: keine verdeckten Karten) somit kann man sich in die Rolle des Gegners rein versetzen
Informatik I/II PVK 11
Spielbäume
Zwei Spieler „Min“ und „Max“ ziehen abwechselnd Für den Baum niveauweise Min- oder Max-Knoten
Blätter des Spielbaumes beschreiben Endsituation Max will ein Blatt erreichen, welches einen möglichst
hohen Wert hat Min wird jedoch abwechselnd den für Max
schlechtmöglichsten Spielzug machen! Schadensbegrenzung!
Mit vollständiger Information lässt sich eine Gewinnstrategie finden
Informatik I/II PVK 12
Spielbaum
4 -1 8 -5 1 -4 7
Max
Max
Min
Informatik I/II PVK 13
Optimaler Spieler
Spielen beide Spieler optimal, so ist für jeden Spielzug bekannt was gespielt wird
Beide Spieler verfolgen ideale Strategie Spiele werden so sehr langweilig und enden immer in
Unentschieden (falls möglich) Zum Glück sind Spielbäume aber oft so gross, dass
eine gute Strategie nur geschätzt werden kann, weil Informationen fehlen
Ausnahme: es sind nur noch wenige Züge zu spielen
Informatik I/II PVK 14
Aufgabe Gegeben ist folgende Situation eines Tic-Tac-Toe Spieles
Als nächstes spielt X
Zeichne Spielbaum aller möglichen Züge und markiere welcher Spieler gerade am Zug ist
Ein Sieg gibt nun 1 Punkt, ein Unentschieden 0 Punkte und Verlieren gibt -1 Punkt. Überlege wie wir mit Hilfe des Baumes eine optimale Strategie wählen können
Wie wird diese Partie wohl enden?
Informatik I/II PVK 15
Lösung des vorherigen Slide
-1
1 1 0 0
-1
Informatik I/II PVK 16
Minimax-Algorithmus
1
-5 1
4 8 -5 1 7
4 -1 8 -5 1 -4 7
Wir gehen hier davon aus, dass beide Spieler optimal spielen
Informatik I/II PVK 17
Minimax-Algorithmus
Den Minimaxwert v(k) für einen Knoten k finden wir wie folgt
Für Blätter: v(k) entspricht der payoff function Für Knoten in Max-Niveau: wähle max(v(n)) mit n ein
direkter Nachfolger von k Für Knoten in Min-Niveau: wähle min(v(n)) mit n ein direkter
Nachfolger von k
Per Rekursion also in die Tiefe gehen bis wir den Wert aus den Blättern lesen können
Die Wurzel enthält also jeweils den Wert den Max von dieser Spielsituation mindestens noch erreichen kann
Informatik I/II PVK 18
Auswertung von Spielbäumen
Da Spielbäume so gross sind werden sie nur bis zu einer gewissen Tiefe ausgewertet und dann wird der Wert der Blätter des Teilbaumes geschätzt
Die Wahl der Tiefe kann von verfügbaren Zeit oder momentaner Spielsituation abhängen
Für eine gute Strategie wollen wir den Baum möglichst tief durchsuchen, aber aussichtslose Spielzüge schnell verwerfen
Der ausgewertete Spielbaum wird so „schlank“ gehalten
Informatik I/II PVK 19
α-β-Algorithmus
Wir wollen uns unnötige Rekursionsschritte ersparen und so Unterbäume abschneiden, die uns keine besseren Lösungen mehr bieten
Der α-β-Algorithmus verändert den Minimax-Wert nicht, somit werden nur Knoten expandiert, die wir auch wirklich in Erwägung ziehen würden
Man unterscheidet zwischen einem α- und β-Schnitt
Ein α-Schnitt wird gemacht, falls Max bereits eine bessere Lösung kennt, als Min ihm in einem Baum ermöglicht und somit den Weg nicht einschlagen würde
Ein β-Schnitt wird dann gemacht, wenn Min bereits eine für Max schlechtere Lösung kennt und ein Unterbaum eine bessere Lösung für Max liefern würde
Informatik I/II PVK 20
α-β-Schranken α-β-Schranken sind die Werte, die wir bei der Rekursion
mitgeben.
Die α-Schranke repräsentiert einen bereits bekannten Gewinn den Max garantiert gewinnen kann
Die α-Schranke wird von Max gesetzt Max macht jeweils einen β-Schnitt
Die β-Schranke repräsentiert den Gewinn, den Min für Max maximal zulassen würde
Die β-Schranke wird von Min gesetzt Min macht jeweils einen α-Schnitt
Somit streichen wir einen Baum, sobald dessen Auswertung ausserhalb von den α-β-Schranken liegen
oder ≥
Informatik I/II PVK 21
Effizienz des α-β-Algorithmus
Knoten sollten auf- bzw. absteigend sortiert sein, damit möglichst viele Schnitte gemacht werden können
Bester Fall mit α-β = schlechstester Fall mit Minimax−Algorithmus
Informatik I/II PVK 22
Aufgabe
Werte folgenden Spielbaum mit Hilfe des α-β-Algorithmus aus
Wo werden welche Schnitte gemacht und warum? Schreibt die α-β-Schranken für jede Kante auf
Informatik I/II PVK 23
Lösung des vorherigen Slide
(-∞,∞)
(-∞,∞)
4
(-∞,4)
(-∞,4) 𝛃-Schnitt
7
(4,∞)
(4,∞) 𝛂-Schnitt
(4,∞)
3
(4,∞)
(4,∞) (4,∞)
2
2
𝛂-Schnitt
4
Informatik I/II PVK 24
Mergesort
Zwei sortierte Listen sortierbarer Elemente lassen sich einfach in eine Liste vereinen (mergen)
2, 5, 6, 7, 9, 12, 15
4, 8, 10, 13, 16, 17
Falls wir also eine unsortierte Liste haben, dann können wir diese jeweils halbieren und die beiden Hälften dann mit Mergesort halbieren
Das lässt sich rekursiv machen → Wir halbieren so lange, bis wir nur noch zwei Elemente in der Teilliste haben und das sortieren trivial geworden ist
Mit Mergesort fügen wir dann alle Teillisten wieder zusammen
Aber wir können es auch ohne Rekursion machen
2, 4, 5, 6, 7, 8 ...
Informatik I/II PVK 25
Aufgabe
Mergesort von Hand
Wie viele Schritte benötigen wir für ein Array der Länge n?
Informatik I/II PVK 26
Lösung des vorherigen Slide
15 21 9 63 44 45 8 88 67 98 6 45 62
9 15 21 63 8 44 45 88 6 45 67 98 62
8 9 15 21 44 45 63 88 6 45 62 67 98
6 8 9 15 21 44 45 45 62 63 67 88 98
Informatik I/II PVK 27
Heap
Die Heap Datenstruktur ist ein Binärbaum, dessen Niveaus alle voll ausgefüllt sind (bis auf das letzte)
Für jede Wurzel jedes Unterbaums gilt, dass die Wurzel die kleinste Zahl des Baumes ist
Alle Pfade von Blatt zu Wurzel sind also monoton fallend
Wir können einen Heap niveauweise in in ein Array speichern, die Wurzel hat dann den Index 1
Direkte Nachfolger des i-ten Knoten haben dann Indizes 2i und 2i+1
Informatik I/II PVK 28
Heap 2
Um einen neuen Wert in den Heap zu speichern, kommt er an die letzte Stelle des untersten Niveaus und wandert dann den Baum hoch, indem er sich mit seinem Vorgänger austauscht, bis der Wert eines Vorgängers kleiner ist als der Wert selbst.
Um das Minimum des Baumes zu kriegen, nimmt man einfach die Wurzel des Heaps weg. Um den Baum wiederherzustellen, nimmt man den untersten, letzten Knoten und lässt ihn nach unten wandern, indem er sich jeweils mit dem kleineren Nachfolger austauscht. Das macht er so lange, bis die Werte beider Nachfolger grösser sind als der Wert selbst.
Informatik I/II PVK 29
Heap-Sort
Um eine unsortierte Reihe der Länge n zu sortieren wird
Ein Element nach dem andern dem Heap hinzugefügt und dann
n mal get_min auf den Heap angewendet Ist die Zahlenfolge in einem Array gegeben, so
benötigt diese Methode keinen zusätzlichen Platz
Ausserdem ist dieser Algorithmus sehr effizient (sehen wir morgen)
Informatik I/II PVK 30
Aufgabe Sortiere dieses Array
mit Heap-Sort Als Hilfe: Schreibe für
jeden Schritt den Heap in Baumform
2 50347
Informatik I/II PVK 31
Lösung
2 50347
2 50342 503
2 50
2 5
5
7
7
7
7
7
7
7
77
77
7
44
4
4
4
4
4
44
445
5
55
5
52
22
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
0
0
0
0
0
00
0
0
5