Kontext-basierte Suche für klassische Handlungsplanung Bachelorarbeit Lukas Songajlo Betreuer: Manuel Heusner, Dr. Martin Wehrle Prüfer: Prof. Dr. Malte Helmert 1. September 2014 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Was ist klassische Handlungsplanung? Vorgehensweise: • Agent beginnt in einem initialen Zustand • Angewandte Aktionen wechseln Zustände • Agent erreicht (wenn möglich) einen Zielzustand Plan: Sequenz von Aktionen Ziel: Automatisches Lösen von Planungsproblemen 2 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion SAS+ -Planungsaufgaben (formal) Eine Planungsaufgabe ist ein 4-Tupel Λ = hV, A, s0 , G i: • V - Menge von Zustandsvariablen mit jeweils endlichen Wertebereich • A - Menge von Aktionen mit jeweils pre, eff und cost • s0 - Anfangszustand • G - Menge von belegten Zustandsvariablen 3 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Heuristische Suche Heuristikfunktion h(s) liefert Informationen über den Zustandsraum: • Schätzt Abstand von Zustand s zu einem Zielzustand • Weist potentiellem Nachfolge-Zustand einen numerischen Wert zu Bezug zur Handlungsplanung? Heuristische Werte werden automatisch berechnet, ohne Kenntnis über Domäne (z.B. hmax , hFF , ...) 4 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Bekanntes Problem - Suchplateaus • Bei gleichbleibendem heuristischen Wert können Suchplateaus entstehen • Suche verläuft unter Gierige Bestensuche“ blind ” h=3 ... h=4 h=3 h=3 h=3 h=2 ... h=3 5 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Motivation - Logistikproblem Stadt A Stadt B Stadt C Pos.1 Pos.5 Pos.9 Pos.2 Pos.6 Pos.10 Pos.3 Pos.7 Pos.11 LEGENDE Besetzte Position Unbesetzte Position Pos.4 Pos.8 Pos.12 Zielposition 6 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Motivation - Logistikproblem Stadt A Stadt B Stadt C Pos.1 Pos.5 Pos.9 Pos.2 Pos.6 Pos.10 Pos.3 Pos.7 Pos.11 hmax = 3 LEGENDE Besetzte Position Unbesetzte Position Pos.4 Pos.8 Pos.12 Zielposition 6 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Motivation - Logistikproblem Stadt A Stadt B Stadt C Pos.1 Pos.5 Pos.9 Pos.2 Pos.6 Pos.10 Pos.3 Pos.7 Pos.11 LEGENDE Besetzte Position Unbesetzte Position Pos.4 Pos.8 Pos.12 Zielposition 6 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Motivation - Logistikproblem Stadt A Stadt B Stadt C Pos.1 Pos.5 Pos.9 Pos.2 Pos.6 Pos.10 Pos.3 Pos.7 Pos.11 hmax = 3 LEGENDE Besetzte Position Unbesetzte Position Pos.4 Pos.8 Pos.12 Zielposition 6 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Mehr Orientierung! Thema dieser Arbeit Gezieltere Suche durch zusätzliche Information: • Ausnutzung von Aktions-Abhängigkeiten • Erweiterung der gierigen Bestensuche 7 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Suchalgorithmus der gierigen Bestensuche 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: openlist := new priority queue ordered by h openlist.initialize() closedlist := { } while openlist not empty do node = openlist.getMinimum() if closedlist.contains(node.state) = none then closedlist.add(node.state) if node.state is a goalstate then return getPath(node) for each successor s 0 of node.state do if h(s 0 ) < ∞ then openlist.add(createNode(s 0 )) return unsolveable 8 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Idee der kontext-basierten Suche • Aktion bevorzugen, die von der Vorgänger-Aktion profitiert • Pfad solange folgen bis Teilziel erreicht ist 9 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Abhängigkeiten zwischen Aktionen Gegeben: a1 , a2 ∈ A Interferenz • pre(a1 ) und eff(a2 ) enthalten gemeinsame Variablen • pre(a2 ) und eff(a1 ) enthalten gemeinsame Variablen • eff(a1 ) und eff(a2 ) enthalten gemeinsame Variablen 10 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Abhängigkeiten zwischen Aktionen Stadt A Pos.1 Stadt B Stadt C Pos.5 Pos.9 Pos.6 Pos.10 Pos.7 Pos.11 a1 Pos.2 a2 Pos.3 LEGENDE Besetzte Position Unbesetzte Position Pos.4 Pos.8 Pos.12 Zielposition 10 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Abhängigkeiten zwischen Aktionen Gegeben: a1 , a2 ∈ A und d ∈ N Interferenz-Distanz • Fall 1: a1 = a2 , dann gilt d = 0 • Fall 2: a1 , a2 interferieren über paarweisen Interferenzen miteinander, dann gilt d = # paarw. Interferenzen • Fall 3: a1 , a2 interferieren überhaupt nicht, dann gilt d = ∞ 10 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Abhängigkeiten zwischen Aktionen a1 a1 a4 a2 a2 a3 a5 a4 a5 10 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Umsetzung der Interferenz-Distanzen • Repräsentation als Matrix • Berechnung mit Flyod’s Algorithmus im Vorfeld der Suche 11 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Priorisierung von Zuständen 1. Priorisierung: Interferenz-Distanz 2. Priorisierung: Heuristischer Wert (Tiebreaker) 12 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Suchalgorithmus 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: openlist := new priority queue ordered by h openlist.initialize() closedlist := { } while openlist not empty do node = openlist.getMinimum() if closedlist.contains(node.state) = none then closedlist.add(node.state) if node.state is a goalstate then return getPath(node) for each successor s 0 of node.state do if h(s 0 ) < ∞ then openlist.add(createNode(s 0 )) return unsolveable 13 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Suchalgorithmus Funktion: add(Node n) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: priority-queues := given N + 1 priority queues a := action to current state s a0 := applicable action to switch state from s to n.state if a not writes variable corresponding to G then if D(a, a0 ) 6= ∞ then priority-queues[D(a, a0 )].add(n) else prune n.state else priority-queues[0].add(n) 13 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Suchalgorithmus Funktion: Node getMinimum() 1: 2: 3: 4: 5: 6: bestlist = 0 for each queue do if queue is not empty then best list = queue.getIndex() break return priority-queues[best list].getMinimum() 13 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Resultate • basierend auf Instanzen von Fast-Downward Gliederung Vergleich GBS und KBS mit... • ...blinder Suche • ...hmax • ...hFF 14 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Ergebnisse mit blinder Suche Gelöste Probleme - Summe Evaluationen - im geom. Mittel Expansionen - im geom. Mittel Generierte Knoten - im geom. Mittel Vorberechnungszeit - im geom. Mittel Reine Suchzeit - im geom. Mittel Gesamte Suchzeit - im geom. Mittel GBS KBS 260 78408.44 61134.44 379596.23 0.10 1.04 1.04 288 36075.39 15744.18 99261.75 1.02 0.36 0.87 15 / 19 Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Ergebnisse mit blinder Suche 103 Reine Suchzeit mit blinder Konfiguration 102 Kontext-basierte Suche Einführung 101 100 10-1 10-2 -2 10 10-1 101 100 Gierige Bestensuche 102 103 15 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Ergebnisse mit hmax Gelöste Probleme - Summe Evaluationen - im geom. Mittel Expansionen - im geom. Mittel Generierte Knoten - im geom. Mittel Vorberechnungszeit - im geom. Mittel Reine Suchzeit - im geom. Mittel Gesamte Suchzeit - im geom. Mittel hmax -GBS hmax -KBS 458 4208.74 1388.40 10007.14 0.10 0.33 0.33 416 4442.11 1331.32 9354.75 1.02 0.27 0.67 16 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Ergebnisse mit hFF Gelöste Probleme - Summe Evaluationen - im geom. Mittel Expansionen - im geom. Mittel Generierte Knoten - im geom. Mittel Vorberechnungszeit - im geom. Mittel Reine Suchzeit - im geom. Mittel Gesamte Suchzeit - im geom. Mittel hFF -GBS hFF -KBS 764 377.54 90.98 591.55 0.10 0.13 0.13 492 1783.43 535.90 3613.31 1.02 0.17 0.60 17 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Verbesserungen Berechnung der Interferenz-Distanzen • on-the-fly während Suche • Hohe Interferenz-Distanz approximieren Priorisierung • Umkehrung der Priorisierung 18 / 19 Einführung Gierige Bestensuche Kontext-basierte Suche Resultate Diskussion Danke für Ihre Aufmerksamkeit! Q&A 19 / 19