Grundlagen der Künstlichen Intelligenz 21. März 2014 9. Klassische Suche: Tiefensuche und iterative Tiefensuche Grundlagen der Künstlichen Intelligenz 9. Klassische Suche: Tiefensuche und iterative Tiefensuche 9.1 Tiefensuche Malte Helmert Universität asel 21. März 2014 9.2 Iterative Tiefensuche 9.3 linde Suche: Zusammenfassung M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 1 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 2 / 24 Klassische Suche: Überblick Kapitelüberblick klassische Suche: 3. 5. Einführung 6. 9. asisalgorithmen 6. Datenstrukturen für Suchalgorithmen 7. aumsuche und Graphensuche 8. reitensuche und uniforme Kostensuche 9. Tiefensuche und iterative Tiefensuche folgende Kapitel: heuristische lgorithmen 9.1 Tiefensuche M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 3 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 4 / 24
linde Suchalgorithmen: eispiele Tiefensuche eispiele für blinde Suchalgorithmen: reitensuche uniforme Kostensuche Tiefensuche ( dieses Kapitel) tiefenbeschränkte Suche ( dieses Kapitel) iterative Tiefensuche ( dieses Kapitel) Tiefensuche expandiert Knoten in umgekehrter Erzeugungsreihenfolge (LIFO). tiefster Knoten zuerst expandiert z.. Open-Liste als Stack implementiert M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 5 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 6 / 24 Tiefensuche: eispiel Tiefensuche: einige Eigenschaften eispiel: (nnahme: Knoten in Tiefe 3 haben keine Nachfolger) fast immer als aumsuche implementiert (wir werden sehen, warum) nicht vollständig, nicht semi-vollständig, nicht optimal (Warum?) vollständig für azyklische Zustandsräume, z.. wenn Zustandsraum gerichteter aum M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 7 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 8 / 24
Erinnerung: generischer aumsuchalgorithmus Tiefensuche (nicht-rekursive Version) Erinnerung aus Kapitel 7: Generische aumsuche open := new OpenList open.insert(make root node()) while not open.is empty(): n = open.pop() if is goal(n.state): return extract path(n) for each a, s succ(n.state): n := make node(n, a, s ) open.insert(n ) return unsolvable Tiefensuche (nicht-rekursive Version): Tiefensuche (nicht-rekursive Version) open := new Stack open.push back(make root node()) while not open.is empty(): n = open.pop back() if is goal(n.state): return extract path(n) for each a, s succ(n.state): n := make node(n, a, s ) open.push back(n ) return unsolvable M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 9 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 10 / 24 Nicht-rekursive Tiefensuche: Diskussion Tiefensuche (rekursive Version) function depth first search(s) Diskussion: es ist nicht viel falsch mit dem ode (sofern man aufpasst, nicht mehr benötigte Knoten freizugeben, wenn die Programmiersprache keine Garbage-ollection beinhaltet) Tiefensuche als rekursiver lgorithmus ist aber einfacher und effizienter Maschinen-Stack als implizite Open-Liste keine Suchknoten-Datenstruktur nötig if is goal(s): return for each a, s succ(s): solution := depth first search(s ) if solution none: solution.push front(a) return solution return none Hauptfunktion: Tiefensuche (rekursive Version) return depth first search(init()) M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 11 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 12 / 24
Tiefensuche: ufwand Zeitaufwand: Wenn der Zustandsraum Pfade der Länge m enthält, kann die Tiefensuche O(b m ) Knoten erzeugen, selbst wenn sehr kurze Lösungen (z.. Länge 1) existieren ndererseits: im besten Fall können Lösungen der Länge l mit O(bl) erzeugten Knoten gefunden werden. (Warum?) verbesserbar auf O(l), wenn inkrementelle Nachfolgerberechnung möglich 9.2 Iterative Tiefensuche Speicheraufwand: muss nur Knoten entlang aktuell exploriertem Pfad speichern ( entlang = Knoten auf dem Pfad und deren Kinder) Speicheraufwand O(bm) wenn m maximale erreichte Suchtiefe dieser niedrige Speicherbedarf ist der Hauptgrund, warum Tiefensuche trotz ihrer Nachteile interessant ist M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 13 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 14 / 24 Tiefenbeschränkte Suche Tiefenbeschränkte Suche: Pseudo-ode function depth limited search(s, depth limit): Tiefenbeschränkte Suche: Tiefensuche, die alle Suchknoten in einer gegebenen Tiefe n abschneidet (nicht weiter expandiert) für sich allein nicht sehr nützlich, aber wichtige Zutat in nützlicheren Suchalgorithmen if is goal(s): return if depth limit > 0: for each a, s succ(s): solution := depth limited search(s, depth limit 1) if solution none: solution.push front(a) return solution return none M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 15 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 16 / 24
Iterative Tiefensuche Iterative Tiefensuche: Eigenschaften Iterative Tiefensuche: Idee: führe eine Folge tiefenbeschränkter Suchen mit ansteigenden Tiefenschranken aus klingt verschwenderisch (jede Iteration wiederholt die gesamte vorher geleistete rbeit), aber tatsächlich ist der ufwand vertretbar ( nalyse folgt) Iterative Tiefensuche for depth limit {0, 1, 2,... }: solution := depth limited search(init()), depth limit) if solution none: return solution Kombiniert Vorteile von reiten- und Tiefensuche: (fast) wie FS: semi-vollständig (allerdings nicht vollständig) wie FS: optimal wenn alle ktionen dieselben Kosten haben wie DFS: muss nur Knoten entlang eines Pfades speichern Speicheraufwand O(bd), wobei d minimale Lösungslänge Zeitaufwand kaum höher als FS ( siehe nalyse später) M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 17 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 18 / 24 Iterative Tiefensuche: eispiel Iterative Tiefensuche: eispiel für den ufwand Limit = 0 Limit = 1 Zeitaufwand (erzeugte Knoten): Limit = 2 reitensuche Iterative Tiefensuche 1 + b + b 2 + + b d 1 + b d (d + 1) + db + (d 1)b 2 + + 2b d 1 + 1b d eispiel: b = 10, d = 5 Limit = 3 reitensuche 1 + 10 + 100 + 1000 + 10000 + 100000 = 111111 Iterative Tiefensuche 6 + 50 + 400 + 3000 + 20000 + 100000 = 123456 für b = 11, nur 11% mehr Knoten als mit reitensuche M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 19 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 20 / 24
Iterative Tiefensuche: Zeitaufwand Iterative Tiefensuche: ewertung Satz (Zeitaufwand der iterativen Tiefensuche) Sei b der maximale Verzweigungsgrad und d die minimale Lösungslänge des betrachteten Zustandsraums. Gelte b 2. Dann beträgt der Zeitaufwand der iterativen Tiefensuche (d + 1) + db + (d 1)b 2 + (d 2)b 3 + + 1b d = O(b d ) Iterative Tiefensuche: ewertung Iterative Tiefensuche ist oft die Methode der Wahl, wenn aumsuche angemessen (keine Duplikateliminierung nötig) ist und die Lösungstiefe unbekannt ist. und der Speicheraufwand beträgt O(bd) M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 21 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 22 / 24 9. Klassische Suche: Tiefensuche und iterative Tiefensuche linde Suche: Zusammenfassung 9. Klassische Suche: Tiefensuche und iterative Tiefensuche linde Suche: Zusammenfassung Vergleich blinder Suchalgorithmen Vollständigkeit, Optimalität, Zeit- und Speicheraufwand 9.3 linde Suche: Zusammenfassung Kriterium reiten- uniforme Tiefen- tiefen- iterative suche Kostensuche suche beschr. S. Tiefensuche vollständig? ja * ja nein nein semi optimal? ja ** ja nein nein ja ** Zeit O(b d ) O(b 1+ c /ɛ ) O(b m ) O(b l ) O(b d ) Speicher O(b d ) O(b 1+ c /ɛ ) O(bm) O(bl) O(bd) b 2 d m l c ɛ > 0 Verzweigungsgrad min. Lösungstiefe max. Suchtiefe Tiefenschranke optimale Lösungskosten min. ktionskosten nmerkungen: * für FS-Tree: semi-vollständig ** nur mit uniformen ktionskosten M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 23 / 24 M. Helmert (Universität asel) Grundlagen der Künstlichen Intelligenz 21. März 2014 24 / 24