
Katherine A. Farber
c473ab@coco.ms / kate@wolf.cs

Domain: COOKING

	In this domain, Prodigy can solve the problems of one who is not
  used to being in a kitchen.  Given a time limit, a 'normal' kitchen 
  (meaning that it has the normal kitchen appliances), a list of 
  ingredients, and a list of desired food; Prodigy can tell a person the
  steps he/she must take in preparing the desired meal.  Prodigy will 
  even choose a cooking method for those items the person merely wants
  'cooked'.

	This project took me about 20 hours total.
	
	I am aware that a CHEF domain exists somewhere in this world from
  comments in class, but as I have never seen it, I cannot say how mine is
  similar or different.  I borrowed the concept of adding two numbers from
  the extended-bw world and the less-than function from class notes (see
  functions.lisp).  Also, I examined the schedworld domain to see how the 
  concept of time was implemented, and I got the idea of 'idleness' (the 
  state of being idle) and the idea of inferring 'idleness' from there.  

---------------------------------------------------------------------------

1.  (a)     One aspect of cooking that I was not able to model in Prodigy
         was subgoal interleaving.  For example, I wanted to be able to start 
         solving the goal (cook food), then solve the goal (make-salad), and
         then finish solving the goal (cook food).  This is basically the idea
         of doing one thing while something else is cooking.  I found this 
	 nearly impossible to accomplish.  
            Another aspect of the real world of cooking that I was not able to
	 model in Prodigy was finding the quickest way to plan a meal.  I got
	 around this a little bit by putting a maximum amount of time in which
	 to plan the meal in the initial state, but it is, of course, not
	 the same thing.
	    I had some trouble with the search control rules also.  I wanted
         to prefer one inference rule over another so I tried an operator
	 preference search control rule.  This was completely ignored by
	 Prodigy when it came time to use the inference rules, so I had to
	 give up the idea.

    (b)     I thought it would be difficult in Prodigy to keep a record
         of the amount of time that was used during the search, in order
         to make sure that it was under some maximum time limit.  I managed
         to get around this by keeping a 'clock' that had the amount of time
	 used so far, and simply adding to it every time an operator was
	 applied.  

    (c)     The features of Prodigy that I found particularly useful were
	 the analyze facility which was a great help in debugging, the general
         help facility which was extemely easy to understand, and the control
         rules which cut my search time from over 50 CPU seconds to 1.2 CPU
         seconds. 
	
    (d)     If I could make one addition to Prodigy, it would be to add the
         ability to interleave subgoals so that more than one goal could be
         worked on at the same time.
