◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ 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).