;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;
;;                  R O B O  -  W O R K E R
;;
;;       Eivind Sandstrand (c473bp@coco.ms)
;;	 cse473 Spring 1991
;;



Name: Robo-Worker


Interesting Predicates:  Carries_light(<Obj>)
			
			 Holds(<Obj>)

			 At_Position(<Pos>)

			 Carries_Heavy(<Obj>)

			 Is_Heavy(<Obj>)
		


Subgoals: The subgoals Holds() and Carries_Light() will interact in an operator

	   like Run-To; Object held must be light.

	  In an operator like Retrieve(Obj,Shelf) two interacting subgoals may

	   be Holds() and Reach() or Lift().




(RETRIEVE
	(params (<Obj> <She>))
	(preconds ( and(
			( Object <Obj>)
			( Reach <Shelf>)
			( Not-Holding))))

	(effects (del (on-shelf <Obj>))
		 (del (Holding <Obj>))
		 (IF (Is_Light <Obj>) 
			(Add (Carries_Light <Obj>)))
		 (IF (Is_Heavy <Obj>)
			(Add (Carries_Heavy <Obj>)))))






	What I'd like to do with this, in addition to letting it be the 

"normal" Robot in a Warehouse domain, would be to have some kind of measuring

of time needed to perform certain tasks.  One could try to optimize this time 

by altering the control rules for the domain, or by setting different goals

to be tried.  This kind of a problem would have a relationship with real-world

optimizations of robotic "bus-boys'/assemblers, and is therefore automatically

more interesting as a project to me .


	


			 
