Up
Go up to Question 2

Solution

  1. Suppose you considered using the STRIPS representation for this domain. Which predicates would be static, which would be primitive and which would be derived?

    No predicates are static.

    The derived predicates are: pressurised, flow, noflow, unpressurised.

    The primitive predicates are: on, off, plugged, unplugged, empty, halffull, full, overflow and wet.

  2. Give the STRIPS representation for the action turnon(t3).

    The obvious solution is:

    preconditions: off(t3)     (or perhaps true)
    addlist: [on(t3)]
    deletelist: [off(t3)]      (or perhaps []).
    
    However, this isn't quite right, as it doesn't fully specify its effect on empty, halffull, full, etc. There is no simple representation in STRIPs, as whether the floors gets wet depends on other conditions.

    We would like something like a conditional addlist: if sink is full and t1 is on then add wet(floor).

  3. Give the STRIPS representation for the action wait.

    Again, the obvious solution is:

    preconditions: true
    addlist: []
    deletelist: []
    
    But, if there is water flowing in the bath, and the bath is half full, then full(bath) should be added and halffull(bath) should be removed, and full(bath) were true then add wet(floor), etc.
  4. Is STRIPS or the situation calculus more natural for representing this domain? Explain why.

    I would say that the situation calculus is more natural as all of the rules are local. The problem with STRIPs is that the effect of actions can propagate to be non local. For example, one effect of turnon(t1) could be to wet the floor (if t2 were on and the bath is full). In the situation calculus this is taken care of, but for STRIPs we need to say directly how it affects each primitive (and wet(floor) needs to be primitive).


David Poole

Up