In the following, we describe how to install PROST on a Ubuntu system. Over the last few years, we had several Ubuntu versions installed and never encountered any problems with the installation routine, so we assume that it should work on any sufficiently recent version. At the moment, no other operating system is supported, but we are working on the integration of a patch that allows to run PROST on Windows (see issue #31 for more information).
PROST is distributed in the hope that it will be useful to anyone, but without any warranty. Even though the source files in the repository do not contain licensing information at the moment, the planner is published under the GNU General Public License 3 (GPL).
All dependencies are installed by the following command:
$ sudo apt-get install mercurial g++ make bison flex libbdd-dev
The source code is made available in a public mercurial repository. It is cloned to the directory PROST_ROOT by:
$ hg clone http://email@example.com/tkeller/prost PROST_ROOT
The planner consists of two parts, a parsing component which can be found in the PROST_ROOT/src/rddl_parser directory, and the search component in PROST_ROOT/src/search. Both components are compiled by typing
in their respective directory to compile in RELEASE mode, or
$ make debug
for DEBUG mode. If you plan to perform experiments with PROST, please use the RELEASE mode. Both components must be compiled to use PROST.
PROST is an online planner that interleaves planning and execution, so it requires interaction with a simulation environment. We use the server from the rddlsim project. Please follow the installation instructions by Scott Sanner that can be found here to install rddlsim in the directory RDDLSIM_ROOT and create a symlink to it by executing
$ ln -s RDDLSIM_ROOT ./rddlsim
in the PROST_ROOT/testbed folder.
This enables the usage of the run-server script from the testbed folder. To start the server with all instances from IPPC 2011 or 2014, execute
and to start the server with all instances that can be found in a directory, run
$ ./run-server BENCHMARK_FOLDER 2323 30 0 0 0
where BENCHMARK_FOLDER is such that it contains a subdirectory rddl with the RDDL files in it, i.e.,
$ ./run-server benchmarks/ippc2011
will start the server with all instances from IPPC2011. (Please have a look at the rddlsim documentation for information on the remaining parameters).
PROST consists of two components: parser (in src/rddl_parser) and search (in src(search). Both are called sequentially with the plan.py script as
$ ./plan.py DOMAIN PROBLEM CONFIG
, where DOMAIN and PROBLEM are the RDDL domain and problem files (e.g., benchmarks/ippc-all/rddl/elevators_mdp.rddl and benchmarks/ippc-all/rddl/elevators_inst_mdp__1.rddl for the first instance of the elevators domain). If you use PROST this way, the parser will create an output file that is passed to the search component. At the end of the run, that output file is deleted. Since the parser is deterministic, it is also possible to apply the parser on a large set of RDDL files with the parse.py script and only run the search component on the resulting PROST files. To do so, run parse.py on a folder as translate2Prefix that contains a subfolder with .rddl domain and instance files, which creates a new folder "prost". All files in the prost folder are input files for the search component that do not have to be recreated as long as the domain and problem files remain unaltered).
CONFIG is the configuration you want to use for the search component. To run the PROST planner in the version that was used at IPPC 2011 (2014), replace CONFIG with "IPPC2011" ("IPPC2014"). For more information on search paramters, go to the PROST_ROOT/src/search folder and run the search component without any arguments. To summarize, the following command runs the PROST version that was used at IPPC 2014 on the first instance of the elevators domain:
$ ./plan.py benchmarks/ippc-all/rddl/elevators_mdp.rddl benchmarks/ippc-all/rddl/elevators_inst_mdp__1.rddl "IPPC2014"
Note that there is also a README file in the repository. In case neither this description nor the README file are sufficient for your needs, please do not hesitate to contact us via email.