Grundlagen der Künstlichen Intelligenz

Werbung
Grundlagen der Künstlichen Intelligenz
21. März 2014 — 9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Grundlagen der Künstlichen Intelligenz
9.1 Tiefensuche
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Malte Helmert
9.2 Iterative Tiefensuche
Universität Basel
9.3 Blinde Suche: Zusammenfassung
21. März 2014
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
1 / 24
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
2 / 24
Tiefensuche
Klassische Suche: Überblick
Kapitelüberblick klassische Suche:
I
I
3.–5. Einführung
6.–9. Basisalgorithmen
I
I
I
I
I
6.
7.
8.
9.
9.1 Tiefensuche
Datenstrukturen für Suchalgorithmen
Baumsuche und Graphensuche
Breitensuche und uniforme Kostensuche
Tiefensuche und iterative Tiefensuche
folgende Kapitel: heuristische Algorithmen
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
3 / 24
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
4 / 24
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Blinde Suchalgorithmen: Beispiele
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Tiefensuche
Beispiele für blinde Suchalgorithmen:
I
Breitensuche
I
uniforme Kostensuche
I
Tiefensuche (
I
tiefenbeschränkte Suche (
I
iterative Tiefensuche (
Tiefensuche expandiert Knoten in umgekehrter
Erzeugungsreihenfolge (LIFO).
tiefster Knoten zuerst expandiert
z. B. Open-Liste als Stack implementiert
dieses Kapitel)
M. Helmert (Universität Basel)
dieses Kapitel)
dieses Kapitel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
5 / 24
Tiefensuche
Tiefensuche: Beispiel
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
6 / 24
Tiefensuche
Tiefensuche: einige Eigenschaften
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
E
I
J
L
G
N
M
D
O
H
J
J
G
N
M
D
O
H
J
M. Helmert (Universität Basel)
J
O
H
G
N
M
L
G
M
N
H
E
I
J
J
F
K
L
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
G
N
M
O
C
D
O
H
E
I
J
F
L
K
G
N
M
B
F
K
I
C
E
I
C
D
O
O
O
A
B
F
K
G
N
M
B
F
L
K
L
A
E
I
C
E
I
K
A
B
D
J
D
G
N
M
C
A
H
I
B
F
L
K
B
F
L
K
H
F
A
E
I
C
E
I
O
E
A
B
D
C
D
C
A
H
N
M
B
F
K
L
G
A
B
D
B
F
A
H
A
B
L
G
M
N
C
D
O
H
E
I
J
F
K
Grundlagen der Künstlichen Intelligenz
L
G
M
N
O
21. März 2014
7 / 24
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
8 / 24
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
Erinnerung: generischer Baumsuchalgorithmus
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche (nicht-rekursive Version)
Erinnerung aus Kapitel 7:
Tiefensuche (nicht-rekursive Version):
Generische Baumsuche
Tiefensuche (nicht-rekursive Version)
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
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
Tiefensuche
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
9 / 24
Tiefensuche
Nicht-rekursive Tiefensuche: Diskussion
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
10 / 24
Tiefensuche
Tiefensuche (rekursive Version)
function depth first search(s)
if is goal(s):
return hi
Diskussion:
I
es ist nicht viel falsch mit dem Code
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
(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
Hauptfunktion:
Tiefensuche (rekursive Version)
return depth first search(init())
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
11 / 24
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
12 / 24
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Tiefensuche
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Tiefensuche: Aufwand
Zeitaufwand:
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
9.2 Iterative Tiefensuche
Speicheraufwand:
I
muss nur Knoten entlang aktuell exploriertem Pfad speichern
(“entlang” = Knoten auf dem Pfad und deren Kinder)
Speicheraufwand O(bm) wenn m maximale erreichte Suchtiefe
I
dieser niedrige Speicherbedarf ist der Hauptgrund,
warum Tiefensuche trotz ihrer Nachteile interessant ist
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
21. März 2014
13 / 24
Iterative Tiefensuche
Tiefenbeschränkte Suche
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
21. März 2014
14 / 24
Iterative Tiefensuche
Tiefenbeschränkte Suche: Pseudo-Code
function depth limited search(s, depth limit):
if is goal(s):
return hi
Tiefenbeschränkte Suche:
I
Tiefensuche, die alle Suchknoten in einer gegebenen Tiefe n
abschneidet (nicht weiter expandiert)
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
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
21. März 2014
15 / 24
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
16 / 24
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Iterative Tiefensuche
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Iterative Tiefensuche: Eigenschaften
Iterative Tiefensuche:
I
I
Idee: führe eine Folge tiefenbeschränkter Suchen
mit ansteigenden Tiefenschranken aus
Kombiniert Vorteile von Breiten- und Tiefensuche:
klingt verschwenderisch (jede Iteration wiederholt
die gesamte vorher geleistete Arbeit), aber tatsächlich
ist der Aufwand vertretbar ( Analyse folgt)
Iterative Tiefensuche
for depth limit ∈ {0, 1, 2, . . . }:
solution := depth limited search(init()), depth limit)
if solution 6= none:
return solution
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
17 / 24
Iterative Tiefensuche
Iterative Tiefensuche: Beispiel
A
Limit = 0
I
(fast) wie BFS: semi-vollständig (allerdings nicht vollständig)
I
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
I
Zeitaufwand kaum höher als BFS (
M. Helmert (Universität Basel)
siehe Analyse später)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
18 / 24
Iterative Tiefensuche
Iterative Tiefensuche: Beispiel für den Aufwand
A
Zeitaufwand (erzeugte Knoten):
A
Limit = 1
A
B
C
B
C
B
A
Limit = 2
E
F
G
D
E
F
H
G
D
G
D
K
M
O
N
H
I
J
E
I
J
O
N
H
J
M. Helmert (Universität Basel)
E
I
J
L
G
M
N
H
D
O
H
J
J
D
G
D
F
H
J
M
L
O
N
H
I
J
F
K
G
M
L
N
H
E
I
H
E
I
J
J
F
K
G
M
L
B
F
K
Iterative Tiefensuche
C
D
O
N
C
D
O
= 111111
O
N
O
N
L
G
M
N
C
D
O
H
Grundlagen der Künstlichen Intelligenz
E
I
6 + 50 + 400 + 3000 + 20000 + 100000
= 123456
A
B
G
M
1 + 10 + 100 + 1000 + 10000 + 100000
G
M
L
A
A
L
Breitensuche
C
E
B
F
K
(d + 1) + db + (d − 1)b 2 + · · · + 2b d−1 + 1b d
A
E
I
Iterative Tiefensuche
Beispiel: b = 10, d = 5
G
B
F
K
1 + b + b 2 + · · · + b d−1 + b d
C
E
C
D
O
N
F
K
G
C
E
I
G
B
F
B
G
M
L
E
I
F
Breitensuche
A
E
C
D
O
E
A
B
F
K
G
N
F
K
D
C
A
C
D
M
L
E
I
A
B
H
D
C
D
G
M
L
C
A
B
F
K
G
B
F
K
B
F
A
C
D
G
C
E
A
B
H
E
A
L
C
C
A
B
F
B
F
B
A
E
C
J
D
C
A
E
I
G
B
F
B
D
B
A
C
Limit = 3
C
A
C
A
E
A
B
D
B
A
B
D
A
C
J
F
K
L
G
M
N
für b = 11, nur 11% mehr Knoten als mit Breitensuche
O
21. März 2014
19 / 24
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
20 / 24
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Iterative Tiefensuche: Zeitaufwand
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
Iterative Tiefensuche
Iterative Tiefensuche: Bewertung
Satz (Zeitaufwand der iterativen Tiefensuche)
Sei b der maximale Verzweigungsgrad und d die minimale
Lösungslänge des betrachteten Zustandsraums. Gelte b ≥ 2.
Iterative Tiefensuche: Bewertung
Iterative Tiefensuche ist oft die Methode der Wahl, wenn
Dann beträgt der Zeitaufwand der iterativen Tiefensuche
(d + 1) + db + (d − 1)b 2 + (d − 2)b 3 + · · · + 1b d = O(b d )
I
Baumsuche angemessen (keine Duplikateliminierung nötig) ist
I
und die Lösungstiefe unbekannt ist.
und der Speicheraufwand beträgt
O(bd)
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
21. März 2014
21 / 24
Blinde Suche: Zusammenfassung
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
9. Klassische Suche: Tiefensuche und iterative Tiefensuche
22 / 24
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**
9.3 Blinde Suche: Zusammenfassung
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
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
21. März 2014
23 / 24
∗
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
21. März 2014
24 / 24
Herunterladen