### Install Project Requirements Source: https://github.com/aibasel/downward/blob/main/misc/website/README.md Installs the necessary Python packages listed in 'requirements.txt'. Ensure your virtual environment is activated. ```bash python3 -m pip install -r requirements.txt ``` -------------------------------- ### Install and Build SoPlex on Linux/macOS Source: https://github.com/aibasel/downward/blob/main/BUILD.md Installs the GMP library, downloads, builds, and installs SoPlex version 7.1.0, and sets the soplex_DIR environment variable. ```bash sudo apt install libgmp3-dev wget https://github.com/scipopt/soplex/archive/refs/tags/release-710.tar.gz -O - | tar -xz cmake -S soplex-release-710 -B build cmake --build build export soplex_DIR=/opt/soplex-7.1.0 cmake --install build --prefix $soplex_DIR rm -rf soplex-release-710 build ``` -------------------------------- ### New Option Parser 'let' Syntax Example Source: https://github.com/aibasel/downward/blob/main/CHANGES.md Demonstrates the new 'let' syntax for defining features and parsing them from the command line, allowing variables for heuristics and landmark graphs. ```bash let(h, lmcut(), astar(h)) ``` -------------------------------- ### Serve the Website Locally Source: https://github.com/aibasel/downward/blob/main/misc/website/README.md Navigates into the 'build' directory and starts a local web server using mkdocs to view the generated website. A specific port (8001) is used here, but can be changed. ```bash cd build mkdocs serve -a localhost:8001 ``` -------------------------------- ### List Parameter Example Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Shows the syntax for specifying a list parameter, which must be enclosed in square brackets. ```plaintext lazy_greedy([h1, h2], preferred=[]) ``` -------------------------------- ### A* Search with LM-cut Heuristic Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md Example of a recommended search configuration using the A* algorithm with the LM-cut heuristic. This can also be run using the 'seq-opt-lmcut' alias. ```bash ./fast-downward.py [] --search "astar(lmcut())" ``` ```bash ./fast-downward.py --alias seq-opt-lmcut [] ``` -------------------------------- ### Install Mandatory Dependencies on Debian/Ubuntu Source: https://github.com/aibasel/downward/blob/main/BUILD.md Installs CMake, a C++ compiler, Make, and Python 3 required for running the planner. ```bash sudo apt install cmake g++ make python3 ``` -------------------------------- ### Sample Variables Section (Gripper Domain) Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md This example demonstrates the structure of the variables section for the Gripper domain. It shows how finite-domain variables are defined, including their names, axiom layers, ranges, and symbolic value names corresponding to PDDL facts or 'none of those' states. ```pddl 7 begin_variable var0 -1 5 Atom carry(ball1, right) Atom carry(ball2, right) Atom carry(ball3, right) Atom free(right) Atom carry(ball4, right) end_variable begin_variable var1 -1 5 Atom carry(ball3, left) Atom free(left) Atom carry(ball2, left) Atom carry(ball1, left) Atom carry(ball4, left) end_variable begin_variable var2 -1 3 Atom at(ball4, rooma) Atom at(ball4, roomb) end_variable begin_variable var3 -1 3 Atom at(ball3, rooma) Atom at(ball3, roomb) end_variable begin_variable var4 -1 3 Atom at(ball1, rooma) Atom at(ball1, roomb) end_variable begin_variable var5 -1 3 Atom at(ball2, rooma) Atom at(ball2, roomb) end_variable begin_variable var6 -1 2 Atom at-robby(roomb) Atom at-robby(rooma) end_variable ``` -------------------------------- ### Set up Vagrant VM with LP Solvers Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Configure your virtual machine for Fast Downward, including the CPLEX LP solver. Set the DOWNWARD_LP_INSTALLERS environment variable to the path of your LP solver installers before running `vagrant up`. ```bash export DOWNWARD_LP_INSTALLERS= vagrant up ``` -------------------------------- ### Enumeration Parameter Example Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Demonstrates specifying an enumeration parameter by name. Enumeration names are not case-sensitive. ```plaintext eager_greedy([h1,h2], cost_type=normal) ``` -------------------------------- ### Get Search Plugin Help Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Command to retrieve help information for a specific search plugin, including its parameters and their types. Replace with the actual plugin name. ```bash ./fast-downward.py --search "" --help // e.g. with =astar ``` -------------------------------- ### Sample Operator Section (Gripper Domain) Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md Illustrates the structure of operator definitions for the Gripper domain, showing the total number of operators and detailed examples of 'move' and 'pick' operators. ```plaintext 34 begin_operator move rooma roomb 0 1 0 6 1 0 0 end_operator begin_operator pick ball4 rooma left 1 6 1 2 0 1 1 4 0 2 0 2 0 end_operator [... 31 operators omitted] begin_operator pick ball1 roomb right 1 6 0 2 0 0 3 0 0 4 1 2 0 end_operator ``` -------------------------------- ### Search Plugin Example Call Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Illustrates a search plugin call with mandatory and optional parameters, including list and enumeration types. Parameters can be specified by keyword or position. ```plaintext name(p, qs, r, s=v1, t=Enum1) ``` -------------------------------- ### Solve Planning Task with Docker, LM-cut, and Volume Mount Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Example of solving a planning task with Docker, mounting a local directory for benchmarks. Ensure `` is an absolute path to your PDDL files. The `-v` flag maps your local directory to `/benchmarks` inside the container. ```bash sudo docker run --rm -v :/benchmarks aibasel/downward \ /benchmarks/ /benchmarks/ \ --search "astar(lmcut())" ``` -------------------------------- ### Solve Planning Task with Apptainer and LM-cut Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Example of solving a planning task using A* search with the LM-cut heuristic via Apptainer. Provide paths to your domain and task PDDL files. ```bash ./fast-downward.sif --search "astar(lmcut())" ``` -------------------------------- ### Initial State Definition Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md Specifies the initial value for each state variable. This section is used to define the starting configuration of the task. ```plaintext begin_state 3 1 0 0 0 0 1 end_state ``` -------------------------------- ### Define and Use Variables with 'let' Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Example of using the 'let' expression to define a variable for a heuristic and then use it in multiple search configurations. This avoids recomputing the same feature. ```bash --search "let(lm, lm_hm(m=2), iterated([lazy_greedy([landmark_sum(lm)]), lazy_greedy([landmark_cost_partitioning(lm))]))" ``` -------------------------------- ### Integer Parameter with Suffix Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Example of specifying an integer parameter with a multiplier suffix. '2K' is equivalent to 2000. ```plaintext bound=2K ``` -------------------------------- ### Get Enumeration Names Help Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Command to retrieve help for a search plugin, useful for finding valid enumeration names for its parameters. Replace with the plugin's name. ```bash ./fast-downward.py --search "" --help // e.g. with =eager_greedy ``` -------------------------------- ### Efficient Lazy Greedy Search with Let Expression Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md This example shows how to circumvent the inefficiency of computing the same heuristic multiple times by using a 'let'-expression to define and reuse the heuristic. ```bash ./fast-downward.py [] \ --search "let(hff, ff(), lazy_greedy([hff], preferred=[hff]))" ``` -------------------------------- ### Download Fast Downward Apptainer Image Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Use this command to pull the latest Fast Downward Apptainer image from Docker Hub. Ensure Apptainer is installed on your system. ```bash apptainer pull fast-downward.sif docker://aibasel/downward:latest ``` -------------------------------- ### Run IPC 2018 Stone Soup Cost-Bounded Planner Source: https://github.com/aibasel/downward/blob/main/docs/ipc-planners.md Example of running the IPC 2018 cost-bounded track Fast Downward Stone Soup planner, specifying a plan cost bound of 20 and a 30-minute overall time limit. ```bash ./fast-downward.py --portfolio-single-plan --portfolio-bound=20 --alias seq-sat-fdss-2018 --overall-time-limit 30m ../benchmarks/depot/p01.pddl ``` -------------------------------- ### Validate a Plan Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md Use this command to validate a plan generated by a search algorithm using the VAL tool. VAL must be installed and in the PATH. The search algorithm must be specified. ```bash ./fast-downward.py --validate [] \ --search "()" ``` -------------------------------- ### Case-Insensitive Search Plugin Call Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Demonstrates that search plugin names, parameter names, and enumeration names are not case-sensitive. This example shows an equivalent call with different casing. ```plaintext AsTaR(BlInd(verBosiTy=VeRBosE)) ``` -------------------------------- ### Old-style Predefinition for Landmarks Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Deprecated syntax for predefining landmarks, which is internally converted to a 'let' expression. This example shows how landmarks named 'name' are defined. ```bash --landmarks "name=definition" --search "expression" ``` -------------------------------- ### Run IPC 2018 Stone Soup Satisficing Planner Source: https://github.com/aibasel/downward/blob/main/docs/ipc-planners.md Example of running the IPC 2018 satisficing track Fast Downward Stone Soup planner with a 30-minute overall time limit. ```bash ./fast-downward.py --alias seq-sat-fdss-2018 --overall-time-limit 30m ../benchmarks/depot/p01.pddl ``` -------------------------------- ### Old-style Predefinition for Evaluator Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Deprecated syntax for predefining an evaluator, which is internally converted to a 'let' expression. This example shows how an evaluator named 'name' is defined. ```bash --evaluator "name=definition" --search "expression" ``` -------------------------------- ### Inefficient Lazy Greedy Search Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md This example demonstrates a potentially inefficient search configuration where the FF heuristic is computed twice per state. It is provided to illustrate a common pitfall. ```bash ./fast-downward.py [] \ --search "lazy_greedy([ff()], preferred=[ff()])" ``` -------------------------------- ### Conditional Search Options Example Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Use selectors like --if-unit-cost and --if-non-unit-cost to apply different evaluator and search configurations based on task properties. Options following a selector are active until overridden by another selector. ```bash --if-unit-cost --evaluator "h1=ff()" --evaluator "h2=blind()" \ --if-non-unit-cost --evaluator "h1=cea()" --evaluator "h2=lmcut()" \ --always --search "eager_greedy([h1, h2])" ``` -------------------------------- ### Run LAMA 2011 Configuration Alias Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md Example of running a specific planner configuration using its alias. Note that this may not be identical to the original IPC 2011 configuration due to subsequent updates. ```bash ./fast-downward.py --alias seq-sat-lama-2011 [] ``` -------------------------------- ### Search Plugin Call Variants Source: https://github.com/aibasel/downward/blob/main/docs/search-plugin-syntax.md Shows different ways to call a search plugin, demonstrating default value usage and keyword parameter ordering. The first example uses default values for 's' and 't'. The second specifies 't' while 's' uses its default. The third shows keyword-based ordering. ```plaintext name(P, [Q], R) ``` ```plaintext name(P, [Q1, Q2], R, t=Enum2) ``` ```plaintext name(t=Enum1, r=R, qs=[Q1, Q2], s=S1, p=P) ``` -------------------------------- ### Build Script Order Execution Source: https://github.com/aibasel/downward/blob/main/CHANGES.md Demonstrates how to specify the build order for different configurations using the build script. Previously, the order was arbitrary. ```bash ./build.py debug release ``` -------------------------------- ### Show Fast Downward Help Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md Run this command to see the complete list of options available for the driver script. ```bash ./fast-downward.py --help ``` -------------------------------- ### Upload Benchmarks and Run Planner on Vagrant VM Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Use these commands to upload benchmark files to your Vagrant machine, log in, run the planner with specific options, and then log out and halt the machine. ```bash vagrant upload benchmarks/ vagrant ssh downward/fast-downward.py \ /vagrant/benchmarks/ /vagrant/benchmarks/ \ --search "astar(lmcut())" logout vagrant halt ``` -------------------------------- ### Run Fast Downward Planner with Apptainer Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Execute the Fast Downward planner using the downloaded Apptainer image. Replace `` with your desired planner configurations. ```bash ./fast-downward.sif ``` -------------------------------- ### Set CPLEX Environment Variable on Ubuntu Source: https://github.com/aibasel/downward/blob/main/BUILD.md Sets the CPLEX directory environment variable for Fast Downward to locate the CPLEX installation. ```bash export cplex_DIR=/opt/ibm/ILOG/CPLEX_Studio2211/cplex ``` -------------------------------- ### Obtain Git Revision Source: https://github.com/aibasel/downward/blob/main/src/search/CMakeLists.txt Executes a Git command to get the short hash of the current commit. This is used to embed version information into the build. ```cmake execute_process( COMMAND git log -1 "--format=format:%h%n" HEAD OUTPUT_VARIABLE GIT_REVISION RESULT_VARIABLE GIT_REVISION_EXITCODE OUTPUT_STRIP_TRAILING_WHITESPACE ) ``` -------------------------------- ### Run Fast Downward Planner with Options Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Execute the planner from the source directory, providing the domain and task PDDL files along with search strategy options. ```bash ./fast-downward.py ``` ```bash ./fast-downward.py --search "astar(lmcut())" ``` -------------------------------- ### Build the Website Source: https://github.com/aibasel/downward/blob/main/misc/website/README.md Executes the build script to generate the local website. The output will be placed in the 'build' directory. ```bash ./build_website.py ``` -------------------------------- ### Sample Axiom Section (Gripper Domain) Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md This sample shows an empty axiom section, indicating no axiom rules are present in the Gripper domain. ```plaintext 0 ``` -------------------------------- ### Configure Build Settings Source: https://github.com/aibasel/downward/blob/main/src/search/CMakeLists.txt Sets up build types (Debug, Release) and general project options. This prepares the build environment for different configurations. ```cmake report_bitwidth() set_up_build_types("Debug;Release") set_up_options() ``` -------------------------------- ### Compile Fast Downward Planner Source: https://github.com/aibasel/downward/blob/main/BUILD.md Builds the default 'release' version of the Fast Downward planner. Use './build.py --help' for more options. ```bash ./build.py ``` -------------------------------- ### Define Project and Executable Source: https://github.com/aibasel/downward/blob/main/src/search/CMakeLists.txt Initializes the project with the name 'downward' and specifies 'planner.cc' as the source file for the main executable. ```cmake project(downward LANGUAGES CXX) add_executable(downward planner.cc) ``` -------------------------------- ### Sample Axiom Section (Miconic-FullADL Domain) Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md This sample demonstrates a single axiom rule with two conditions and a head that updates a state variable. It's used for domains with derived predicates or non-STRIPS features. ```plaintext 1 begin_rule 2 1 0 3 0 5 0 1 end_rule ``` -------------------------------- ### Test Fast Downward Planner Build Source: https://github.com/aibasel/downward/blob/main/BUILD.md Runs the Fast Downward planner on a sample PDDL problem with the A* search algorithm and LM-Cut heuristic. ```bash ./fast-downward.py misc/tests/benchmarks/miconic/s1-0.pddl --search "astar(lmcut())" ``` -------------------------------- ### Run LAMA-2011 IPC Configuration Source: https://github.com/aibasel/downward/blob/main/docs/ipc-planners.md Demonstrates how to run the LAMA-2011 IPC configuration using its specific alias on a gripper task. ```bash ./fast-downward.py --alias seq-sat-lama-2011 misc/tests/benchmarks/gripper/prob01.pddl ``` -------------------------------- ### Test Fast Downward LP Solver Support Source: https://github.com/aibasel/downward/blob/main/BUILD.md Tests the Fast Downward planner's support for LP solvers using a specific search configuration that includes LM-Cut constraints. ```bash ./fast-downward.py misc/tests/benchmarks/miconic/s1-0.pddl --search "astar(operatorcounting([lmcut_constraints()]))" ``` -------------------------------- ### Run Fast Downward Planner with Docker Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Execute the Fast Downward planner using a Docker container. Note that `sudo` may be required, and the image is downloaded as a side effect. The `-rm` flag cleans up the container after execution. ```bash sudo docker run aibasel/downward ``` -------------------------------- ### Build Fast Downward from Tarball Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Download and extract the tarball for a specific release, then navigate into the directory and run the build script to compile the planner. ```bash tar -xvzf fast-downward-24.06.1.tar.gz cd fast-downward-24.06.1 ./build.py ``` -------------------------------- ### Compile Fast Downward Planner on Windows Source: https://github.com/aibasel/downward/blob/main/BUILD.md Compiles the Fast Downward planner on Windows using 'python3 build.py' and passing build options without '--'. ```bash python3 build.py build=debug ``` -------------------------------- ### Show Available IPC Aliases Source: https://github.com/aibasel/downward/blob/main/docs/ipc-planners.md Command to display all available short aliases for IPC configurations supported by Fast Downward. ```bash ./fast-downward.py --show-aliases ``` -------------------------------- ### Build VAL Plan Validation Software Source: https://github.com/aibasel/downward/blob/main/BUILD.md Clones the VAL repository, checks out a specific commit, removes old binaries, ignores compiler warnings, and builds the plan validator. ```bash sudo apt install g++ make flex bison git clone https://github.com/KCL-Planning/VAL.git cd VAL git checkout a5565396007eee73ac36527fbf904142b3077c74 make clean # Remove old binaries. sed -i 's/-Werror //g' Makefile # Ignore warnings. make ``` -------------------------------- ### Sample Operator with Effect Conditions and Cost (Schedule Domain) Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md Demonstrates an operator definition from the Schedule domain that includes effect conditions and explicit action costs, showcasing the use of -1 for the 'don't care' value in effect preconditions. ```plaintext begin_operator do-polish a0 1 7 0 4 0 24 1 0 0 3 -1 0 1 29 1 29 -1 0 0 22 1 0 7 end_operator ``` -------------------------------- ### Set Minimum CMake Version and Project Source: https://github.com/aibasel/downward/blob/main/src/CMakeLists.txt Specifies the minimum required CMake version and defines the project name, description, and homepage URL. ```cmake cmake_minimum_required(VERSION 3.16) project(fast-downward DESCRIPTION "Fast Downward is a domain-independent classical planning system." HOMEPAGE_URL https://www.fast-downward.org/) ``` -------------------------------- ### Deprecated Option Syntax vs. New 'let' Syntax Source: https://github.com/aibasel/downward/blob/main/CHANGES.md The `--evaluator`, `--heuristic`, and `--landmarks` options are deprecated. Use the new `let` syntax for defining and using components. ```bash --evaluator h=EVALUATOR --search SEARCH_ALGORITHM ``` ```bash --search let(h, EVALUATOR, SEARCH_ALGORITHM) ``` -------------------------------- ### Add Search Component as Subdirectory Source: https://github.com/aibasel/downward/blob/main/src/CMakeLists.txt Includes the 'search' component of the planner by adding its directory as a subproject. This allows for modular build configurations. ```cmake add_subdirectory(search) ``` -------------------------------- ### Configure Heuristics with Negated Axioms Source: https://github.com/aibasel/downward/blob/main/CHANGES.md Use this option to configure heuristics that handle negated axioms. `approximate_negative_cycles` is the default and preserves old behavior, while `approximate_negative` may offer less informative heuristics but avoids a potentially exponential number of negated axioms. ```plaintext axioms={approximate_negative,approximate_negative_cycles} ``` -------------------------------- ### Run Fast Downward Planner within Vagrant VM Source: https://github.com/aibasel/downward/blob/main/docs/quick-start.md Execute the Fast Downward planner from within the Vagrant virtual machine. This command assumes you are in the `` directory. ```bash downward/fast-downward.py ``` -------------------------------- ### Create Python Virtual Environment Source: https://github.com/aibasel/downward/blob/main/misc/website/README.md Creates a new Python virtual environment named '.env'. This isolates project dependencies. ```bash python -m venv .env source .env/bin/activate ``` -------------------------------- ### Configure Runtime Output Directory Source: https://github.com/aibasel/downward/blob/main/src/CMakeLists.txt Sets the directory where runtime executables will be placed, typically within the build directory's configuration-specific subdirectory. ```cmake set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) ``` -------------------------------- ### Configure Local Logger in Development Source: https://github.com/aibasel/downward/blob/main/CHANGES.md Provides options for configuring a local logger instead of the global one. Use `add_log_options_to_parser` and `get_log_from_options` to obtain a local log object for configuring verbosity. ```python add_log_options_to_parser(parser) log = get_log_from_options(options) ``` -------------------------------- ### Landmark Heuristic Replacement Source: https://github.com/aibasel/downward/blob/main/CHANGES.md The `lmcount` heuristic has been replaced by `landmark_sum` (for `admissible=false`) and `landmark_cost_partitioning` (for `admissible=true`). ```text landmark_sum ``` ```text landmark_cost_partitioning ``` -------------------------------- ### Handle Windows DLL Copying Source: https://github.com/aibasel/downward/blob/main/src/search/CMakeLists.txt Conditionally copies all DLLs to the binary directory after the build on Windows systems. This ensures that runtime dependencies are available next to the executable. ```cmake if (WIN32) copy_dlls_to_binary_dir_after_build(downward) endif() ``` -------------------------------- ### Update Landmark Factory for Reasonable Orders Source: https://github.com/aibasel/downward/blob/main/CHANGES.md Replaces the `reasonable_orders` option with the new `lm_reasonable_orders_hps` landmark factory. Use this for configuring landmark generation with reasonable orderings. ```sh --evaluator hlm=lmcount(lm_factory=lm_reasonable_orders_hps(lm_rhw())) ``` -------------------------------- ### Version Section Format Source: https://github.com/aibasel/downward/blob/main/docs/translator-output-format.md This section indicates the translator version. It must be present for compatible input. ```plaintext begin_version 3 end_version ``` -------------------------------- ### Translate PDDL to SAS+ Task Source: https://github.com/aibasel/downward/blob/main/docs/planner-usage.md Use this command to translate a PDDL input task into a SAS+ task without performing a search. The domain file is optional; if omitted, 'domain.pddl' in the same directory will be used. Translator options can be specified after '--translator-options'. ```bash ./fast-downward.py --translate [] ```