CS 495 Artificial Intelligence
Fall 1999, Instructor: Jeffrey Horn
(project 1): Automated Planning as State Space Search
PART 1: Due Wednesday, Oct. 6, 1999:
I want you to choose a problem, and describe and define it
Give me a paragraph in English summarizing the problem.
Give the problem a name, and the name of the main class for
Define the state representation (i.e., a class, a list of
objects, a stack of objects, or what?)
Then answer questions 1 and 2 below.
First, read chapters 7 and 8 on search.
Next, pick your favorite language and implement the state
space search engine, as specified in pseudocode here.
Now choose your own application, e.g., 8-puzzle, blocks-world,
15 puzzle, cannibals and missionaries, goat-wolf-cabbage, path planning,
etc. Make sure it is different from everyone else's!!!!!!
Code it up. Requirements:
Graphics: Make it visual. Can be primitive (e.g.,
text graphics), but I want to see a routine/proc/method for graphing a
state, and another for graphing a plan (e.g., animation, or just a linear
sequence of states.)
Two parts: the search engine, and the application.
Keep these as separate as possible. modular programming!
You will need an explicit state representation, finite set
of operators, definitions of illegal states, and functions that apply each
operator to a state to yield a new state.
Your program should interactively ask the user for a goal
state and initial state, and then try to find a plan to get from one to
Implement uninformed, breadth-first, search. Keep your
algorithm "A*" (e.g., guarranteed to find the optimal (shortest) plan,
if one exists).
Cooperation: You may work together on the search engine,
but not the application!
is our the blocks world planner in SCHEME as an example. This includes
both the search engine and the problem specific functions.
Here again is the pseudo code, and
Draw me a state space graph for your problem (partial).
What is the branching factor (approx. avg.) of your graph?
Show me a successful run of your program (i.e., find a do-able
initial-goal state pair!).
Show me a task that is BEYOND the computational abilities
of your program (e.g., insufficient memory or time), and tell me why it
is so hard.
Name two heuristics that would speed up your search.
finally, is the Java Code!! This really runs. Try it on the
"River-crossing" problem. Just grab the file "planner.java",
which has everything in it. It is a Java application. Compile
it (use "javac planner.java" on euclid for example) and then run it (e.g.,
"java Planner" on euclid). Then look at the source, and see how you
can use the search engine part of the code (the "Planner" class).
The interface "State" is what you need to write your Java class too (if
you use Java!). As I did with the "River" class, write a class that
"implements State", and provides all the methods listed in the interface.
Then it "SHOULD" work!