Differences between revisions 28 and 81 (spanning 53 versions)
Revision 28 as of 2014-10-21 12:05:14
Size: 11710
Editor: MalteHelmert
Comment: server issues fixed (or so we hope)
Revision 81 as of 2023-09-15 10:35:29
Size: 11953
Editor: RemoChristen
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
If you want to: This page describes how to build and run the Fast Downward planner.
Line 7: Line 7:
 * 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.
Line 24: Line 10:
=== Linux === The planner is mainly developed under Linux; and all of its features should work with no restrictions under this platform.
The planner should compile and run correctly on macOS, but we cannot guarantee that it works as well as under Linux.
The same comment applies for Windows, where additionally some diagnostic features (e.g. reporting memory used when the planner is terminated by a signal) are not supported.
Setting time and memory limits and running portfolios is not supported under Windows either.
Line 26: Line 15:
Linux is the main platform for which the planner is developed. All features should work without restrictions under Linux. We appreciate bug reports and patches for all platforms, in particular, contributions to the documentation (e.g. installation instructions) for macOS and Windows.
Line 28: Line 17:
=== 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.
Line 46: Line 20:
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.
'''Linux:''' To obtain and build the planner, you will need the Git version control system, a C++ compiler, CMake and GNU make.
To run the planner, you will also need Python 3.
On Linux, the following should install all these dependencies: {{{
sudo apt install cmake g++ git make python3}}}
Line 50: Line 25:
=== Additional dependencies on 64-bit systems === '''Windows:''' If using Windows, you should install [[https://visualstudio.microsoft.com/de/vs/older-downloads/|Visual Studio >= 2017]],
[[https://www.python.org/downloads/windows/|Python]], [[https://git-scm.com/download/win|Git]], and [[http://www.cmake.org/download/|CMake]].
During the installation of Visual Studio, the C++ compiler is not installed by default, but the IDE will prompt you to install it when you create a new C++ project.
Line 52: Line 29:
If you are using an x64 system, you will probably also need to run {{{
sudo apt-get install g++-multilib}}}
Line 55: Line 30:
=== Additional dependencies on Mac OS X === === Linear-Programming configurations ===
Line 57: Line 32:
As of this writing, the planner appears to run without problems on Mac OS X. However, we do not promise full support. Some configurations require an LP solver to work. The planner will compile fine if there is no LP installed on the system, but trying to use the features that require an LP solver will generate an error message explaining what is missing.
See [[LPBuildInstructions]] for instructions on how to set up an LP solver and tell Fast Downward about it.

=== Validating the computed plans ===

You can validate the found plans by passing {{{--validate}}} to the planner. For this, the [[https://github.com/KCL-Planning/VAL|VAL plan validation software]]
needs to be installed on your system. [[SettingUpVal|Here]] you can find some instructions to help you set it up.
Line 61: Line 43:
Since July 2020, the main development of the code takes place on [[https://github.com/aibasel/downward/|Github]] but [[Releases#Historical_Releases|legacy versions of previous repositories]] are available.
Line 62: Line 45:
hg clone http://hg.fast-downward.org DIRNAME}}} git clone https://github.com/aibasel/downward.git DIRNAME}}}
Line 70: Line 53:
cd src
./build_all}}}
./build.py}}}
Line 73: Line 55:
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. This will create our default build {{{release}}} in the directory {{{downward/builds}}}. Other predefined build types are {{{debug}}}, {{{release_no_lp}}}, {{{glibcxx_debug}}} and {{{minimal}}}. Calling {{{./build.py --debug}}} will create a default debug build (equivalent to {{{debug}}}). You can pass make parameters to {{{./build.py}}}, e.g., {{{./build.py --debug -j4}}} will create a debug build using 4 threads for compilation ({{{-j4}}}), and {{{./build.py translate}}} will only build the translator component. (Because the translator is implemented in Python, "building" it just entails copying its source code into the build directory.) By default, {{{build.py}}} uses all cores for building the planner.
Line 75: Line 57:
=== Compiling on Mac OS X === See [[#Manual_Builds]] for more complex builds.
Line 77: Line 59:
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. === Compiling on macOS ===
Line 79: Line 61:
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}}}
Fast Downward should compile with the GNU C++ compiler and {{{clang}}} with the same instructions described above. In case your system compiler does not work for some reason, you will need to install the GNU compiler (if not already present) and tell CMake which compiler to use (see [[#Manual_Builds]]).
Line 82: Line 63:
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}}}
=== Compiling on Windows ===
Line 85: Line 65:
Please see [[PlannerUsage#64bit]] for caveats for 64-bit planners. Windows does not interpret the shebang in Python files, so you have to call {{{build.py}}} as {{{python3 build.py}}} (make sure python3 is on your {{{PATH}}}). Also note that options are passed without {{{--}}}, e.g., {{{python3 build.py build=release_no_lp}}}.

Note that compiling from terminal is only possible with the right environment. The easiest way to get such an environment is to use the ``Developer Power''''''Shell for VS 2019`` or ``Developer Power''''''Shell.

Alternatively, you can create a Visual Studio Project (see [[#Manual_Builds]]), open it in Visual Studio and build from there. Visual Studio will create its binary files in subdirectories of the project that our driver script currently does not recognize. If you build with Visual Studio, you will have to run the individual components of the planner yourself.

== Manual and Custom Builds ==

The {{{build.py}}} script only creates a directory, calls {{{cmake}}} once to generate a build system, and a second time to execute the build. To do these steps manually, run:
{{{#!highlight bash
cmake -S src -B builds/mycustombuild
cmake --build builds/mycustombuild}}}

where {{{CMAKE_OPTIONS}}} are the options used to configure the build (see below). Without options, this results in the {{{release}}} build. (Use {{{--build mycustombuild}}} in the {{{fast-downward.py}}} script to select this build when running the planner.)

You can use a CMake GUI to set up all available options. To do so, on Unix-like systems replace the call to {{{cmake}}} by {{{ccmake}}} ({{{sudo apt install cmake-curses-gui}}}). On Windows, open the CMake GUI and enter the paths there.

Possible options to configure the build include:
  * {{{-DLIBRARY_BLIND_SEARCH_HEURISTIC_ENABLED=False}}}
    Switch off the blind heuristic.
    See {{{src/search/CMakeLists.txt}}} for other libraries.
  * {{{-DCMAKE_BUILD_TYPE=DEBUG}}}
    The only other build type is: {{{RELEASE}}} (default)
  * {{{-DCMAKE_C_COMPILER=/usr/bin/clang}}}, {{{-DCMAKE_CXX_COMPILER=/usr/bin/clang++}}}
    Force the use of `clang`/`clang++` (adjust paths as necessary).

You can also generate makefiles for other build systems (such as ninja) or generate project files for most IDEs:
  * {{{-GNinja}}}
    Use {{{ninja}}} instead of {{{make}}} in step 4.
  * {{{-G"NMake Makefiles"}}}
    Windows command line compile. Open the x86 developer shell for your compiler
    and then use {{{nmake}}} instead of {{{make}}} in step 4.
  * {{{-G"Visual Studio 15 2017"}}}
    This should generate a solution for Visual Studio 2017. Run this command in the command prompt with the environment variables loaded (i.e., execute the vsvarsall script).
  * {{{-G"XCode"}}}
    This should generate a project file for XCode.
  * Run {{{cmake}}} without parameters to see which generators are available on your system.

You can also change the compiler/linker and their options by setting the environment variables {{{CC}}}, {{{CXX}}}, {{{LINKER}}} and {{{CXXFLAGS}}}. These variables need to be set before running `./build.py` or executing `cmake` manually, so one drawback is that you cannot save such settings as build configurations in `build_config.py`. If you want to change these settings for an existing build, you must manually remove the build directory before rerunning `./build.py`.

Examples:
  * To compile with {{{clang}}} use:
  {{{#!highlight bash
CC=clang CXX=clang++ cmake ../../src}}}
  * Use full paths if the compiler is not found on the {{{PATH}}}, e.g., to force using the GNU compiler on macOS using !HomeBrew:

  /!\ Note that the following path is for GCC 4.8 which we no longer support. If you know the relevant path for a !HomeBrew version of GCC 10 or newer, please let us know.
  {{{#!highlight bash
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 cmake ../../src}}}

  * The next example creates a build with the GNU compiler using !MacPorts:

  /!\ Note that the following path is for GCC 4.8 which we no longer support. If you know the relevant path for a !MacPorts version of GCC 10 or newer, please let us know.
  {{{#!highlight bash
CXX=/opt/local/bin/g++-mp-4.8 CC=/opt/local/bin/gcc-mp-4.8 LINKER=/opt/local/bin/g++-mp-4.8 cmake ../../src}}}

  * To abort compilation when the compiler emits a warning, set `CXXFLAGS="-Werror"`.

  * To force a 32-bit build on a 64-bit platform, set `CXXFLAGS="-m32"`. We recommend disabling the LP solver with 32-bit builds.

If you use a configuration often, it might make sense to add an alias for it in {{{build_configs.py}}}.
Line 89: Line 129:
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. 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/SearchAlgorithm|search algorithm]] with one or more [[Doc/Evaluator|evaluator specification]]s.
Line 95: Line 135:
 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. We recommend using the [[Releases|latest release]]. If you are using the main branch instead, be aware that things can break or degrade with every commit. Typically they don't, but if they do, don't be surprised.
Line 97: Line 137:
 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.
Line 99: Line 138:
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. ./fast-downward.py domain.pddl problem.pddl --search "lazy_greedy([ff()], preferred=[ff()])"}}} 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.
Line 103: Line 142:
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.) There is a large collection of planning competition benchmarks at https://github.com/aibasel/downward-benchmarks, which includes all IPC domains (but not all ''formulations'' of all domains). 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.)
Line 105: Line 144:
We recommend that you use the following "known working" sets of domains for your experiments (names of domains as in {{{downward/benchmarks}}}): We recommend that you use the sets of domains that are predefined in the [[https://github.com/aibasel/downward-benchmarks/blob/master/suites.py|suites.py]] script for your experiments. Here are the benchmark suites that we usually use in the two most common settings:
Line 107: Line 146:
 * 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'''.
 * Inadmissible heuristics supporting conditional effects and axioms (e.g. context-enhanced additive, FF, additive, causal graph): {{{satisficing}}}
 * Admissible heuristics not supporting conditional effects and axioms (e.g. LM-Cut, iPDB): {{{optimal_strips}}}
Line 110: Line 149:
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}}}. After cloning the repo, you can list the domains in the respective suites by doing:

{{{#!highlight bash
./suites.py optimal_strips
}}}

You can use the resulting list of domains in your experiment scripts (see below).
Line 114: Line 159:
The {{{lab}}} python library has a module {{{downward}}} that helps running Fast Downward experiments on large benchmark sets. &rarr; [[ScriptUsage|More information]] The {{{Downward Lab}}} toolkit helps running Fast Downward experiments on large benchmark sets. &rarr; [[ScriptUsage|More information]]

Back to the HomePage.

Obtaining and running Fast Downward

This page describes how to build and run the Fast Downward planner.

Supported platforms

The planner is mainly developed under Linux; and all of its features should work with no restrictions under this platform. The planner should compile and run correctly on macOS, but we cannot guarantee that it works as well as under Linux. The same comment applies for Windows, where additionally some diagnostic features (e.g. reporting memory used when the planner is terminated by a signal) are not supported. Setting time and memory limits and running portfolios is not supported under Windows either.

We appreciate bug reports and patches for all platforms, in particular, contributions to the documentation (e.g. installation instructions) for macOS and Windows.

Dependencies

Linux: To obtain and build the planner, you will need the Git version control system, a C++ compiler, CMake and GNU make. To run the planner, you will also need Python 3. On Linux, the following should install all these dependencies:

sudo apt install cmake g++ git make python3

Windows: If using Windows, you should install Visual Studio >= 2017, Python, Git, and CMake. During the installation of Visual Studio, the C++ compiler is not installed by default, but the IDE will prompt you to install it when you create a new C++ project.

Linear-Programming configurations

Some configurations require an LP solver to work. The planner will compile fine if there is no LP installed on the system, but trying to use the features that require an LP solver will generate an error message explaining what is missing. See LPBuildInstructions for instructions on how to set up an LP solver and tell Fast Downward about it.

Validating the computed plans

You can validate the found plans by passing --validate to the planner. For this, the VAL plan validation software needs to be installed on your system. Here you can find some instructions to help you set it up.

Obtaining the code

Since July 2020, the main development of the code takes place on Github but legacy versions of previous repositories are available. The command

git clone https://github.com/aibasel/downward.git 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:

   1 cd downward
   2 ./build.py

This will create our default build release in the directory downward/builds. Other predefined build types are debug, release_no_lp, glibcxx_debug and minimal. Calling ./build.py --debug will create a default debug build (equivalent to debug). You can pass make parameters to ./build.py, e.g., ./build.py --debug -j4 will create a debug build using 4 threads for compilation (-j4), and ./build.py translate will only build the translator component. (Because the translator is implemented in Python, "building" it just entails copying its source code into the build directory.) By default, build.py uses all cores for building the planner.

See #Manual_Builds for more complex builds.

Compiling on macOS

Fast Downward should compile with the GNU C++ compiler and clang with the same instructions described above. In case your system compiler does not work for some reason, you will need to install the GNU compiler (if not already present) and tell CMake which compiler to use (see #Manual_Builds).

Compiling on Windows

Windows does not interpret the shebang in Python files, so you have to call build.py as python3 build.py (make sure python3 is on your PATH). Also note that options are passed without --, e.g., python3 build.py build=release_no_lp.

Note that compiling from terminal is only possible with the right environment. The easiest way to get such an environment is to use the Developer PowerShell for VS 2019 or Developer PowerShell.

Alternatively, you can create a Visual Studio Project (see #Manual_Builds), open it in Visual Studio and build from there. Visual Studio will create its binary files in subdirectories of the project that our driver script currently does not recognize. If you build with Visual Studio, you will have to run the individual components of the planner yourself.

Manual and Custom Builds

The build.py script only creates a directory, calls cmake once to generate a build system, and a second time to execute the build. To do these steps manually, run:

   1 cmake -S src -B builds/mycustombuild
   2 cmake --build builds/mycustombuild

where CMAKE_OPTIONS are the options used to configure the build (see below). Without options, this results in the release build. (Use --build mycustombuild in the fast-downward.py script to select this build when running the planner.)

You can use a CMake GUI to set up all available options. To do so, on Unix-like systems replace the call to cmake by ccmake (sudo apt install cmake-curses-gui). On Windows, open the CMake GUI and enter the paths there.

Possible options to configure the build include:

  • -DLIBRARY_BLIND_SEARCH_HEURISTIC_ENABLED=False

    • Switch off the blind heuristic.

      See src/search/CMakeLists.txt for other libraries.

  • -DCMAKE_BUILD_TYPE=DEBUG

    • The only other build type is: RELEASE (default)

  • -DCMAKE_C_COMPILER=/usr/bin/clang, -DCMAKE_CXX_COMPILER=/usr/bin/clang++

    • Force the use of clang/clang++ (adjust paths as necessary).

You can also generate makefiles for other build systems (such as ninja) or generate project files for most IDEs:

  • -GNinja

    • Use ninja instead of make in step 4.

  • -G"NMake Makefiles"

    • Windows command line compile. Open the x86 developer shell for your compiler

      and then use nmake instead of make in step 4.

  • -G"Visual Studio 15 2017"

    • This should generate a solution for Visual Studio 2017. Run this command in the command prompt with the environment variables loaded (i.e., execute the vsvarsall script).
  • -G"XCode"

    • This should generate a project file for XCode.
  • Run cmake without parameters to see which generators are available on your system.

You can also change the compiler/linker and their options by setting the environment variables CC, CXX, LINKER and CXXFLAGS. These variables need to be set before running ./build.py or executing cmake manually, so one drawback is that you cannot save such settings as build configurations in build_config.py. If you want to change these settings for an existing build, you must manually remove the build directory before rerunning ./build.py.

Examples:

  • To compile with clang use:

       1 CC=clang CXX=clang++ cmake ../../src
    
  • Use full paths if the compiler is not found on the PATH, e.g., to force using the GNU compiler on macOS using HomeBrew:

    /!\ Note that the following path is for GCC 4.8 which we no longer support. If you know the relevant path for a HomeBrew version of GCC 10 or newer, please let us know.

       1 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 cmake ../../src
    
  • The next example creates a build with the GNU compiler using MacPorts:

    /!\ Note that the following path is for GCC 4.8 which we no longer support. If you know the relevant path for a MacPorts version of GCC 10 or newer, please let us know.

       1 CXX=/opt/local/bin/g++-mp-4.8 CC=/opt/local/bin/gcc-mp-4.8 LINKER=/opt/local/bin/g++-mp-4.8 cmake ../../src
    
  • To abort compilation when the compiler emits a warning, set CXXFLAGS="-Werror".

  • To force a 32-bit build on a 64-bit platform, set CXXFLAGS="-m32". We recommend disabling the LP solver with 32-bit builds.

If you use a configuration often, it might make sense to add an alias for it in build_configs.py.

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 search algorithm with one or more evaluator specifications.

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. We recommend using the latest release. If you are using the main branch instead, be aware that things can break or degrade with every commit. Typically they don't, but if they do, don't be surprised.

  2. There are known bugs, especially with the translator component. To find out more, check out 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.

  3. 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

    ./fast-downward.py domain.pddl problem.pddl --search "lazy_greedy([ff()], preferred=[ff()])"

    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 at https://github.com/aibasel/downward-benchmarks, which includes all IPC domains (but not all formulations of all domains). 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 sets of domains that are predefined in the suites.py script for your experiments. Here are the benchmark suites that we usually use in the two most common settings:

  • Inadmissible heuristics supporting conditional effects and axioms (e.g. context-enhanced additive, FF, additive, causal graph): satisficing

  • Admissible heuristics not supporting conditional effects and axioms (e.g. LM-Cut, iPDB): optimal_strips

After cloning the repo, you can list the domains in the respective suites by doing:

   1 ./suites.py optimal_strips

You can use the resulting list of domains in your experiment scripts (see below).

Experiments with Fast Downward

The Downward Lab toolkit helps running Fast Downward experiments on large benchmark sets. → More information