;;; ============================================================================ ;;; L"osungsvorschlag zum "Ubungsblatt 9, Aufgabe 1 ;;; *** Modellierung der blocks world-Variante aus der Vorlesung in SNLP *** ;;; 27.06.96 U. Reuther (reuther@informatik.uni-freiburg.de) ;;; ============================================================================ ;; Die folgenden 3 Zeilen laden "alles was man braucht", sofern ;; sich die Dateien im selben directory befinden. Da ich nicht weiss, ob bei ;; euch das so ist, sind sie auskommentiert. Vorsicht! Wenn man die Dateien ;; kompiliert und dann nochmal aendert... ;(load "variable") ;(load "plan-utils") ;(load "snlp") (setq *verbose* t) ;; sonst macht's nur halb soviel Spass... (use-package 'plan-utils) (defun blocks-world-domain-extended () ;; purge old domain prior to defining a new domain (reset-domain) ;; UNSTACK(x,y): nimm x von y runter und tu ihn auf den Tisch ;; (konnte aus dem Beispiel sehr einfach aus NEWTOWER abgeleitet werden) (defstep :action '(unstack ?x ?y) :precond '((on ?X ?Y) (clear ?X)) :add '((on ?X Table) (clear ?Y)) :dele '((on ?X ?Y)) :equals '((not (?X ?Y)) (not (?X Table)) (not (?Y Table)))) ;; STACK(x,y): nimm x vom Tisch und stelle ihn auf y ;; (war aus PUTON zu gewinnen) (defstep :action '(stack ?X ?Y) :precond '((on ?X Table) (clear ?X) (clear ?Y)) :add '((on ?X ?Y)) :dele '((on ?X Table) (clear ?Y)) :equals '((not (?X ?Y)) (not (?X Table)) (not (?Y Table)))) ;; MOVE(x,y,z): nimm x vom Block y und stell ihn auf Block z (defstep :action '(move ?X ?Y ?Z) :precond '((on ?x ?y) (clear ?x) (clear ?z)) :add '((on ?x ?z) (clear ?y)) :dele '((on ?x ?y) (clear ?z)) :equals '((not (?x ?y)) (not (?y ?z)) (not (?x ?z)) (not (?x Table)) (not (?y Table)) (not (?z Table))))) ;;; (sussman-anomaly-extended) ;;; Initial : ((ON C A) (ON A TABLE) (ON B TABLE) (CLEAR C) (CLEAR B)) ;;; ;;; Step 1 : (UNSTACK C A) Created 2 ;;; Step 2 : (STACK B C) Created 3 ;;; Step 3 : (STACK A B) Created 1 ;;; ;;; Goal : ((ON A B) (ON B C)) ;;; Complete! ;;; ;;; POCL (Init = 5 ; Goals = 2 ) => Win (3 steps) CPU 4840 ;;; Nodes (V = 23 ; Q = 37 ; C = 84 ) Branch 2.6086957 ;;; Working Unifies: 402 Bindings added: 263 (defun sussman-anomaly-extended () (blocks-world-domain-extended) ;; einzige Aenderung!! (snlp:plan '((on C A) (on A Table) (on B Table) (clear C) (clear B)) '((on A B) (on B C)) :rank-fun #'snlp::rank3)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;