Symbolic planners for problems and domains specified in PDDL.
34 Stars
Updated Last
1 Year Ago
Started In
August 2020


Documentation (Stable) Documentation (Latest) GitHub Workflow Status GitHub release (latest SemVer) License

Symbolic planners for problems and domains specified in PDDL.


Make sure PDDL.jl is installed. For the stable version, press ] to enter the Julia package manager REPL, then run:

add SymbolicPlanners

For the latest development version, run:



  • Forward state-space planning (A*, BFS, etc.)
  • Backward (i.e. regression) planning
  • Policy-based planning (RTDP, RTHS, MCTS, etc.)
  • Relaxed-distance heuristics (Manhattan, hadd, hmax, etc.)
  • Policy and plan simulation
  • Modular framework for goal, reward and cost specifications
  • Support for PDDL domains with numeric fluents and custom datatypes


A simple usage example is shown below. More information can be found in the documentation.

using PDDL, PlanningDomains, SymbolicPlanners

# Load Blocksworld domain and problem
domain = load_domain(:blocksworld)
problem = load_problem(:blocksworld, "problem-4")

# Construct initial state from domain and problem
state = initstate(domain, problem)

# Construct goal specification that requires minimizing plan length
spec = MinStepsGoal(problem)

# Construct A* planner with h_add heuristic
planner = AStarPlanner(HAdd())

# Find a solution given the initial state and specification
sol = planner(domain, state, spec)





After Julia's JIT compilation, and using the same search algorithm (A*) and search heuristic (hadd), SymbolicPlanners.jl with the PDDL.jl compiler is (as of February 2022):

  • 10 to 50 times as fast as Pyperplan,
  • 0.1 to 1.2 times as fast as FastDownward,
  • 0.7 to 36 times as fast as ENHSP on numeric domains without action costs.

A comparison on domains and problems from the 2000 and 2002 International Planning Competitions is shown below. Runtimes are relative to SymbolicPlanners.jl using the PDDL.jl compiler. In each cell, we report the first quartile (Q1), median (M), and third quartile (Q3) across solved problems. Experiment code is available here.

Runtime comparison for SymbolicPlanners.jl vs. Pyperplan, FastDownward and ENHSP

Used By Packages