2471
Comment: Added syntax for translator and preprocessor
|
5284
copy stuff from ObtainingAndRunningFastDownward
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
Line 7: | Line 5: |
== Translator == | Before running Fast Downward, you must [[ObtainingAndRunningFastDownward#Compiling_the_planner|build it]] using the {{{build.py}}} script. To run Fast Downward, use the {{{fast-downward.py}}} driver script. At minimum, you need to specify the PDDL input files and search options consisting of a [[Doc/SearchAlgorithm|search algorithm]] with one or more [[Doc/Evaluator|evaluator specification]]s. The driver script has many options to do things like running portfolios, running only the translation component of the planner, using a non-standard build, running a plan validator and various other things. To see the complete list of options, run |
Line 10: | Line 10: |
translate.py DOMAIN PROBLEM | ./fast-downward.py --help |
Line 13: | Line 13: |
* `DOMAIN` (filename): PDDL domain file * `PROBLEM` (filename): PDDL problem file |
If you want to run any of the planners based on Fast Downward that participated in IPC 2011, please also check IpcPlanners. |
Line 16: | Line 15: |
Note: Creates a file called output.sas (as well as test.groups, all.groups, ...) == Preprocessor == |
== Caveats == |
Line 19: | Line 17: |
{{{ preprocess < OUTPUT.SAS |
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. == Different builds == Different builds of Fast Downward (e.g. release vs. debug) are placed in different directories by the build script. Hence, several builds can coexist and {{{fast-downward.py}}} must be told which build to use. By default, the {{{release}}} build is used, which is also the default build produced by {{{build.py}}}. To use a different build, pass {{{--build=<name>}}} to the driver script. The parameter {{{--debug}}} is an alias for {{{--build=debug --validate}}}. '''Note on IDE projects (Visual Studio, XCode)''': You can use the CMake build system to generate a project for you favourite IDE. These projects are what CMake calls "multi-config generators", i.e., they are created without fixing the build configuration. At build time, the IDE decides whether to do a debug or release build and creates subdirectories in the output folder. Use the full path to the binaries as the value of {{{--build}}} (e.g., {{{--build=path/to/visual/studio/project/bin/Debug/}}}). == Exit codes == The driver exits with 0 if no errors are encountered. Otherwise, it returns the exit code of the first component that failed. The exit codes are documented at ExitCodes. == LP support == Features that use an LP solver have a command-line option `lpsolver` to switch between different solver types. See [[http://issues.fast-downward.org/issue752|issue752]] and [[http://issues.fast-downward.org/issue1076|issue1076]] for a discussion of the relative performance of CPLEX and !SoPlex. Note that !SoPlex is not a MIP solver, so using it for configurations that require integer variables will result in an error. Please use CPLEX for such cases. == Examples == === A* search === {{{#!highlight bash # landmark-cut heuristic ./fast-downward.py domain.pddl task.pddl --search "astar(lmcut())" # iPDB heuristic with default settings ./fast-downward.py domain.pddl task.pddl --search "astar(ipdb())" # blind heuristic ./fast-downward.py domain.pddl task.pddl --search "astar(blind())" |
Line 23: | Line 52: |
* `OUTPUT.SAS` (filename): translator output Note: Creates a file called output <<Anchor(search)>> == Search component == {{{ downward [OPTIONS] --search SEARCH < OUTPUT }}} * `SEARCH` (SearchEngine): configuration of the search algorithm * `OUTPUT` (filename): preprocessor output Options: * `--heuristic` [[ReusingHeuristics#predefinition|HEURISTIC_PREDEFINITION]] Predefines a heuristic that can afterwards be referenced by the name that is specified in the definition. * `--random-seed` SEED Use random seed SEED === Examples === A* search: {{{#!highlight bash # landmark-cut heuristic (previously configuration "ou") ./downward --search "astar(lmcut())" < ./output # merge-and-shrink heuristic with default settings (previously configuration "oa50000") ./downward --search "astar(mas())" < ./output # blind heuristic (previously configuarion "ob") ./downward --search "astar(blind())" < ./output }}} Lazy greedy best first search with preferred operators and the queue alternation method: |
=== Lazy greedy best-first search with preferred operators and the queue alternation method === |
Line 63: | Line 56: |
./downward --heuristic "hff=ff()" --heuristic "hcea=cea()" \ --search "lazy_greedy(hff, hcea, preferred=(hff, hcea))" \ < ./output |
./fast-downward.py domain.pddl task.pddl \ --evaluator "hff=ff()" --evaluator "hcea=cea()" \ --search "lazy_greedy([hff, hcea], preferred=[hff, hcea])" \ |
Line 68: | Line 62: |
./downward --heuristic "hff=ff()" \ --search "lazy_greedy(hff, preferred=(hff))" \ < ./output |
./fast-downward.py domain.pddl task.pddl \ --evaluator "hff=ff()" \ --search "lazy_greedy([hff], preferred=[hff])" \ |
Line 73: | Line 68: |
./downward --heuristic "hcea=cea()" \ --search "lazy_greedy(hcea, preferred=(hcea))" \ < ./output |
./fast-downward.py domain.pddl task.pddl \ --evaluator "hcea=cea()" \ --search "lazy_greedy([hcea], preferred=[hcea])" \ |
Line 78: | Line 74: |
The above examples use the new best-first search implementation. For comparison, the old best-first search implementation is still available: |
=== LAMA 2011 === |
Line 81: | Line 77: |
./downward --heuristic "hff=ff()" --heuristic "hcea=cea()" \ --search "old_greedy(hff, hcea, preferred=(hff, hcea))" \ < ./output |
./fast-downward.py --alias seq-sat-lama-2011 domain.pddl task.pddl |
Line 86: | Line 80: |
If you would like to have another translation from an old-style configuration to the new call-syntax, please add it here as a TODO. |
runs the "LAMA 2011 configuration" of the planner. (Note that this is not really the same as "LAMA 2011" as it participated at IPC 2011 because there have been bug fixes and other changes to the planner since 2011. See IpcPlanners for more information.) To find out which actual search options the LAMA 2011 configuration corresponds to, check the source code of the {{{src/driver/aliases.py}}} module. <<Anchor(64bit)>> == 64-bit mode == Older planner versions built the planner in 32-bit mode by default because of lower memory consumption. As part of the meta issue [[http://issues.fast-downward.org/issue213|issue213]] we decreased the memory consumption of 64-bit builds to the point where there should be no difference between 32- and 64-bit builds for most configurations. Therefore, we use the native bitwidth of the operating system since January 2019. == Other questions? == Please get in touch! See the HomePage for various contact options. |
Back to HomePage.
Usage
Before running Fast Downward, you must build it using the build.py script.
To run Fast Downward, use the fast-downward.py driver script. At minimum, you need to specify the PDDL input files and search options consisting of a search algorithm with one or more evaluator specifications. The driver script has many options to do things like running portfolios, running only the translation component of the planner, using a non-standard build, running a plan validator and various other things. To see the complete list of options, run
./fast-downward.py --help
If you want to run any of the planners based on Fast Downward that participated in IPC 2011, please also check IpcPlanners.
Caveats
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.
Different builds
Different builds of Fast Downward (e.g. release vs. debug) are placed in different directories by the build script. Hence, several builds can coexist and fast-downward.py must be told which build to use. By default, the release build is used, which is also the default build produced by build.py. To use a different build, pass --build=<name> to the driver script. The parameter --debug is an alias for --build=debug --validate.
Note on IDE projects (Visual Studio, XCode): You can use the CMake build system to generate a project for you favourite IDE. These projects are what CMake calls "multi-config generators", i.e., they are created without fixing the build configuration. At build time, the IDE decides whether to do a debug or release build and creates subdirectories in the output folder. Use the full path to the binaries as the value of --build (e.g., --build=path/to/visual/studio/project/bin/Debug/).
Exit codes
The driver exits with 0 if no errors are encountered. Otherwise, it returns the exit code of the first component that failed. The exit codes are documented at ExitCodes.
LP support
Features that use an LP solver have a command-line option lpsolver to switch between different solver types. See issue752 and issue1076 for a discussion of the relative performance of CPLEX and SoPlex.
Note that SoPlex is not a MIP solver, so using it for configurations that require integer variables will result in an error. Please use CPLEX for such cases.
Examples
A* search
Lazy greedy best-first search with preferred operators and the queue alternation method
1 ## using FF heuristic and context-enhanced additive heuristic (previously: "fFyY")
2 ./fast-downward.py domain.pddl task.pddl \
3 --evaluator "hff=ff()" --evaluator "hcea=cea()" \
4 --search "lazy_greedy([hff, hcea], preferred=[hff, hcea])" \
5
6
7 ## using FF heuristic (previously: "fF")
8 ./fast-downward.py domain.pddl task.pddl \
9 --evaluator "hff=ff()" \
10 --search "lazy_greedy([hff], preferred=[hff])" \
11
12
13 ## using context-enhanced additive heuristic (previously: "yY")
14 ./fast-downward.py domain.pddl task.pddl \
15 --evaluator "hcea=cea()" \
16 --search "lazy_greedy([hcea], preferred=[hcea])" \
17
LAMA 2011
./fast-downward.py --alias seq-sat-lama-2011 domain.pddl task.pddl
runs the "LAMA 2011 configuration" of the planner. (Note that this is not really the same as "LAMA 2011" as it participated at IPC 2011 because there have been bug fixes and other changes to the planner since 2011. See IpcPlanners for more information.) To find out which actual search options the LAMA 2011 configuration corresponds to, check the source code of the src/driver/aliases.py module.
64-bit mode
Older planner versions built the planner in 32-bit mode by default because of lower memory consumption. As part of the meta issue issue213 we decreased the memory consumption of 64-bit builds to the point where there should be no difference between 32- and 64-bit builds for most configurations. Therefore, we use the native bitwidth of the operating system since January 2019.
Other questions?
Please get in touch! See the HomePage for various contact options.