Tiefensuche und iterative Tiefensuche

Werbung
Grundlagen der Künstlichen Intelligenz
16. März 2015 — 12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Grundlagen der Künstlichen Intelligenz
12.1 Tiefensuche
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Malte Helmert
12.2 Iterative Tiefensuche
Universität Basel
12.3 Blinde Suche: Zusammenfassung
16. März 2015
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
1 / 23
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
2 / 23
Tiefensuche
Klassische Suche: Überblick
Kapitelüberblick klassische Suche:
I
I
5.–7. Grundlagen
8.–12. Basisalgorithmen
I
I
I
I
I
I
12.1 Tiefensuche
8. Datenstrukturen für Suchalgorithmen
9. Baumsuche und Graphensuche
10. Breitensuche
11. uniforme Kostensuche
12. Tiefensuche und iterative Tiefensuche
13.–20. heuristische Algorithmen
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
3 / 23
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
4 / 23
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Tiefensuche
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Tiefensuche: Beispiel
Beispiel: (Annahme: Knoten in Tiefe 3 haben keine Nachfolger)
A
A
B
C
D
H
E
I
J
F
K
L
N
C
D
G
M
O
H
E
I
J
K
C
tiefster Knoten zuerst expandiert
z. B. Open-Liste als Stack implementiert
E
I
J
L
G
N
M
H
J
J
L
G
N
M
O
H
I
J
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
5 / 23
Tiefensuche
Tiefensuche: einige Eigenschaften
M. Helmert (Universität Basel)
J
K
O
H
L
G
N
M
L
G
C
E
I
J
F
K
M
N
O
H
E
I
J
G
N
M
O
H
E
I
J
F
L
K
O
G
N
M
B
F
K
L
C
D
C
D
O
O
A
B
F
G
N
M
B
F
K
L
A
E
C
E
I
K
A
B
H
J
D
G
N
M
C
D
A
D
I
B
F
L
K
B
F
K
H
F
A
E
I
C
E
I
O
E
A
B
H
C
D
C
D
O
A
D
N
M
B
F
K
L
G
A
B
D
H
B
F
A
Tiefensuche (depth-first search, DFS) expandiert Knoten
in umgekehrter Erzeugungsreihenfolge (LIFO).
A
B
L
G
M
N
C
D
O
H
E
I
J
F
K
L
G
M
N
O
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
6 / 23
Tiefensuche
Erinnerung: generischer Baumsuchalgorithmus
Erinnerung aus Kapitel 9:
I
Generische Baumsuche
fast immer als Baumsuche implementiert
(wir werden sehen, warum)
I
nicht vollständig, nicht semi-vollständig, nicht optimal
(Warum?)
I
vollständig für azyklische Zustandsräume,
z. B. wenn Zustandsraum gerichteter Baum
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
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 ha, s 0 i ∈ succ(n.state):
n0 := make node(n, a, s 0 )
open.insert(n0 )
return unsolvable
7 / 23
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
8 / 23
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Tiefensuche (nicht-rekursive Version)
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Nicht-rekursive Tiefensuche: Diskussion
Tiefensuche (nicht-rekursive Version):
Diskussion:
Tiefensuche (nicht-rekursive Version)
I
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 ha, s 0 i ∈ succ(n.state):
n0 := make node(n, a, s 0 )
open.push back(n0 )
return unsolvable
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
es ist nicht viel falsch mit dem Code
(sofern man aufpasst, nicht mehr benötigte Knoten freizugeben,
wenn die Programmiersprache keine Garbage-Collection beinhaltet)
I
Tiefensuche als rekursiver Algorithmus
ist aber einfacher und effizienter
Maschinen-Stack als implizite Open-Liste
keine Suchknoten-Datenstruktur nötig
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
9 / 23
Tiefensuche
Tiefensuche (rekursive Version)
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
10 / 23
Tiefensuche
Tiefensuche: Aufwand
Zeitaufwand:
function depth first search(s)
I
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. B. Länge 1) existieren
I
Andererseits: im besten Fall können Lösungen der Länge `
mit O(b`) erzeugten Knoten gefunden werden. (Warum?)
I
verbesserbar auf O(`), wenn inkrementelle
Nachfolgerberechnung möglich
if is goal(s):
return hi
for each ha, s 0 i ∈ succ(s):
solution := depth first search(s 0 )
if solution 6= none:
solution.push front(a)
return solution
return none
Speicheraufwand:
Hauptfunktion:
I
Tiefensuche (rekursive Version)
Speicheraufwand O(bm) wenn m maximale erreichte Suchtiefe
return depth first search(init())
I
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
muss nur Knoten entlang aktuell exploriertem Pfad speichern
(“entlang” = Knoten auf dem Pfad und deren Kinder)
16. März 2015
11 / 23
dieser niedrige Speicherbedarf ist der Hauptgrund,
warum Tiefensuche trotz ihrer Nachteile interessant ist
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12 / 23
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Tiefenbeschränkte Suche
Tiefenbeschränkte Suche:
12.2 Iterative Tiefensuche
I
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
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
16. März 2015
13 / 23
Iterative Tiefensuche
Tiefenbeschränkte Suche: Pseudo-Code
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
14 / 23
Iterative Tiefensuche
Iterative Tiefensuche
Iterative Tiefensuche:
function depth limited search(s, depth limit):
I
if is goal(s):
return hi
Idee: führe eine Folge tiefenbeschränkter Suchen
mit ansteigenden Tiefenschranken aus
I
klingt verschwenderisch (jede Iteration wiederholt
die gesamte vorher geleistete Arbeit), aber tatsächlich
ist der Aufwand vertretbar ( Analyse folgt)
if depth limit > 0:
for each ha, s 0 i ∈ succ(s):
solution := depth limited search(s 0 , depth limit − 1)
if solution 6= none:
solution.push front(a)
return solution
return none
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
Iterative Tiefensuche
for depth limit ∈ {0, 1, 2, . . . }:
solution := depth limited search(init()), depth limit)
if solution 6= none:
return solution
16. März 2015
15 / 23
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
16 / 23
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Iterative Tiefensuche: Eigenschaften
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche: Beispiel
A
Limit = 0
A
A
Limit = 1
A
B
Kombiniert Vorteile von Breiten- und Tiefensuche:
C
(fast) wie BFS: semi-vollständig (allerdings nicht vollständig)
C
E
G
C
D
E
wie BFS: optimal wenn alle Aktionen dieselben Kosten haben
I
wie DFS: muss nur Knoten entlang eines Pfades speichern
Speicheraufwand O(bd), wobei d minimale Lösungslänge
Zeitaufwand kaum höher als BFS (
G
E
J
siehe Analyse später)
G
M
L
D
O
N
H
J
C
E
I
J
O
N
H
J
C
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
17 / 23
Iterative Tiefensuche
Iterative Tiefensuche: Beispiel für den Aufwand
M. Helmert (Universität Basel)
E
I
J
G
M
L
L
G
M
N
J
H
E
I
J
F
H
O
N
C
D
G
M
L
H
E
I
J
F
K
J
B
F
K
L
G
M
N
G
M
L
H
H
E
I
J
F
K
J
B
F
K
G
M
L
O
N
A
E
I
O
N
C
D
O
N
C
D
O
G
M
L
A
E
I
G
B
F
K
B
F
K
E
C
D
O
N
C
D
O
C
D
A
B
F
K
E
I
A
B
D
H
G
A
B
F
K
G
A
E
I
A
H
O
N
C
D
G
M
L
F
B
F
C
D
G
M
L
B
F
K
E
A
B
D
E
A
B
F
K
C
D
A
E
I
G
C
D
C
A
H
G
B
F
K
B
F
A
C
E
I
E
B
F
A
D
C
D
C
D
C
A
B
F
B
H
I
C
E
Limit = 3
G
A
B
D
B
A
B
F
A
I
C
A
B
F
A
B
A
C
D
A
B
A
Limit = 2
B
I
Iterative Tiefensuche
L
G
M
N
C
D
O
H
Grundlagen der Künstlichen Intelligenz
E
I
J
F
K
L
G
M
N
O
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
18 / 23
Iterative Tiefensuche
Iterative Tiefensuche: Zeitaufwand
Zeitaufwand (erzeugte Knoten):
Satz (Zeitaufwand der iterativen Tiefensuche)
Breitensuche
1 + b + b 2 + · · · + b d−1 + b d
Iterative Tiefensuche
(d + 1) + db + (d − 1)b 2 + · · · + 2b d−1 + 1b d
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
Beispiel: b = 10, d = 5
Breitensuche
(d + 1) + db + (d − 1)b 2 + (d − 2)b 3 + · · · + 1b d = O(b d )
1 + 10 + 100 + 1000 + 10000 + 100000
= 111111
Iterative Tiefensuche
und der Speicheraufwand beträgt
6 + 50 + 400 + 3000 + 20000 + 100000
= 123456
O(bd)
für b = 11, nur 11% mehr Knoten als mit Breitensuche
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
19 / 23
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
20 / 23
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
Blinde Suche: Zusammenfassung
Iterative Tiefensuche: Bewertung
12.3 Blinde Suche: Zusammenfassung
Iterative Tiefensuche: Bewertung
Iterative Tiefensuche ist oft die Methode der Wahl, wenn
I
Baumsuche angemessen (keine Duplikateliminierung nötig) ist
I
und die Lösungstiefe unbekannt ist.
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
12. Klassische Suche: Tiefensuche und iterative Tiefensuche
21 / 23
Blinde Suche: Zusammenfassung
Vergleich blinder Suchalgorithmen
Vollständigkeit, Optimalität, Zeit- und Speicheraufwand
Kriterium
Breiten-
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+bc
/c )
O(b m )
O(b ` )
O(b d )
Speicher
O(b d )
∗
O(b 1+bc /c )
O(bm)
O(b`)
O(bd)
b≥2
d
m
`
c∗
>0
Verzweigungsgrad
min. Lösungstiefe
max. Suchtiefe
Tiefenschranke
optimale Lösungskosten
min. Aktionskosten
M. Helmert (Universität Basel)
Anmerkungen:
* für BFS-Tree: semi-vollständig
** nur mit uniformen Aktionskosten
Grundlagen der Künstlichen Intelligenz
16. März 2015
23 / 23
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
16. März 2015
22 / 23
Herunterladen