CleaningWorld					Matt Weatherford
						mweather@wolf.cs.washington.edu


3. Cleaning world is a domain in which a physical situation is described in
  terms of a coordinate system and conditions of objects and surfaces
  in that domain.  Currently, the domain allows for books, shelves, and
  tools (wipe-cloth,spray-cloth,and dust-cloth).  A robot (who for
  now can reach everything without problems) is assumed and the only
  state information we have about it is the # of appendages availible,
  their names, and what they are holding.  The robot can perform 
  several duties: DUST, SPRAY, WIPE, PICK-UP, and PUT-DOWN.  The main
  interaction at this point occurs in DUST.  Dusting a book that is
  higher on the y-plane than another renders the lower book dusty
  - so goal clobbering is an important consideration.

By giving PRODIGY a legal start state, we can request that certain
objects and surfaces be clean - prodigy will manipulate the robot so
that it cleans those things in the appropriate way.



4. I have given this domain over 25 hours of my time.


I guess this domain is similar to BlocksWorld... I use a pick-up,
put-down concept (like blocksworld) and an inference rule to determine
if an object is ON another - (This may change)  The difference is that
I allow as many appendages as wanted in the start state (like
multirobot?) and my representation of where things are is more
complex than a simple ON predicate (I use IS-AT <x> <y> <obj>) - 
objects also have STATUS, unlike blocksworld- an object can be
clean, dirty, sprayed, or dusty (more later...time allowing...)

6. I didnt pull anything directly from other domains ... actually
I might have saved time if I did, but I chose to reinvent the wheel...
thank you very much.  I used a lot of concepts from other domains...
HOLDING, ON, PICK-UP,PUT-DOWN, etc..



Note:

	I have ambition to add more to this domain... I dont feel it
is done yet - I would like to add the precondition to SPRAY <surface>
that the surface is clear of books (this would cause the robot to
pick up a book with one hand, and spray with the other... or pick up 
book -set it somewhere else... spray shelf... depends on # of arms
availible to hold stuff.

 
Search-Control Rules - Project, Part 3			    Matt Weatherford
							    CSE 473, AI, Etzioni/Iverson
							    Spring, 1991




(a) What aspects of your real-world problem were you not able to model in Prodigy?  

	One thing I was not able to model in Prodigy was the position
of the robot and how far it could reach (making the robot need to move
around in its environment in order to reach things it needed to
clean.)  I think I could have gotten it to work, given a LOT more
time, but it seemed difficult because I would have to use x-y
coordinates (since that was the representation of where other objects
were) and I'd need to implement incrementers, decrementers, or be
clever and just have a MOVE-ROBOT-TO (x,y) operator...  

	Another thing was goal-interleaving.  In CleanWorld, a large
number of operations involve picking up and putting down stuff- the
tools needed for the task at hand.  If Prodigy were really "smart", it
would pick up a tool, do as many things as possible with it, and then
put it down.  What we in fact see is the juggling of tools for one
specific task.  If Prodigy was "thinking" about optimizing the
solution, it could save steps by considering that goals can be
approached more quickly by performing multiple operations based on what tool
the robot is holding rather than what has been chosen for the goal
stack.  

----

(b) What aspects (if any) of your problem did you think would be
difficult to build in to Prodigy, but turned out to be easy, or you
were able to find a clever way of encoding?

	I thought it would be difficult to get prodigy to put down
objects in order to pick up others... but it worked right the first
time!  I felt like I hadn't really specified how to do the problem,
but soon realized I was still thinking in an algorithmic programming
style and Prodigy is not that way at all.

----
(c) What features of Prodigy were particularly useful?

	I found the Advise and Analize facilities to be pretty helpful
- especially when it came time to write search control rules - using
the command "raw" in analize, helped show what was going on when at a
node that was trying ludicris options.  The information lends nicely
to writing control rules.

----
(d) If you could make one modification/addition to Prodigy, what would it be?

	I would add an "interpreter" which takes a "higher level" problem specification 
and converts it into one like the ones we had to use... There was a lot of redundant
information in my problem specification.  An example:  I would say that a book was "at"
xy coord: 1 2 and a shelf at 1 1, but I also had to say "on book, shelf"  - an
interpreter could make the interface to the user a lot smoother, and could also serve
to check whether the problem spec. was valid or not based on some preordained rules.
This could also double as a random problem generator program... it would be a trivial
change from a spec. about legal start states to one that generated random ones....



