Guide to set up and run the PROST planner. If you have any questions
that are not answered by this file or under, please do
not hesitate to contact tho.keller [@]

===[ Prerequisites ]===

Libraries: BuDDy (

NOTE: make sure to install BuDDy in /lib or update the PROST makefile
so that it finds the buddy library, otherwise it will compile fine but
give an error on running the PROST solver. 

===[ Compiling the PROST planner ]===

The planner can be compiled simply by going into the source directory
and running make. 

Running make debug will compile the debug version, and running make test will
build the unit tests and execute them.

===[ Running PROST ]===

The PROST solver requires the IPPC 2011 competition server to run. You
can get this server (and some additional RDDL/planning tools) from (more detailed instructions can be
found further in this guide).

If your IPPC server is running (on the default port 2323) you can run
the PROST solver using:

	prost <rddldir> <instance-name> [<solver> <solveroptions>]

in which <rddldir> is the directory that contains your rddl models,
<instance-name> the name of the instance to solve, <solver> the solver
you want to use and <solveroptions> the options for the chosen solver.
Note that there are several solvers available, type

	prost --help

for an overview of all available solvers and their options.

The current version of PROST requires the domain file name to end with
_mdp.rddl and the instance with mdp__#.rddl where # is the instance

===[ Installing the IPPC Server ]===

Extract the IPPC source to any directory, go to the extracted
directory and simply run 'compile'. This compiles the RDDLSim tools,
including the server (a more detailed setup guide can be found in the
RDDLSim dir). If you have compiled the IPPC source, run the IPPC
server from the rddlsim main directory with the following command:

	run rddl.competition.Server <rddldir>

where <rddldir> is the folder that contains your rddl model(s).

===[ Create your own search engine ]===

The simplest way to implement your own search engine, derive a class
from SearchEngine and implement the pure virtual method
estimateQValues as a function that assigns a Q-Value estimate to each
action. After you have added your search engine to the
SearchEngine::fromString method with a unique string, PROST will use
your search engine if called with that string and execute that action
with the highest Q-Value estimate in each step. 

Have a look at thts.h if you are interested in creating a search
engine that can be modelled within the THTS framework (see the ICAPS
2013 paper by Keller and Helmert for more information on THTS).

===[ Test your own search engine ]===

We use the Google Test framework to implement unit tests for our code. All tests
are contained in /src/test/ and will be run automatically by compiling the debug
version of the planner (i.e. calling make in src/search/). If you want to
implement your own unit tests you have to keep the following naming conventions:
- No underscore (_) in test case names and test names. 
- Every test should end with *

The first convention is necessary by the framework and the second rule allows
make to automatically compile and run your tests.

===[ Compare your search engine ]===

There are some scripts to compare your algorithm to other methods
implemented in PROST. You can use the script (from
the scripts folder) to compare to 1.) those algorithms that are in the
highscore folder (which also contains the minimum policy of IPPC 2011)
and 2.) all algorithms that are in your <resultdir> by running: <resultdir> <texfile>

which creates a texfile that contains both an instance-by-instance
comparison and a table with IPPC scores.