Ubungsblatt 6

Werbung
◦
◦
◦
◦
◦
◦
◦
◦
◦
◦
◦
◦
◦
◦
◦
INSTITUT FÜR INFORMATIK
◦
◦
◦
◦
◦
DER TECHNISCHEN UNIVERSITÄT MÜNCHEN
Theoretische Informatik und Grundlagen der Künstlichen Intelligenz
Prof. Dr. Dr. h.c. mult. Wilfried Brauer
Dr. Gerhard Weiß
Programmierpraktikum “Grundlagen der Künstlichen Intelligenz”
Übungsblatt 6 (15.06.2005, Abgabetermin 22.06.2005)
Übung 6-1 (Informiertes Backtracking mit Forward Checking)
Gegenstand dieser Übung ist eine effiziente und in der Praxis bewährte Variante des uninformierten
Backtracking (Übung 5.2). Diese Variante unterscheidet sich vom Original in zweierlei Hinsicht:
•
Forward Checking. Immer wenn eine Variable Qi belegt wird (also ein Knoten ex-
pandiert wird), erfolgt am neuen Knoten nicht nur die Prüfung auf Constraintverletzung (vergleiche Anpassung [2] aus der Übung 5.2) sondern zusätzlich ein Abgleich der
Belegungsmöglichkeiten aller noch unbelegten Variablen. Es wird also für jede Variable,
deren Belegung erst in einem der nächsten Schritte vorgesehen ist, geprüft, ob aufgrund
der bereits vorgenommenen Variablenbelegungen überhaupt noch eine legale Belegung
(d.h. eine Belegung die keine Constraints verletzt) möglich ist. Falls es für irgendeine der
noch unbelegten Variablen keine legale Belegung mehr gibt, kann sofort Backtracking
erfolgen. Hier eine einfache Illustration anhand des 6-Damenproblems. Angenommen
im ersten Belegungsschritt wird Q1 mit 1 belegt, dann im zweiten Schritt Q2 mit 3,
dann im dritten Schritt Q3 mit 5, und im vierten Schritt Q4 mit 2. An dieser Stelle erlaubt Forward Checking das Abbrechen der Suche (obwohl Q5 noch mit 4 belegt werden
könnte), da bereits jetzt klar ist, dass es keine legale Belegung von Q6 geben wird – alle
Positionen in der Spalte 6 sind von den Damen Q1 bis Q4 bedroht. Allgemein erfordert
Forward Checking erfordert also, dass zu jedem Zeitpunkt für jede Variable die Anzahl
der noch möglichen Belegungen bekannt ist beziehungsweise bestimmt werden kann.
•
“Informiertheit” durch Heuristiken. Die Auswahl der als nächstes zu belegenden
Variablen und die Auswahl der Belegung (d.h. des Wertes) einer Variable wird durch
Heuristiken gesteuert. Zur Erinnerung: beim uninformierten Backtracking ist die Reihenfolge, in der die Variablen belegt werden, beliebig aber fest vorgegeben; weiterhin
ist nicht festgelegt, in welcher Reihenfolge die Werte einer Variablen aus ihrer Domäne
gewählt wurden. Eine bekannte “Variablenauswahl-Heuristik” ist die sogenannte mostconstrained-variable Heuristik : es wird aus den noch unbelegten Variablen diejenige
ausgewählt, welche die wenigsten noch möglichen Belegungswerte besitzt. (Illustration: falls die Variablen Q4 noch drei mögliche Belegungen hat, Q5 noch zwei, und Q6
nur noch eine, dann wird der aktuelle Knoten mittels Belegung von Q6 expandiert.)
Gibt es mehrere Variablen, die gleich wenig Belegungsmöglichkeiten besitzen, dann
wird zufällig eine dieser Variablen gewählt. Eine bekannte “Werteauswahl-Heuristik”
ist die sogenannte least-constraining-value Heuristik : es wird derjenige Wert aus den
noch möglichen Belegungswerten der aktuell betrachteten Variable ausgewählt (und
zur Knotenexpansion verwendet), welcher die übrigen noch unbelegten Variablen am
wenigsten einschränkt. Dabei soll “am wenigsten einschränkt” durch die Anzahl der
/. . .
–2–
Variablenwerte, die durch die Auswahl entfallen und nicht mehr zur Verfügung stehen würden, gemessen werden. (Illustration am 6-Damenproblem: sei Q1 = 1 und
Q2 = 3; durch die Belegung von Q3 mit dem Wert 5 würden 3 weitere Werte entfallen – nämlich Q4 = 6, Q6 = 2 und Q6 = 5 –, während durch die Belegung von Q3
mit dem Wert 6 nur 2 weitere Werte – Q4 = 6 und Q5 = 4 – entfallen würden. Zu
beachten hierbei ist, dass z.B. wegen der bereits existierenden Belegung von Q2 mit
dem Wert 3 die Variable Q4 ohnehin nicht mit dem Wert 5 belegt werden könnte –
egal, wie Q3 belegt wird.) Allgemein erfordert die Anwendung der “VariablenauswahlHeuristik” und der “Werteauswahl-Heuristik”, dass über die Belegungsmöglichkeiten
aller Variablen genau Buch geführt wird; insbesondere sind Routinen erforderlich, die
es erlauben, möglichst effizient die Auswirkungen einer Belegung einer Variablen auf
die Belegungsmöglichkeiten anderer Variablen zu bestimmen.
6-1-1*.
Überlegen Sie sich weitere, alternative Heuristiken zur Variablen- und Werteauswahl!
6-1-2. Formulieren Sie (in Erweiterung Ihres Lösungsvorschlages zu 5-2-2) das informierte Backtracking mit Forward Checking in kommentierter Pseudonotation.
6-1-3.
Implementieren Sie Ihren Lösungsvorschlag aus 6-1-2. Wenden Sie Ihre Implementierung auf das 8-Damenproblem und das 12-Damenproblem an. Vergleichen Sie, unter Verwendung Ihrer Implementierungen, uninformiertes Backtracking und informiertes Backtracking mit
Forward Checking hinsichtlich ihrer Effizienz. Wieviele Knoten wurden von beiden Verfahren beim
8-Damenproblem und beim 12-Damenproblem generiert?
6-1-4. Loten Sie die “Grenzen” Ihrer Implementierung des informierten Backtracking mit Forward Checking aus, indem Sie das n-Damenproblem für große Werte von n (z.B. n = 50, n = 100,
n = 1000?) lösen.
Übung 6-2 (Iterative Verbesserung mittels Min-Conflict)
Ein Merkmal von Backtracking ist, dass die Variablen sukzessive belegt werden. Einen andere
Vorgehensweise bieten die sogenannten Verfahren zur iterativen Verbesserung (iterative improvement algorithms, iterative repair algorithms). Diese Verfahren beginnen den Suchprozess mit einer
zufälligen (und daher i.d.R. ungültigen) Belegung aller Variablen und versuchen ausgehend von
dieser Belegung, iterativ die Belegungen geeignet zu korrigieren. In dieser Übung wird ein sehr einfaches, aber ungemein effizientes Beispiel eines solchen Verfahrens behandelt: iterative Verbesserung
mit Hilfe der sogenannten Min-Conflict Heuristik : der Wert einer Variablen wird derart verändert,
dass die Anzahl der Konflikte (d.h. der Constraint-Verletzungen) mit den anderen Variablen minimiert wird. Falls verschiedene Belegungen der aktuell betrachteten Variable gleich gut sind (d.h.
ausgehend von der aktuellen Belegung dieser Variable gleich viele Constraint-Verletzungen vermeiden), dann wird eine dieser Belegungen zufällig ausgewählt. Abbildung 6-1 illustriert diese Heuristik. (In dieser Abbildung wird angenommen, dass zuerst Q8 – linkes Schachbrett – und dann Q7
betrachtet wird – mittleres Schachbrett –, wobei die Zahlen auf den Feldern die Anzahl der das
jeweilige Feld bedrohenden Damen angeben. Sowohl Q8 als auch Q7 werden jeweils auf Felder mit
“minimaler Konfliktzahl” verschoben.) Insgesamt ergibt sich der in Abbildung 6-2 angegebene Basisalgorithmus. (Zur Illustration: im Falle des n-Damenproblems könnte man die Variablen gemäß
Q1 < Q2 < . . . < Qn ordnen und dann diese Variablensequenz mehrfach durchlaufen.)
6-2-1*. Die angegebene Basisvariante sieht vor, dass die Ordnung auf den Variablen beliebig
aber fest ist. Diese Ordnung beeinflusst die Reihenfolge der Variablenauswahl in Schritt 5.2. Fällt
Ihnen eine “geschicktere” Methode oder Heuristik zur Auswahl der Variablen ein?
/. . .
–3–
2
3
2
3
1
2
2
3
3
1
2
2
3
0
Abbildung 6-1: Illustration der Min-Conflict Heuristik (nach Russell & Norvig 95).
1.
sei Q die Menge aller Variablen
2.
lege eine (beliebige) Ordnung auf Q fest
3.
belege jede der Variablen zufällig
4.
stoppe, falls (zufällig) Lösung gefunden
5.
für Counter = 1 to MaxNumber mache folgendes:
5.1.
R := Q
5.2.
bis R = ∅ mache folgendes:
– wähle eine Variable Qi aus R
entsprechend der gewählten Ordnung
– modifiziere Qi gemäß Min-Conflict
– stoppe, falls Lösung gefunden
– R = R \ {Qi }
6.
melde “in verfügbarer Zeit (MaxNumber) keine Lösung”
Abbildung 6-2: Iterativer Verbesserung mittels Min-Conflict (Basisalgorithmus).
6-2-2.
Implementieren Sie iterative Verbesserung mittels Min-Conflict. Testen Sie Ihre Implementierung anhand des n-Damenproblems für n = 8 und n = 12. Wieviele Lösungsschritte sind
jeweils erforderlich? Vergleichen Sie die Effizienz dieses Verfahrens mit Ihren Implementierungen
des uninformierten Backtrackings und des informierten Backtrackings mit Forward Checking. Experimentieren Sie auch mit größeren Werten für n und bewerten Sie iterative Verbesserung mittels
Min-Conflict im Vergleich zu informierten Backtrackings mit Forward Checking. Achten Sie bei
Ihren Tests auf die geeignete Wahl des Parameters MaxNumber!
PS: Aufgaben, die mit einem Asterik (*) markiert sind, sind Zusatzübungen (vgl. Merkblatt 1).
Herunterladen