Raphael Fischer fischrap@student.ethz.ch 04.05.2014 Informatik II - Übung 9 Raphael Fischer fischrap@student.ethz.ch 04.05.2014
Spielbäume Jeder Ast: Ein möglicher Spielverlauf Max will möglichst hohen Wert Min will möglichst tiefen Wert Raphael Fischer 10.11.2018
Strategie σ Ein Spieler versetzt sich in jeden mögl. Spielzustand und überlegt was er machen würde Raphael Fischer 10.11.2018
Optimale Strategie σ* Wähle Strategie so, dass das beste für einen rausschaut, falls der Gegner extrem gut ist (worst-case Optimierung) Raphael Fischer 10.11.2018
Optimale Strategie σ* 5 5 -6 5 3 8 Wahl der Strategie auf der untersten Ebene einfach Weise Knoten voraussichtlicher Spielausgang zu Nächste Ebene kommt dran: Min wählt Strategie usw. Raphael Fischer 10.11.2018
Optimale Strategien σ* und σ’* Nash-Gleichgewicht Wenn keiner einen Fehler macht, ist das Resultat schon vorbestimmt Nash-Gleichgewicht: 𝐴 𝜎 ∗ , 𝜎 ′ ∗ ≥𝐴 𝜎, 𝜎 ′ ∗ Raphael Fischer 10.11.2018
Minimax-Algorithmus Diese Beschriftung der Knoten: Max-Spieler wählt das Maximum der Kind-Knoten Min-Spieler wählt das Minimum der Kind-Knoten Variante von vorher: Bottom-up Rekursiv wäre: Depth-first Raphael Fischer 10.11.2018
U9.A2a): Reversi Minimax-Spieler Programmieren Wenn bei gewisser Tiefe angelangt, schneide Baum ab Es werden alles Blätter Bewertungsfunktion = Differenz der Steine Raphael Fischer 10.11.2018
Beispiel: Tic-Tac-Toe Spieler Hier ohne Tiefenbeschränkung Raphael Fischer 10.11.2018
U9.A2a): Reversi Tipp: Überlegt euch: Was, wenn gar kein möglicher Zug? Was, wenn der Gegner (=Max in Min-Funktion und umgekehrt) auch keinen mehr hat? Raphael Fischer 10.11.2018
U9.A2b): Reversi: Zeitmanagement Zeitlimite pro Zug in ms wird in void initialize(int myColor, long timeLimit) mitgeteilt Zieht von diesem timeLimit ca. 10ms als Reserve ab System.currentTimeMillis() Prüfe in min und max Funktion, ob Limite überschritten. Wenn ja: Exception Berechne zuerst Zug mit Tiefe 1, dann mit Tiefe 2 etc. bis es Time-Exception gibt. Der letzte Versuch ohne Exception zählt Raphael Fischer 10.11.2018
U9.A2c) Heuristiken (optional) Finde bessere Heuristik Internet-Recherche Eigentlich wichtigster Teil für guten Reversi-Spieler Raphael Fischer 10.11.2018
Othelligence Event Program: Time: Friday, 19.05.2017, 16:00 Game strategies and game theory Duell Human (German Champion) vs. Machine Panel Apéro 😋 Time: Friday, 19.05.2017, 16:00 Location: CABinett (CAB F21) More info: https://vs.inf.ethz.ch/events/othelligence/ Interesting for the students to get insights for their reversi tournament players. 10.11.2018
Alpha-Beta-Algorithmus Raphael Fischer 10.11.2018
Alpha-Beta-Algorithmus Alpha: Ich habe schon einen Wert mit α. Mich interessieren nur noch grössere Werte Beta: Ich habe schon einen Wert mit β. Mich interessieren nur noch kleinere Werte Liefere Wert 𝑥 ∈[𝛼, 𝛽] Achtung: Knotenwerte können anders als bei Minimax sein! (falls β kleiner als alle maxValues Raphael Fischer 10.11.2018
Aufgabe 1: Alpha Beta Alpha: Ich habe schon einen Wert mit α. Mich interessieren nur noch grössere Werte Beta: Ich habe schon einen Wert mit β. Mich interessieren nur noch kleinere Werte Liefere Wert 𝑥 ∈[𝛼, 𝛽] Achtung: Knotenwerte können anders als bei Minimax sein! (falls β kleiner als alle maxValues Raphael Fischer 10.11.2018
Lösung Raphael Fischer 10.11.2018
U9.A1: Theorieaufgabe Strategien Minimax Alpha-Beta Raphael Fischer 10.11.2018
U8.A2 Rucksackproblem mit Backtracking Lösung Problembeschreibung: k Gegenstände x1, ..., xk; Jeweils bekannter Wert und Gewicht Auswahl von Gegenständen, so dass Gesamtgewicht nicht überschritten wird Optimierungsproblem: Maximieren des Wertes der ausgewählten Gegenstände Raphael Fischer 10.11.2018
Lösung zu letztem Mal: Knapsack mit Bruteforce public Selection findBest(ArrayList<Integer> values, ArrayList<Integer> weights, int maxWeight) { if (values.size() != weights.size()) throw new IllegalArgumentException("size problem"); final int max = (int) Math.pow(2, values.size()); Selection bestSelection = null; int maxValue = -1; for (int i=0; i<max; i++) { Selection selection = new Selection(values.size(), i); if (selection.sum(weights) <= maxWeight) { int value = selection.sum(values); if (value >= maxValue) { bestSelection = selection; maxValue = value; } } } return bestSelection; } Alle 2n Möglichkeiten Probiere aktuelle Möglichkeit aus (-> Bitdarstellung der Selection!) Zu schwer? Raphael Fischer 10.11.2018
U8.A2 c) Backtracking Iteration Gewicht 12 kg 1 kg 4 kg 2 kg Wert $4 $2 $10 $1 Genommen? Nein Ja Todo Funktion, die einen Schritt näher zur Lösung gehen soll: Iteriere durch alle Möglichkeiten für diesen Schritt: 1. Prüfe, ob die Möglichkeit möglich ist Falls ja: Lösung kopieren Schritt in Kopie reinschreiben Rekursion mit Kopie Hier nur zwei Möglichkeiten: Nehme es nehme es nicht Lösung = Selection Schritt in Lösung reinschreiben Rekursion Schritt rückgängig machen o d e r Raphael Fischer 10.11.2018
Lösung zu letztem Mal: Backtracking public Selection findBest(ArrayList<Integer> values, ArrayList<Integer> weights, int maxWeight) { if (values.size() != weights.size()) throw new IllegalArgumentException("size problem"); Selection result = find(new Selection(0), 0, values, weights, maxWeight); return result; } Raphael Fischer 10.11.2018
Lösung zu letztem Mal: Backtracking Rückgabe: Komplette Selection Lösung zu letztem Mal: Backtracking private Selection find(Selection selection, int weight, ArrayList<Integer> values, ArrayList<Integer> w eights, int maxWeight) { final int depth = selection.size(); if (depth == values.size()) { return selection; } Selection without = new Selection(depth + 1, selection.bits()); without.set(depth, false); Selection resultWithout = find(without, weight, values, weights,maxWeight); if (weight + weights.get(depth) <= maxWeight) { Selection with = new Selection(depth + 1, selection.bits()); with.set(depth, true); Selection resultWith = find(with, weight + weights.get(depth), values, weights, maxWeight); if (resultWith.sum(values) > resultWithout.sum(values)) { return resultWith; } return resultWithout; } Neue Parameter. Selection ist nur der bisherige Teil Wie weit schon? Wenn fertig, breche ab Probiere, das nächste Element nicht zu nehmen Wenn überhaupt möglich, nächstes Element noch zu nehmen, Probiere, das nächste Element zu nehmen Schaue, welches besser ist Raphael Fischer 10.11.2018
…viel Spass! Raphael Fischer 10.11.2018