Informatik II - Übung 10

Ähnliche Dokumente
Informatik II - Übung 10

Informatik II Übung 9

Informatik II - Übung 11

Informatik II Übung 9

Informatik II Übung 11 Gruppe 3

Informatik II - Übung 11

Informatik II Übung 09

Informatik II (D-ITET) Übungsstunde 11,

Informatik II Übung 10. Benjamin Hepp 10 May 2017

Informatik II Übung 9 Gruppe 3

Informatik II Übung 09. Benjamin Hepp 3 May 2017

Informatik II Übung 9. Pascal Schärli

Informatik II Übung 11. Pascal Schärli

Informatik II Übung 8

Informatik II - Übung 07

Informatik II Übung 10. Pascal Schärli

Informatik II Übung 7. Gruppe 2 Carina Fuss

Informatik II Übung 8 Gruppe 3

Informatik II - Übung 08

Informatik II - Übung 08

Informatik II Übung 7

Informatik II - Übung 07. Christian Beckel

Informatik II Übung 7 Gruppe 3

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Praktikum Algorithmen-Entwurf (Teil 7)

Mergesort. Inhaltsverzeichnis. Veranschaulichung der Funktionsweise. aus Wikipedia, der freien Enzyklopädie

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Institut fu r Informatik

Informatik II Übung 7. Pascal Schärli

Tutoraufgabe 1 (Implementierung eines ADTs):

Probeklausur zur Vorlesung

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen

Informatik II (D-ITET)

Informatik II - Tutorium 12

Vorkurs Informatik WiSe 17/18

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abgabe: (vor der Vorlesung)

Wiederholungsblatt Einführung in die Programmierung Lösungen

Informatik II Übung 2. Gruppe 4. Lukas Burkhalter (Folien teils von Christian B. und Leyna S.)

Informatik II (D-ITET) Übungsstunde 8,

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Prüfung Algorithmen und Datenstrukturen I

JAVA - Suchen - Sortieren

Prüfung Algorithmen und Datenstrukturen I

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Algorithmen und Datenstrukturen Heapsort

9 Türme von Hanoi Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleine

Backtracking mit Heuristiken

Informatik II Übung 2. Pascal Schärli

Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen

Algorithmen und Datenstrukturen 1

II.3.1 Rekursive Algorithmen - 1 -

Informatik II - Übung 01

Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor

Informatik Abitur Bayern 2017 / II - Lösung

Programmieren in Java

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

Klausur - Informatik I SS 05. Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel

Einführung in Heuristische Suche

1. Die rekursive Datenstruktur Liste

Algorithmen und Datenstrukturen

Informatik II - Übung 12

Aufrufe von Objektmethoden

Übungen zum Vortrag Backtracking mit Heuristiken

Anwendungsbeispiel MinHeap

Die Formel für die Standardabweichung lautet (ohne die Wurzel haben wir die Varianz):

Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Vorkurs Informatik WiSe 16/17

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Transkript:

Informatik II - Übung 10 Christian Beckel beckel@inf.ethz.ch 08.05.2014 Blatt 08 1) Binäre Suche 2) TicTacToe 3) Reversi: checkmove() & GreedyPlayer 4) Backtracking Christian Beckel 09/05/14 2

U8.A3: checkmove() Eclipse DEMO (inkl. Debugging G04) Christian Beckel 09/05/14 3 U8.A3: GreedyPlayer! Durch Liste von availablemoves laufen! Initialisierung auf MIN_VAL! eval()-methode Eclipse-Demo! Weitere nützliche Methoden! boolean reversi.gameboard.ismoveavailable(int)! boolean reversi.gameboard.validcoordinates(coordinates)! int reversi.gameboard.countstones(int)! int reversi.utils.other(int) Christian Beckel 09/05/14 4

U8.A4: Backtracking! Wie setzt man ein bit, wenn ein Element mitgenommen wird? Wie setzt ich Bit in Selection auf true? Christian Beckel 09/05/14 5 U9.A1: Mini-Max-Algorithmus Strategie von MAX 4 Höhe: 4 Suchtiefe: 3 bester Zug: links MAX 4 0-2 MIN 4 7 3 0 2-2 8 MAX 7-5 2 1 7 8 MIN Christian Beckel 09/05/14 6

U9.A1: Alpha-Beta-Pruning Online Beispiel durchgerechnet: http://www.vs.inf.ethz.ch/edu/fs2012/i2/slides/info2-itet-alphabeta.pdf (user: i2 password: i22012) Online JAVA Applet: http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html Another online demo: http://www.emunix.emich.edu/~evett/ai/alphabeta_movie/sld001.htm Christian Beckel 09/05/14 7 Christian Beckel 09/05/14 8

U9.A1: Alpha-Beta-Pruning! Der α-β-algorithmus! Reduziert den Spielbaum durch Schnitte! Liefert den gleichen Minmax-Wert der Wurzel wie der MinMax-Algorithmus: Der MinMax-Algorithmus bewertet den vollständigen Suchbaum. Dabei werden aber auch Knoten betrachtet, die in das Ergebnis (die Wahl des Zweiges an der Wurzel) nicht einfliessen. Die Alpha-Beta-Suche ignoriert eben genau diese Knoten! α: Relevant für Auswertung von Min-Knoten (Evaluierung der weiteren Nachfolger kann abgebrochen werden, sobald der berechnete Rückgabewert kleiner-gleich α ist) grösster bisher bekannter Wert aller MAX-Vorfahren des MIN-Knotens! β: Relevant für Auswertung von Max-Knoten (Evaluierung der weiteren Nachfolger kann abgebrochen werden, sobald der berechnete Rückgabewert grösser-gleich β ist) kleinster bisher bekannter Wert aller MIN-Vorfahren des MAX-Knotens Christian Beckel 09/05/14 10

U9.A1: Alpha-Beta-Pruning 4 MAX I(4,+ ) L(3) M(4,+ ) 4 3 4 MIN 3 α 4 α (4,4) 4 7 3 0 4-2 MAX 7 β 7-5 2 1 7 8 MIN Christian Beckel 09/05/14 11 U9.A2: Reversi HumanPlayer RandomPlayer GreedyPlayer MinMaxPlayer α-β-player nextmove() wartet auf Eingabe von der Kommandozeile nextmove() wählt einen zufälligen (aber gültigen!) nächsten Zug nextmove() wählt nächsten Zug anhand einer einfachen, nichtrekursiven Bewertungsfunktion nextmove() wählt nächsten Zug anhand Min- Max-Analyse mit neuer Bewertungsfunktion nextmove() wählt nächsten Zug anhand - - Analyse mit eigener Bewertungsfunktion Download Übung 7 Übung 8 Übung 9 Übung 10 Christian Beckel 09/05/14 12

U9.A2: MinMax-Player! min() und max()rufen sich abwechselnd auf! Suchtiefe depth wird in jedem Aufruf angepasst! Jedes mal:! Get available moves! Für jeden Move:! Führe Move durch! Rufe min-spieler (bzw. max-spieler) auf! Wähle bestes Ergebnis Eclipse-Demo public Coordinates nextmove(gameboard gb){ BestMove bestmove = null; bestmove = max(d, gb, 0); } return bestmove.coord; Christian Beckel 09/05/14 13 U9.A2: Und nun mit Timeout! Vor Ablauf von timelimit Millisekunden soll nextmove() einen gültigen Zug zurückgegeben public Coordinates nextmove(gameboard gb) { long timeout = System.currentTimeMillis() + timelimit - 10; BestMove bestmove = null; try{ for(int maxdepth=1; ; ++maxdepth) bestmove = max(maxdepth, timeout, gb, 0); }catch(timeout e){ } return bestmove.coord; } Christian Beckel 09/05/14 14

U9.A2: Und nun mit Timeout! Einbindung in min() bzw. max() class Timeout extends Throwable{ } private BestMove max(int maxdepth, long timeout, GameBoard gb, int depth) throws Timeout { if( System.currentTimeMillis() > timeout ) throw new Timeout(); if( depth == maxdepth ){ return new BestMove( eval(gb),... );... } return bestmove; Christian Beckel 09/05/14 15 Möglichkeiten für die Bewertungsfunktion! Vorschläge für mögliche, statische Bewertungen! Mobilität! Wieviele Züge sind für mich/den Gegner möglich?! Reihen! Wie viele Reihen zusammenhängender Steine gibt es und! Wie lang sind diese? Auch die Lage der Reihen ist interessant!! Ein voll besetzter Rand ist sehr gut, während eine lange Sequenz in der zweiten Reihe dem Gegner u.u. gute Züge verschafft! Wie viele Steine! werden durch einen Zug umgedreht und in wie viele Richtungen? Liegen die Steine im Inneren oder am Rand?! Wie viele Steine! einer Farbe liegen? (Das ist vielleicht die Bewertungsfunktion für das Endspiel, wenn eine vollständige Analyse des Suchbaums möglich ist; für das Mittelspiel wohl eher ungeeignet)! Positionen! Auf dem Feld bewerten (z.b. Eckpunkte) Christian Beckel 09/05/14 16

Weitere Literatur! Inspirationsquelle:! The Development of a World Class Othello Program, Kai-Fu Lee and Sanjoy Mahajan, 1990! Zum Herunterladen von der Reversi-Webseite! username: i2bib! password: reversi! Artificial Intelligence: A Modern Approach (Stuart Russell and Peter Norvig, 2nd Edition, 2003) Christian Beckel 09/05/14 17 Hinweise zu Blatt 10 1) Merge sort 2) Türme von Hanoi 3) Reversi: Alpha-beta player Christian Beckel 09/05/14 18

U10.A1: Merge sort! Rekursiver Sortieralgorithmus, der nach dem Prinzip teile und herrsche arbeitet! Erstmals 1945 von John von Neumann vorgestellt! Prinzip: Divide et impera! Trenne (die Gegner) und beherrsche (sie dadurch)! Politische und militärische Strategie! Bereits im römischen Reich angewendet John von Neumann 1903 Budapest 1957 Washington Christian Beckel 09/05/14 19 U10.A1a Handarbeit! Merge sort! Betrachtet die zu sortierenden Daten als Liste und zerlegt sie in kleinere Listen! Die sortierten kleinen Listen werden dann im Reissverschlussverfahren zu grösseren Listen zusammengefügt (merged) Christian Beckel 09/05/14 20

U10.A1b Implementierung! ISort: definiert die Schnittstelle! ISort.sort(): nimmt eine ArrayList und gibt eine neue, sortierte ArrayList zurück! MergeSort.java (erstellen)! Implementiert die Schnittstelle ISort! Tipp: rekursive Helfermethode! Tipp: Beim Teilen müssen keine neuen Listen erstellt werden, man kann mit begin-end arbeiten public ArrayList<T> sort(arraylist<t> items) { return sortrec(items, 0, items.size()); } private ArrayList<T> sortrec(arraylist<t> items, int begin, int end) {... } Christian Beckel 09/05/14 21 U10.A1b: Measure.java! 10 "Messpunkte"! Beachtet, dass ihr die Zufallsarrays ausserhalb der Zeitmessungen erstellt!! Messungen wiederholen! je ein Extremwert ignorieren (min und max)! über n Messungen mitteln (insgesamt n+2 Messläufe)! Diagramm erstellen! beliebiges Tool (Bsp: GNUplot, Excel, Matlab, )! Abgabe als Bild! Interpretation wichtig! Christian Beckel 09/05/14 22

U10.A2 Türme von Hanoi! Aus der Vorlesung bekannt! Rekursive Lösung des Problems! Die einzige Möglichkeit, die unterste (grösste) Scheibe von Turm 1 nach Turm 3 zu bewegen (a) Auf Turm 1 befindet sich sonst nichts (b) Turm 3 ist leer! Aus (a) und (b) folgt:! Alle anderen Scheiben befinden sich auf Turm 2!! Es müssen zunächst die n-1 anderen Scheiben von Turm 1 zu Turm 2 gebracht werden Christian Beckel 09/05/14 23 U10.A2 Türme von Hanoi! Lösung des 3-Scheiben-Falles! Nennen wir die 3 Felder 1,2,3 und die Scheiben A,B,C! Ein Zahl-Buchstabenpaar gibt an welche Scheibe wohin bewegt werden soll (C2: die grösste der 3 Scheiben soll auf den mittleren Turm gelegt werden)! Lösungsschritte:! A3, B2, A2, C3, A1, B3, A3 (7 Schritte) C A B 1 2 3 Christian Beckel 09/05/14 24

U10.A2 Türme von Hanoi! Gesetzmässigkeiten erkennen:! Für jeden Schritt bei der Ausführung des rekursiven Algorithmus aus der Vorlesung wird genau ein Turm nicht benötigt.! Geben Sie für die 15 Schritte bei der Umschichtung eines Turms der Höhe 4 die Folge der Nummern derjenigen Türme an, die nicht angefasst werden! Beschreiben Sie Ihren entwickelten Algorithmus in Pseudocode! Für den Anfangsturm der Höhe 4! Sind Anpassungen für Türme der Höhe 5 nötig? Christian Beckel 09/05/14 25 U10.A3: Alpha-beta player! Reversi-Spieler, der nach dem α-β-verfahren vorgeht (sonst wie Minimax-Spieler)! α-β-algorithmus! Implementierung des Verfahrens aus der Vorlesung! Zugabbruch nach wie vor durch ein Timeout Christian Beckel 09/05/14 26

Reversi-Turnier!! Mittwoch, den 28.05.2014 um 14:15 Uhr, Stuz 2 http://www.vs.inf.ethz.ch/edu/fs2014/i2/ reversi/! Abgabe! Bis Mittwoch, den 21.05.2013 bis 23:59 (Zürich Time)! An Leyna Sadamori (leyna.sadamori@inf.ethz.ch)! Alleine, in Zweiergruppen, oder in Dreiergruppen (Aber: die Preise sind für Zweiergruppen ausgelegt!) Christian Beckel 09/05/14 27 viel Spass! Christian Beckel 09/05/14 28