Informatik I/II PVK Donnerstag Informatik II, 2. Teil Ablauf heute Binärsuche Backtracking Spieltheorie, Spielbäume Minimax-Algorithmus α-β-Algorithmus Mergesort Heap-Sort Informatik I/II PVK 2 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 if (value < mitte) links rechts mitte neue mitte if (value > mitte) neues rechts neues links … … Informatik I/II PVK neue mitte rechts 3 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 A[rechts ]− A[links ] Wert = mitte − links rechts − links Ist der gesuchte Wert eher gross oder klein, verglichen mit dem Wert ganz links und dem Wert ganz rechts? Informatik I/II PVK 4 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 5 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 6 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 7 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 8 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 9 Endliche rein strategische 2-PersonenNullsummenspiel mit vollständiger Information Viele traditionelle Brettspiele fallen in diese Kategorie Der Gewinn des einen Spielers ist jeweils der Verlust des anderen. Kein Zufall, keine Wahrscheinlichkeiten 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 10 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 11 Spielbaum Max Min Max 4 -1 8 -5 Informatik I/II PVK 1 -4 7 12 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 13 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 14 Lösung des vorherigen Slide -1 -1 1 1 Informatik I/II PVK 0 0 15 Minimax-Algorithmus 1 -5 4 4 -1 1 8 -5 8 -5 1 1 7 -4 7 Wir gehen hier davon aus, dass beide Spieler optimal spielen Informatik I/II PVK 16 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 17 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 18 α-β-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 19 α-β-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 20 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 21 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 22 Lösung des vorherigen Slide 4 (4,∞) (-∞,∞) (4,∞) 4 (-∞,∞) 3 (-∞,4) (4,∞) 2 7 (-∞,4) (4,∞) 𝛂-Schnitt 𝛂-Schnitt 2 𝛃-Schnitt (4,∞) Informatik I/II PVK (4,∞) 23 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 2, 4, 5 , 6, 7, 8 ... 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 Informatik I/II PVK 24 Aufgabe Mergesort von Hand Wie viele Schritte benötigen wir für ein Array der Länge n? Informatik I/II PVK 25 Lösung des vorherigen Slide 15 21 9 9 63 15 21 63 8 9 15 6 8 44 45 8 8 88 44 45 21 44 45 63 88 9 21 44 45 15 67 98 88 6 6 45 Informatik I/II PVK 62 63 45 45 67 6 45 62 67 98 62 62 88 67 98 98 26 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 27 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 28 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 29 Aufgabe 7 4 3 0 2 5 Sortiere dieses Array mit Heap-Sort Als Hilfe: Schreibe für jeden Schritt den Heap in Baumform Informatik I/II PVK 30 Lösung 7 4 3 0 2 5 7 4 3 0 0 0 2 3 4 5 7 7 3 3 4 4 4 4 4 4 7 4 0 0 2 2 5 5 0 7 7 7 7 7 3 3 3 2 2 3 3 5 2 2 2 2 2 5 5 4 7 7 3 2 2 3 5 5 7 5 5 4 4 3 Informatik I/II PVK 5 5 0 0 0 0 0 0 31