Uninformierte Suche in Java Informierte Suchverfahren Stephan Schwiebert WS 2008/2009 Sprachliche Informationsverarbeitung Institut für Linguistik Universität zu Köln 8-Damen-Problem Gegeben: Schachbrett mit 8 Zeilen und 8 Spalten Gesucht: Aufstellung von 8 Damen, so dass keine Dame von einer anderen Dame bedroht wird. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 8-Damen-Problem Gegeben: Schachbrett mit 8 Zeilen und 8 Spalten Gesucht: Aufstellung von 8 Damen, so dass keine Dame von einer anderen Dame bedroht wird. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Suchprobleme bestehen aus Zuständen (insbesondere einem Ausgangszustand), Nachfolgerfunktionen und Zieltest Bei informierten Suchverfahren existiert zudem noch eine Kostenfunktion, mit der ein einzelner „Schritt“ bewertet wird. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Suchbaum/Suchgraph Teilgraph des Suchraums Wurzel ist Suchknoten, der dem Ausgangszustand entspricht. Abhängig von der gewählten Suchstrategie – im (theoretischen) Idealfall ein Pfad vom Ausgangszustand zur optimalen Lösung. Im Idealfall kreisfrei (Baum statt Graph) Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Knoten und Zustände im Suchbaum Zustand: Konfiguration des Problems, z.B. besuchte Städte + Kosten des zurückgelegten Weges Knoten: „Buchhaltungs“-Datenstruktur, z.B. Kosten des zurückgelegten Weges & aktuelle Stadt Zwei unterschiedliche Knoten können den gleichen „Weltzustand“ beschreiben (der auf unterschiedlichen Wegen erreicht wurde). Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Suchstrategie informierte Suche: Besucht „vielversprechende“ Knoten im Suchbaum zuerst. Benötigt Zusatzinformationen, um diese Knoten zu identifizieren. uninformierte Suche: Besucht Knoten nach ihrer Reihenfolge im Suchbaum. Kann dabei „beliebig schlecht“ vorgehen. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Algorithmus zur Tiefensuche Stack stack stack.push(ausgangsProblem) begin sucheLösung : solange (Stack nicht leer) : Problem p = stack.pop() wenn (p ist Lösung) : return „Lösung: p“ sonst: Problem kind = expandiere(p) wenn (kind != null) : stack.push(p) stack.push(kind) end wenn end sonst end solange end sucheLösung Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Algorithmus zur Tiefensuche Stack stack stack.push(ausgangsProblem) begin sucheLösung : solange (Stack nicht leer) : Problem p = stack.pop() wenn (p ist Lösung) : return „Lösung: p“ Einzige Bedingung an das Problem: Methode zum Prüfen und zum Expandieren. sonst: Problem kind = expandiere(p) wenn (kind != null) : stack.push(p) stack.push(kind) end wenn end sonst end solange end sucheLösung Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Informierte Suche/Best First Search # Damen 8 10 12 # Lösungen 92 724 14200 Zeit/Lösung 1,2 3,8 7,4 Da Verzweigung und Tiefe des Suchbaums stark zunehmen, wenn das Spielfeld vergrößert wird, wird das vorgestellte Backtracking-Verfahren schnell ineffizient. Wie könnte sich die Suche beschleunigen lassen? Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Informierte Suche/Best First Search Wenn Teillösungen bewerten werden können, können zunächst vielversprechende Knoten expandiert werden. Je nach Qualität der Bewertungsfunktion (die abhängig von der Problemstellung ist), lässt sich die Anzahl der zu expandierenden Knoten somit stark beschränken. Wird die Bewertung einer Lösung geschätzt, so handelt es sich bei der Bewertungsfunktion um eine Heuristik. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Heuristiken Heuristiken für das 8-Damen-Problem Wie könnte eine Heuristik für das 8-Damen-Problem aussehen, die entscheidet, in welcher Spalte die nächste Dame gesetzt werden soll? Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Heuristiken für das 8-Damen-Problem Wie könnte eine Heuristik für das 8-Damen-Problem aussehen, die entscheidet, in welcher Spalte die nächste Dame gesetzt werden soll? h(s) = ?? Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Heuristiken für das 8-Damen-Problem Wie könnte eine Heuristik für das 8-Damen-Problem aussehen, die entscheidet, in welcher Spalte die nächste Dame gesetzt werden soll? h1(s) = Anzahl freier Felder h2(s) = min. Anzahl freier Felder pro Zeile Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Bestensuche im 8-Damen-Suchbaum 1 3 4a 4b 4d 4f h2: 2 h2: 2 h2: 1 h2: 2 2 3 a b c d e f g h Die Positionen a, b und f würden von h2 gegenüber Position d bevorzugt. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Anforderungen an eine Heuristik Welche Kriterien sollte eine gute Heuristik erfüllen? Sie sollte effizient berechnet werden können wenige bis keine „schlechten“ Knoten expandieren. niemals höhere (bei einem Minimierungsproblem) Kosten schätzen als tatsächlich anfallen. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Wegsuche II Wie könnte eine Heuristik aussehen, die benutzt werden kann, um Wege in einem Routenplaner zu berechnen? 117 23 141 26 21 86 21 86 50 104 31 31 124 59 0 27 36 36 54 14 54 Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Naive Heuristik Idee: Es wird stets der Knoten expandiert, der dem Ziel (laut Heuristik) am nächsten liegt. Bewertungsfunktion: f(x) = h(x) Vorteil: Der Algorithmus ist schnell. Problem: Die Lösung ist nicht optimal. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Naive Heuristik 117 23 141 86 21 86 50 104 59 21 31 124 0 27 36 54 14 54 In diesem Fall würde die Suche den rot markierten Weg wählen (Kosten: 168), während der grün markierte Weg (Kosten: 133) optimal ist. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Naive Heuristik: zu gierig! Der beschriebene Ansatz ist ein sogenannter „Greedy-Algorithmus“, der sich „gierig“ dem Ziel nähert und nicht bereit ist, eine einmal getroffene Entscheidung (hier: Zwischenstation) zurückzunehmen. Für manche Probleme sind Greedy-Algorithmen sehr gut geeignet. Wie muss ein solches Problem „aussehen“? Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09 Hill-climbing Problem: Abhängig vom Ausgangszustand kann der Algorithmus in einem lokalen Maximum „steckenbleiben“. Stephan Schwiebert - Sprachliche Informationsverarbeitung - WS 08/09