640 likes | 807 Views
Problemlösen durch Suchen. Überblick. Problemlösende Agenten Motivation: Problemlösen durch Suche Problemtypen Probleme formulieren Beispielprobleme Einfache Suchalgorithmen. Problemlösende Agenten. Offline-Problemlösen, da Wissen vollständig!. Begriffe: Online / Offline. Offline:
E N D
Überblick • Problemlösende Agenten • Motivation: Problemlösen durch Suche • Problemtypen • Probleme formulieren • Beispielprobleme • Einfache Suchalgorithmen
Problemlösende Agenten Offline-Problemlösen, da Wissen vollständig!
Begriffe: Online / Offline • Offline: • Berechne erst vollständige Lösung • Dann Ausführung in der Realwelt • Online: „Interleaving“, d.h. Verzahnung • Berechnung • Aktion • Berechnung • Aktion …
Problemlösen durch Suchen • Erinnerung: Modellbasierte Agenten „denken“ über Wirkung ihrer Aktionen nach • Besonders wichtig, wenn eine Aktion nicht ausreicht, um zum Ziel zu kommen, … • … sondern mehrere Aktionen in der richtigen Reihenfolge nötig sind! • Ansatz: Mehrere Aktionsfolgen durchspielen
Beispiel: Rumänien • Standort: Arad • Ziel: Bukarest • Zielformulierung: • In Bukarest sein • Problemformulierung: • Zustände: Verschiedene Städte • Aktionen: Von einer Stadt zur anderen fahren • Lösung finden: • Folge von Städten finden, z.B. Arad, Sibiu, Fagaras, Bukarest
Einordnung der Umgebung „Landkarte“ • Statisch: Städte fest • Beobachtbar: Agent kennt Standort • Diskret: Fahrt nur durch „diskrete“ Städte, nicht querfeldein • Deterministisch: Aktion „Fahre nach X“ endet in X
Weitere Begriffe: Problemtypen • Deterministisch, vollständig beobachtbar Ein-Zustands-Problem (single state problem) • Agent weiß genau, in welchem Zustand er gelangen wird; Lösung ist eine Zustandsfolge (Ein-Zustands-Problem heißt nicht, dass es nur einen Zustand gibt!) • Nicht-beobachtbar Sensorloses Problem (“Angepasstes (conformant) Problem”) • Z.B. Staubsauger kennt seinen Ort nicht ; Lösung ist eine Zustandsfolge • Nicht-deterministisch und/oder teilweise beobachtbar Kontingenzproblem • Wahrnehmungen liefern neue Information über aktuellen Zustand • Meist Interleaving erforderlich • Wenn die neue Information durch anderen Agenten verursacht wird: Adversariales Problem • Unbekannter Zustandsraum Explorationsproblem
Beispiel: Staubsaugerwelt • Einzustands-Problem, Start #5 Lösung?
Beispiel: Staubsaugerwelt • Einzustands-Problem, Start #5 Lösung?[Rechts, Saugen]
Beispiel: Staubsaugerwelt • Sensorlos, Start in {1,2,3,4,5,6,7,8}z.B. Rechts geht über in {2,4,6,8}, d.h. Menge von Zuständen statt nur eines Zustands.Lösung?
Beispiel: Staubsaugerwelt • Sensorlos, Start in {1,2,3,4,5,6,7,8}z.B. Rechts geht über in {2,4,6,8} }, d.h. Menge von Zuständen statt nur eines Zustands. Lösung?[Rechts,Saugen,Links,Saugen]
Beispiel: Staubsaugerwelt • Kontingenz-Problem • Nicht-deterministisch: Z.B. Saugen kann Teppich verschmutzen! • Teilweise beobachtbar: Ort, Schmutz am aktuellen Ort. • Wahrnehmung: [L, Sauber], d.h. Start in #5 oder #7Lösung?
Beispiel: Staubsaugerwelt • Kontingenz-Problem • Nicht-deterministisch: Z.B. Saugen kann Teppich verschmutzen! • Teilweise beobachtbar: Ort, Schmutz am aktuellen Ort. • Wahrnehmung: [L, Sauber], d.h. Start in #5 oder #7Lösung? [Rechts, wenn Schmutz dann Saugen]
Formulierung des Single-State Problems Nach Festlegen der Zustände ist ein Problem definiert durch vier Punkte: • Anfangszustand, z.B. „in Arad" • Aktionen, die in einem Zustand möglich sind, sind gegeben durch die NachfolgerfunktionS(x) = Menge der Aktion–Zustand Paare • Z.B. S(Arad) = {<Arad Zerind, Zerind>, … } • Pfadkosten (additiv) • Z.B. Summe der Distanzen, # Aktionen etc. • c(x,a,y) ≥ 0 sind die Schrittkosten • Zieltest: • Explizit, z.B. x = „in Bukarest" • Implizit, z.B. Schachmatt(x) Eine Lösung ist eine Sequenz von Aktionen die vom Anfangszustand zum Zielzustand führen.
Wahl des Zustandsraums • Realwelt ist hochkomplex Zustandsraum muss abstrahieren • Wahl der Zustände schwierigster Teil der Problemformulierung! • Hier: • Zustand = Stadt • Kosten = Entfernung der Mittelpunkte • Was wurde ignoriert / idealisiert? • Kosten = Strecke (nicht Fahrzeit, Spritkosten) • Ausdehnung der Stadt, Stau, Straßenzustand • Detailabläufe: Gas geben, lenken, … • (Abstrakter) Zustand = Menge realer Zustände • (Abstrakte) Aktion = komplexe Kombination realer Aktionen • Z.B. "Arad Zerind" repräsentiert eine komplexe Menge möglicher Routen, Umwege, Gasgeben, Lenken, etc. • Um Realisierbarkeit zu garantieren muss jeder reale Zustand "in Arad“ zu einem realen Zustand "in Zerind“ führen • (Abstrakte) Lösung = • Menge der Pfade die Lösungen in der Realwelt sind • Jede abstrakte Aktion sollte "einfacher" sein als das reale Problem
Pfadkostenfunktion • Hier: Pfadkosten = Summe der Schrittkosten • Schritt = Aktion, die von einem Zustand zum nächsten führt • Sinnvoll z.B. bei Städte-Problem • A nach B 20 km • B nach C 10 km • A über B nach C 30 km • Gegenbeispiel: • Auto beschleunigt auf Weg von A nach B: 3 sec • Auto beschleunigt auf Weg von B nach C: 3 sec • Auto beschleunigt von A nach B (3 sec), ist also auf Weg von B nach C schon schneller (1 sec) !
Staubsaugerwelt als Zustandsraum • Zustände? • Aktionen? • Zieltest? • Pfadkosten?
Staubsaugerwelt als Zustandsraum • Zustände? Diskreter Schmutz und diskreter Ort • Aktionen?Links, Rechts, Saugen • Zieltest? Kein Schmutz an allen Orten • Pfadkosten?1 pro Aktion
Beispiel: Schiebefax • Zustände? • Aktionen? • Zieltest? • Pfadkosten?
Beispiel: Schiebefax • Zustände?Anordnungen • Aktionen?Verschiebe Lücke links, rechts, rauf, runter • Zieltest?Bestimmte Anordnung • Pfadkosten? 1 pro Verschieben [Bemerkung: optimale Lösung der n-Puzzle Familie ist NP-hart]
8-Damen Problem • Zustände: 0-8 Damen in bel. Anordnung • Ausgangszustand: Brett leer • Nachfolgerfunktion: 1 Dame auf freies Feld setzen • Pfadkosten: Egal • Zieltest: Alle 8 Damen da, keine wird bedroht
Verwandte Problem der Routensuche • Routensuche (Zustand = Stadt) • Touring Problem: • Jede Stadt 1x besuchen, Anfangs- = Endstadt • Zustand = Aktuelle Stadt + alle schon besuchten • Traveling Salesman Problem: Kürzesten Weg für Touring finden
Realweltproblem: Manipulation durch Roboter • Zustände?: Reellwertige Gelenkwinkel des Arms, reellwertige Objektkoordinaten • Aktionen?: Kontinuierliche Gelenkwinkel, Gelenkwinkelgeschwindigkeiten, -beschleunigungen • Zieltest?: Z.B. vollständige Montage • Pfadkosten?: Ausführungszeit
Suchbäume • Idee: • Offline, simulierte Exploration des Suchraums, indem Nachfolger bereits untersuchter Zustände generiert werden (“Expandierung” von Zuständen)
Implementierung: Zustände / Knoten • Ein Zustand ist eine Repräsentation einer physischen Konfiguration • Ein Knoten ist eine Datenstruktur, die Bestandteil des Suchbaums ist. Umfasst Zustand, Elternknoten, Aktion, Pfadkosten g(x), Tiefe • Ein Zustand kann durch mehrere Knoten repräsentiert sein! (Z.B. Arad – Sibiu – Arad bei ungünstiger Strategie) • Die Expand Funktion erzeugt neue Knoten und belegt die Felder der Datenstrukturen mit Werten. Insb. wird die Nachfolgefunktion SuccessorFn des Problems angewendet, um die entsprechenden Zustände zu erhalten.
Suchstrategien • Eine Suchstrategie ist definiert durch die Reihenfolge, in der die Knoten expandiert werden. • Strategien werden anhand folgender Kriterien bewertet: • Vollständigkeit: Wird garantiert eine Lösung gefunden, falls eine existiert? • Zeitkomplexität: Zahl der erzeugten Knoten • Speicherkomplexität: Maximalzahl der Knoten im Speicher • Optimalität: Wird die Lösung mit den geringsten Kosten sicher gefunden? • Optimalität heißt nicht: Die (optimale oder suboptimale) Lösung wird mit geringstem Suchaufwand gefunden! • Zeit- und Speicherkomplexität werden in folgenden Größen ausgedrückt: • b: Maximaler Verzweigungs (branching-)faktor des Suchbaums • d: Minimale Tiefe (depth) der optimalen Lösung • m: Maximale Tiefe des Suchbaums (u.U. ∞)
Uninformierte Suchstrategien • Uninformierte Suchstrategien verwenden nur die Information, die durch die Problemdefinition gegeben ist • Wichtigste Strategien: • Breitensuche (Breadth-first search) • Suche mit einheitliche Kosten (Uniform-cost search) • Tiefensuche (Depth-first search ) • Tiefenbeschränkte Suche (Depth-limited search) • Iterative Tiefensuche (Iterative deepening search)
Breitensuche • Expandiere zuerst Knoten mit geringster Tiefe • Implementierung: • Rand (fringe) ist eine FIFO-Schlange, d.h. neue Nachfolger werden am Ende der Schlange einsortiert
Breitensuche • Expandiere zuerst Knoten mit geringster Tiefe • Implementierung: • Rand (fringe) ist eine FIFO-Schlange, d.h. neue Nachfolger werden am Ende der Schlange einsortiert
Breitensuche • Expandiere zuerst Knoten mit geringster Tiefe • Implementierung: • Rand (fringe) ist eine FIFO-Schlange, d.h. neue Nachfolger werden am Ende der Schlange einsortiert
Breitensuche • Expandiere zuerst Knoten mit geringster Tiefe • Implementierung: • Rand (fringe) ist eine FIFO-Schlange, d.h. neue Nachfolger werden am Ende der Schlange einsortiert
Eigenschaften der Breitensuche • Vollständig? Ja (falls b endlich) • Zeit?1+b+b2+b3+… +bd + bd+1-b = O(bd+1) (Wenn Lsg. auf Tiefe d müssen noch bd+1-b Knoten (unnötig) erzeugt werden.) • Speicher?O(bd+1) (jeder Knoten wird gespeichert) • Optimal? Ja (falls Kosten = 1 pro Schritt) • Speicher ist das Hauptproblem (noch mehr als Zeit)
Suche mit einheitliche Kosten • Expandiere Knoten mit (bisher) geringsten Pfadkosten zuerst • Implementierung: • Rand = Schlange geordnet nach Pfadkosten • Equivalent zu breadth-first falls Schrittkosten alle gleich • Vollständig? Ja, falls Schrittkosten ≥ ε • Zeit? # Knoten mit g ≤ Kosten der optimalen Lösung, O(bceiling(C*/ ε)), wobei C* = Kosten der optimalen Lösung • Speicher? # Knoten mit g≤ Kosten der opitmalen Lösung, O(bceiling(C*/ ε)) • Optimal? Ja – Knoten werden in ansteigender Ordnung von g(n) expandiert
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne
Depth-first search • Expandiere tiefsten Knoten zuerst • Implementierung: • Rand = LIFO Schlange, d.h. Nachfolger nach vorne