Home

Awesome

SymbolicPlanners.jl

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

Symbolic planners for problems and domains specified in PDDL.

Installation

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:

add https://github.com/JuliaPlanners/SymbolicPlanners.jl

Features

Usage

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)

Planners

Heuristics

Specifications

Performance

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

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