Guide to set up and run the PROST planner. If you have any questions
that are not answered by this file or under
https://bitbucket.org/tkeller/prost/wiki/Installation, please do not
hesitate to contact tho.keller [at] unibas.ch.



===[ Prerequisites ]===

Libraries: BuDDy (http://sourceforge.net/projects/buddy/)

On Linux, you can install BuDDy and all other dependencies with the
command

sudo apt install mercurial g++ cmake bison flex libbdd-dev

If you cannot install BuDDy this way, it is likely you have to adapt the
file src/cmake_modules/FindBDD.cmake to make sure that the BuDDy library
can be found.



===[ Installing the PROST planner ]===

Prost consists of two parts: a parser component that can be found in the
directory src/rddl_parser, and a search component that can be found in
src/search. The parser version in src/rddl_prefix_parser is deprecated
and can be ignored in most cases.

Both the parser and the search component are compiled with the build.py
script in the root directory of the repository.

Running

./build.py

will compile the release version, and

./build.py --debug

will compile the debug version.



===[ Installing the rddlsim server ]===

The PROST solver requires the rddlsim server to run. We refer to the
github repository of rddlsim for the latest installation information.
Without any guarantee for success, you can try the following
installation instructions:

A java runtime environment is required to run rddlsim, which can (for
instance) be installed with

sudo apt install default-jre

Now you have to obtain rddlsim by cloning the repository with

git clone https://github.com/ssanner/rddlsim /path/to/rddlsim,

where /path/to/rddlsim refers to a directory on your machine where you
install rddlsim (you can replace this with any directory on your
machine). After the repository is cloned, run

./compile

once in /path/to/rddlsim.

The Prost repo contains the script testbed/run-server that can be used
to start rddlsim. To work properly, it requires that you set an
environment variable RDDLSIM_ROOT that points to /path/to/rddlsim, e.g.
by adding

export RDDLSIM_ROOT=/path/to/rddlsim

to the file ~/.bashrc.



===[ Running PROST and rddlsim ]===

Running

./run-server benchmarks/elevators-2011/

will then start rddlsim with all instances of the elevators domain of
IPC 2011 (all other RDDL domains that were used in an IPC can also be
found in the testbed/benchmarks folder).

If your IPPC server is running, you can start PROST with the prost.py
script that can be found in the root directory of the repository. For
instance, to start planning for the first elevators instance of IPC 2011
with the PROST version from IPC 2014, run

./prost.py elevators_inst_mdp__1 "[Prost -s 1 -se [IPPC2014]]"

Note that there are many PROST configuration implemented. Run the
prost.py script without any parameters for an overview of all available
solvers and their options.



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

The simplest way to implement your own search engine is to 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 the 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).



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

There are some scripts to compare your algorithm to other methods
implemented in PROST. You can use the analyze_results.py 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:

	analyze_results.py <resultdir> <texfile>

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

We are currently also working on incorporating Lab
(https://bitbucket.org/jendrikseipp/lab) into the Prost planner, which
provides much more powerful scripts to analyze results.

