Seite 1 von 1

Übung 4 A3a) Partial-Order Planning

Verfasst: 17. Jul 2018 16:21
von CJo
Hallo zusammen,

Bzgl Aufgabe 3a der Übung 4 habe ich nicht verstanden, warum vom vierten auf den fünften Schritt block a, b und on(a, b) in den open precond nicht so wie c, d und on(c, d) in den letzten Schritten behandelt wurden und auch in die causal links aufgenommen werden.
Wie lässt sich das Verschwinden von on(b, table) und on(d,table) aus den open precond in diesem Schritt erklären?
Bzgl. unstack(a, b) < unstack(c, d) hätte man nicht direkt putdown(a) < unstack(c, d) im sechsten Schritt machen können? Was setzt die Kondition unstack(a,b) < unstack(c,d) der Kondition putdown(a) < unstack(c, d) voraus?
Vielen Dank!
LG.

Re: Übung 4 A3a) Partial-Order Planning

Verfasst: 18. Jul 2018 10:24
von Tobias Joppen
Hallo,
Der gewählte Ablauf ist nur ein Beispiel und muss nicht genau so gemacht werden.
Die von dir angesprochene Aktion ist Start. Und im Startzustand gibt es eben block(a), block(b), on(b,table) und on(d, table) [siehe Aufgabenstellung]. Daher werden diese entfernt.

Zur zweiten Frage: Ich gehe hier einfach nach dem Algorithmus, und der erkennt einen Konflikt zwischen Start->handempty->unstack(a,b) und unstack(c,d)->holding(c)->putdown(c) - man kann eben nicht die Hand frei haben und etwas halten.
Rein nach Algorithmus lösen wir diesen Konflikt auf, indem wir unstack(a,b) vor unstack(c,d) ausführen.
Das ist auch die einfachste Möglichkeit den Konflikt aufzulösen. Tatsächlich löst putdown(a)<unstack(c,d) den Konflikt auch auf, aber das sieht der Algorithmus nicht sofort. Dazu müsste man eine kurze Suche starten und die Causal Links verfolgen um herauszufinden was mit handempty wirklich passiert. Das erhöht definitiv die Komplexität des Algorithmus, auch wenn man es als Mensch hier in diesem Beispiel vielleicht einfach erkennt.

Passt das so?

Liebe Grüße,
Tobias

Re: Übung 4 A3a) Partial-Order Planning

Verfasst: 18. Jul 2018 12:05
von Jannis
Tobias Joppen hat geschrieben:
18. Jul 2018 10:24
Die von dir angesprochene Aktion ist Start. Und im Startzustand gibt es eben block(a), block(b), on(b,table) und on(d, table) [siehe Aufgabenstellung]. Daher werden diese entfernt.
Aber es wird nur ein einziger causal link Start → handempty → unstack(a,b) hinzugefügt, obwohl wir doch eigentlich für alle preconditions einzelne causal links erstellen müssten. Insbesondere pickt sich der Algorithmus ja immer nur eine einzige precondition heraus, die er behandeln möchte. Es ist also doch gar nicht möglich, dass preconditions nicht in causal links vorkommen und einfach "verschluckt" werden. Später auf Seite 7-8 der Musterlösung wird doch auch für block(c), block(d), on(c,d) jeweils ein eigener causal link erstellt.

Meinem Verständnis nach würden in dem Schritt (bzw. sind es ja eigentlich mehrere Schritte)
  • Start → handempty → unstack(a,b)
  • Start → block(a) → unstack(a,b)
  • Start → block(b) → unstack(a,b)
  • Start → on(a, b) → unstack(a,b)
  • Start → on(b, table) → Finish
  • Start → on(d, table) → Finish
als causal links hinzukommen.

Re: Übung 4 A3a) Partial-Order Planning

Verfasst: 18. Jul 2018 13:13
von Tobias Joppen
Ja, das ist richtig. Das müssen wohl mehrere Schritte sein und die entsprechenden causal links müssen mit aufgenommen werden.