Spezialvorlesung Suchalgorithmen Thema: Symbolische Suche Stefan Edelkamp Struktur des Buchs Überblick BDDs und BDD-basierte Suche Symbolische Exploration BDD-BFS, BDD-Dijkstra, BDDA* Symbolische Musterdatenbanken Musterauswahlproblem Bin-Packing Genetische Algorithmen Hybrid-Ansatz (BDDs + Externe Suche) a1 : (at package p c) a2 : (in package p t) Zustand : ¬ a1 a2 BDDs a1 a1 a2 a2 a2 0 1 Binärer Entscheidungsbaum (RO)BDD 0 1 0 0 BDD-basierte Suche Symbolische Repräsentation von Zustandsmengen Boole‘sche Formel States(a1,…,an) Effiziente Zustandskodierung: States(v1,…,vk), mit „finite domain“ variablen vi Reduziert # möglicher, nicht # erreichbarer Zustände Variablenordnung wichtig, vgl. Beispiel Kodierung Zustände States(x) = Zustandsmengen: Symbolische Breitensuche BFS: Si(x) repräsentiert alle Zustände die in i Schritten erreichbar sind Relationales Produkt: Symbolische Exploration Trans(x,x‘) beschreibt Transition Relation für Image(x‘) = x States(x) Trans(x,x‘) Pre-Image(x) = x States(x‘) Trans(x,x‘) Forwärts- and Rückwärtssuche sehr ähnlich Pseudo-Code Bidirektionale symbolische Breitensuche Schnitt gefunden s g Verfeinerungen: Duplikatserkennung (BFS vs. BF-Tree Search): Terminierung Partitionierte Berechnung: 1 Relation Trans-O für jeden Operator O ( and v commutieren) Disjunktive Partition Image(x‘) = VO (x States(x) Trans-O (x,x‘)) Symbolische Berechnung kürzester Pfade Vorraussetzungen: Relation Gewichtete Transitionsrelation: T(x,x‘,w) = 1, Übergang von x nach x‘ hat Kosten w {0,1,…,C} Pseudo-Code Symbolischer Schätzer Heuristische Relation: H(w,x) = 1, Schätzwert von x zum Ziel hat Kosten w {0,1,…,C} Symbolisches A* Idee: Symbolische Musterdatenbanken Abstrakter Zustand (STRIPS): Original S AP „geschnitten“ mit Träger R AP Abstrakter Operator (P R,A R,D R) Pfade bleiben erhalten! Akkurate Zieldistanzen für jeden abstrakten Zustand Untere Schranke für Zieldistanzen in Originalraum BDD H[i] represäntiert Zustandsmenge { S | h(S) = i } Konstruktion: Rückwärts-BFS Symbolisch Musterdatenbanken: Wesentlich größere DB können in geringerer Zeit berechnet werden Speicher- und Zeitgewinn (250 mio states/sec) 1600000 1400000 1200000 1000000 800000 600000 400000 200000 0 # States # BDD Nodes Approximierung der Datenbankgröße Addition von vi zum Träger korrespondiert zur Multiplikation seines Wertebereichs zur Abstraktionsraumgröße v1 |v2|*|v3| 1. Füge Variable gierig hinzu, bis geschätzter Speicherbedarf überschritten wird 2. Konstruiere DB mit ausgewähltem |v1|*|v2|*|v3| Träger Musterauswahl durch „BinPacking“ Abstract Zustandsraumgröße < Speichergrenze Approximationen z.B. „first fit“ Größen = |v1|*|v2|*|v4| |v6|*|v7| *|v10| |v3|*|v8| |v5|*|v9| Genetische Musterdatenbanken Problem: Auswahlstrategie beeinflusst Effizienz Viele Muster Vorschlag: GA mit Variablen Auswahl Genen Initialisiert mit Bin Packing Spalte beschreibt Variable Zeile beschreibt Muster Genetische Operatoren Mutation (wichtigster Operator): •Hinzufügen/Löschen von Variablen durch Bit-flippen •Hinzufügen/Löschen von Mustern/Zeilen Rekombination (selten genutzt): •1-Bit „cross-over“ Auswahl: •Abstracter Zustandsraum zu groß geringe Fitness •Basiert auf mittleren Heuristisch Wert als Fitness Während des Lernens werden PDBs konstruiert not benutzt! Symbolisch Gerichtete Suche Schätzer H: Relation von Paaren H(value,state) = 1 h(state)=value Beispiel: h(00 ) = h(01 ) = 1, h(10 ) = h(11 ) = 0 H = {(value state ),(value ,¬state )} Implementation: Alle Mengen-A* Fachoperations auf BDDs Optimalität und completeness: Von A*/IDA* geerbt (konsistenter Schätzer) 2 0, 2 0 2 1 2 0 Greedy Best-First BDDA* BDD B(g,h,x) für Zustandsmenge mit f=g+h BDD für Transitionsrelation T(x,x´) - ein Ti für jeden Operator Oi, i = 1..k Nachfolgermenge berechnet mit Succ = Vi x Ti(x,x´) ^ B(g,h,x) (partitionierte Berechnung) BDD für H[i] (partitioniert, i = BFS Schicht) BDD für min. Fach B(g+1,h,x) = Succ ^ H[h] Synergien Mengen A* BDD für Zustandsmenge und (partitionierter) Übergangsrelation BDDA* Duplikatserkennung mit Boole’schen Operationen Symbolische Musterdatenbanken: Schätzer mit Symbolic BFS berechnet BDDA* h Voraussetung: 0 Ungewichteter Problemgraph Konsistenter Schätzer 1 2 3 4 BDD für Zustände 5 6 0 1 g ∆h ={-1,0,1,2,…} 2 3 4 5 Schnitt der Nachfolger mit H[0]H[1]H[2]H[3]H[4]H[5]H[6] Pseudo-Code B(0,h(I)) {I} fmin h(I) while (fmin ≠ ∞) g min{i | B(i, fmin − i) ≠ } h fmin − g B(g, h) Reduziere(B(g, h)) Succ GenerateNeighbors(B(g, h),T) for each i = 1,...,max B(g + 1, i) B(g + 1, i) v (Succ ^ H[i]) fmin min{i + j > fmin | Open(i, j) ≠ } U {∞} Anzahl Iterationen Quadratisch in optimaler Lösungslänge Symbolisches Branch-andBound (BFHS) Gegeben untere Schranke U, Berechnung entweder intern oder extern Branching Partitioning Wert eines Bits hängt nicht von den anderen ab Heuristische Differenz in die Transitionsfunktion ▲1 T(x‘,x) = T(x‘,x) ▲1 H(x,x‘) ▲0 T(x‘,x) = T(x‘,x) ▲0 H(x,x‘) ▲-1 T(x‘,x) = T(x‘,x) ▲-1 H(x,x‘) Kostenoptimale symbolische Suche BDDs für lineare Ausdrücke (Bulzan, Barzis, STTT 2005) Metrik/Constraint: F(x) = a1*v1 + … an*vn Berechne minF,maxF Kodiere Wertebereich [0,maxF-minF] Konstruiere BDD für F Komplexität Platz & Zeit: O(n *(a1+…+an)) … oft besser als mit ADDs Gemischte symbolischexplizite Exploration Viele disjunkte Musterdatenbanken als BDDs (generiert in symbolischer Breitensuche) bilde Maximum über additive Musterdatenbanken Externe und parallele explizite Suche Look-up: BDD-Repräsentation(state) BDD-Repräsentation(heuristik) … H[i] Beispiel: 35-Puzzle 1 3 2 18 20 4 5 6 7 25 24 8 15 10 11 21 28 12 13 14 9 27 28 22 30 34 35 17 16 29 31 33 34 26 32 Externalisierung Packtierte Zustandscodierung: 32 Byte (8 ints wobei 1 int = 5 Plättchen x 6 bits) Datenbanken: 2x6er (je 5x6+1x5), 2x5er (je 7x5), inkrementell generiert auf 16 GB, 7er gross, entspricht 36 x 35 x 34 x 33 x 32 x 31 x 30 Zuständen) Symmetrischer Lookup: Transponierte Stellung wird auch nachgeschaut Inkrementelle Berechnung: Pro additiver Datenbank zwei Einträge in den Zustandsvektor Verteilte Berechnung Annahme: Generierung schnell, Bewertung langsam Abwechselnd: Generierung (Master, kein Datenbankzugriff) / Bewertung (Client) Jeder Prozess ist für ein Plättchen zuständig 35 + 1 Prozesse Prozess muss laut Plättchen pro Menge additiver DBen nur 1e ansprechen geringer Speicherplatz Zusammenfassung Ausblick: Suche mit Automaten Presburger Arithmetik (lineare Ausdrücke über den natürlichen Zahlen) kann mit regulären Ausdrücken beschrieben werden z.B. 4x + 5y ≤ 5 Menge der akzeptierten Wörter im Automaten entsprechen Zustandsmengen Idee: Tausche BDD durch EA, um unendliche Zustandsräume zu traversieren Relationales Produkt: Konjunktion und Projektion Automatenminimierung nach jedem Schritt, um Eindeutigkeit zu erhalten