Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Algorithm Engineering Symbolische Suche Peter Kissmann.

Ähnliche Präsentationen


Präsentation zum Thema: "Algorithm Engineering Symbolische Suche Peter Kissmann."—  Präsentation transkript:

1 Algorithm Engineering Symbolische Suche Peter Kissmann

2 Spiele Einpersonenspiele (n² - 1)-Puzzle Solitär Zweipersonenspiele Tic-Tac-Toe Clobber Vier Gewinnt

3 Motivation Zustandsraumexplosion #erreichbare Zustände: (n²-1)-Puzzle: (n²)!/2 15-Puzzle: Puzzle: 7,8 x Puzzle: 1,9 x Solitär: Clobber (4x5): Gewinnt: ( 7 x ) (Allis, 1988) (tatsächlich: ( 4,5 x ))

4 Motivation Speicher sparen z.B. mittels Binären Entscheidungsdiagrammen (BDDs) verwalten Zustandsmengen sparen unnötige Knoten ein teils exponentiell viele Beispiel: vollständiges Lösen von allgemeinen Spielen (General Game Playing)

5 Überblick Wiederholung: BDDs BDD-basierte Suche BFS, Dijkstra, A* Anwendung auf allgemeine Spiele (General Game Playing) BDDs als perfekte Hash-Funktion

6 Überblick Wiederholung: BDDs BDD-basierte Suche BFS, Dijkstra, A* Anwendung auf allgemeine Spiele (General Game Playing) BDDs als perfekte Hash-Funktion

7 BDDs (Binary Decision Diagrams) Repräsentieren Zustandsmenge gerichteter azyklischer Graph von Wurzel zu 0- oder 1- Senke Knoten für (binäre) Variablen Zwei Ausgänge: low und high (auch 0 und 1) Pfad von Wurzel bis 1-Senke Zustand entsprechender Variablenbelegung in repräsentierter Menge enthalten

8 OBDDs (Ordered BDDs) Feste Variablenordnung π Gute Variablenordnung exponentiell weniger Knoten (möglicherweise) Finden guter Variablenordnung NP-schwer Graphisch: Schichten gleicher Variablen

9 ROBDDs (Reduced OBDDs) Zwei Vereinfachungsregeln: ROBDDs eindeutig Im Folgenden nur ROBDDs x1x1 x1x1 x1x1 x2x2 x3x3 x3x3 x2x2

10 BDDs für logische Operatoren x1x1 x2x2 01 x1x1 x2x2 01 x1x1 01 x1x1 x2x2 x2x2 01

11 ROBDDs (Beispiele) column-xrow-xdiagonal-x

12 Überblick Wiederholung: BDDs BDD-basierte Suche BFS, Dijkstra, A* Anwendung auf allgemeine Spiele (General Game Playing) BDDs als perfekte Hash-Funktion

13 BDD-basierte Suche (Voraussetzungen) S Menge aller Zustände Initialzustand I S Menge von Zielzuständen G S Transitionsrelation T S x S beschreibt Zustandsübergänge durch Vorgänger und Nachfolger mögliche Ziele: finde kürzesten Pfad von I nach g G berechne alle erreichbaren Zustände 2 Variablensätze: x für Vorgängervariablen x für Nachfolgervariablen in Variablenordnung x i und x i abwechselnd (interleaved)

14 BDD-basierte Suche Finden von Nachfolgern (image) Relationales Produkt: Finden von Vorgängern (pre-image) analog: zusätzlich: nach jedem (pre-)image: Verschieben der Variablen

15 BDD-basierte Suche Partitionierte Berechnung: T = V a T a für alle Aktionen a und kommutieren (entsprechend auch für pre-image) Vorteil: Berechnung monolithischer Transitionsrelation teuer (Zeit und Speicher)

16 BDD-basierte Suche Finden der Vorgänger, deren Nachfolger alle in s liegen (strong pre-image): strong pre-image auf pre-image zurückführbar Übungsaufgabe

17 BDD-basierte Suche image pre-image strong pre-image

18 Überblick Wiederholung: BDDs BDD-basierte Suche BFS, Dijkstra, A* Anwendung auf allgemeine Spiele (General Game Playing) BDDs als perfekte Hash-Funktion

19 Breitensuche (SBFS) iterativ images berechnen reach I wiederhole newBDD image(reach) reach reach reach newBDD solange Abbruchkriterium nicht erfüllt mögliche Abbruchkriterien: newBDD = (alle Zustände bestimmt) reach G (kürzester Weg zum Ziel gefunden)

20 Mögliche Verbesserung Jeden Zustand nur einmal expandieren (Duplikatserkennung) Dazu: Closed-BDD front I wiederhole closed closed front front image(front) closed solange Abbruchkriterium nicht erfüllt

21 Bestimmung erreichbarer Zustände mittels SBFS v: Anzahl Variablen für einen Zustand n: Anzahl BDD-Knoten zur Repräsentation aller Zustände s: Anzahl aller erreichbarer Zustände

22 Bestimmung erreichbarer Zustände in Vier Gewinnt (SBFS)

23

24 Bidirektionale Breitensuche (SBBFS) I G Schnitt gefunden

25 Bidirektionale Breitensuche (SBBFS) BFS von Start und Ziel gleichzeitig Ende, wenn Suchfronten überschneiden ffront I, bfront G wiederhole falls vorwärts ffront image(ffront) sonst bfront pre-image(bfront) solange ffront bfront = Auswahlkriterium etwa Zeit der letzten Iteration Verwendung von closed-BDDs möglich

26 Symbolischer Dijkstra BFS nur bei uniformen Kosten Gewichtete Transitionsrelation Single Source Shortest Path Dijkstra Kosten c {1, …, C} T = V c T c

27 Symbolischer Dijkstra open 0 I, closed, g 0 wiederhole falls (open g G ) STOPP open g open g closed für c 1, …, C open g+c open g+c image c (open g ) closed closed open g g g + 1

28 Symbolisches A* (BDDA*) Ähnlich Dijkstra; Expansion nach f-Wert: Verwendung einer Heuristik z.B. aus Musterdatenbank (pattern database (PDB)) Heuristik h darf nicht überschätzen (zulässig) h = 0 Dijkstra

29 Symbolisches A* (BDDA*) h g

30 open(0,h( I )) I, closed(0, …, |h|), f h( I ) wiederhole für g 0, …, f h f - g falls (h = 0 & open(g, h) G ) STOPP open(g, h) open(g, h) closed(h) für c 1, …, C succ c image c (open(g, h)) für h succ 0, …, |h| open(g + c, h succ ) open(g + c, h succ ) (succ c h succ ) closed(h) closed(h) open(g, h) f f + 1

31 Überblick Wiederholung: BDDs BDD-basierte Suche BDD-BFS, BDD-Dijkstra, BDDA* Anwendung auf allgemeine Spiele (General Game Playing) BDDs als perfekte Hash-Funktion

32 Überblick 2 (Lösen allgemeiner Spiele) General Game Playing Einpersonenspiele Zweipersonenspiele Zweipersonen-Nullsummenspiele Zweipersonenspiele mit allgemeinen Gewinnen

33 Überblick 2 (Lösen allgemeiner Spiele) General Game Playing Einpersonenspiele Zweipersonenspiele Zweipersonen-Nullsummenspiele Zweipersonenspiele mit allgemeinen Gewinnen

34 General Game Playing Beschreibung für Spiele mit folgenden Eigenschaften: endlich diskret deterministisch vollständige Information Spiele können Ein- oder Mehr-Personenspiele sein gleichzeitige oder abwechselnde Züge ermöglichen

35 General Game Playing Game Description Language (GDL) Gegeben: Initialzustand Bestimmung legaler Züge Effekt eines Zuges Terminierungsbedingungen Verteilung der Gewinne {0, …, 100} darin Gesucht: Lösung erreichbarer Zustände Bestimmung optimaler Gewinn-Verteilung

36 General Game Playing Beispiele: Blocksworld Original GDL-Datei:.kif.kif Tic-Tac-Toe Original GDL-Datei:.kif.kif Mehr Informationen: (dort entwickelt; leider veraltet) (aktuelle Spiele etc.)

37 Überblick 2 (Lösen allgemeiner Spiele) General Game Playing Einpersonenspiele Zweipersonenspiele Zweipersonen-Nullsummenspiele Zweipersonenspiele mit allgemeinen Gewinnen

38 Lösen von Einpersonenspielen Erst: Erreichbare Zustände finden (BFS) Dann: Rückwärtssuche Start: Zielzustände mit Gewinn 100 BFS (rückwärts) Weiter: Zielzustände mit Gewinn 99 BFS (rückwärts) dabei: bereits gelöste Zustände auslassen Weiter bis Gewinn 0

39 Lösen von Einpersonenspielen

40 Ergebnisse für Solitär Erreichbar: Zustände

41 Überblick 2 (Lösen allgemeiner Spiele) General Game Playing Einpersonenspiele Zweipersonenspiele Zweipersonen-Nullsummenspiele Zweipersonenspiele mit allgemeinen Gewinnen

42 Lösen von Zweipersonen- Nullsummenspielen Mögliche Gewinne: 0, 50, 100 Jeder Spieler versucht, möglichst hohen Gewinn zu erreichen Lösung liefert Verteilung der Gewinne (bei optimaler Spielweise)

43 Lösen von Zweipersonen- Nullsummenspielen BFS für Finden erreichbarer Zustände Zwei Rückwärtssuchen (eine pro Spieler): Start bei verlorenen Zielzuständen Bestimmung verlorener Vorgänger (2 Schritte) für alle Züge, die Spieler durchführen kann, kann Gegenspieler Zug zu verlorenem Zustand wählen (pre-image und strong pre-image) Iterieren, solange neue Zustände gefunden player 0s turn player 1s turn lost for player 0 lost for player 1

44 Lösen von Zweipersonen- Nullsummenspielen reach berechneErreichbareZustände() für jeden Spieler p {0, 1} front verloren p reach gewinn(p, 0) G zug p gewonnen 1-p reach gewinn(p, 0) G zug 1-p wiederhole pred pre-image(front) reach gewonnen 1-p gewonnen 1-p pred front strong-pre-image(gewonnen 1-p ) reach verloren p verloren p verloren p front solange front

45 Überblick 2 (Lösen allgemeiner Spiele) General Game Playing Einpersonenspiele Zweipersonenspiele Zweipersonen-Nullsummenspiele Zweipersonenspiele mit allgemeinen Gewinnen

46 Lösen allgemeiner Zweipersonenspiele Mögliche Gewinne {0, …, 100} Verwendung von (101 x 101)-Matrix Zustand an Position (i, j): i Punkte für Spieler 0 j Punkte für Spieler 1 falls unvollständig, Verwendung als Endspieldatenbank

47 Lösen allgemeiner Zweipersonenspiele Eine Vorwärts- und eine Rückwärtssuche finde alle Vorgänger, deren Nachfolger alle gelöst sind (strong pre- image) finde optimales Bucket für diese (pre-image) füge sie ein iteriere, bis alle Zustände gelöst

48 Einschub: Reihenfolge beim Lösen schwierig im allgemeinen Fall eigenen Gewinn maximieren (und gegnerischen minimieren)? oder Differenz zum gegnerischen Gewinn maximieren? Hier: 2. Fall own opponent 0100 … … own opponent 0100 … …

49 Beispiel player 0 player player 0s turn player 1s turn 0/1 0/3 2/0 3/1 2/0 3/1 0/13/1 0/1 0/3 0/13/10/12/0 0/1

50 Lösen allgemeiner Zweipersonenspiele reach berechneErreichbareZustände() init matrix; solved alle Zustände in Matrix unsolved reach solved solange unsolved für jeden Spieler p {0, 1} solvable strong-pre-image(solved) unsolved zug p falls solvable matrix fügeZuständeEin(solvable, p, matrix) solved solved solvable unsolved unsolved solvable

51 Ergebnisse Gamet 0-sum t new Clobber 3x4-1.1s Clobber 3x4 0-sum1.0s1.4s Clobber 4x5-2:14:20 Clobber 4x5 0-sum0:54:351:22:09 Minichess1.0s0.7s TicTacToe0.1s0.2s Nim 400.0s0.1s

52 Überblick Wiederholung: BDDs BDD-basierte Suche BDD-BFS, BDD-Dijkstra, BDDA* Anwendung auf allgemeine Spiele (General Game Playing) BDDs als perfekte Hash-Funktion

53 Hashing Gegeben: Menge von Zuständen S Gesucht: Abbildung S R Hashfunktion ordnet jedem Zustand einen Wert zu perfektes Hashing: Hashwert jedes Zustandes eindeutig minimales perfektes Hashing: | R | = |S|

54 Sat-Count Anzahl gespeicherter Zustände in BDD G mögliche Berechnung: sat-count(0-Senke) 0, sat-count(1-Senke) 1 für Knoten v aus Schicht i mit 0-Nachfolger u in Schicht j > i und 1- Nachfolger w in Schicht k > i sat-count(v) 2 j-i-1 * sat-count(u) + 2 k-i-1 * sat-count(w) falls Wurzel in Schicht i: sat-count(G) 2 i-1 * sat-count(Wurzel) Laufzeit- und Speicherbedarf: O(|G|)

55 Sat-Count (Beispiel) abgedeckte Zustände:

56 Ranking Gegeben: BDD G, Zustand s Gesucht: Hash-Wert von s (in {0, …, sat-count(G) - 1}) Vorverarbeitung: Berechne Sat-Count aller Knoten speichere diese Sat-Counts

57 Ranking rank(G,s) falls Wurzel in Schicht i d Binärwert von (s 1, …, s i-1 ) gib (d+1) * lexicographic-count(G,s,Wurzel) - 1 zurück

58 Ranking lexicographic-count(G,s,v) falls v 0-Senke, gib 0 zurück; falls v 1-Senke, gib 1 zurück falls v in Schicht i mit 0-Nachf. u in j und 1-Nachf. w in k falls s i = 0 r 0 lexicographic-count(G,s,u) d 0 Binärwert von (s i+1, …, s j-1 ) gib d 0 * sat-count(u) + r 0 zurück falls s i = 1 r 1 lexicographic-count(G,s,w) d 1 Binärwert von (s i+1, …, s k-1 ) gib 2 j-i-1 * sat-count(u) + d 1 * sat-count(w) + r 1 zurück

59 Ranking (Beispiel) s rank(G,s) [() 2 + 1] * lc(G,s,v 0 ) - 1 lc(G,s,v 0 ) () 2 * sc(v 1 ) + lc(G,s,v 1 ) lc(G,s,v 1 ) * sc(v 3 ) + (1) 2 * sc(v 6 ) + lc(G,s,v 6 ) lc(G,s,v 6 ) * sc(v 9 ) + (01) 2 * sc(v 13 ) + lc(G,s,v 13 ) v 13 ist 1-Senke lc(G,s,v 13 ) 1 lc(G,s,v 6 ) 2 0 * sc(v 9 ) + 1 * sc(v 13 ) + lc(G,s,v 13 ) = 1 * * = 3 lc(G,s,v 1 ) 2 0 * sc(v 3 ) + 1 * sc(v 6 ) + lc(G,s,v 6 ) = 1 * * = 12 lc(G,s,v 0 ) 0 * sc(v 1 ) + lc(G,s,v 1 ) = 12 rank(G,s) 1 * lc(G,s,v 0 ) - 1 = v0v0 v1v1 v2v2 v3v3 v4v4 v5v5 v6v6 v7v7 v8v8 v9v9 v 10 v 11 v 12 v 13

60 Unranking Gegeben: BDD G, Hash-Wert r Gesucht: zugehöriger Zustand

61 Unranking unrank(G,r) starte an der Wurzel falls Wurzel in Schicht l (s 1, …, s l-1 ) Binärrepräsentation von r div sat-count(Wurzel) r r mod sat-count(Wurzel) v Wurzel; i l wiederhole, bis v 0- oder 1-Senke falls v Knoten in Schicht i mit 0-Nachf. u in j 1-Nachf. w in k falls r < 2 j-i-1 * sat-count(u) s i 0; (s i+1, …, s j-1 ) Binärrepräsentation von r div sat-count(u) r r mod sat-count(u) v u; i j falls r 2 j-i-1 * sat-count(u) s i 1; r r - 2 j-i-1 * sat-count(u) (s i+1, …, s k-1 ) Binärrepräsentation von r div sat-count(w) r r mod sat-count(w) v w; i k

62 Unranking (Beispiel) r 19 i 1; r * sc(v 1 ) = 1 * 14 = 14 s 1 1; r r * sc(v 1 ) = * 14 = 5 r r mod sc(v 2 ) = 5 mod 16 = 5 i 2; r < * sc(v 6 ) = 2 * 5 = 10 s 2 0; (s 3 ) (r div sc(v 6 )) 2 = (5 div 5) 2 = 1 2 = 1 r r mod sc(v 6 ) = 5 mod 5 = 0 i 4; r < * sc(v 9 ) = 1 * 1 = 1 s 4 0; r r mod sc(v 9 ) = 0 mod 1 = 0 i 5; r * sc(v 12 ) = 2 * 0 = 0 s 5 1; r r * sc(v 12 ) = * 0 = 0 r r mod sc(v 11 ) = 0 mod 1 = 0 i 6; r * sc(v 12 ) = 1 * 0 = 0 s 6 1; r r * sc(v 12 ) = * 0 = 0 r r mod sc(v 13 ) = 0 mod 1 = v0v0 v1v1 v2v2 v3v3 v4v4 v5v5 v6v6 v7v7 v8v8 v9v9 v 10 v 11 v 12 v 13 s s 1 s 101 s 1010 s s

63 Ranking und Unranking (Analyse) Vorverarbeitung: O(|G|) Ranking pro Zustand: O(n) Unranking pro Zustand: O(n) Vorverarbeitung beschriftet jeden Knoten mit n-bit Zahl O(n|G|) extra Bits nötig

64 Zusammenfassung Symbolische Suche zur Verringerung der Speicherlast speichern von Zustandsmengen (als BDDs) statt einzelner Zustände Vorgänger- und Nachfolgerberechnungen (image und pre- image) liefern direkt SBFS und SBBFS Symbolische Formen von Dijkstra und A* Lösen von Spielen mittels symbolischer Suche BDDs als perfekte Hash-Funktion


Herunterladen ppt "Algorithm Engineering Symbolische Suche Peter Kissmann."

Ähnliche Präsentationen


Google-Anzeigen