PD Dr. Stefan Edelkamp Dipl. Inform. Tilman Mehler Dortmund, den 11.11.2003 Musterlösungen zur Vorlesung Heuristische Suche Wintersemester 2003/2004 Aufgabenblatt 1 Aufgabe 1.1 (Semesteraufgabe) Als Beispiel finden Sie eine Lösung für das 15-Puzzle mit A* und IDA* Suche unter: http://ls5-www.cs.uni-dortmund.de/~edelkamp/lectures/hs/software Aufgabe 1.2 (Zulässigkeit und Konsistenz) Es genügt dir Konsistenz zu beweisen, da die Zulässigkeit direkt daraus folgt. Sei h∗i (s) die minimale Lösungslänge von einem Zustand s in einem der Problemräume Pi , i ∈ {1, . . . , n}. Für ein beliebigen Zustand u ∈ S und Nachfolger v ∈ S gilt per Definition: vi = ui oder vi = o(ui ) mit o ∈ Oi . Da hi (u) = h∗i (ui ) gilt hi (u) ≤ hi (v) + 1 genau dann, wenn h∗i (ui ) ≤ h∗i (vi ) + 1, wobei vi = ui , oder vi ein unmittelbarer Nachfolger von ui in Si ist. Für ui = vi gilt die Ungleichung trivialerweise. 0 ) ein Lösungspfad minimaler Angenommen, für ui 6= vi gilt h∗i (ui ) > h∗i (vi ) + 1. Es sei p = (vi , v10 , . . . , vm 0 ∗ 0 0 0 ) ein Lösungspfad von u Länge von vi zu vm ∈ Gi . Es gilt also hi (vi ) = m. Dann ist p = (ui , vi , v1 , . . . , vm i 0 ∈ G mit |p0 | = h∗ (v ) + 1 (Widerspruch). nach vm i i i Aufgabe 1.3 (Exploration) a) Abbildung 1 zeigt die Suchbäume für Breiten- und Tiefensuche. Fur Breitensuche betragen die Pfadkosten 472, für Tiefensuche 452. Expandierten Knoten wird eine römische Zahl zugewiesen, die ihre Position in der Expansionsreihenfolge angibt. a II V b c III f d a I e g IV c d I e g b II III IV Abbildung 1: Suchbäume für Breitensuche (links) und Tiefensuche (rechts) 0 81.3 a I 120 167.8 d II 160 217.5 c III 188 242.0 e IV 220 259.3 f V 232 267.4 g VI 268 268.0 b VII 224 f=220 f=(356), 268 0.0L 60 f 48 30.4L 39.3L b f=120 47.8L 236 c f=(248), 160 57.5L 248 305.5 40 d c 356 356.0 e 248 120 168 b 240 294.5 68 g f=232 35.4L 44 e 240 a f=0 81.3L f=(240), 188 54.0L Abbildung 2: Dijkstra und A∗ b)+c) Abbildung 1 zeigt links die Graphendarstellung des Straßennetzes in dem das Ergebnis für den Algorithmus von Dijkstra abzulesen ist. An den Knoten ist jeweils die Folge der f -Werte abgetraten. Zusätzlich steht an jedem Knoten noch der Luftlinienabstand zu b - mit angehängtem ’L’. Auf der rechten Seite von Abbildung 1 ist der Suchbaum für beide Verfahren dargestellt. An jedem Knoten stehen die berechneten f-Werte für Dijkstra (oben) und A∗ (unten). Die römischen Zahlen deuten wiederum die Expansionsreihenfolge an, welche beim vorliegenden Suchraum für Dijkstra und A∗ identisch ist. Beide Verfahren liefern den optimalen Pfad a, d, c, f, b mit den Kosten 268. Aufgabe 1.4 (Komplexität von Planungsproblemen) a) PLANSAT liegt in PSPACE, weil eine Operatorensequenz nichtdeterministisch gewählt werden kann, und die Größe eines Zustandes durch die Anzahl der Propositionen beschränkt ist. D.h. für n Propositionen ist die Länge des kürzesten Lösungspfades kleiner als 2n . Anderenfalls müßte die Lösung Schleifen enthalten, in denen Zustände doppelt besucht werden. Derartige Schleifen können entfernt werden. Nach maximal 2n Schritten muß das Verfahren also einen Zielzustand gefünden haben, wenn dieser erreichbar ist. P SP ACE = N P SP ACE folgt, daß PLANSAT in PSPACE liegt. Zum Beweis der PSPACE-Härte kodieren wir eine polynomial platzbeschränkte Turingmaschine (TM) als Planungsproblem, wie folgt: in(i, x) bedeutet, daß das Symbol x in der Bandzelle i steht, at(i, q), daß die TM bereit ist, die Transition für die aktuelle Position i und den Zustand q auszuführen. Die Proposition do(i, q, x) bedeutet, daß die Transition an der i-ten Position für Zustand q auf das Symbol x angewand wird und accept heißt, daß die TM die Bandeingabe akzeptiert. Wenn nun q0 der Startzustand der TM ist, x1 , . . . , xn die Eingabe, und der Platz den die TM benötigt durch m beschränkt ist, so können Start- und Zielzustand beschrieben werden als: I = {at(1, q0 ), in(0, ]), in(1, x1 ), in(2, x2 ), . . . , in(n, xn ), in(n + 1, ]), . . . , in(m − 1, ])} und G = accept. Die Transitionen werden nun durch folgende Operatoren kodiert: at(i, q) ∧ in(i, x) ⇒ do(i, q, x) ∧ at(i, q) do(i, q, x) ∧ in(i, x) ⇒ in(i, y) ∧ in(i, x) do(i, q, x) ∧ in(i, y) ⇒ at(i + 1, q 0 ) ∧ do(i, q, x) Somit hält die TM genau dann, wenn es eine Lösung für das wie oben konstruierte Planungsproblem gibt. Da es nur polynomiell viele (i,q,x)-Kombinationen gibt, so auch polynomiell viele Propositionen und Operatoren. Somit kann jede polynomiell platzbeschränkte TM mit polynomiellem Platzbedarf auf ein Planungsproblem reduziert werden. b) Ohne negative Effekte stellt ein Nachfolgezustand stets eine Obermenge des Vorgängers dar. Die Länge des minimalen Lösungspfades ist daher linear beschränkt, d.h. wir kommen mir einer linearen Anzahl nichtdeterministischer Entscheidungen aus. Somit ist PLANSAT+ ∈ N P . Zum Beweis der NP-Härte verwenden wir eine Reduktion von 3Sat: Sei F eine propositionale Formel in 3Sat-Form und U = u1 , . . . , um die in F verwendeten Variablen und n die Anzahl der Klauseln in F. Für jede Variable ui führen wir die Propositionen T (i) und F (i) ein, die bedeuten, daß ui auf wahr bzw. f alsch gesetzt ist. C(j) bedeutet, daß die j-te Klausel in F erfüllt ist. Die Initial- und Zielzustände sind definiert als I = ∅ und G = {C(1), . . . , C(n)}. Für jede Variable ui definieren wir die Operatoren F (i) ⇒ T (i) und T (i) ⇒ F (i). Für jede Klausel C(j), die eine nichtnegierte Variable ui enthält, definieren wir T (i) ⇒ C(j) und analog F (i) ⇒ C(j) für negierte Variablen. Offensichtlich existiert ein Lösungspfad von von I nach G, genau dann wenn es eine Variablenbelegung gibt, so daß F war wird. Somit ist PLANSAT+ NP-hart. 1+ 1+ c) Da PLANSAT+ 1 in N P ist (siehe Teilaufgabe d), so auch PLANMIN1+ . PLANMIN1+ kann wie folgt auf 3SAT reduziert werden. Es sei U = {u1 , . . . , um } die Menge der verwendeten Variablen in einer 3SAT Formel F und n die Anzahl der Klauseln. Wir definieren wieder die Propositionen T (i), F (i), C(j), welche bedeuten daß ui auf wahr oder falsch gesetzt ist, bzw. daß die j-te Klausel erfüllt ist. Zusätzlich definieren wir noch V (i), welches angibt, daß eine Belegung für Variable ui gewählt wurde. Der Initialund Zielzustand kann nun definiert werden als: I = ∅ und G = V (1) ∧ . . . ∧ V (m) ∧ C(1) ∧ . . . ∧ C(n). Für jede Variable ui benötigen wir 4 Operatoren: ⇒ T (i) ⇒ F (i) T (i) ⇒ V (i) F (i) ⇒ V (i) D.h. wir haben Operatoren, die Variablen Werte zuweisen, und solche die sicherstellen, daß einer Variable ein Wert zugewiesen wurde. Für jede Klausel j, die eine Variable negiert bzw. nicht-negiert enthält, benötigen wir die Operatoren T (i) ⇒ C(j) bzw. F (i) ⇒ C(j). Wenn nun F erfüllbar ist, so muss für jede Variable nur ein Wert gesetzt werden (m Operatoren), weitere m Operatoren werden beötigt, um die V (i)’s zu setzen und n Operatoren für die C(j)’s. Somit ist F erfüllbar, genau dann wenn das konstruierte Planungsproblem in k = 2m + n Schritten lösbar ist. d) Hierzu genügt es, Pfade zu berachten, die anfangs nur Propositionen wahr machen und im Folgenden nur Propositionen falsch machen. Nehmen wir eine Operatorenfolge an, in der es zwei benachbarte Operatoren oi und oi+1 gibt, so daß oi ’s Effekt negativ und oi+1 ’s Effekt positiv ist. Sei pi oi ’s positiver Effekt und pi+1 oi+1 ’s negativer Effekt. Falls pi = pi+1 , kann oi entfernt werden, da oi+1 seinen Effekt rückgängig macht. Anderenfalls können oi und oi+1 vertauscht werden. Da alle Vorbedingungen von oi+1 wahr sind gilt dies insbesondere, wenn man pi wahr lässt. Analog muss oi+i die Vorbedingung von oi erhalten, da es eine zusätzliche Proposition wahr macht. Die beschriebene Prozedur kann wiederholt werden, bis man eine äquivalente Operatorenfolge erhält die zuerst nur positive und danach nur negative Effekte hat. Existiert nun eine Lösung, so muss es einen Zwischenzustand Si mit G+ ⊆ Si geben, der zunächst von I aus nur durch Operatoren mit positiven Effekten erreicht werden kann und von dem aus Si \G− nur durch Operatoren mit negativen Effekten erreichbar ist. Das Entscheidungsverfahren muss nun genau einen solchen Zwischenzustand finden. Hierzu benötigen wir die folgenden zwei Teilroutinen: Die Routine T URNON (X) erhält als Parameter eine Menge von Propositionen X und liefert den maximalen Zustand S ⊆ AP \X, der von I aus erreicht werden kann. T URNON ( X ) S←I repeat temp ← S for o ∈ O do if(S ⊂ Result(S, o)) ∧ (X ∩ Result(S, o) = ∅) then S ← Results(S, o) until S = temp return S Für n Propositionen und m Operatoren ist T URNON O(mn2 ). Die zweite benötigte Routine ist T URNOFF (S), die als Paramter einen Zustand S erhält und den maximalen Zustand S 0 ⊆ S liefert, so daß S\G− von S 0 erreichbar ist. T URNOFF (S) S 0 ← S\G− repeat temp ← S 0 for o ∈ O do if(o− ⊆ S) ∧ (Result(S 0 ∪ o− , o) = S 0 ) then S 0 ← S 0 ∪ o− until S = temp return S T URNOFF sucht von S\G− ausgehend rückwärts, um festzustellen, welche Operatoren verwendet werden können solange jeder Operator nur Vorbedingungen aus S benötigt. Es gibt einen eindeutigen maximalen Zustand S 0 , da die Rückwärtsuche stets Propositionen hinzufügt, was mehr Operatoren anwendbar machen kann, niemals aber weniger. T URNOFF ist ebenfalls O(mn2 ). Die Routine S ATISFY prüft unter der Verwendung der beiden Teilroutinen, ob eine Lösung existiert. S ATISFY X←∅ loop S ←T URNON (X ) if G+ 6⊆ S then return reject S 0 ← T URNOFF (S) if S = S 0 then return accept X ← X ∪ (S\S 0 ) if X ∩ I 6= ∅ then return reject In der ersten Iteration wird S auf T URNON (∅) gesetz, d.h. auf alle Propositionen, die wahr gemacht werden können. Wenn S zu diesem Zeitpunkt die die positiven Zielpropositionen nicht enthält, so gibt es keine Lösung. Anderenfalls wird S 0 auf T URNOFF (S) gesetzt, d.h. S 0 ist die maximale Teilmenge von S, die die negativen Ziele erreichen kann. Da keine weiteren Propositionen wahr gemacht werden können, ist S 0 auch die maximale Teilmenge von AP , die die negativen Zielbedingungen erreichen kann. Falls S = S 0 , so existiert eine Lösung und es wird accept zurückgegeben. Anderenfalls muss es negative Zielbedingungen geben geben, die verhindern, daß der Zielzustand erreicht werden kann. Damit ein Zielzustand erreicht werden kann, dürfen diese Propositionen niemals wahr werden. Daher werden sie zu X hinzugefügt. Falls mindestens eine solche Proposition im Initialzustand wahr ist, wird reject zurückgegeben. Die nächste Iteration verläuft wie die vorhergehende, mit dem Unterschied, daß kein Element von X wahr gemacht wird. Diese Iteration kann weitere Propositionen entdecken, die - falls sie wahr gemacht werden - verhindern, daß das Ziel erreicht wird. Diese werden wiederum zu X hinzugefügt. In aufeinanderfolgenden Iterationen werden entweder neue Propositionen zu X hinzugefügt, oder es wird accept/reject zurückgegeben. Da |X| monoton wächst und durch n = |AP | begrenzt ist, wird die Schleife höchstens n-mal durchlaufen. Da T URNON und T URNOFF O(mn2 ) sind, folgt daß S ATISFY O(mn3 ) ist.