Kapitel 3: Und−Oder−Graphen Bisher wurde die Lösung eines

Werbung
Wissensbasierte Systeme
Kapitel 3: Und−Oder−Graphen
Bisher wurde die Lösung eines Problems als Suchproblem aufgefaßt, das durch Verfolgung
von Pfaden in einem ungerichteten oder gerichteten Graph gelöst wird. Geht man nämlich von
der Vorstellung aus, daß sich ein Problem durch eine Hintereinanderfolge von geeigneten
Transformationen lösen läßt, dann kann man dies als Wegsuche in einem Graphen
modellieren, in dem die möglichen Transformationsergebnisse die Knoten und die
Transformationen die Kanten bedeuten. Diese Modellierung der Problemlösung ist aber nicht
immer adäquat.
Als Methoden zur Problemlösung kennt man nicht nur die Transformation, sondern auch
die Zerlegung eines Problems in Teilprobleme, die zusammen die Lösung ergeben ( divide
and conquerˆ). Diese beiden Methoden zusammen bilden die abstrakte Basis von
Problemlösestrategien. Nun gibt es aber in den bislang betrachteten Graphen keine
gleichzeitige natürliche Entsprechung dieser beiden Methoden. In Graphen werden direkt nur
die Transformationen modelliert, und zwar durch die Kanten des Graphen. Die Zerlegung in
Teilprobleme hat keine Entsprechung in der Grundstruktur des Graphen. Die Einführung des
Und−Oder−Graphen liefert eine adäquate Basis für Verfahren der Problemlösung in dem
Sinne, daß beide Methoden, sowohl der Transformation als auch der Zerlegung, bereits in der
Grundstruktur des Graphen eine Entsprechung haben.
Grundlegende Definitionen und Beispiele
Ein Graph besteht aus Knoten und Kanten. Demgegenüber besteht ein Und−Oder−Graph aus
Knoten und
`Konnektoren´. Ein Konnektor besteht wiederum aus Kanten, die einen
gemeinsamen Anfangspunkt haben. Jede Kante hat einen Anfangspunkt und einen Endpunkt.
Der gemeinsame Anfangspunkt der Kanten eines Konnektors heißt Anfangspunkt des
Konnektors, die Endpunkte der Kanten eines Konnektors heißen Endpunkte des Konnektors.
Die graphische Darstellung eines Konnektors ist ein Streckenbündel von gerichteten Strecken,
deren gemeinsamer Anfangspunkt dem Anfangspunkt des dargestellten Konnektors
entspricht. Jede Strecke des Bündels repräsentiert eine Kante und endet im Endpunkt der
Kante. Die Zugehörigkeit von Kanten zu einem gemeinsamen Konnektor kennzeichnen wir
graphisch durch einen Kreisbogen, der alle gemeinsamen Kanten schneidet (alle Kanten
liegen graphisch in einem Winkelfeld).
1
Wissensbasierte Systeme
Definition:
Ein Und−Oder−Graph ist eine Menge von Knoten, eine Menge von
Konnektoren und eine Abbildung, die für jeden Konnektor dessen Anfangspunkt und jedem
seiner Endpunkte einen Knoten des Graphen zuordnet. Die zugeordneten Knoten heißen
Eingangs− bzw. Ausgangsknoten des Konnektors.
Ein einfaches Beispiel eines Und−Oder−Graphen ist durch die folgende Graphik gegeben:
A
U
V
Der Graph besteht aus den Knoten A, U und V, sowie aus einem einzigen Konnektor, dessen
Anfangspunkt dem Knoten A (Eingangsknoten des Konnektors) und dessen Endpunkte den
Knoten U bzw. V (Ausgangsknoten des Konnektors) zugeordnet sind.
Darstellung von Oder−Kanten:
A
U
V
Der Graph enthält zwei Oder−Kanten, d.h. zwei Konnektoren.
Der Unterschied in der Darstellung zwischen Und−Kanten und Oder−Kanten ist nur, daß
Und−Kanten eines Konnektors mit zusätzlicher Winkelmarkierung gekennzeichnet sind.
Wir interpretieren die vorausgegangenen Graphen wie folgt:
Interpretation Oder−Fall:
Ausgangsproblem ist lösbar entweder durch Lösen von U oder
durch Lösen von V.
Interpretation Und−Fall:
Ausgangsproblem ist lösbar durch Zerlegung in Teilprobleme U,
V und Lösung von beiden.
2
Wissensbasierte Systeme
Beispiel: Und−Oder−Graph
Graue Knoten bedeuten hier, daß diese eine ’Terminierungsbedingung’ erfüllen.
A
V
U
R1
W
Z
R2
X1
X2
Y1
Y2
Interpretation: Das Ausgangsproblem ist lösbar
− entweder durch Aufteilen von A in U und V,
V muß dann weiter aufgeteilt werden in R1, R2.
U, R1, R2 sind terminale Knoten, d.h. als gelöst erkenbar.
− oder durch Aufteilen in Z und W.
Z und W können durch Aufteilen in X1, X2 bzw Y1, Y2 gelöst werden.
X1,...,Y2 werden anschließend gelöst, d.h. sie terminieren.
Beispiel 1: Formelbehandlung
Ziel:
Auflösung der Produkte von Trigonometrischen Funktionen.
Ergebnis soll nur noch Summe einzelner Trig. Funktionen sein
Transformationsregeln:
(1)
sin a sin b = 1/2(cos(a−b) − cos(a+b))
(2)
cos a cos b = 1/2(cos(a−b) + cos(a+b))
(3)
sin a cos b = 1/2(sin(a−b) + sin(a+b))
Graph:
3
Wissensbasierte Systeme
sin a sin b cos c
(1)
(3)
(1)
1 cos(a−b) cos c
2
(3)
− 1 cos (a+b) cos c
2
(2)
1 cos(a−b−c) + 1
4
4
cos(a−b+c)
1 sin a sin(b−c)
2
1 sin a sin(b+c)
2
...
...
(2)
1
1
− 4 cos(a+b−c) − 4
cos(a+b+c)
Beispiel 2: Symbolische Integration
Integrationsregeln (Substitution etc.) liefern Kanten, entlang denen das Grundproblem
transformiert werden kann.Terminale Knoten sind z. B.Teilausdrücke, für die ein
unbestimmtes Integral bekannt ist.
Beispiel 3: Montagefolgen
Gegeben:
CAD−Beschreibung des Endprodukts und aller Einzelteile, d.h. fertiges
Produkt
Gesucht:
ist auch gegeben.
Die Folge von Operationen zum Zusammensetzen des Endprodukts aus seinen
Teilen.
Ansatz:
Suche ausgehend vom Endprodukt eine Folge zur Zerlegung in Teilgruppen,
dann Folgen zur Zerlegung der Teilgruppen etc.
Teile:
Deckel
Schraube1
Behälter
Fracht
Schraube2
Terminierungsbedingung: Alle Knoten für Teilgruppen bestehen aus genau einem Teil.
Montagegraph:
4
Wissensbasierte Systeme
Schraube2
Schraube1
Deckel
Behälter
Fracht
Nun vervollständigen wir das Modell der Problemlösung mit Und−Oder−Graphen. Wir
zeichnen im Graphen einen (eine Menge von) Startknoten aus, der (die) das zu lösende
Problem darstellt. Wir zeichnen außerdem eine Menge von Knoten als Zielknoten aus, die die
gelösten Probleme darstellen. Denken wir uns zudem eine Markierung im Startknoten. Sie
wird benutzt, um den eingeschlagenen `Weg´ zur Lösung des Problems darzustellen. Eine
Markierung bzw. die Markierungen können nun in der folgenden Weise durch den Graphen
propagiert werden:
Eine Markierung wird in einem Knoten gelöscht, wenn für genau einen Konnektor des
Knotens alle seine Ausgangsknoten markiert werden.
Definition: Das Problem ist dann gelöst, wenn alle Markierungen in die Zielknoten propagiert
sind.
Der Weg, den die Markierung durchläuft, kann in diesem Fall mit den Begriffen Pfad bzw.
Weg als Folgeaufeinanderfolgender Kantenˆ erfaßt werden. Bei einem Und−Graphen werden
im allgemeinen mehrere Markierungen produziert.
5
Wissensbasierte Systeme
Suchbäume und Lösungsgraphen
Ein `Und−Oder−Suchbaum´ ist ein Und−Oder−Baum, der zu einem Graphen G konstruiert
werden kann. Ein Suchbaum stellt alle möglichen `Wegdurchläufe´ durch einen Graphen
ausgehend von einem Startknoten, a.a., jede mögliche Propagierung von Markierungen durch
einen Graphen dar. Ein Suchbaum stellt auch mehrfache Durchläufe von Schleifen im
Graphen dar.
Ein Und−Oder−Graph ist ein Und−Oder−Baum, falls der Trägergraph des Graphen ein Baum
ist. Wir nehmen nun einen beliebigen Und−Oder−Graphen G als gegeben an. In G sei ein
Knoten S ausgezeichnet. Wir bezeichnen S als Startknoten.
Definition: Ein Und−Oder−Baum SB zusammen mit einer Abbildung spur, die alle Knoten
von SB in Knoten von G und alle Konnektoren von SB in Konnektoren von G abbildet, heißt
vollständiger Suchbaum zum Startknoten S in G, falls die Abbildung spur die folgenden
Eigenschaften besitzt:
− der Wurzelknoten W von SB wird durch spur in den Startknoten abgebildet, d.h.
spur(w)=S,
− jedem Knoten X von SB sind gleich viele Konnektoren zugeordnet wie dem Knoten
spur(X),
− für
jeden Eingangsknoten E eines Konnektors x von SB ist spur(E) der
Eingangsknoten von spur(x),
− für jeden Konnektor x in SB hat spur(x) gleich viele Kanten wie x,
− wenn A1, A2, ... , An die Ausgangsknoten eines Konnektors x sind, dann sind
spur(A1), spur(A2), ... , spur(An) die Ausgangsknoten von spur(x).
Die Abbildung spur wird üblicherweise als Knotenbezeichnung für Knoten des Suchbaums
realisiert, falls benötigt können auch die Konnektoren des Suchbaums bezeichnet werden. Die
Bezeichnungen sind gerade die Bildknoten bzw. Bildkonnektoren in G. Alle Bilder liegen in
einer einzigen Zusammenhangskomponente in G, nämlich in der, die durch den Startknoten
6
Wissensbasierte Systeme
festgelegt ist. Das Bild von SB unter spur bezeichnen wir als Spur oder Spurgraph von SB.
Der vollständige Suchbaum eines Graphen mit Schleifen hat i.a. unendlich viele Knoten.
Ausgehend vom Startknoten können aber stets beliebige endliche Teile des vollständigen
Suchbaums induktiv konstruiert und in einer geeigneten Datenstruktur dargestellt werden.
Jeder der in diesem Kapitel vorgestellten Algorithmen konstruiert gewisse Teile eines
vollständigen Suchbaums. Wir nennen diese Teile selbst wieder (Und−Oder−)Suchbäume.
Das Hinzufügen von Knoten und Konnektoren in Suchbäume nennt man expandieren von
Knoten des Graphen.
Bei Suchproblemen ist zu einem Startknoten auch eine Knotenmenge des Graphen G als
Menge der Zielknoten ausgezeichnet. Wir interessieren uns für Wegeˆdie vom Startknoten in
die Zielknoten führen. Alle Knoten des Suchbaums, die in Zielknoten des Graphen abgebildet
werden, nennen wir Zielknoten des Suchbaums.
Definition (Lösungspfad, Lösungsgraph): Ein Teilgraph P eines Und−Oder−Baumes SB
heißt Pfad, wenn P ein Und−Baum ist, also ausschließlich Und−Knoten besitzt und ein Baum
ist. Die Wurzel von P heißt Anfangsknoten und die Blätter des Baumes heißen Endknoten des
Pfades. Ein Pfad P heißt Lösungspfad von SB, wenn der Anfangsknoten von P gleich der
Wurzel von SB ist, die Endknoten von P alle Zielknoten sind und P keine anderen Zielknoten
enthält als die Endknoten. Die Spur eines Lösungspfades heißt Lösungsgraph.
Beispiel 4: Lösungsgraph
Graph G:
N0
h(N1) = 2
N1
h(N0) = 0
h(N2) = 4
h(N4) = 1
N2
N4
h(N3) = 4
h(N5) = 1
N3
N5
h(N6) =2
N6
h(N8) = 0
N7
N8
h(N7) = 0
Die beiden Kanten (N0,N4) und (N0,N5) bilden einen Konnektor. Die Beschriftungen werden
später benötigt.
7
Wissensbasierte Systeme
Lösungsgraph L1 (von N0 nach Z = {N7, N8}) :
N0
N1
N3
N5
N6
N8
N7
Lösungsgraph L2:
N0
N4
N5
N8
N7
Beispiel 5: Lösungsgraph zum Montageproblem (Beispiel 3)
8
Wissensbasierte Systeme
Schraube2
Schraube1
Deckel
Behälter
Fracht
Beim Expandieren eines Knotens müssen alle möglichen Bewegungsrichtungen lokal
betrachtet werden.
Behälter
Lokale Bewegungen
der Fracht
Fracht
Ausgehend vom
Endprodukt
wird
die Teilgruppe
T
gewählt und
die lokalen
Bewegungsrichtungen berechnet. Dann wird für jede lokale Bewegungsrichtung geprüft, ob
Teilgruppe T in dieser Richtung entfernbar ist (Kollisionserkennungsproblem). Falls ja,
entsteht Und−Konnektor mit zwei Kanten, die zwei Kanten zeigen auf die Teilgruppen T und
Rest−T (−> Zerlegung des Ausgangsproblems). Behandle die neuen Teilgruppen in der
gleichen Weise.
Bestimmung von Lösungsgraphen
Da der Trägergraph eines Und−Oder−Suchbaums selbst ein Baum ist, kann man diesen
Suchbaum grundsätzlich mit den gleichen Verfahren aufbauen wie bei gerichtete Graphen.
Man muß allerdings gewisse Nebenbedingungen erfüllen, insbesondere werden die
9
Wissensbasierte Systeme
Abbruchbedingungen
bei
der
Suche
nach
Lösungsgraphen
komplexer.
Beim
Breitensuchverfahren wird der Baum wieder schichtenweise erzeugt:
− Expandieren eines Knotens wie bei Breitensuche in gewöhnlichen Graphen, d.h.,
alle Nachfolger entlang aller ausgehenden Konnektoren werden im Suchbaum
erzeugt
− Prüfung der Terminierungsbedingung im Suchbaum nach jeder Expansion.
Das folgende Beitensuchverfahren ist auf alle Und−Oder−Graphen anwendbar. Falls ein
Lösungspfad existiert, terminiert das Verfahren und liefert einen Suchbaum, in dem ein
Lösungspfad enthalten ist. Die Datenstruktur für den Suchbaum muß die Möglichkeit
gestatten, für jeden Knoten zu markieren, ob er gelöst ist. Ein Knoten P heißt dabei gelöst,
wenn ein Lösungspfad von P zum Ziel existiert.
Prozedur (einfache) Und−Oder−Breitensuche:
1. Initialisiere Liste L von Baumknoten. L enthält nur den Startknoten S.
Solange Ende noch nicht erreicht, wiederhole:
2. Setze P := erstes Element von L.
Prüfe, ob S gelöst ist.
Falls ja, Ende.
Prüfe, ob L leer ist. Falls ja, Ende.
Lösche erstes Element in L.
(a) Expandiere P. Füge alle neuen
Knoten ans Ende von L an.
(b) Aktualisiere den Suchbaum.
Die Expansion in Schritt 2 a erzeugt also in der Datenstruktur des Suchbaums für alle
Konnektoren eines Knotens P alle Ausgangsknoten:
− Mit jedem Knoten wird eine Liste der ausgehenden Konnektoren gespeichert.
− Zusätzlich: Zeiger auf Vorgänger im Baum
Aktualisierung des Suchbaums:
Sind alle Knoten in einem Konnektor gelöst (erfüllen Terminierungsbedingung),
markiere gesamten Knoten als gelöst und reiche dies an Baumvorgänger weiter.
10
Wissensbasierte Systeme
Prüfe dort, ob alle Knoten im Konnektor gelöst sind, und reiche das ggf. weiter
Das einfache Breitensuchverfahren terminiert nicht immer, z.B. dann nicht, wenn Schleifen
existieren, aus denen Markierungen prinzipiell nicht eliminiert werden können, wie bei Und−
Graphen mit Schleifen außerhalb der Zielknoten, oder wenn gar keine Zielknoten in der
Zusammenhangs−komponente des Startknotens liegen. Um auch in diesen Fällen eine
Terminierung zu gewährleisten, muß man eine Schleifenbehandlung vorsehen oder ein
Abbruchkriterium aus einer Abschätzung der maximalen Tiefe eines Lösungspfades angeben.
Beides ist für beliebige Und−Oder−Graphen möglich (−> Übung).
Falls das Verfahren erfolgreich terminiert, kann man aus dem Suchbaum mindestens einen
Lösungspfad berechnen, indem man vom Startknoten aus einen Lösungspfad entlang von
gelösten Konnektoren verfolgt. Dies braucht an Oder−Knoten des Suchbaumes nicht eindeutig
zu sein.
Kostenfunktionen, Schätzfunktionen, das AO*−Verfahren.
Der Übergang von ungewichteten Gaphen zu gewichteten Graphen eröffnete bereits in Kapitel
2 die Möglichkeit zur Verfeinerung des Breitensuchverfahrens. Bei Und−OderGraphen ist
dies nicht anders. Der Ansatz für die Gewichtung von Und−Oder−Graphen ist die Angabe
einer Kostenfunktion, die die Kosten der Expansion eines Knotens bzw. eines Konnektors
angibt. Daraus ergeben sich dann die Kosten eines Lösungspfades:
c(K) bezeichne Kosten der Expansion eines Konnektors K des Und−Oder−Graphen.
Einem Knoten N eines Lösungspfades des Suchbaums können nun die Summe der Kosten
aller Konnektoren, die nach dem Knoten N bis zu den Zielknoten auftreten, zugeordnet
werden. Wir bezeichnen diese Summe als Kosten des Knotens N, i.Z. k(N). Die Berechnung
verläuft rekursiv wie folgt:
Liegt N im Ziel Z, dann gilt:
k(N) = 0.
Andernfalls gibt es genau einen (ausgehenden) Konnektor von N mit Ausgangsknoten N1, ...,
Ni und die Kosten von N sind:
k(N) = c(N) + k(N1) + ... + k(Ni)
11
Wissensbasierte Systeme
Wir betrachten nun wieder das Problem, in einem gewichteten Graphen, in dem Start und
Zielknoten angegeben sind, einen Lösungspfad zu finden, der minimale Kosten verursacht.
Wir setzen auch gleich voraus, daß wir eine Schätzfunktion h zur Verfügung haben, die die
minimalen Kosten eines Lösungspfads von einem einzelnen Knoten aus brauchbarˆ abschätzt.
h(N) gibt die geschätzten Kosten des besten Lösungspfads von N zum Ziel Z an.
Die Lösung des Problems liefert das `AO*−Verfahren´.
Prinzip:
− Zu jedem Knoten kann Schätzwert der ’Restkosten’ berechnet werden, das sind die
geschätzten Kosten der Lösung dieses Knotens relativ zum bisherigen Baum.
− Bisherige Kosten werden akkumuliert und liefern eine Entscheidungsgrundlage für
die Wahl des nächsten zu expandierenden Knoten. Dazu ist eine
Kostenpropagation notwendig, die (anders als bei A*) rückwärts durch den
ganzen Baum zum Start erfolgen muß.
Algorithmus AO*
Der wesentliche Unterschied des AO*−Verfahrens gegenüber dem A*−Verfahren ist, daß bei
Und−Oder Graphen die Lösungspfade i.a. mehr als einen Endknoten haben. Deshalb können
die Kosten eines vom Startknoten ausgehenden Lösungspfades nicht mehr einem Endknoten
zugeordnet werden. Den Ablauf der Kostenpropagation verfolgen wir zuerst in
Beispielgraphen.
In dem folgenden Beipielgraphen sind die Knoten X mit Schätzwerten h(X) versehen. Die
Kanten haben alle das Gewicht 1.
S
h(A) = 2
A
h(S) = 0
B
h(B) = 2
D
h(D) = 3
E
...
12
...
h(E) = 5
C
h(C) = 3
Wissensbasierte Systeme
Schritt 1: Expandiere S
Markierung
h(A) = 2
S
A
h(S) = 0
B
h(B) = 2
C
h(C) = 3
a)
Kette alle Nachfolger von S in Suchbaum ein
b)
Aktualisiere Kosten k(S), wo k(S) = Kosten des Teilgraphen entlang des
günstigsten Konnektors ausgehend von S ist.
Hier:
c)
k(A) = 1 + h(A) = 3.
Markiere den günstigsten Konnektor.
Schritt 2:
a)
Expandiere Graph entlang des aktuell günstigsten (jetzt markierten)
Konnektors
S
h(A) = 2
A
h(S) = 0
B
h(B) = 2
D
h(D) = 3
b)
c)
C
h(C) = 3
E
h(E) = 5
Aktualisiere Kosten des neu expandierten Knotens A
k(A)alt
= h(A),
k(A)neu
= 1 + 1 + h(D) + h(E) = 10.
Kostenpropagation: Aktualisiere jetzt Kosten von S
k(S)alt = 1 + h(A)
k(S)neu
= 1 + k(A)neu = 11
Prüfe, ob der zuvor markierte günstigste von S
13
Wissensbasierte Systeme
ausgehende Konnektor (hier S−A) immer noch günstigster von S ausgehender
Konnektor ist. Hier:
Nach Neuberechnung von k(A) wird Konnektor S−(B und C)
günstiger als S−A
−> Wechsle Markierung
d)
Entscheide, ob neu eingefügte Knoten gelöst sind. Falls ja,
Aufwärtspropagation, der Eigenschaft `ist gelöst´.
Wir geben im folgenden eine Variante des A*−Algorithmus zur Berechnung eines bestenˆ
Lösungsgraphen an. Wie schon beim Breitensuchverfahren ist eine Schleifenbehandlung nicht
zwingend notwendig, d.h., wir erhalten auch in Graphen mit Zyklen einen Lösungsgraphen,
sofern ein solcher überhaupt existiert. Wir benötigen aber eine andere Datenstruktur als die,
die wir für den A*−Algorithmus vorgesehen hatten.
Datenstruktur Suchbaum:
Vorwärts− und Rückwärts verzeigerte Liste von Knoten.
Vorwärtsverzeigerung:
zu Knoten P eine Liste aller von P ausgehenden
Konnektoren.
Rückwärtsverzeigerung:
Vorgänger von P im Suchbaum.
Datenfelder für k(P) und h(P).
Knotenliste L:
Liste aller (offenen) Blattknoten.
Prozedur AO*
1. L = {S}
2. Solange noch nicht Ende, wiederhole:
a)
falls S gelöst oder L leer −> Ende.
b)
Expandiere ersten Knoten P in L, füge
Nachfolger X1,...,Xn von P in L ein.
Setze k(Xi) = h(Xi); lösche P aus L.
c)
Propagiere Kosten aufwärts im Suchbaum:
Für P:
14
Wissensbasierte Systeme
Sei (Xi1 und Xi2 und ... Xik) günstigster von
P ausgehender Konnektor, c Kosten der Kanten in diesem
Konnektor.
Dann:
k
(P) = c + h(Xi1) + ... + h(Xik)
neu
Für Vorgänger von P: ersetze überall k
(P) durch k
alt
d)
Propagiere Markierungen
c)
Propagiere Terminierungsbedingung
e)
Sortiere L so, daß Blattknoten im markierten
(P).
neu
Teilbaum vorne stehen.
Sonderfälle: Falls der neu zu expandierende Knoten P nicht gelöst ist und keine Nachfolger
hat, dann ist ein Teilbaum nicht lösbar und muß im Suchbaum als unlösbar markiert werden.
Beachte: Die obige Prozedur enthält noch keine dynamische Programmierung, d.h. es wird
bei Epansion nicht festgestellt. ob irgendwo im Baum schon ein Knoten existiert, der die
gleiche Bezeichnung eines Graphknoten hat, aber in einem anderen Oder−Zweig des Baumes
steht. Wie schon erwähnt, enthält die Prozedur auch noch keine Schleifenbehandlung.
Außerdem geht man bei diesem Algorithmus davon aus, daß in einem Lösungspfad mehrfach
auftretende Knoten stets neu berechnet werden und die Kosten dafür entsprechend mehrfach
gezählt werden (Kreuzungen in Lösungspraphen).
Der AO*−Algorithmus hängt wesentlich von den Eigenschaften der Schätzfunktion h ab.
Analog wie bei A*−Algorithmen muß man die Zulässigkeit der Funktion h voraussetzen. Wir
erhalten die Zulässigkeit von h durch ein hinreichendes Kriterium, nämlich die Geltung der
`Monotonierestriktion´.
Satz: Das AO*−Verfahren ist zulässig, falls die Monotonierestriktion erfüllt ist und h(T) = 0
für alle gelösten Knoten gilt. Dabei gilt die Monotonierestriktion für Und−Oder Graphen, falls
gilt:
h(V) <= c + h(N1) + ... +h(Nn) für alle von V ausgehenden Konnektoren, wobei
N1,...,Nn die Nachfolger von V in einem Konnektor seien.
15
Wissensbasierte Systeme
Ein Beispiel für die Zulässigkeit erhalten wir aus Beispiel 4.
Beispiel 7: Zulässigkeit
N0
h(N1) = 2
h(N0) = 0
h(N2) = 4
N1
h(N4) = 1
N2
N4
h(N3) = 4
h(N5) = 1
N3
N5
h(N6) =2
N6
N7
N8
h(N8) = 0
h(N7) = 0
Notation: N−(X und Y) bezeichnet den Und−Konnektor von einem Knoten N zu den Knoten
X, Y
Monotonierestriktion:
Ist erfüllt: Prüfe alle Konnektoren, etwa für den Konnektor N0−(N4 und N5);
h(N0)<= 2 + h(N4) + h(N5)
Zulässigkeit: h<= h*. Man prüft dies über die Bestimmung der besten Lösungsgraphen für
jeden Knoten.
Im folgenden bezieht sich die Numerierung der Schritte auf Durchläufe der Schleife 2. in
AO*.
Schritt 1:
N0
h(N0) = 0
k(N0) = 3
k(N4) =h(N4) = 1
N1
N4
k(N1) =h(N1) = 2
k(N5) = h(N5) = 1
Schritt 2:
N5
Markierung wechselt von N0−N1 nach N0−(N4 und N5)
16
Wissensbasierte Systeme
h(N0) = 0
k(N0) = 4
N0
h(N1) = 2
k(N1) = 5
h(N4) = 1
N1
N2
N4
h(N2) = 4
N3
N5
h(N3) = 4
h(N5) = 1
Schritt 3:
h(N0) = 0
k(N0) = 4
N0
h(N1) = 2
k(N1) = 5
h(N4) = 1
N1
N2
h(N2) = 4
N4
h(N5) = 1
k(N5) = 2
N3
N5
gelöst
h(N3) = 4
N6
h(N6) = 2
N8
h(N8) = 0
h(N7) = 0
N7
gelöst
gelöst
Schritt 4:
N0
h(N1) = 2
k(N1) = 5
h(N0) = 0
gelöst
k(N0) = 4
h(N4) = 1
k(N4) = 1
N4 gelöst
N1
h(N2) = 4
N2
h(N5) = 1
k(N5) = 2
N3
N5
gelöst
h(N3) = 4
h(N6) = 2
N6
h(N8) = 0
h(N7) = 0
Ziel:
N7
N8
gelöst
gelöst
Der Markierte Graph (ausgehend von S) ist bester Lösungsgraph für S.
Spielbäume
Die bekanntesten speziellen Und−Oder−Graphen sind Spielbäume. Sie bilden die Basis von,
beispielweise, Schachprogrammen. Es werden hier spezielle Suchverfahren angewendet, z.B.
das Minimax−Verfahren oder das Alpha−Beta−Verfahren. Wir kommen damit zu einer
Alternative der Verfahren im vorausgegangenen Kapitel, wo Gewichte als Summen berechnet
17
Wissensbasierte Systeme
wurden. Den nun folgenden Verfahren liegt im Gegensatz zu jenen eine Gewichtung als
Maximumsbildung zugrunde.
Den Spielen soll (wie beim Schach) die folgende Situation zugrunde liegen:
Es gibt zwei Spieler, die Spieler heißen Max und Min.
Jeder Spieler besitzt die vollständige Information über die Zugmöglichkeiten des ^
Gegners.
Gesucht ist eine bestimme Strategie, die garantiert, daß Max immer gewinnt. (Beim
Schach wäre das, falls berechenbar, die Strategie des Programms.)
Die Und−Oder Graphen, die im Zusammenhang mit Spielen auftreten, haben eine spezielle
Gestalt. Bisher betrachteten wir den allgemeinen Fall, daß ein Knoten mehrere beliebige
Konnektoren hat. Nun aber treten Graphen auf, deren Knoten entweder einen einzigen
Konnektor mit i.a. mehreren Kanten besitzt oder aber mehrere Konnektoren mit je einer
Kante besitzt.
Bei Schachprogrammen werden Suchbäume berechnet. Der Wurzelknoten stellt die
Anfangsstellung, ein beliebiger Knoten eine beliebige Zwischenstellung im Spiel dar. Zu
bestimmen ist der günstigste Zug. Die Nachfolger von Knoten sind alle in dieser Stellung
möglichen Züge.
Züge des Programms
S
a
b
Züge des
Gegenspielers
Um zu entscheiden, ob Zug a für das Programm besser ist als Zug b müsste der gesamte
Baum ausgehend von der Startstellung untersucht werden. Wenn man für Schach folgende
Annahmen macht
− nur 16 mögliche Züge werden an jeder Stelle betrachtet
18
Wissensbasierte Systeme
− insgesamt kann jedes Spiel mit 100 Zügen beendet werden.
Dann ergibt der Baum mit Tiefe 100 und Verzweigungsfaktor 16 etwa 16100 Knoten und
10120 Blattknoten. Deshalb werden Bewertungsfunktionen für Stellungen benutzt. Der Baum
wird ausgehend von gegebener Stellung nur bis zu einer festen Tiefe entwickelt. Die
Bewertungsfunktion wird dann nur für Blattknoten aufgerufen.
Programm
S
b
a
Gegner
f=3
f= 7
f= 0
f= 8
Die Bewertungsfunktion f liefert den (geschätzten) maximalen (für das Programm
günstigsten) Wert im b−Zweig. Ist deshalb hier Zug b der Bessere? Das sogenannte
Minimax−Verfahren sagt: Nein! b ist der falsche Zug für das Programm, denn nach
Ausführung von b ist der Gegner am Zug. Der Gegner kann aber von hier aus immer eine
Stellung mit f−Wert 0 erreichen, was für Max Verlust des Spiels bedeutet. Von a aus kann der
Gegner schlimmstenfalls f−Wert 3 erreichen.
Die f−Werte von A und B sind also:
f(A) = Min{f(X1), f(X2)},
f(B) = Min{f(Y1), f(Y2)}
und es gilt
f(S) = Max{f{A},f(B)} = Max{ Min{f(X1), f(X2)}, Min{f(Y1), f(Y2)}} = 3.
Lösungsgraph (für Max): Graph, der ausgehend vom Start stets zum terminalen Knoten führt.
Für Schach ist eine vollständige Berechnung eines solchen Graphen nicht möglich. Deshalb
wird bei Schachprogrammen die Berechnung des Suchbaumes oder Lösungsgraphen nur bis
zu einer bestimmten Suchtiefe durchgeführt und dann für die `Restabschätzung´ die
Bewertung der Blattknoten verwendet. Der Ansatz für ein Verfahren lautet: Ausgehend von
19
Wissensbasierte Systeme
aktueller Stellung wird der Und−Oder−Suchbaum durch ein bewertendes Suchverfahren
expandiert.
Beispiel: Minimax mit Suchtiefe 2
Max
Min
2
7
1
8
Max
Wie man sieht, hat der Suchbaum eine spezielle Gestalt. In Startstellung (Baumtiefe 0) ist
Max am Zug, also hat die Ebene 0 im Baum nur Oder−Kanten. Auf Tiefe 1 ist Min am Zug,
also gibt es auf Ebene 1 nur Und−Konnektoren als Nachfolger von Knoten. Auf Tiefe 2 ist
wieder Max am Zug, also gibt es nur Oder−Kanten. Die Bewertungsfunktion f bewertet
Spielstellungen. Max versucht, eine Stellung mit hohem Wert für f zu erreichen. Min
versucht, eine Stellung mit niedrigem f−Wert zu erreichen. Wir leiten daraus das Minimax−
Verfahren ab.
Ansatz für Minimax−Verfahren:
Expandiere Baum bis Suchtiefe m.
Rufe dann f für alle Blattknoten auf.
(D.h. f wird nie für Knoten mit Baumtiefe < m direkt aufgerufen! Für alle
Knoten mit Baumtiefe <m wird f nur durch Aufwärtspropagation berechnet)
Propagiere f−Wert im Baum nach oben nach folgendem Schema
Ist X auf Ebene m−1, und ist m−1 eine Min−Ebene,
dann setze f(X) = Min{f(X1),...,f(Xn)}, X1,...,Xn sind die Nachfolger von X.
(D.h. X1,.., Xn sind auf Ebene m, und f(Xi) wurde direkt berechnet).
Ist m−1 Max Ebene, dann f(X) = Max{f(X1),...,f(Xn)}
Ist f−Wert bis Tiefe m−k schon berechnet,
dann bestimme f−Wert als Minimum bzw. Maximum der f−Werte von
Nachfolgern auf Stufe m−(k−1)
Im Beispiel:
20
Wissensbasierte Systeme
S
Max
X
X1
2
Y
X2
7
Y1
1
Min
Y2
8
Max
Durch Ausführen von Zügen wird der Baum von S ausgehend (S ist auf Ebene 0) bis Ebene 2
expandiert. Die Stellungen X1, X2, Y1, Y2 werden direkt bewertet (Bewertung einer
Spielstellung z.B. als gewichtete Summe von Gesamtzahl der schwarzen Figuren, Anzahl der
bedrohten weißen Figuren, etc.). Für Stellung X ist dann f(X) = Min{2,7} = 2. Analog erhält
man f(Y) = 1
Ergebnis:
f(S) = Max{f(X), f(Y)} = 2.
2 ist der sogenannte Minimax−Wert in diesem Fall.
Interpretation:
Max wählt immer den besten Zug.
Min wählt immer den (für Max!) schlechtesten Zug.
Max erhält durch Berechnung die Information, in welchem Ast die
bestmögliche Stellung liegt, unter der Hypothese, daß Min (nach der
gleichen Strategie wie Max) immer den (für Max) ungünstigsten Zug
tatsächlich ausführen wird.
Minimax−Verfahren
Die Umsetzung des obigen Ansatzes führt zum folgenden Minimax−Verfahren.
function minimax(K : Knoten) : integer; (* liefert f(K) *)
var m, m1 : integer;
begin
Expandiere K, liefert Liste (X1,...,Xn) der Nachfolger
If Ebene(K) = Blattknoten
return Bewertung(K)
Else
if Ebene(K) = Max
m1 := − maxint;
for i := 1,...,n
21
von K
Wissensbasierte Systeme
m := minimax(Xi);
if m > m1 then m1 := m
Else (* Ebene(K) = Min *)
m1 := maxint;
for i := 1,...,n
m := minimax(Xi);
if m < m1 then m1 := m
return m1
end
Beispiel: Tic−Tac−Toe mit Minimax−Verfahren
Situation:
Max und Min plazieren abwechselnd Scheiben auf einem 3x3 Spielfeld. Beide
Spieler versuchen, eine Dreierreihe (−Spalte oder Diagonale) ihrer Farbe zu erzeugen.
(Statt Farben verwende Zeichen ’X’ für Max, ’O’ für Min)
Bewertungsfunktion:
Anzahl Zeilen, Spalten, Diagonalen, die Max noch ganz besetzen kann minus Anzahl Zeilen,
Spalten, Diagonalen, die Min noch ganz besetzen kann.
Baum für Suchtiefe 2:
Max
bester Zug
Min
x
o
x
x
x
x
o
o
f=0 1
x
x
o
0
o
−1
o
x
x
−1
o
0
x
x
o
−1
x o xo
ox
−2
2
0
o
x
1
f = 6−5=1
Ob das Minimax−Verfahren den Lösungsbaum findet, hängt wesentlich von der
Bewertungsfunktion ab. Das Problem bei der Anwendung des Minimax−Verfahrens ist also
die Angabe der Bewertungsfunktion. Das folgende Beispiel mag dies illustrieren.
22
Wissensbasierte Systeme
Beispiel: Schach (Seymore/Norwood 1993)
Weiss am Zug: Das Schachprogramm Deep−Thought nimmt den Turm. Dies bedeutet aber
eine sichere Niederlage für Weiss, obwohl die Stellung für Weiss ein sicheres Remis
garantiert.
Das Alpha−Beta−Verfahren
Das Minimax−Verfahrens läßt sich für bestimmte Klassen von Anwendungen effizienter
gestalten, wenn man versucht, die Anzahl der zu expandierender Knoten zu reduzieren. Dies
geschieht beim Alpha−Beta−Verfahren. Wir betrachten zunächst ein Beispiel.
S
Max
X
X1
2
Y
X2
7
Y1
1
Min
Y2
8
Max
Idee:
Die Idee des Alpha−Beta−Verfahrens ist, daß zur des Minimax−Wertes nicht jeder
Blattknoten im obigen Baum betrachtet werden muß. Es muß also nicht jeder Knotenwert
berechnet werden (Reduktion des Suchbaums). Im Beispiel sei die Berechnung der f−Werte
23
Wissensbasierte Systeme
bereits für Knoten X1, X2 und für Y1 erfolgt. Dann braucht Knoten Y2 nicht mehr betrachtet
zu werden, weil man auch ohne Berechnung von Y2 weiß, daß das Minimum von Y1 und Y2
und damit der Wert von Y jedenfalls kleiner oder gleich 1 ist. Dann scheidet aber der Y−
Zweig als Kandidat für einen Zug aus, weil X bereits den Wert 2 besitzt und der Wert von S
das Maximum der Werte von X und Y ist (flaches Abschneiden). Die Gleiche Idee kann auch
bei Bäumen mit Tiefe >2 angewendet werden.
Verfahren:
Weise Max−Knoten Wert für alpha zu, alpha ist untere Schranke für f−Wert dieses Max−
Knotens. Weise Min−Knoten Wert für beta zu, beta ist obere Schranke für f−Wert dieses
Min−Knotens.
Unterscheide zwischen vorläufigen und endgültigen alpha− bzw. beta−Werten für Knoten.
Ein vorläufiger alpha−Wert für Max−Knoten X (beta−Wert für Min−Knoten X) kennzeichnet
eine Bewertung, die Max (Min) von X aus in jedem Fall schon erreichen kann. Ein
endgültiger alpha−Wert (beta−Wert) bezeichnet die Bewertung des für Max (Min) von X aus
günstigsten Zuges.
Initialisiere alpha mit −∞, beta mit +∞. Für den ganzen Baumdurchlauf ist stets der bisher
günstigste alpha−Wert und der bisher günstigste beta−Wert bekannt. Max versucht, diesen
alpha−Wert zu maximieren, Min versucht, beta zu minimieren.
Die Expandierung von Knoten und die Propagation von alpha− und beta−Werten gestaltet
sich wie folgt:
Expandiere Baum im Tiefensuchverfahren. Die Suchtiefe ist (wie bei Minimax−Verfahren)
fest vorgegeben. Für Blattknoten kann f−Wert direkt bestimmt werden. Sobald endgültiger
alpha− Wert für einen Knoten feststeht, reiche diesen Wert als vorläufigen beta−Wert an
unmittelbaren Vorgänger nach oben. Der neue beta−Wert ist dann das Minimum des
hochgereichten beta−Wertes mit dem alten beta−Wert. Umgekehrt: reiche endgültigen beta−
Wert als vorläufigen alpha−Wert an Baumvorgänger. Der neue alpha−Wert ist dann das
Maximum des hochgereichten alpha−Wertes mit dem alten alpha−Wert.
Reduktion des Suchbaums:
a) Flaches Abschneiden:
24
Wissensbasierte Systeme
X
Max
Min
X2
T1
...
T2
Nehmen wir an, daß Teilbaum T1, in dem Max in jedem Fall alpha=2 erreichen kann, bereits
untersucht wurde. Nun wurde Teilbaum T2 angetroffen, in dem Min in jedem Fall beta = 1
erreichen kann. Danngilt: Die Untersuchung weiterer Nachfolger von X2 kann abgebrochen
werden.
b) Tiefes Abschneiden:
X
Max
Min
10
Max
Y
...
Z
5
Min
W
Hier braucht W nicht mehr betrachtet zu werden.
Merke:
Die Propagation erfolgt immer nur um genau eine Stufe nach oben. Bei einer
Propagation wird stets der bisher günstigste alpha− bzw. beta−Wert propagiert. Es werden nur
endgültige Werte propagiert. Wenn eine Reduktion stattfindet, wird der bisher günstigste
alpha− bzw. beta−Wert nicht verändert, d.h. aber daß die propagierten Werte nicht immer
gleich dem f−Wert der Knoten sind, sondern nur dann, wenn dieser f−Wert günstiger als der
im bisherigen Baum erreichte günstigste Wert ist.
Beispiel: Propagation
X1, X2 seien Blattknoten
Fall 1: X ist Min−Knoten
a) Suche beginnt auf linkem Ast.
25
Wissensbasierte Systeme
Max
...
Min
Max
X
X1
2
X2
7
Rufe statische Bewertungsfunktion f für Blattknoten X1 auf, das liefert 2. Der f−Wert von X1
ist jetzt endgültiger alpha−Wert für X1. Propagiere diesen Wert nach oben zu X. Damit erhält
X den vorläufigen beta−Wert 2. Werte jetzt f(X2) aus. Der durchgereichte Wert ändert den
schon bestehenden Wert von beta nicht. Damit wird die Suche im zu X gehörigen Ast
abgeschlossen, und beta−Wert 2 von X wird endgültig.
Fall 2: X ist Max−Knoten
Analog zu Fall 1, aber jetzt wird das Maximum der f−Werte propagiert. Der vorläufige, bisher
günstigste alpha−Wert kann zur Laufzeit nie sinken.
Merke: alpha wird mit −∞ initialisiert und wächst monoton, beta wird mit ∞ initialisiert und
fällt monoton.
Wir haben in Beispielen zwei Varianten von Reduktionen des Suchbaums bereits
kennengelernt, nämlich flaches bzw. tiefes Abschneiden von Zweigen. Dies führt zu der
folgenden Idee:
Sei alpha mit −unendlich, beta mit +unendlich initialisiert. Dann kann die Suche in einem
Zweig abgebrochen werden, falls ein geeigneter Vergleich (für diesen Zweig) alpha >= beta
liefert.
Die folgenden Regeln für einen Vergleich bedeuten flaches Abschneiden.
Alpha−Beta−Regeln:
Betrachte Knoten V, N. V sei direkter Vorgänger von N im Baum. Ein Abbruch bei der
Untersuchung der Nachfolger von N erfolgt, falls
1. alpha(V) >= beta(X) für irgend einen direkten Nachfolger X von N (wenn V ein Max−
Knoten)
oder
26
Wissensbasierte Systeme
2. alpha(X) >= beta(V) für irgend einen direkten Nachfolger X von N (wenn V ein Min−
Knoten ist).
Alpha−Beta−Algorithmus
function ab(
K : Knoten; alpha, beta : integer) : integer;
var m : integer;
begin
Expandiere K, liefert Liste (X1,...,Xn) der Nachfolger von K;
if Ebene(K) = Blattknoten
return Bewertung(K)
else
if Ebene(K) = Max
for i := 1,...,n
m := ab(Xi, alpha, beta);
if m > alpha then alpha := m;
if alpha >= beta then return alpha
return alpha
else (* Ebene(K) = Min *)
for i := 1,...,n
m := ab(Xi, alpha, beta);
if m < beta then beta := m;
if alpha >= beta then return beta
return beta
end
{alpha und beta sind Werteparameter!}
Beispiel: Alpha−Beta−Regel 1
Vollständiger Baum:
27
Wissensbasierte Systeme
Min
S
X
...
Y
Max
...
X1
U1
2
X2
U2 V1
7
1
Y1
V2
8
Y2
W1 W2 Z1
2
9
7
Min
Z2
9
Schritt 1: Expandiere Baum im Tiefensuchverfahren entlang der linken Zweige bis zu U1.
S
X
Max
X1
U1
2
Min
Min
U2
7
X1 ist Min−Knoten, der endgültige beta−Wert für X1 ist 2. Damit wird der vorläufige alpha−
Wert von X auf 2 gesetzt.
Schritt 2: Expandiere X2 bis zu V1, liefert vorläufigen beta−Wert 1 für X2. Abbruch, da jetzt
alpha−v(X) >= beta−v(X2) (vorläufige alpha− bzw. beta−Werte), d.h. die Untersuchung der
Nachfolger von X2 wird beendet. beta−v(X2) wird zu beta−e(X2) = 1 (endgültiger beta−
Wert). Die Untersuchung der Nachfolger von X ist abgeschlossen. Damit ist alpha−e(X) = 2
und schließlich beta−v(S) = 2
Beispiel: Alpha−Beta−Regel 2
(Fortsetzung Beispiel zu Regel 1)
28
Wissensbasierte Systeme
Min
S
X
...
Y
Max
...
X1
U1
2
X2
U2 V1
7
1
Y2
Y1
V2
8
W1 W2 Z1
2
9
7
Min
Z2
9
Aufruf ab(Y,− ∞, 2) liefert beta−e = 2 für Y1, damit alpha−v = 2 für Y, also Abbruch. Y2 wird
nicht mehr untersucht.
Wegen der Möglichkeit des vorzeitigen Abbruchs liefert der Alpha−Beta−Algorithmus für
einen Knoten nicht notwendigerweise die gleichen endgültigen beta−Werte wie das Minimax−
Verfahren. Dazu ein
Beispiel:
S
beta−e = 1
Y
Min
X
X1
2
Max
X2
7
Y1
1
Y2
0
Max
Das Minimax−Suche würde den f−Wert 0 für den Knoten Y liefern. Alpha−Beta−Suche
liefert den endgültigen beta−Wert 1 für Y, findet aber trotzdem den gleichen Zug wie das
Minimax−Verfahren.
Beachte aber: Für den Wurzelknoten wird der gleiche Wert zurückgeliefert wie beim
Minimax−Verfahren.
Beispiel: Tic−Tac−Toe mit Alpha−Beta
29
Wissensbasierte Systeme
Max
x
Min
x
o
x
x
1
x
o
0
x
o
1
x
o
o
x
o
−1
0
x
−1
x
o
o
x
0
x o xo
ox
−2
2
−1
0
o
x
1
Wir übersetzen entsprechend die Bezeichnungen der Knoten:
Max
N0
Min
N1
N2
N4
N5
N6
N7
N8
N9
1
0
1
0
−1
−1
N3
N10 N11
N12
N13
N14
N15
2
1
−2
0
−1
0
N0
ab(N0,− ∞,∞)
Schritt 1:
Max
N1 ab(N1,− ∞,∞)
Min
N2
N4
N5
N6
N7
N8
N9
1
0
1
0
−1
−1
N3
N10 N11
0
N12
−1
N13
N14 N15
2
−2
0
1
ab(N4,− ∞,∞)=1
Aufruf ab(N1,− ∞,∞) wird umgesetzt in die Aufrufe
ab(N4,−∞, ∞), ab(N5,− ∞,1), ab(N6,− ∞,0), ab(N7,− ∞,0), ab(N8,− ∞,0).
ab(N4,− ∞,∞) terminiert mit ab(N4,− ∞,∞) =1. Genauso
ab(N5,− ∞,1) = 0, ab(N6,− ∞,0) = 1, ab(N7,− ∞,0) = 1, ab(N8,− ∞,0) = −1.
Damit terminiert ab(N1,− ∞,∞) mit ab(N1,− ∞,∞) = −1 und wir erhalten die folgende
Situation:
Max
Min
N0
N1
ab(N1,− ∞,∞) =−1
Untersuchung N4−N8
beendet
N2
N9
−1
30
ab(N0,− ∞,∞)
N3
N10 N11
0
−1
N12
0
N13
−2
N14
N15
2
1
Wissensbasierte Systeme
Dies führt zu dem Aufruf ab(N2,−1, ∞), der bereits nach Untersuchung von N9 terminiert mit
dem Ergebnis ab(N2,−1, ∞) = −1. alpha bleibt jetzt unverändert −1, und es wird ab(N3,−1, ∞)
aufgerufen. Der Aufruf ab(N3,−1, ∞) terminiert mit ab(N3,−1, ∞) = 1, d.h., der Gesamtaufruf
ab(N0,− ∞,∞) terminiert mit ab(N3,− ∞,∞) = 1. Die Knoten N10−N13 brauchten nicht
untersucht zu werden.
Definition: Baumtiefe = Anzahl der Kanten im längsten Pfad von einem Blattknoten zur
Wurzel (d.h. Baum bestehend aus nur dem Wurzelknoten hat Tiefe 0)
Wir untersuchen die Anzahl der zu berechnenden Knoten beim Alpha−Beta−Verfahren.
Baum mit Tiefe 1: Alle Knoten müssen untersucht werden
Binärer Baum mit Tiefe 2: 7 Knoten insgesamt, 6 müssen in jedem Fall untersucht werden
Baum mit Verzweigungsfaktor 3, Tiefe 2: 13 Knoten, 9 müssen untersucht werden
Der günstigste Fall tritt ein, wenn
(E)
der ’zuerst gefundene vorläufige alpha−Wert immer gleich dem später festgelegten
endgültigen alpha−Wert ist (und Analoges für beta gilt)’
Wir betrachten den allgemeine Fall für Baum mit Tiefe T = 2. Sei V der Verzweigungsfaktor.
Dann gibt es insgesamt V2 Blattknoten
Max
N0
ab(N0,− ∞,∞)
ab(N1,− ∞,∞) = 10
Min
ab(N3,10 ,∞)
N2 ab(N2,10 ,∞)
N1
10
10
10
9
N3
9
Das Alpha−beta−Verfahren untersucht 2V−1 Blattknoten, falls Eigenschaft (E) gilt. D.h., die
Knotenzahl wächst quadratisch, die Zahl untersuchter Knoten wächst nur linear, falls (E) gilt.
31
Wissensbasierte Systeme
Für den allgemeine Baum mit Tiefe T = 3 ist V3 die Anzahl der Blattknoten. Im Fall (E)
werden aber nur V 2 + V − 1 Blattknoten untersucht:
Min
N0
ab(N0,− ∞,∞)
ab(N1,− ∞,∞) = 4
Max
ab(N3,− ∞,4)
N1
N2 ab(N2,− ∞, 4)=5
N3
Min
4 4 4 3
3
5 5 5
5 5 5
Im Fall V = 3 werden 11 von 27 Knoten untersucht. Allgemein gilt:
Im Fall (E) erlaubt alpha−beta−Verfahren gegenüber Minimax eine Verdoppelung der
Suchtiefe.
Das S*−Verfahren
Beim Alpha−Beta−Algorithmus tritt der günstigste Fall ein, falls die Eigenschaft (E) gilt. Man
kann nun versuchen, das Verfahren so zu steuern, daß die Gültigkeit dieser Eigenschaft
angestrebt wird, indem man immer diejenigen Knoten expandiert, die in dem derzeit
günstigsten Teilbaum liegen. Damit erhält man das S*−Verfahren. Das S*−Verfahren ist ein
Spielbaumverfahren ähnlich wie AO*. Die Bewertung der Knoten ist gleich wie beim
Minimax−Verfahren. Die Steuerung erfolgt nach dem Best−First Prinzip, d.h. die Knoten im
jeweils `günstigsten´ Teilbaum werden expandiert. Wir passen die Definition des
Lösungsbaums an die jetzige Situation an, insbesondere definieren wir den Lösungsbaum aus
der Sicht von Max. Im folgenden sei der Wurzelknoten immer ein Max−Knoten.
Definition Lösungsbaum (für Max): Ein Lösungsbaum ist ein Teilbaum, in dem zu jedem
nicht−terminalen Max−Knoten genau ein Nachfolger, und zu jedem nicht−terminalen Min−
Knoten alle Nachfolger gehören.
Beispiel: Lösungsbaum
40
4
32
10
80
Wissensbasierte Systeme
Notation: Max−Knoten mit Viereck, Min−Knoten mit Kreis.
Zur Bestimmung eines `besten´ Lösungsbaums mit dem S*−Verfahren werden Knoten immer
entlang des besten Teilbaums expandiert, bis ein kompletter Lösungsbaum gefunden wurde.
Dieser Lösungsbaum ist (wie bei AO*) dann auch der beste.
Definitionen:
W
2
1
1.1
4
1.2
2
2.1
1
2.2
8
Notation: Nachfolger von Knoten 1 heißen 1.1 und 1.2 etc.
Knoten haben zwei Zustände:
−Lebend (in Liste OFFEN)
−Gelöst (auch in OFFEN)
h−Funktion gibt Bewertung der Knoten an.
Zustandsbeschreibung für Knoten in Liste OFFEN:
(Name, Lebend | Gelöst, h)
S*− Algorithmus
1. Füge Startknoten (S, Lebend, ∞) in OFFEN ein
2. Wiederhole
a. Lösche Knoten K mit höchstem h−Wert aus OFFEN
b. Falls Zustand(K) = Gelöst und K = S Ende
c. Expandiere K mit Operator EXP
Definition Operator EXP:
Eingabe: (K, z, h)
K hat Nachfolger K.1,...,K.n
f(K) statische Bewertung für terminale Knoten
Fall 1: Zustand von K Lebend
33
Wissensbasierte Systeme
FallNr
Fall
Aktion
1a
K n.−terminal
Füge (K.j, z, h) am Anfang von OFFEN ein
K Maxknoten
für alle j = 1,...,n (Reihenf. aufst. nach j)
K n.−terminal
Füge (K.1,z,h) am Anf.
K Minknoten
von OFFEN ein
K terminal
Füge (K,Gelöst,u) sortiert nach absteigendem h−Wert
1b
1c
in OFFEN ein, u = min{h, f(K)}
bei gleichem h−Wert wird die Sortierung von links nach rechts im Baum festgelegt.
Fall 2: K Gelöst
FallNr
Fall
Aktion
2a
K Maxknoten
Füge (K’.j+1, Lebend, h)
K’ Vorg. von K
an Anf. von OFFEN ein
d.h. K= K’.j, j<n
2b
K Maxknoten
Füge (K’, Gelöst, h)
K’ Vorg. von K
an Anf. von OFFEN ein
d.h. K= K’.j, j=n
2c
K Minknoten
Füge (K’, Gelöst,h)
K= K’.j
an Anf. von OFFEN ein
Lösche Nachfolger von K’ in OFFEN
Wir verfolgen die Veränderungen der Liste OFFEN im obigen Beispiel.
Fall EXP−
Operator
OFFEN
(W, L, ∞)
34
Wissensbasierte Systeme
1a
(1, L, ∞)
(2, L, ∞)
1b
(1.1, L, ∞)
(2, L, ∞)
1c
(2, L, ∞)
(1.1, G, 4)
1b
(2.1, L, ∞)
(1.1, G, 4)
1c
(1.1, G, 4)
(2.1, G,1)
2a
(1.2, L, 4)
(2.1, G, 1)
1c
(1.2, G, 2)
(2.1, G,1)
2b
(1, G, 2)
(2.1, G,1)
2c
(W,G, 2)
Zurückgeliefert wird Wert 2 (Minimax−Wert)
Wir vergleichen den Alpha−Beta−Algorithmus mit dem S*−Verfahren an einem Beispiel.
a−b versus S*
W
2
1
1.1
1.2
2.1
2.2
2
1
4
6
a−b muß alle Blattknoten betrachten!
S*:
(W, L, ¯)
1a
(1,L, ¯)
(2,L,¯)
1b
(1.1, L, ¯)
1c
(2, L, ¯)
1b
(2.1,L, ¯)
(1.1, G, 2)
1c
(2.1,G, 4)
(1.1, G, 2)
2a
(2.2,L, 4)
(1.1, G, 2)
1c
(2.2,G, 4)
(1.1, G, 2)
2b
(2,G, 4)
(2, L, ¯)
(1.1,G, 2)
(1.1, G, 2)
35
Wissensbasierte Systeme
2c
(W, G, 4)
−> S* betrachtet Knoten 1.2 nicht!
Ohne Beweis geben wir folgende Sätze an. Sie klären, wie die Ergebnisse von Alpha−Beta
mit denen von S* zu vergleichen sind.
Satz 1: S* liefert den Minimax−Wert für den Wurzelknoten zurück.
Satz 2: Alle Knoten, die von S* expandiert werden, müssen auch von a−b expandiert werden
Übung:
a−b versus S* ([Pearl 85])
41 5 12 90
101 80 20 30
34 80 36 35
50 36
25 3
Zeige: a−b expandiert 12 Blattknoten, S* nur 8.
Wir vergleichen S* nocheinmal mit Alpha−Beta−Verfahren:
1)
S* expandiert weniger Knoten als a−b
2)
Aber: S* muß alle Teilbäume speichern
a−b kann Teilbaum sofort löschen, wenn a− bzw. b −Wert für Teilbaumwurzel
feststeht
−> exponentieller Speicheraufwand bei S*
In fast allen Spielprogrammen wird das Alpha−Beta−Verfahren benutzt. Als Beispiel
skizzieren wir das Programm Deep Thought.
Deep Thought:
Alpha−beta−Suche
Suchtiefe z.Z. 10 Züge
Verzweigungsfaktor 6
Bewertungsfunktion
36
Wissensbasierte Systeme
− Figurenzahl
− Arrangement von Bauern und Türmen
− Beurteilung der Gesamtstellung
Erhöhung der Rechenleistung um Faktor 1000 liefert Erhöhung der
Suchtiefe auf 14 Züge.
Statistische Auswertung liefert proportionalen Zusammenhang
zwischen Spielstärke und Suchtiefe.
Spielstärke ergibt sich aus Plazierung in Rangliste.
37
Herunterladen