Einführung in die Künstliche Intelligenz. SS 17 - Prof. Dr. J. Fürnkranz. Beispiellösung für das 4. Übungsblatt. Aufgabe 1 Planen, STRIPS

Ähnliche Dokumente
monkey(a), at(a,q), on_floor(a), pos(q), pos(p) monkey(a), box(k), at(a,p), at(k,p), on_floor(a), pos(p)

Künstliche Intelligenz

Übungsblatt 2 Lösungen

HA-Lösung TA-Lösung Diskrete Strukturen Tutoraufgabenblatt 10. Besprechung in KW02/2019

Benutzer Handbuch. Backtracking für intelligente Softwareagenten. Haitzer Thomas Parapatics Peter Sverak Sascha

Prädikatenlogik in der Praxis. Richard Cubek (Teil der Master Thesis, 2011)

Maschinelles Lernen: Symbolische Ansätze

Universität Koblenz-Landau Fachbereich Informatik Klausur KI-Programmierung WS 2007/2008. Jun.-Prof. Dr. B. Beckert. 21.

Künstliche Intelligenz

Übersicht. Aktivitäten-Auswahl-Problem. Greedy Algorithmen. Aktivitäten-Auswahl-Problem. Aktivitäten-Auswahl-Problem. Datenstrukturen & Algorithmen

Projekt 1: Constraint-Satisfaction-Probleme Abgabe: 7. Juni 2009

Einführung in die Künstliche Intelligenz SS 18 Prof. Dr. J. Fürnkranz, Prof. Dr. K. Kersting

Theoretische Grundlagen der Informatik. Vorlesung am 8. Januar INSTITUT FÜR THEORETISCHE INFORMATIK

Von Labyrinthen zu. Algorithmen

Kapitel MK:VI. III. Planning Motivation Wissensrepräsentation Planungsalgorithmen Suche im Zustandsraum Suche im Planraum Komplexität Erweiterungen

Formale Systeme, WS 2008/2009 Lösungen zum Übungsblatt 2

Theoretische Grundlagen der Informatik. Vorlesung am 02. November INSTITUT FÜR THEORETISCHE INFORMATIK

Technische Universität Berlin Fakultät IV - Elektrotechnik und Informatik. Schriftlicher Test - Teilklausur 1

Künstliche Intelligenz Logische Agenten & Resolution

Technische Universität Berlin Fakultät IV - Elektrotechnik und Informatik. Schriftlicher Test - Teilklausur

Algorithmen. Von Labyrinthen zu. Gerald Futschek

Prüfungsrelevante Studienleistung Logische Programmierung (Sommer 2006) Magische Quadrate. Patricia Röschke (46016) Martin Grandrath (46375)

Algorithmen. Von Labyrinthen zu. Gerald Futschek

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

Breitensuche BFS (Breadth First Search)

Universität Koblenz-Landau Fachbereich Informatik Klausur Einführung in die Künstliche Intelligenz / WS 2003/2004. Jun.-Prof. Dr. B.

Hochschule RheinMain SS 2018 Prof. Dr. D. Lehmann. Lösungen 11. Übungsblatt Lineare Optimierung

Grundlagen der Optimierung. Übung 6

2.4 Starke Zusammenhangskomponenten in Digraphen

Practical Reasoning Agents. Dominic Hallau // Tim Preuß

Dank. Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I. Reguläre Ausdrücke als Suchmuster für grep

S o n n t a g, 2 6. N o v e m b e r

R a i n e r N i e u w e n h u i z e n K a p e l l e n s t r G r e v e n T e l / F a x / e

F r e i t a g, 3. J u n i

S o n n t a g, 5. A u g u s t

L 3. L a 3. P a. L a m 3. P a l. L a m a 3. P a l m. P a l m e. P o 4. P o p 4. L a. P o p o 4. L a m. Agnes Klawatsch

Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I

1 Geometrie - Lösungen von linearen Gleichungen

10. Übungsblatt zu Algorithmen I im SS 2010

Algorithmen und Datenstrukturen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Graphdurchmusterung, Breiten- und Tiefensuche

Klausur zur Vorlesung Künstliche Intelligenz

Theoretische Grundlagen der Informatik

Algorithmen II Vorlesung am

Automaten und formale Sprachen Notizen zu den Folien

Kapitel 1: Fallstudie Bipartite Graphen Gliederung der Vorlesung

4. OBDDs und Modellüberprüfung

Kapitel 4: Netzplantechnik Gliederung der Vorlesung

Grundlagen der Künstlichen Intelligenz

Aufgabe 1: Berechnen Sie für den in Abbildung 1 gegebenen Graphen den. Abbildung 1: Graph für Flussproblem in Übungsaufgabe 1

Algorithmen und Datenstrukturen

Wir gewichten die Kanten von G wie folgt: Kante e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 d(e i )

Peg-Solitaire. Florian Ehmke. 29. März / 28

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS)

Matchings in Graphen. Praktikum Diskrete Optimierung (Teil 5)

Datenstrukturen und Algorithmen (SS 2013)

Logik. Logik. Vorkurs Informatik Theoretischer Teil WS 2013/ September Vorkurs Informatik - Theorie - WS2013/14

Mathe <> Deutsch. Die 7 verwirrendsten Mathe-Floskeln einfach erklärt! Math-Intuition.de

Definition : Diechromatische Zahl eines Graphen G ist die kleinste Anzahl chromatische Zahl von Farben für eine zulässige Färbung.

Logische und funktionale Programmierung

Definition der Greibach-Normalform

16. EINIGE LÖSUNGSMETHODEN

Das Heiratsproblem. Definition Matching

Mehrwegbäume Motivation

Maschinelles Lernen: Symbolische Ansätze

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

10 Der Satz über implizite Funktionen und Umkehrfunktionen

9. Heuristische Suche

Prioritäten/Zeitstempel-Verfahren

Prioritäten/Zeitstempel-Verfahren. WAIT-DIE und WOUND-WAIT-Strategien

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt Semester ARBEITSBLATT 11 GLEICHUNGEN UND ÄQUIVALENZUMFORMUNGEN

Von Labyrinthen zu Algorithmen

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Logische und funktionale Programmierung

3. Übung Künstliche Intelligenz

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Ordnungsrelationen auf Mengen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann

Algorithmen. Gerald Futschek. Algorithmen prolog der Informatik

Binary Decision Diagrams (Einführung)

Aufgabe zum Thema: Gebrochen - rationale Funktionen

Einfache Differentialgleichungen (algebraische Lösung)

Kapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung

Data Mining und Maschinelles Lernen Wintersemester 2015/2016 Lösungsvorschlag für das 3. Übungsblatt

Entscheidungsverfahren für die Software-Verifikation. 4 - BDDs

3. Diskrete Mathematik

Kapitel 3 Ereignisdiskrete Systeme (II)

Kapitel 2 Ereignisdiskrete Systeme (II)

8.1 Blinde Suche. Grundlagen der Künstlichen Intelligenz. Klassische Suche: Überblick. 8. Klassische Suche: Breitensuche und uniforme Kostensuche

6 Gleichungen und Gleichungssysteme

Algorithmen. Von Labyrinthen zu. Gerald Futschek

Algorithmen & Programmierung. Rekursive Funktionen (1)

2. Teilklausur zur Vorlesung Grundlagen der Theoretischen Informatik

Vorlesung Datenstrukturen

lässt sich auch ableiten, dass es einen augmentierenden Pfad der Länge höchstens

Übungsblatt 2 - Lösung

Übersicht. Lösen von Planungsproblemen durch Suche. Planen im Situationskalkül

Einführung in die Informatik Algorithms

Transkript:

Einführung in die Künstliche Intelligenz SS 17 - Prof. Dr. J. Fürnkranz Beispiellösung für das 4. Übungsblatt Aufgabe 1 Planen, STRIPS In dieser Beispiellösung wurde eine sehr direkte Modellierung benutzt. a) pos(p1) % p1 ist eine Position box(k) % k ist eine Kiste pos(p2) % p2 ist eine Position at(k,p3) % Kiste k ist auf Position p3 pos(p3) % p3 ist eine Position toy(s1) % s1 ist ein Spielzeug monkey(a) % a ist ein Affe toy(s2) % s2 ist ein Spielzeug at(a,p1) % Affe a ist auf Position p1 toy(s3) % s3 ist ein Spielzeug hungry(a) % Affe a ist hungrig at(s1,p1) % Spielzeug s1 ist auf Position p1 on_floor(a) % Affe a ist auf dem Boden at(s2,p2) % Spielzeug s2 ist auf Position p2 banana(b) % b ist eine Banane at(s3,p3) % Spielzeug s3 ist auf Position p3 at(b,p2) % Banane b ist auf Position p2 1

b) go(a,p) monkey(a), at(a,q), on_floor(a), pos(q), pos(p) at(a,p) at(a,q) push(a,k,p) monkey(a), box(k), at(a,q), at(k,q), on_floor(a), pos(q), pos(p) at(a,p), at(k,p) at(a,q), at(k,q) throw(a,s,p) monkey(a), toy(s), at(a,q), at(s,q), on_floor(s), pos(q), pos(p) at(s,p) at(s,q) up(a,k) monkey(a), box(k), at(a,p), at(k,p), on_floor(a), pos(p) on_box(a) on_floor(a) down(a) monkey(a), on_box(a) on_floor(a) on_box(a) eat(a,b) monkey(a), banana(b), at(a,p), at(b,p), on_box(a), pos(p) full(a) hungry(a), at(b,p) 2

c) Die Formulierung des Ziels lautet: full(a) Der kürzeste Plan hierfür ist: go(a,p3) push(a,k,p2) up(a,k) eat(a,b) Die folgende Tabelle veranschaulicht die geltenden Fakten vor bzw. nach der Abarbeitung einer Aktion. Start go(a,p3) push(a,k,p2) up(a,k) eat(a,b) pos(p1) pos(p1) pos(p1) pos(p1) pos(p1) pos(p2) pos(p2) pos(p2) pos(p2) pos(p2) pos(p3) pos(p3) pos(p3) pos(p3) pos(p3) monkey(a) monkey(a) monkey(a) monkey(a) monkey(a) at(a,p1) at(a,p3) at(a,p2) at(a,p2) at(a,p2) hungry(a) hungry(a) hungry(a) hungry(a) full(a) on_floor(a) on_floor(a) on_floor(a) on_box(a) on_box(a) banana(b) banana(b) banana(b) banana(b) banana(b) at(b,p2) at(b,p2) at(b,p2) at(b,p2) - box(k) box(k) box(k) box(k) box(k) at(k,p3) at(k,p3) at(k,p2) at(k,p2) at(k,p2) toy(s1) toy(s1) toy(s1) toy(s1) toy(s1) toy(s2) toy(s2) toy(s2) toy(s2) toy(s2) toy(s3) toy(s3) toy(s3) toy(s3) toy(s3) at(s1,p1) at(s1,p1) at(s1,p1) at(s1,p1) at(s1,p1) at(s2,p2) at(s2,p2) at(s2,p2) at(s2,p2) at(s2,p2) at(s3,p3) at(s3,p3) at(s3,p3) at(s3,p3) at(s3,p3) 3

Aufgabe 2 Vorwärts-, Rückwartsplanen a) Je nach Implementierung der Breitensuche werden die gestrichelt umrandeten Knoten erzeugt oder nicht, d.h. falls der Goal-Test unmittelbar nach Expandierung eines Knotens angewendet wird, werden die die gestrichelt umrandeten Knoten nicht erzeugt. Es wird der Plan (a 2, a 3 ) gefunden. f2 f2, f3, f4 f1, f2 f2, f3, f4 f1, f2, f4 f1, f2, f3, f4 f1, f2 f2, f3, f4 f1, f2, f4 b) Es werden folgende Pläne gefunden: (a 3, a 2 ), (a 3, a 2, a 1, a 3 ) und (a 2, a 3 ) f1, f2 f2 f1, f4 f2, f4 a1 f1, f2, f3 f1, f2 f2 f2 4

Aufgabe 3 Partial-Order Planning a) Im Partial-Order Planning Algorithmus finden verschiedene Selektionen, z.b. die Wahl der nächsten open precondition oder die Wahl der nächsten Aktion für die Verfeinerung des Plans, statt, die auf den Vorlesungs-Folien und in der Aufgabenstellung nicht näher erläutert bzw. spezifiziert werden. Hier war es erlaubt, eine mehr oder weniger beliebige gültige Selektion vorzunehmen. Für diese Beispiellösung wurde eine Abarbeitungsfolge benutzt, die ein Konflikt beinhaltet und nicht zu aufwendig ist. In blau werden die Änderungen dargestellt. Der Anfangszustand sieht folgendermaßen aus: Actions = {Start, Finish} Orderings = {Start < Finish} Causal Links = {} Open preconditions = {on(a,table), on(b,table), on(c,table), on(d,table)} putdown(a), putdown(b), putdown(c), putdown(d), Start Es wird putdown(a) ausgewählt. Actions = {Start, Finish, putdown(a)} Start < putdown(a), putdown(a) < Finish} Causal Links = {putdown(a) on(a,table) Finish} Open preconditions = {on(b,table), on(c,table), on(d,table), holding(a)} putdown(b), putdown(c), putdown(d), Start, unstack(a,b) Es wird unstack(a,b) ausgewählt. Hier handelt es sich um einen Fall, in dem Variablen ungebunden vorkommen. Wir wählen den Ansatz, jetzt eine beliebige Substitution vorzunehmen, nämlich {b/b} (also unstack(a,b)). Actions = {Start, Finish, putdown(a), unstack(a,b)} unstack(a,b) < putdown(a)} Causal Links = {putdown(a) on(a,table) Finish, unstack(a,b) holding(a) putdown(a)} Open preconditions = {on(b,table), on(c,table), on(d,table), handempty, block(a), block(b), on(a,b)} putdown(b), putdown(c), putdown(d), Start Es wird Start ausgewählt. Actions = {Start, Finish, putdown(a), unstack(a,b) } unstack(a,b) < putdown(a)} Start handempty unstack(a,b)} Open preconditions = {on(c,table)} putdown(c) Die Wahl ist eindeutig und es wird putdown(c) ausgewählt. 5

Actions = {Start, Finish, putdown(a), unstack(a,b), putdown(c) } Start < putdown(c), putdown(c) < Finish} Causal Links = {putdown(a) on(table(a) Finish, putdown(c) on(c,table) Finish} Open preconditions = {holding(c)} unstack(c,b) Die Wahl ist eindeutig und es wird hier unstack(c,b) mit der Substitution {d/b}, also unstack(c,d) ausgewählt. Es wird nun in zwei Schritten das Refining dargestellt, da hier ein Konflikt auftritt. Im folgenden ist der Zustand vor der Konflikt-Auflösung dargestellt. Start < unstack(c,d), unstack(c,d) < Finish} unstack(c,d) holding(c) putdown(c)} Open preconditions = {handempty, block(c), block(d), on(c,d)} Die Aktion unstack(c,d) verursacht ein Konflikt mit dem kausalen Link da es handempty als Effekt hat und zwischen Start und unstack(a,b) eintreten kann. Dieser Konflikt kann nur dadurch gelöst werden, in dem das Ordering unstack(a,b) < unstack(c,d) eingefügt wird. Es gilt nun also: Actions = {Start, Finish,putdown(a), unstack(a,b), putdown(c), unstack(c,d) } Start < unstack(c,d), unstack(c,d) < Finish, unstack(a,b) < unstack(c,d)} unstack(c,d) holding(c) putdown(c)} Open preconditions = {handempty, block(c), block(d), on(c,d)} Refining - folgende mögliche Aktionen stehen zur Auswahl (*): Start, putdown(x) Es wird Start gewählt. 6

Start < unstack(c,d), unstack(c,d) < Finish, unstack(a,b) < unstack(c,d)} unstack(c,d) holding(c) putdown(c), Start handempty unstack(c,d), Start block(c) unstack(c,d), Start block(d) unstack(c,d), Start on(c,d) unstack(c,d)} Open preconditions = {} Die Aktion unstack(a,b) verursacht ein Konflikt mit dem kausalen Link Start handempty unstack(c,d), da es handempty als Effekt hat und zwischen Start und unstack(c,d) eintreten kann. Dieser Konflikt kann nur dadurch gelöst werden, in dem das Ordering unstack(c,d) < unstack(a,b) eingefügt wird. Das allerdings wäre ein Widerspruch zu dem bereits eingefügten Ordering unstack(a,b) < unstack(c,d). Damit müssen wir ein Backtracking zu (*) machen und eine andere Aktion, nämlich putdown(a), auswählen: Start < unstack(c,d), unstack(c,d) < Finish, unstack(a,b) < unstack(c,d)} putdown(a) < unstack(c,d)} unstack(c,d) holding(c) putdown(c), putdown(a) handempty unstack(c,d)} Open preconditions = {block(c), block(d), on(c,d)} Start Es wird Start gewählt. Das geschieht nun drei Mal, je für block(c), block(d) und on(c,d): 7

Start < unstack(c,d), unstack(c,d) < Finish, unstack(a,b) < unstack(c,d)} putdown(a) < unstack(c,d)} unstack(c,d) holding(c) putdown(c), putdown(a) handempty unstack(c,d), Start block(c) unstack(c,d), Start block(d) unstack(c,d), Start on(c,d) unstack(c,d)} Open preconditions = {} Da nun keine Preconditions mehr offen sind, sind wir fertig. Unten sieht man eine Version der Lösung, in der redundante Ordering Bedingungen entfernt wurden. Orderings = {Start < unstack(a,b), unstack(c,d) < putdown(c), putdown(c) < Finish, unstack(a,b) < unstack(c,d), putdown(a) < unstack(c,d)} unstack(c,d) holding(c) putdown(c), putdown(a) handempty unstack(c,d), Start block(c) unstack(c,d), Start block(d) unstack(c,d), Start on(c,d) unstack(c,d)} Open preconditions = {} b) Der oben gefundene Plan ist linear, und erlaubt daher nur eine Abarbeitung. 8