You will develop a series of search heuristics for solving planning problems. These heuristics will be demonstrated using the Blocks World domain, in addition to two domains of your own making.
BestFirstSearcher
into the search.core
package. The version that is there is the
breadth-first search implementation from the Project 1 zip file.
PlanGraph
class, and create
several classes in the planner.heuristics
package that implement the
BestFirstHeuristic
interface.
Classes you will modify are in
boldface.
planner.heuristics
BreadthFirst.java
will implement breadth-first search.
PlanViewer.java
.
planner.core
PlanGraph.java
: Represents a plan graph, a data structure that can be useful to assist in creating plans. You will complete the extractNoDeletePlan()
method.
PlanGraphTest.java
: Unit test for PlanGraph
. It will fail initially. It should pass once your solution to PlanGraph.java
is complete.
Action.java
: Describes a plan operator.
BasicPlanner.java
: Wraps a BestFirstSearcher
for generating a plan. It is
abstract in order to enable variants to handle different
BestFirstObject
classes. Implements the Planner
interface.
BasicPlanStep.java
: Useful basis for creating BestFirstObject
classes.
BestFirstPlanner.java
: Extends BasicPlanner
. When provided with a BestFirstHeuristic
, the result is a functioning planner.
BreadthFirstTest.java
: Should pass all tests upon downloading.
Conjunction.java
: Represents the effects of an Action
.
Domain.java
: Represents a planning domain.
Plan.java
: Represents a plan.
PlanStep.java
: Represents a plan step, for use in the search process.
Planner.java
: Interface for planners. Implemented by BasicPlanner
.
Predicate.java
: Represents a parameterizable true/false statement.
Problem.java
: Represents a specific planning problem in a given Domain
.
State.java
: Collection of Predicate
objects representing the state of the world.
planner.gui
PlanViewer.java
: Runnable GUI for evaluating your planning heuristics.
planner.lisp
: The files in this package you may safely ignore.
BestFirstHeuristic
interface. Each one
should be placed in planner.heuristics
.
extractNoDeletePlan()
method in the PlanGraph
class. Then use the length of the relaxed plan as the estimate.
domains
:
For the two other domains, determine how long it takes for each heuristic to solve each of the three problems you created.
Note: If your planner can solve all of the regular Blocks World problems, some extra-hard problems are available in the blocks2
directory.
For each experiment you run, record:
When you are finished with your experiments, you will write a short paper summarizing your findings. Include the following details in your paper:
Achievement | Points |
---|---|
Passes all tests in PlanGraphTest | 4 |
Goal-counting heuristic works | 3 |
Plan graph heuristic works | 6 |
Robot delivery domain created, with 3 problems | 4 |
User-devised domain created, with 3 problems | 4 |
Final user-chosen heuristic works | 4 |
Ran experiments to determine for each heuristic the hardest Blocks World problem solvable in one minute or less | 10 |
Ran experiments to assess performance for each heuristic for the robot delivery domain | 5 |
Ran experiments to assess performance for each heuristic for the third domain | 5 |
Paper describes each of the three heuristics implemented | 5 |
Paper reports all experimental data | 4 |
Paper discusses the merits of the heuristics relative to breadth-first search and each other | 4 |
Paper analyzes how the heuristics are affected in different ways by different domains | 4 |
Paper discusses the degree to which the results matched expectations | 4 |
Paper discusses the scenarios in which planning is preferable to Q-learning for action selection, as well as when Q-learning would be preferable to planning | 4 |