Differences between revisions 28 and 82 (spanning 54 versions)
Revision 28 as of 2014-10-21 12:05:14
Size: 11710
Editor: MalteHelmert
Comment: server issues fixed (or so we hope)
Revision 82 as of 2023-10-12 12:16:39
Size: 0
Editor: GabiRoeger
Comment: Info moved to repository
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Back to the HomePage.

= Obtaining and running Fast Downward =

If you want to:

 * conduct experiments that compare other planners against Fast Downward, or
 * implement your own search algorithms or heuristics that build on Fast Downward

then this page is for you.

Since we don't currently consider the code to be in releasable shape, there is no "official" code distribution of the planner available at the moment. You can still get access to the planner, but it's important that you are aware of some issues with the current codebase.

/!\ '''Important note: Make sure to completely read the [[#Caveats]] section below.'''

/!\ '''Note on running LAMA:''' As of 2011, LAMA has been merged back into the Fast Downward codebase. "LAMA 2011", the version of LAMA that participated in IPC 2011, is Fast Downward with a particular set of command-line arguments. Since LAMA 2011 greatly outperformed LAMA 2008 in the competition, we strongly encourage you to use the current Fast Downward code when evaluating your planner against LAMA. See the following note.

/!\ '''Note on running IPC 2011 planners based on Fast Downward:''' After familiarizing yourself with the basics on this page, please check out IpcPlanners.

/!\ '''License:''' While our repository does not currently contain licensing information, the planner is made available under the GNU Public License (GPL). If you want to use the planner in any way that is not compatible with the GPL, you will have to get permission from us.

== Supported platforms ==

=== Linux ===

Linux is the main platform for which the planner is developed. All features should work without restrictions under Linux.

=== Mac OS X ===

The planner contains the necessary code to compile and run on Mac OS X, but since we do not use this platform, we cannot promise that it works as well as Linux. When running serious experiments with Mac OS X, we strongly suggest that you do at least some basic comparison to Linux to make sure that all results are in order and planner performance doesn't degrade. We appreciate bug reports and patches for this platform, including contributions to the documentation (e.g. installation instructions).

=== Windows ===

The planner contains the necessary code to compile and run on Windows using Cygwin or MSYS. The same comments as for Mac OS X apply. Moreover, some diagnostic features, such as reporting memory used, are not supported under Windows, and due to a library limitation the time allocation for portfolios may be slightly wrong. We appreciate bug reports and patches for this platform, including contributions to the documentation (e.g. installation instructions).

== Getting access to the planner ==

In the following I will assume Ubuntu Linux or a similar environment. If you use other kinds of Linux or other Unix-ish systems, you should be able to adapt the following steps to your setting. If you do not use a Unix-style system, you will probably not be able to compile the planner.

Since October 2010, the main development of the code takes place in a Mercurial repository. Before then, the code was hosted in a Subversion repository, which is still available. However, the trunk of the Subversion repository has been frozen (set to read-only) and will no longer receive updates or bug fixes. See LegacySubversionRepository if you need to access the old repository for some reason.

If you haven't used Mercurial before, you may want to have a look at the [[http://hgbook.red-bean.com/|excellent documentation available online]] (also available as a printed book published by O'Reilly Media). However, you don't really have to understand Mercurial to use the planner. For those experienced with Mercurial or similar distributed version control systems, we currently use a [[http://mercurial.aragost.com/kick-start/tasks.html|"single-pusher" task-based workflow with a single pusher]] for the Fast Downward repository. If you want to contribute to Fast Downward, the recommended way is to set up a clone of the master repository (e.g. on [[http://www.bitbucket.org|Bitbucket]]) and provide a link to it in our [[http://issues.fast-downward.org|issue tracker]] so that we can pull from it.

== Dependencies ==

To obtain and build the planner, you need any version of Mercurial, a reasonably modern version of the GNU C++ compiler, and the usual build tools such as GNU make. For the validator, VAL, you will need flex and bison. To run the planner, you also need Python 2.7 (the translator will also run under Python >= 3.2) as well as gawk. These dependencies are often satisfied by default on development machines. If not, {{{
sudo apt-get install mercurial g++ make python flex bison}}}
should be sufficient.

=== Additional dependencies on 64-bit systems ===

If you are using an x64 system, you will probably also need to run {{{
sudo apt-get install g++-multilib}}}

=== Additional dependencies on Mac OS X ===

As of this writing, the planner appears to run without problems on Mac OS X. However, we do not promise full support.

== Obtaining the code ==

The command {{{
hg clone http://hg.fast-downward.org DIRNAME}}}
will create a clone of the Fast Downward master repository in directory {{{DIRNAME}}}. The directory is created if it does not yet exist. In the following, we assume that you used {{{downward}}} as the {{{DIRNAME}}}.

== Compiling the planner ==

To build the planner for the first time, run:
{{{#!highlight bash
cd downward
cd src
./build_all}}}

If you later make changes to the planner, it is preferable to use {{{make}}} in the different subdirectories of {{{downward/src}}} instead of rerunning {{{build_all}}} since you'll usually only work on one part of the planner at a time.

=== Compiling on Mac OS X ===

Fast Downward needs the GNU C++ compiler, but the system compiler on new versions of Mac OS X may be {{{clang}}}. In this case, you will need to install the GNU compiler (if not already present) and tell the Makefiles which compiler to use. Some example invocations of {{{./build_all}}} that have worked for some people follow, but the paths may be different on your system.

32-bit planner using !HomeBrew: {{{
./build_all CXX=/usr/local/Cellar/gcc48/4.8.3/bin/g++-4.8 CC=/usr/local/Cellar/gcc48/4.8.3/bin/g++-4.8 LINKER=/opt/local/bin/g++-mp-4.8}}}

64-bit planner using !MacPorts: {{{
./build_all DOWNWARD_BITWIDTH=64 CXX=/opt/local/bin/g++-mp-4.8 CC=/opt/local/bin/gcc-mp-4.8 LINKER=/opt/local/bin/g++-mp-4.8}}}

Please see [[PlannerUsage#64bit]] for caveats for 64-bit planners.

== Running the planner ==

For basic instructions on how to run the planner including examples, see PlannerUsage. The search component of the planner accepts a host of different options with widely differing behaviour. At the very least, you will want to choose a [[Doc/SearchEngine|search engine]] with one or more [[Doc/Heuristic|heuristic specification]]s.

== Caveats ==

Please be aware of the following issues when working with the planner, '''especially if you want to use it for conducting scientific experiments''':

 1. You are working with the most recent version of the development branch of the code, which is usually '''not thoroughly tested'''. Things can break or degrade with every commit. Typically they don't, but if they do, don't be surprised. We are working on a proper release, but we are not there yet. For more information, see [[http://issues.fast-downward.org/issue?%40search_text=&title=&%40columns=title&keyword=1&id=&%40columns=id&creation=&activity=&%40columns=activity&%40sort=activity&priority=&%40group=priority&status=-1%2C1%2C2%2C3%2C4%2C5%2C6%2C7&%40columns=status&%40pagesize=50&%40startwith=0&%40action=search|the list of outstanding issues for release 1.0 of the planner]].
 1. There are '''known bugs''', especially with the translator component. To find out more, check out [[http://issues.fast-downward.org|our issue tracker]]. The planner has only really been tested with IPC domains, and even for those it does not work properly with all formulations of all domains. For more information, see the section on [[#Known_good_domains]] below.
 1. We have recently integrated various branches of the code, and this has led to a '''performance degradation''' in some cases. For example, we know that there are issues with the landmark-cut heuristic (see [[http://issues.fast-downward.org/issue69]]). Many other configurations have not yet been properly tested for such performance degradations. Hence, before you report any performance results for the planner, please check them for plausibility by comparing them to our published results, and contact us if anything looks suspicious.
 1. The '''search options''' are built with flexibility in mind, not ease of use. It is very easy to use option settings that look plausible, yet introduce significant inefficiencies. For example, an invocation like {{{
search/downward --search lazy_greedy(ff(), preferred=ff())" < output}}} looks plausible, yet is hugely inefficient since it will compute the FF heuristic twice per state. See the examples on the PlannerUsage page to see how to call the planner properly. If in doubt, ask.

== Known good domains ==

There is a large collection of planning competition benchmarks in {{{downward/benchmarks}}}, which includes all IPC domains before 2008 (but not all ''formulations'' of all domains). As of this writing, the domain collection does not include the IPC 2008 benchmarks. The planner is somewhat sensitive to non-STRIPS language constructs and will choke on some valid PDDL inputs. Moreover, many of the heuristics do not support axioms or conditional effects. Even worse, sometimes the translator will introduce conditional effects even though the original PDDL input did not contain them. (We are working on this.)

We recommend that you use the following "known working" sets of domains for your experiments (names of domains as in {{{downward/benchmarks}}}):

 * For heuristics supporting conditional effects and axioms (e.g. context-enhanced additive, FF, additive, causal graph): {{{airport}}}, {{{assembly}}}, {{{blocks}}}, {{{depot}}}, {{{driverlog}}}, {{{freecell}}}, {{{grid}}}, {{{gripper}}}, {{{logistics00}}}, {{{logistics98}}}, {{{miconic}}}, {{{miconic-fulladl}}}, {{{miconic-simpleadl}}}, {{{movie}}}, {{{mprime}}}, {{{mystery}}}, {{{openstacks}}}, {{{optical-telegraphs}}}, {{{pathways}}}, {{{philosophers}}}, {{{pipesworld-notankage}}}, {{{pipesworld-tankage}}}, {{{psr-large}}}, {{{psr-middle}}}, {{{psr-small}}}, {{{rovers}}}, {{{satellite}}}, {{{schedule}}}, {{{storage}}}, {{{tpp}}}, {{{trucks}}}, {{{zenotravel}}}. This set of domains is called the '''All suite'''.
 * For heuristics not supporting conditional effects and axioms (e.g. landmark-cut, merge-and-shrink): {{{airport}}}, {{{blocks}}}, {{{depot}}}, {{{driverlog}}}, {{{freecell}}}, {{{gripper}}}, {{{logistics00}}}, {{{logistics98}}}, {{{miconic}}}, {{{mprime}}}, {{{mystery}}}, {{{openstacks-strips}}}, {{{pathways-noneg}}}, {{{pipesworld-notankage}}}, {{{pipesworld-tankage}}}, {{{psr-small}}}, {{{rovers}}}, {{{tpp}}}, {{{trucks-strips}}}, {{{zenotravel}}}. This set of domains is called the '''LM-cut suite'''.

The LM-cut suite is a subset of the All suite in terms of ''domains'' but not domain ''formulations'', as it uses the formulations {{{pathways-noneg}}} and {{{trucks-strips}}} instead of {{{pathways}}} and {{{trucks}}}.

== Experiments with Fast Downward ==

The {{{lab}}} python library has a module {{{downward}}} that helps running Fast Downward experiments on large benchmark sets. &rarr; [[ScriptUsage|More information]]