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.

Description:

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.