Skip to content
AI-PlanningPublic

About

Unquestionable PDDL 3.1 parser

Topics

Resources

Contributing

Stars

180 stars

Watchers

8 watching

Forks

Repository files navigation

pddl

PyPI PyPI - Python Version PyPI - Status PyPI - Implementation PyPI - Wheel GitHub

test lint docs codecov

pddl aims to be an unquestionable and complete parser for PDDL 3.1.

Install

  • from PyPI:
pip install pddl
  • from source (main branch):
pip install git+https://github.com/AI-Planning/pddl.git
  • or, clone the repository and install:
git clone https://github.com/AI-Planning/pddl.git
cd pddl
pip install .

Quickstart

You can use the pddl package in two ways: as a library, and as a CLI tool.

As a library

This is an example of how you can build a PDDL domain or problem programmatically:

from pddl.logic import Predicate, constants, variables
from pddl.core import Domain, Problem
from pddl.action import Action
from pddl.requirements import Requirements

# set up variables and constants
x, y, z = variables("x y z", types=["type_1"])
a, b, c = constants("a b c", type_="type_1")

# define predicates
p1 = Predicate("p1", x, y, z)
p2 = Predicate("p2", x, y)

# define actions
a1 = Action(
    "action-1",
    parameters=[x, y, z],
    precondition=p1(x, y, z) & ~p2(y, z),
    effect=p2(y, z),
)

# define the domain object.
requirements = [Requirements.STRIPS, Requirements.TYPING]
domain = Domain(
    "my_domain",
    requirements=requirements,
    types={"type_1": None},
    constants=[a, b, c],
    predicates=[p1, p2],
    actions=[a1],
)

print(domain)

that gives:

(define (domain my_domain)
    (:requirements :strips :typing)
    (:types type_1)
    (:constants a b c - type_1)
    (:predicates (p1 ?x - type_1 ?y - type_1 ?z - type_1)  (p2 ?x - type_1 ?y - type_1))
    (:action action-1
        :parameters (?x - type_1 ?y - type_1 ?z - type_1)
        :precondition (and (p1 ?x ?y ?z) (not (p2 ?y ?z)))
        :effect (p2 ?y ?z)
    )
)

As well as a PDDL problem:

problem = Problem(
    "problem-1",
    domain=domain,
    requirements=requirements,
    objects=[a, b, c],
    init=[p1(a, b, c), ~p2(b, c)],
    goal=p2(b, c),
)
print(problem)

Output:

(define (problem problem-1)
    (:domain my_domain)
    (:requirements :strips :typing)
    (:objects a b c - type_1)
    (:init (not (p2 b c)) (p1 a b c))
    (:goal (p2 b c))
)

Example parsing:

from pddl import parse_domain, parse_problem, parse_plan

domain = parse_domain("d.pddl")
problem = parse_problem("p.pddl")
plan = parse_plan("p.plan")

As CLI tool

The package can also be used as a CLI tool. Supported invocations are:

  • pddl DOMAIN_FILE: validate a PDDL domain file, and print it formatted.
  • pddl DOMAIN_FILE PROBLEM_FILE: validate both files, check the problem against the domain, and print both formatted.
  • pddl DOMAIN_FILE PROBLEM_FILE PLAN_FILE: validate all three files, check the plan against the domain and problem, and print all formatted.

Features

Supported PDDL 3.1 requirements:

  • :strips
  • :typing
  • :negative-preconditions
  • :disjunctive-preconditions
  • :equality
  • :existential-preconditions
  • :universal-preconditions
  • :quantified-preconditions
  • :conditional-effects
  • :fluents
  • :numeric-fluents
  • :non-deterministic (see 6th IPC: Uncertainty Part)
  • :adl
  • :durative-actions
  • :duration-inequalities
  • :derived-predicates
  • :timed-initial-literals
  • :preferences
  • :constraints
  • :action-costs

Development

If you want to contribute, here's how to set up your development environment.

  • Install uv
  • Clone the repository: git clone https://github.com/AI-Planning/pddl.git && cd pddl
  • Install development dependencies: uv sync --dev
  • Install the git hooks: uv run pre-commit install

Tests

To run tests: uv run tox

To run only the code tests: uv run tox -e py310

To run only the code style checks: uv run ruff check .

Docs

To build the docs: mkdocs build

To view documentation in a browser: mkdocs serve and then go to http://localhost:8000

Authors

License

pddl is released under the MIT License.

Copyright (c) 2021-2025 WhiteMech

Acknowledgements

The pddl project is partially supported by the ERC Advanced Grant WhiteMech (No. 834228), the EU ICT-48 2020 project TAILOR (No. 952215), the PRIN project RIPER (No. 20203FFYLK), and the JPMorgan AI Faculty Research Award "Resilience-based Generalized Planning and Strategic Reasoning".

About

Unquestionable PDDL 3.1 parser

Topics

Resources

Contributing

Stars

180 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages