Grundlagen der Künstlichen Intelligenz

Werbung
Grundlagen der Künstlichen Intelligenz
7. März 2014 — 6. Klassische Suche: Datenstrukturen für Suchalgorithmen
6.1 Einführung
Grundlagen der Künstlichen Intelligenz
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
6.2 Suchknoten
Malte Helmert
6.3 Open-Liste
Universität Basel
6.4 Closed-Liste
7. März 2014
6.5 Zusammenfassung
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
1 / 32
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
2 / 32
Einführung
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.
6.1 Einführung
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
7. März 2014
3 / 32
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
4 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Einführung
Suchalgorithmen
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Vorschau: Suchalgorithmen
I
Wir befassen und jetzt mit Suchalgorithmen.
I
Wie überall in der Informatik sind geeignete Datenstrukturen
ein Schlüssel zu guter Performance.
I
Ab dem nächsten Kapitel betrachten wir
Suchalgorithmen genauer.
I
hier eine kurze Vorschau, um unsere Diskussion
von Datenstrukturen zu motivieren
häufige Operationen müssen schnell sein
I
Einführung
gut implementierte Suchalgorithmen verarbeiten
bis zu ∼30,000,000 Zustände/Sekunde auf einem CPU-Kern
Zusatzmaterial (Paper von Burns et al.)
dieses Kapitel: einige grundlegende Datenstrukturen für Suche
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
5 / 32
Einführung
Beispiel: Suchalgorithmus
I
I
I
I
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
6 / 32
Einführung
Beispiel: Suchalgorithmus
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
I
I
I
I
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
h3, 3, 1i
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
7 / 32
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
8 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Einführung
Beispiel: Suchalgorithmus
I
I
I
I
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Beispiel: Suchalgorithmus
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
I
I
I
I
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
h3, 3, 1i
h2, 2, 0i
Einführung
h3, 2, 0i
h3, 3, 1i
h3, 1, 0i
h2, 2, 0i
h3, 2, 0i
h3, 1, 0i
h3, 3, 1i
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
9 / 32
Einführung
Beispiel: Suchalgorithmus
I
I
I
I
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
I
I
h3, 2, 0i
h3, 3, 1i
I
I
h3, 3, 1i
h3, 1, 0i
h2, 2, 0i
h3, 3, 1i
h3, 2, 1i
h3, 2, 0i
h3, 3, 1i
h2, 2, 0i
M. Helmert (Universität Basel)
Einführung
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
h3, 3, 1i
h3, 2, 1i
10 / 32
Beispiel: Suchalgorithmus
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
h2, 2, 0i
7. März 2014
Grundlagen der Künstlichen Intelligenz
7. März 2014
11 / 32
M. Helmert (Universität Basel)
h3, 1, 0i
h3, 3, 1i
h3, 2, 0i
h3, 1, 0i
Grundlagen der Künstlichen Intelligenz
7. März 2014
12 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Einführung
Beispiel: Suchalgorithmus
I
I
I
I
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Einführung
Grundlegende Datenstrukturen für Suche
Ausgehend vom Anfangszustand,
expandiere wiederholt einen Zustand
durch Erzeugen seiner Nachfolger.
Höre auf, wenn ein Zielzustand expandiert wird
oder alle erreichbaren Zustände betrachtet wurden.
Wir betrachten drei abstrakte Datenstrukturen für Suche:
I
Suchknoten: speichern welche Zustände erreicht
werden können, wie, und unter welchen Kosten
Knoten des Beispielsuchbaums
I
h3, 3, 1i
Open-Liste: organisiert die Blätter des Suchbaums effizient
Menge der Blätter des Beispielsuchbaums
h2, 2, 0i
h3, 2, 1i
h3, 2, 0i
h3, 3, 1i
h2, 2, 0i
I
h3, 1, 0i
innere Knoten eines Suchbaums
h3, 3, 1i
h3, 2, 0i
Closed-Liste: merkt expandierte Zustände,
um mehrfache Expansion desselben Zustands zu vermeiden
Nicht alle Algorithmen verwenden alle drei Datenstrukturen,
und manchmal sind sie implizit (z. B. im CPU-Stack).
h3, 1, 0i
. . . und so weiter.
(Expansionsreihenfolge hängt vom gewählten Suchalgorithmus ab.)
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
13 / 32
Suchknoten
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
14 / 32
Suchknoten
Suchknoten
6.2 Suchknoten
Suchknoten
Suchknoten (kurz: Knoten) speichern welche Zustände erreicht
werden können, wie, und unter welchen Kosten
Gemeinsam bilden sie den so genannten Suchbaum.
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
15 / 32
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
16 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Suchknoten
Attribute von Suchknoten
Suchknoten in Java-Syntax
public interface State {
}
n.parent Suchknoten, der diesen Knoten erzeugte
(none für den Wurzelknoten)
public interface Action {
}
n.action Aktion, die von n.parent zu n führt
(none für den Wurzelknoten)
public class SearchNode {
State state;
SearchNode parent;
Action action;
int pathCost;
}
n.path cost Kosten des Pfades vom Anfangszustand zu n.state,
der aus Verfolgen der parent-Referenzen resultiert
(traditionell mit g (n) bezeichnet)
. . . und manchmal zusätzliche Felder (z. B., Tiefe im Baum)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
17 / 32
Suchknoten
Knoten in einem Suchbaum
M. Helmert (Universität Basel)
Node
6
1
88
7
3
22
M. Helmert (Universität Basel)
I
ACTION = right
DEPTH = 6
PATH-COST = 6
18 / 32
Suchknoten
vernünftige Implementierung von Suchknoten ist einfach
fortgeschrittene Aspekte:
I
I
I
STATE
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
I
4
Grundlagen der Künstlichen Intelligenz
Implementierung von Suchknoten
PARENT-NODE
5
Suchknoten
Suchknoten: Java
Attribute eines Suchknoten n
n.state Zustand, der zu diesem Knoten gehört
M. Helmert (Universität Basel)
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
I
7. März 2014
19 / 32
Benötigen wir überhaupt explizite Knoten?
Können wir Lazy Evaluation verwenden?
Lohnt sich manuelle Speicherverwaltung?
Können wir Information komprimieren?
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
20 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Suchknoten
Operationen für Suchknoten: make root node
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Operationen für Suchknoten: make node
Erzeuge Wurzelknoten eines Suchbaums:
Erzeuge Kindknoten in einem Suchbaum:
function make root node()
function make node(parent, action, state)
node := new SearchNode
node.state := init()
node.parent := none
node.action := none
node.path cost := 0
return node
node := new SearchNode
node.state := state
node.parent := parent
node.action := action
node.path cost := parent.path cost + cost(action)
return node
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
Suchknoten
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
21 / 32
Suchknoten
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
22 / 32
Open-Liste
Operationen für Suchknoten: extract path
Extrahiere den Pfad zu einem Suchknoten:
6.3 Open-Liste
function extract path(node)
path := hi
while node.parent 6= none:
path.append(node.action)
node := node.parent
path.reverse()
return path
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
23 / 32
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
24 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Open-Liste
Open-Listen
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Open-Liste
Open-Listen: Einträge modifizieren
Open-Liste
Die Open-Liste (auch: Frontier) organisiert die Blätter
des Suchbaums.
I
Manche Implementierungen unterstützen zusätzlich
die Modifikation eines Eintrags in der Open-Liste,
wenn ein billigerer Pfad zum zugehörigen Zustand
gefunden wird.
I
Dies macht die Implementierung komplizierter.
Sie muss zwei Operationen effizient unterstützen:
I
bestimme und entferne den nächsten zu expandieren Knoten
I
füge ein neuen Knoten ein, der Kandidat für Expansion ist
wir betrachten solche Modifikationen nicht und verwenden
stattdessen verzögerte Duplikateliminierung ( später)
Anmerkung: trotz des Namens ist es meist eine sehr schlechte Idee,
die Open-Liste als einfache Liste zu implementieren.
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
25 / 32
Open-Liste
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
26 / 32
Closed-Liste
Interface von Open-Listen
Methoden einer Open-Liste open
open.is empty() testet, ob die Open-Liste leer ist
open.pop() entfernt den nächsten zu expandieren Knoten
und liefert ihn zurück
6.4 Closed-Liste
open.insert(n) fügt Knoten node n in die Open-Liste ein
I
Unterschiedliche Suchalgorithmen verwenden
unterschiedliche Strategien für die Entscheidung,
welcher Knoten in open.pop zurückgeliefert wird.
I
Die Wahl der passenden Datenstruktur hängt
von dieser Strategie ab (z. B.: Stack, Deque, Min-Heap).
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
27 / 32
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
28 / 32
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Closed-Liste
Closed-Listen
Closed-Liste
Interface und Implementierung von Closed-Listen
Methoden einer Closed-Liste closed
closed.insert(n) füge Knoten n in closed ein;
falls ein Knoten mit demselben Zustand
bereits in closed existiert, ersetze ihn
Closed-Liste
Die Closed-Liste merkt sich die expandierten Zustände,
um mehrfache Expansion desselben Zustands zu vermeiden
Sie muss zwei Operationen effizient unterstützen:
I
füge einen Knoten ein, dessen Zustand
noch nicht in der Closed-Liste ist
I
teste, ob ein Knoten mit einem gegebenen Zustand
in der Closed-Liste ist; falls ja, liefere ihn zurück
closed.lookup(s) teste, ob ein Knoten mit Zustand s
in der Closed-Liste vorhanden ist;
falls ja, liefere ihn zurück;
sonst, liefere none zurück
I
Anmerkung: trotz des Namens ist es meist eine sehr schlechte Idee,
die Closed-Liste als einfache Liste zu implementieren. (Warum?)
M. Helmert (Universität Basel)
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
Grundlagen der Künstlichen Intelligenz
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
7. März 2014
29 / 32
Zusammenfassung
Hash-Tabellen mit Zuständen als Schlüssel können
als effiziente Implementierung einer Closed-Liste dienen.
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
6. Klassische Suche: Datenstrukturen für Suchalgorithmen
7. März 2014
30 / 32
Zusammenfassung
Zusammenfassung
6.5 Zusammenfassung
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
31 / 32
I
Suchknoten:
repräsentieren während der Suche erreichte Knoten
und zugehörige Informationen
I
Knotenexpansion:
Erzeugen der Nachfolgeknoten eines Knoten durch Anwenden
der Aktionen, die im Zustand des Knoten anwendbar sind
I
Open-Liste oder Frontier:
Menge der Knoten, die derzeit Kandidaten für Expansion sind
I
Closed-Liste:
Menge der bereits expandierten Knoten (und deren Zustände)
M. Helmert (Universität Basel)
Grundlagen der Künstlichen Intelligenz
7. März 2014
32 / 32
Herunterladen