version 4.0.0
Please wait for the applet to load. A button will appear with the text "Start Applet" when loading is complete. If you are having problems running an applet, ensure that you have the latest version of Java installed and that it is enabled in your browser. This can be acquired from Sun's Java website.


Planning is essential for agents that act in an environment. To solve a goal intelligently, an agent needs to think about what it will do now and in the future. This applet demonstrates planning using the blockworld problem domain and STRIPS representation.

In the blockworld problem, a robot gripper must arrange a set of blocks into a particular configuration on the table. A block may be on the table, or placed on top of another block. The gripper can only hold one block at a time, and can only pick up blocks that have no other blocks on top of them. The problem is modeled by the following propositions:

  • holding(B): the gripper is holding block B
  • empty: the gripper is not holding a block
  • on(B1,B2): block B1 is on top of block B2
  • ontable(B): block B is on the table
  • clear(B): block B has no blocks on top of it and is not being held by the gripper

This applet uses the STRIPS representation to demonstrate the STRIPS, regression, and partial order planners. In the STRIPS representation, actions are represented as a set of preconditions, an add list, and a delete list. For an action to be carried out, all of its precondions must be true in the world. When the action is performed, items in the add list are added to the world's current state while items in the delete list are removed from it. The following actions are used to control the gripper in the blockworld problem:

Action Preconditions Add List Delete List
pickup(B1, B2) empty & clear(B1) & on(B1, B2) holding(B1), clear(B2) empty, on(B1, B2), clear(B1)
pickuptable(B) empty & clear(B) & ontable(B) holding(B) empty, ontable(B), clear(B)
putdown(B1, B2) holding(B1) & clear(B2) empty, on(B1, B2), clear(B1) clear(B2), holding(B1)
putdowntable(B) holding(B) empty, ontable(B), clear(B) holding(B)

Note that the action pickup is used to pick up a block that is sitting on another block, while pickuptable is used for a block that is sitting on the table. Likewise, putdown is used to put a block down on top of another block, while putdowntable is used to put a block on the table. In this problem, the positions of the blocks on the table is not important; the goal is to stack blocks on top of each other in particular patterns.

Please visit our feedback page and send us your comments about the applets!

This applet was written by Wesley Coehlo, Nicole Arksey, and Shinjiro Sueda, with help from David Poole, Alan Mackworth, Holger Hoos, Peter Gorniak, Kevin O'Neill, and Cristina Conati.

Valid HTML 4.0 Transitional