Planning Domain Definition Language
The Planning Domain Definition Language (PDDL) is a declarative, standardized language in artificial intelligence for specifying planning domains and problems, allowing the formal description of actions, predicates, initial states, and goals to facilitate automated planning and empirical evaluation of planners.[1][2] Developed to provide a neutral, planner-independent notation, PDDL enables consistent representation of classical planning tasks, drawing expressiveness from earlier formalisms like STRIPS for simple actions and ADL for more complex, conditional effects.[1][2]
PDDL was introduced in 1998 by Drew McDermott and a committee for the First Artificial Intelligence Planning Systems Conference (AIPS-98) competition, aiming to standardize problem sets and measure planner performance across diverse systems.[2] Version 1.2, the initial official release, supported two tracks: STRIPS for basic conjunctive preconditions and effects, and ADL for advanced features like universal quantification and conditional effects.[1][3] The language's Lisp-like syntax includes separate files for domains (defining types, constants, predicates, and actions) and problems (specifying objects, initial states, and goals), promoting reusability and comparability in research.[1][2]
Subsequent refinements, such as the subset defined for the AIPS-2000 competition, clarified parsing rules, removed negative preconditions from STRIPS actions, and mandated explicit object listings to ensure compatibility.[3] PDDL 2.1, released in 2003 for the Third International Planning Competition, marked a major extension by incorporating temporal planning through durative actions with start, end, and over-all conditions, alongside numeric fluents for metrics and costs to evaluate plan quality. These additions maintained backward compatibility while expanding expressivity to handle real-world scenarios involving time and resources.
PDDL has since become the de facto standard for the International Planning Competitions (IPCs) and AI planning research, influencing tools, benchmarks, and extensions like probabilistic variants, though its core remains focused on deterministic, symbolic planning.[2]
Introduction
Overview
The Planning Domain Definition Language (PDDL) is a standardized declarative language designed for specifying planning domains and problems in artificial intelligence automated planning. It enables the formal description of the structure of a planning task, including the reusable models of actions and the specific instances of problems to be solved.[4] PDDL separates the general domain knowledge—such as the types of objects and possible actions—from the particular problem details, like initial states and goals, facilitating modular and reusable representations.[5]
A key benefit of PDDL is its promotion of reusability and interoperability, as domain definitions can be applied across multiple problems and solved by various planning algorithms without modification. This separation into domain files and problem files allows planners to focus on search and reasoning while leveraging standardized inputs.[6] Core concepts in PDDL include predicates, which represent atomic propositions about the world state; objects, which instantiate domain entities; actions defined by preconditions (conditions required for applicability) and effects (changes to the state upon execution); initial states specifying the starting world configuration; and goals expressing desired end conditions.[4]
Rooted in the STRIPS planning formalism, PDDL provides a structured way to model deterministic, classical planning scenarios. It serves as the benchmark standard for the International Planning Competitions (IPC), where it is used to evaluate planners on diverse domains since the first competition in 1998. PDDL has evolved through several versions to support increasingly complex planning requirements.[7][8]
History and Development
The Planning Domain Definition Language (PDDL) originated in 1998 as part of the preparations for the first Artificial Intelligence Planning Systems (AIPS) conference planning competition, later known as the International Planning Competition (IPC). It was developed by a committee led by Drew McDermott to establish a standardized format for describing planning domains and problems.[9][2]
The primary goal of PDDL was to create a neutral, declarative language that allowed for the fair comparison of automated planning systems by providing a common syntax for encoding diverse planning tasks, independent of any specific solver's assumptions or optimizations. This addressed the fragmentation in the planning community, where proprietary formats hindered benchmarking.[9][2] PDDL was first adopted in the 1998 IPC, marking the beginning of its widespread use, and has since been integral to every subsequent IPC.[10][11]
Over the years, PDDL's development has been propelled by the planning community's need for greater expressiveness to model complex real-world scenarios, such as temporal and numeric constraints. A seminal contribution came from McDermott's 1998 specification, which defined the core syntax for objects, predicates, actions, and initial states. This was extended in 2003 by Maria Fox and Derek Long with PDDL 2.1, introducing support for durative actions and temporal planning to handle time-dependent domains more effectively.[9][12]
PDDL has no formal standards body; instead, it is maintained as a de facto standard through collaborative efforts in IPC workshops and International Conference on Automated Planning and Scheduling (ICAPS) events, where organizers and participants refine the language based on practical requirements and solver advancements.[13][14]
As of November 2025, PDDL remains the benchmark language for the IPC, with the most recent full competition held in 2023. Related events include the 2024 Planning Domain Modelling Competition (PDMC) at ICAPS, focused on creating high-quality PDDL benchmarks for future IPCs.[14] Recent innovations include integrations with machine learning, such as the PDDL-GenAI plugin presented at ICAPS 2025, which leverages large language models to assist in generating PDDL from natural language descriptions, enhancing accessibility for non-experts.[15]
Core Language Elements
Domain Files
Domain files in the Planning Domain Definition Language (PDDL) provide a reusable description of the actions, predicates, and object types that define the general structure of a planning domain, independent of any specific instance or problem. These files enable the modeling of abstract action schemas that can be applied across multiple problems, promoting modularity and standardization in automated planning. The core purpose is to encapsulate the domain's logical and structural elements, allowing planners to reason about possible state transitions without reference to particular objects or initial conditions.[9]
The structure of a domain file begins with a top-level declaration (define (domain <name>) ... ), where <name> is a unique identifier for the domain, such as "blocksworld". Within this declaration, various optional components can appear in any order, including requirements, types, constants, predicates, functions, and actions. This flexible organization ensures that only necessary elements are specified, while the enclosing form delimits the entire domain definition.[9]
The requirements clause, denoted (:requirements <require-key> +), specifies the language features and expressiveness levels supported or required by the domain, such as :strips for basic STRIPS-style planning, :typing for object typing, :adl for action description language extensions including quantifiers and conditional effects, or :equality for explicit equality checks. This clause informs planners about the domain's complexity and ensures compatibility, with multiple keys listed if multiple features are used. For instance, a domain requiring typed parameters and conditional effects would include both :typing and :adl.[9]
Types and constants establish the ontology of objects in the domain. The types declaration (:types <typed-list>) supports hierarchical typing, where subtypes inherit from parent types, starting from a root object type if not specified otherwise; for example, block - object defines blocks as a subtype of objects, and further subtypes like smallblock - block can be added. Constants are declared via (:constants <name> - <type> +), defining fixed objects like table - location that behave as typed objects but remain invariant across problems. These elements allow for efficient parameterization of actions and predicates, reducing redundancy and enabling type checking during planning. For numeric fluents under the :fluents requirement, they are declared as constants of type (fluent number), e.g., (:constants total-cost - (fluent number)).[9]
Predicates define the boolean state variables of the domain using (:predicates <atomic-formula-skeleton> +), where each skeleton is an atomic formula with typed variables, such as (on ?x - block ?y - block) to represent one block stacked on another. These predicates form the basis for describing world states as conjunctions of true or false instances. Functions extend predicates by enabling arithmetic expressions in preconditions and effects, though they are optional for propositional domains.[9]
Actions are the central component, modeling state transitions via schemas declared as (:action <action-functor> :parameters (<typed-list (variable)>) [:precondition <GD>] [:effect <effect>]), where <action-functor> is the action name like "move", and parameters are typed variables such as ?x - block ?y - block. The precondition <GD> is a goal description (logical formula) that must hold for the action to be applicable, supporting conjunctions (and), disjunctions (or), negations (not), quantifiers (forall, exists under :adl), and implications. The effect specifies changes to the state, typically as (and <add-list> <delete-list>) for adding or deleting predicates in STRIPS-style, or more expressively with (when <GD> <effect>) for conditional updates and (change <fluent> <expression>) for numeric changes. Effects must preserve frame axioms implicitly, meaning unchanged propositions remain unaffected.[9]
A representative example is the basic blocksworld domain, which models stacking blocks on a table or other blocks. The domain file might appear as follows:
(define (domain [blocksworld](/page/Blocksworld))
(:requirements :strips :[typing](/page/Typing))
(:types block - object)
(:predicates
(on ?x - block ?y - block)
(ontable ?x - block)
(clear ?x - block)
(handempty)
(holding ?x - block)
)
(:action pick-up
:parameters (?x - block)
:precondition (and (clear ?x) (ontable ?x) (handempty))
:effect (and (not (ontable ?x)) (not (clear ?x)) (not (handempty)) (holding ?x))
)
(:action put-down
:parameters (?x - block)
:precondition (holding ?x)
:effect (and (not (holding ?x)) (clear ?x) (handempty) (ontable ?x))
)
(:action stack
:parameters (?x ?y - block)
:precondition (and (holding ?x) (clear ?y))
:effect (and (not (holding ?x)) (not (clear ?y)) (clear ?x) (handempty) (on ?x ?y))
)
(:action unstack
:parameters (?x ?y - block)
:precondition (and (on ?x ?y) (clear ?x) (handempty))
:effect (and (holding ?x) (clear ?y) (not (clear ?x)) (not (handempty)) (not (on ?x ?y)))
)
)
(define (domain [blocksworld](/page/Blocksworld))
(:requirements :strips :[typing](/page/Typing))
(:types block - object)
(:predicates
(on ?x - block ?y - block)
(ontable ?x - block)
(clear ?x - block)
(handempty)
(holding ?x - block)
)
(:action pick-up
:parameters (?x - block)
:precondition (and (clear ?x) (ontable ?x) (handempty))
:effect (and (not (ontable ?x)) (not (clear ?x)) (not (handempty)) (holding ?x))
)
(:action put-down
:parameters (?x - block)
:precondition (holding ?x)
:effect (and (not (holding ?x)) (clear ?x) (handempty) (ontable ?x))
)
(:action stack
:parameters (?x ?y - block)
:precondition (and (holding ?x) (clear ?y))
:effect (and (not (holding ?x)) (not (clear ?y)) (clear ?x) (handempty) (on ?x ?y))
)
(:action unstack
:parameters (?x ?y - block)
:precondition (and (on ?x ?y) (clear ?x) (handempty))
:effect (and (holding ?x) (clear ?y) (not (clear ?x)) (not (handempty)) (not (on ?x ?y)))
)
)
This skeleton includes a "move" action implicitly through pick-up, put-down, stack, and unstack primitives, with predicates capturing spatial relations; the full move can be derived by sequencing these. Domain files pair with problem files to instantiate specific planning tasks by providing objects, initial states, and goals.[9]
Problem Files
Problem files in the Planning Domain Definition Language (PDDL) define specific instances of a planning task by instantiating the abstract domain described in corresponding domain files. These files specify the concrete objects, initial world state, desired goal conditions, and optional optimization criteria for a particular problem, allowing planners to generate sequences of actions that transform the initial state to achieve the goals.[9]
The structure of a PDDL problem file begins with a top-level definition: (define (problem <problem-name>) (:domain <domain-name>)), where <problem-name> is a unique identifier for the instance, and <domain-name> references the associated domain file. This is followed by optional sections for requirements, objects, initial state, goals, and metrics. The file uses a Lisp-like syntax with parenthesized expressions, ensuring modularity by separating the reusable domain logic from problem-specific details.[9][16]
Objects are declared in the (:objects ...) section as a list of named instances with their types, drawn from the domain's type hierarchy. For example, ( :objects block1 block2 - [block](/page/Block) [table](/page/Table) - surface ) instantiates specific blocks and a table, enabling the problem to reuse the domain's predicates and actions with these concrete entities. All objects must have unique names within the problem, and types ensure compatibility with domain definitions.[9][16]
The initial state is specified in the (:init ...) section as a conjunction of ground literals—atomic facts that hold true at the start, using predicates defined in the domain. Under the closed-world assumption, any fact not listed is false. For instance, ( :init (on-table block1) (clear block2) ) indicates block1 is on the table and block2 has nothing on top of it. This section can also include equality assertions or initial values for numeric fluents in extended versions.[9][16]
The goal state is defined in the (:goal ...) section as a goal description (GD), typically a logical conjunction (and) of literals that must become true, though it supports more complex expressions like disjunctions (or), negations (not), and universal quantification (forall) in advanced dialects. An example is ( :goal (and (on block1 block2) (on-table block2)) ), requiring block1 to be stacked on block2, which is on the table. Goals focus on desired end conditions without specifying how to achieve them.[9][16]
Introduced in PDDL 2.1, the optional (:metric ...) section provides an optimization criterion for plan quality, specifying whether to minimize or maximize a numeric expression involving fluents or constants. The syntax is (:metric <minimize | maximize> (<expression>)), where <expression> can include arithmetic operations on numeric state variables. For example, (:metric minimize (total-cost)) aims to find the lowest-cost plan, supporting applications beyond mere satisfiability like temporal or resource-optimized planning. This feature relies on domain-defined numeric fluents but is instantiated per problem.[17][18]
A representative example is the Blocksworld domain, a classic benchmark for stacking blocks on a table using a robotic arm. A simple problem file might instantiate three blocks (A, B, C) with an initial stack of C on B on A (all on the table, arm empty) and a goal of A on B on C. The file could appear as:
(define (problem bw-3-0)
(:domain [blocksworld](/page/Blocksworld))
(:objects A B C - block)
(:init
(ontable A)
(on B A)
(on C B)
(clear C)
(handempty)
)
(:goal (and (on A B) (on B C)))
)
(define (problem bw-3-0)
(:domain [blocksworld](/page/Blocksworld))
(:objects A B C - block)
(:init
(ontable A)
(on B A)
(on C B)
(clear C)
(handempty)
)
(:goal (and (on A B) (on B C)))
)
This setup tests basic stacking and unstacking actions, with the planner deriving a sequence of moves to rearrange the blocks without violating physical constraints like clear spaces.[9][19]
Syntax and Semantics
The syntax of the Planning Domain Definition Language (PDDL) is formally defined using an Extended Backus-Naur Form (EBNF) grammar, which specifies the structure of domain and problem descriptions. Core elements include terms, predicates, preconditions, and effects, designed to model actions and states in a first-order logic fragment suitable for automated planning. Terms are either constants (names) or variables, as given by the production <term> ::= <name> | <variable>. Predicates, which represent boolean fluents, are defined as atomic formula skeletons: <atomic-formula-skeleton> ::= (<predicate> <typed-list <variable>>*), where predicates take typed variable arguments to form propositions about the world.[9]
Preconditions, which specify the conditions under which an action can be applied, are expressed as goal descriptions (GDs), a conjunctive normal form subset of first-order logic. The EBNF for GDs is: <gd> ::= <atomic-formula> | (and <gd>*) | (or <gd>*) | (not <gd>) | (imply <gd> <gd>) | (exists (<typed-list <variable>>*) <gd>) | (forall (<typed-list <variable>>*) <gd>). Here, atomic formulas are ground or schematic instances of predicates with terms substituted for variables, and quantifiers bind variables over typed lists. Effects describe state changes resulting from action execution and follow a similar structure: <effect> ::= (and <c-effect>*) | (not <atomic-formula>) | <atomic-formula> | (forall (<typed-list <variable>>*) <effect>) | (when <gd> <effect>), where conditional effects (when) apply only if the guarding GD holds, and atomic additions or deletions modify fluent values.[9]
Semantically, PDDL operates under the closed-world assumption, where any ground atom not explicitly asserted as true in a state is considered false, enabling complete state representations as sets of positive literals without exhaustive enumeration. A state satisfies a precondition GD if the state, interpreted as a Herbrand model, logically entails the GD under classical first-order semantics, meaning all universally quantified implications hold and existentials are witnessed by state facts. Effects induce state transitions: applying an action adds all positive atomic formulas from its (conditional) effects to the state and deletes those prefixed by not, provided no conflicts arise from simultaneous additions and deletions of the same atom (resolved by addition prevailing in standard semantics).[9][20]
Grounding in PDDL involves instantiating schematic action descriptions by substituting concrete objects for parameters, respecting type constraints (e.g., a variable ?x - robot matches only robot-typed objects), to produce executable ground actions for search. This process generates a finite lifted representation that planners ground further into propositional form for solving. Validity rules ensure well-formedness: all variables in preconditions and effects must be bound via action parameters or quantifiers, with no free variables allowed; undefined fluents (predicates applied to mismatched types) are invalid; and in the basic STRIPS subset (required by :strips), preconditions are restricted to conjunctions of positive atomic formulas, excluding not, or, imply, and quantifiers to maintain simplicity and avoid negative preconditions.[9][20]
PDDL's syntax and semantics differ from full first-order logic (FOL) by restricting expressiveness for planning decidability and efficiency: basic PDDL omits function symbols (using only constants as terms), equality predicates (added in later requirements), and arbitrary nesting of operators to ensure ground instantiations remain finite and tractable for state-space search, though the language supports undecidable fragments when fully quantified. These limitations prioritize heuristic planning over general theorem proving, treating states as explicit interpretations rather than implicit models.[9][20]
Evolution of PDDL Versions
PDDL 1.2
PDDL 1.2, the initial version of the Planning Domain Definition Language, was introduced in 1998 as the problem-specification language for the Artificial Intelligence Planning Systems (AIPS-98) conference and its associated planning competition.[21] This version established a standardized syntax for describing classical planning problems, focusing on discrete, fully observable, and deterministic environments where actions have binary success or failure outcomes.[21] It supported three key requirement tags: :strips for basic action representations inspired by the STRIPS formalism, :adl for advanced definitions including quantifiers, disjunctions, and conditional effects, and :typing for declaring object types and typed parameters in actions and predicates.[21]
The core syntax of PDDL 1.2 emphasized simplicity in action specifications, with preconditions and effects expressed using atomic formulas, conjunctions (and), negations (not), and universal quantifiers (forall) under the :adl requirement. For instance, a basic :strips precondition might be written as (and (at ?x) (not (blocked ?x))), ensuring an object is at a location without obstacles, while effects could update the state as (and (at ?y) (not (at ?x))) to reflect movement.[21] These constructs avoided complex conditionals or nested expressions beyond basic logical operators, promoting straightforward parsing and execution by planners. Domains and problems were separated into files, with domains defining types, predicates, and actions, and problems specifying initial states, goals, and objects.[21]
A notable limitation of PDDL 1.2 was its exclusion of temporal aspects, numeric fluents, or preference-based objectives, restricting it to static planning without durations or continuous changes.[21] This design assumed all actions occur instantaneously in a discrete state space, enabling focus on propositional logic-based reasoning. Despite these constraints, PDDL 1.2 facilitated the first International Planning Competition (IPC) at AIPS-98, where it served as the benchmark language for comparing planners.[22]
In the 1998 IPC, five planners participated using PDDL 1.2 domains: Blackbox, STAN, HSP, IPP, and SGP, with IPP and SGP handling :adl tasks effectively.[2] IPP excelled in solving more problems and generating shorter plans in advanced rounds, while Blackbox demonstrated strong performance in basic :strips scenarios, highlighting the language's role in enabling empirical evaluations of planner scalability and optimality.[23] This adoption marked PDDL 1.2 as the foundational standard for subsequent versions, such as PDDL 2.1, by providing a robust baseline for expressive yet computationally tractable planning representations.[2]
PDDL 2.1
PDDL 2.1, developed by Maria Fox and Derek Long and published in 2003, extended the Planning Domain Definition Language to support temporal planning and numeric state variables, addressing limitations in modeling time-dependent domains such as scheduling and resource management.[24] This version builds on the foundational syntax of PDDL 1.2 by introducing the requirements :durative-actions for actions spanning time intervals and :fluents for continuous numeric values, enabling planners to handle durations and gradual state changes.[24] These additions facilitated the representation of real-world scenarios where actions require processing time and resources vary incrementally, marking a shift from instantaneous actions to dynamic, time-aware planning.[25]
Central to PDDL 2.1 are durative actions, which execute over a specified duration and include conditions and effects partitioned into three phases: at-start (instantaneous at the beginning), over-all (invariant throughout the interval), and at-end (instantaneous at the conclusion).[24] The formal semantics incorporate time stamps, such as (at ?t ...) for point-wise assertions or (over all ...) for interval-based constraints, allowing precise temporal reasoning in plans.[24] Numeric fluents, defined via function symbols like (total-cost), support arithmetic operations (e.g., (+ ?x 1.0)) in preconditions and effects, with changes occurring either discretely at action boundaries or continuously during execution.[24]
PDDL 2.1 introduces optimization through a domain-wide metric expression, typically formulated to minimize makespan (overall plan duration) or total accumulated time, expressed as (:metric minimize (total-duration)) or similar.[24] This feature shifts planning from satisficing to optimal solutions in temporal contexts, with the metric evaluated over the plan's timeline.[24]
The language defines two primary levels for temporal-numeric planning: Level 1, which permits simple numeric fluents with only discrete changes at action start and end points; and Level 2, which extends to full continuous changes, including linear functions over time within durative actions (e.g., (decrease (fuel) (* #t 0.5)) for rate-based consumption).[17] Level 1 suits domains with basic resource tracking without ongoing variation, while Level 2 enables more expressive models like fuel depletion or temperature gradients.[17]
PDDL 2.1 significantly impacted AI planning by serving as the basis for the temporal tracks in the International Planning Competitions of 2002 and 2004, where it tested solvers on domains involving time and metrics.[10] Representative solvers, such as Optic, leverage its full expressivity to generate optimal temporal plans, supporting features like preference-based costs and continuous effects in practice.[26]
PDDL 2.2
PDDL 2.2, introduced in 2004 as a minor update following PDDL 2.1, refined the language to support more expressive modeling in both classical and temporal planning contexts, particularly by incorporating derived predicates and enhancing the integration of temporal elements.[27] This version built directly on the temporal foundations established in PDDL 2.1, such as durative actions, while addressing limitations in expressiveness and computational handling without introducing major syntactic overhauls.[27]
A key addition in PDDL 2.2 was the :derived-predicates feature, which allows predicates to be defined as logical derivations from other facts or predicates, enabling the modeling of computed fluents that do not require dedicated actions for updates.[27] Syntactically, derived predicates are declared within the domain file using the form (:derived <predicate-name> <grounded-expression>), where the expression evaluates to true or false based on the current state.[27] For example, in a blocks world domain, an above predicate could be derived as (:derived (above ?x ?y) (or (on ?x ?y) (exists (?z) (and (on ?x ?z) (above ?z ?y))))), capturing transitive relationships without explicit action effects modifying it directly.[27] Semantically, derived predicates are recomputed at each state transition (or "happening" in temporal plans) using a function that enriches the state with these values, but they are restricted such that no action effects directly modify them, ensuring they remain purely inferential.[27] This feature reintroduced axiom-like capabilities from earlier PDDL versions with a simpler syntax, improving efficiency in domains where indirect consequences, like connectivity or reachability, need to be inferred.[28]
PDDL 2.2 also improved the semantics of durative actions, distinguishing more clearly between event-based and process-based changes to better model temporal dynamics.[27] Event-based effects occur instantaneously at the start, end, or anytime points of an action (e.g., preconditions checked at the beginning and effects applied at closure), while process-based changes apply continuously over the action's duration, such as linear decreases in resource levels.[27] These refinements ensured that state updates in temporal plans account for derived predicates at every happening, allowing for more accurate propagation of inferred facts during concurrent executions.[27] Additionally, conditional effects were extended to durative contexts, using the syntax (:when <[condition](/page/Condition)> <effect>) within action descriptions, where effects trigger only if the condition holds at the relevant temporal point, such as at the start or end of a durative action.[27] This supported nuanced modeling, like resource allocations that depend on runtime states.
To address limitations in handling simultaneous actions, PDDL 2.2 extended mutex (mutual exclusion) reasoning to indirectly account for interactions via derived predicates, preventing conflicts not just from direct precondition-effect overlaps but also from derived fact dependencies.[27] For instance, two concurrent block-moving actions might be deemed mutex if their effects alter base facts that influence a derived above predicate in a way that violates the other's precondition.[27] This enhancement improved plan validity in temporally dense scenarios, reducing invalid parallelizations.
PDDL 2.2 standardized these features for temporal planning tracks in the International Planning Competitions starting from IPC 2006 onward, where level 3 (full temporal support) benchmarks incorporated derived predicates and refined durative semantics to evaluate planners on realistic time-sensitive domains like scheduling and logistics. Later versions, such as PDDL 3.0, built on this by adding constraints to derived predicates for further expressiveness.
PDDL 3.0
PDDL 3.0, introduced in 2005 for the deterministic track of the Fifth International Planning Competition (IPC-5), extended the language to support more expressive specifications of plan quality through constraints and preferences.[29] This version built upon the temporal features of PDDL 2.2 by adding mechanisms to define restrictions on state trajectories and soft goals, enabling planners to optimize plans not just for feasibility but for qualitative and quantitative preferences.[29] The primary additions were the :constraints requirement, which allows hard constraints on the evolution of the world state during plan execution, and preferences integrated into goal definitions for soft constraints that can be violated at a cost.[29]
The :constraints feature permits domain and problem authors to specify conditions that must hold invariantly or at specific points in the plan trajectory, enhancing the ability to model real-world requirements beyond simple reachability goals.[29] Key constraint types include always-within, which requires a condition to hold whenever another predicate is true, bounded by an optional duration; sometime, which mandates that a fluent holds at least once during execution; and forall, enabling universal quantification over objects to apply constraints broadly, such as ensuring every rover's energy remains above a threshold throughout a mission.[29] For example, in a block-stacking domain, a constraint might enforce that fragile blocks remain clear of any objects at all times: (:constraints (always (forall (?b - [block](/page/Block)) (implies (fragile ?b) (clear ?b))))).[29]
Preferences extend the goal structure with the :preferences keyword, allowing soft goals that contribute to an optimization metric when violated.[29] These can be weighted numerically to prioritize certain objectives, such as minimizing fuel usage while preferring plans where cameras are calibrated more often.[29] The metric specification, refined from PDDL 2.2, now incorporates violation costs, e.g., (:metric minimize (+ (* 10 (fuel-used)) (is-violated p))), where p is a preference and is-violated evaluates its satisfaction.[29] This supports multi-objective optimization in planning.[29]
To facilitate adoption in IPC-5, PDDL 3.0 defined compliance levels: Level 3 encompasses the full language with constraints and preferences, while Level 2 omits constraints to align closely with prior versions, focusing on numeric fluents and durative actions without trajectory restrictions.[29] Planners were evaluated separately per level, with Level 3 emphasizing advanced optimization.[29]
The introduction of these features significantly impacted AI planning by enabling dedicated optimal planning tracks in competitions, where success metrics balanced plan quality against computational efficiency, fostering advancements in qualitative reasoning and heuristic search techniques.[8] These elements were further refined in PDDL 3.1.[30]
PDDL 3.1
PDDL 3.1, released in 2011 for the International Planning Competition (IPC) 2011, represents the most recent official version of the Planning Domain Definition Language as of 2025, with no subsequent PDDL 4.0 specification issued. This version builds on PDDL 3.0 by enhancing expressiveness in modeling complex planning domains, particularly through features that support derived knowledge, timed initial literals, action costs, and dynamic object management. It maintains compatibility with prior requirements while introducing syntax for advanced state representations, making it suitable for a wide range of deterministic planning tasks evaluated in IPC benchmarks.[30][31]
PDDL 3.1 continues support for the :derived-predicates requirement, introduced in PDDL 2.2, enabling the definition of derived predicates whose truth values are computed from other propositions using logical formulas, effectively providing theorem-prover-like rules for inference without explicit action effects. These derived predicates allow planners to handle higher-level concepts recursively, such as safety conditions or connectivity in domains like logistics or robotics. The syntax specifies a derived predicate as (:derived <atomic-formula-skeleton> <gd>), where <gd> is a goal description formula evaluated over the current state to determine the predicate's value. This feature improves modularity in domain modeling by separating definitional logic from operational actions.[31]
Key additions in PDDL 3.1 include the :object-fluents requirement, allowing functions that map tuples of objects to other objects, thus enabling the representation of numeric changes in object counts, such as resource consumption or allocation in inventory management scenarios. Unlike numeric fluents, which yield real values, object fluents support assignments like (assign (<function-symbol> ?obj1 ?obj2) ?new-obj) in action effects or initialization as (= (<function-symbol> ?params) <name>) in the initial state, with an option to set values to [undefined](/page/Undefined). This extends the language's ability to model functional state transitions beyond binary or scalar variables, facilitating domains with discrete object dynamics. For instance, in a manufacturing domain, an object fluent could track the assignment of tools to tasks, updating counts implicitly through assignments.[30][31]
PDDL 3.1 also introduces the :timed-initial-literals requirement, which allows specifying facts that become true at particular times during plan execution, implying the use of :durative-actions, and the :action-costs requirement for incorporating numeric costs into actions using a restricted form of numeric fluents like total-cost. The version includes updated constraints with improved integration for derived predicates, allowing constraint expressions in domain and problem files to reference these computed values more seamlessly within goal and trajectory specifications. The :constraints requirement supports fields that enforce relations like forall, and, or imply over states, now compatible with derived predicates to validate plan validity post-generation. This refinement addresses limitations in earlier versions by enabling tighter logical consistency checks. The complete Backus-Naur Form (BNF) syntax for PDDL 3.1, including these updates, is detailed in the PDDL4J project's formal definition, which consolidates requirements like :object-fluents, :timed-initial-literals, :action-costs, and :derived-predicates into a unified grammar.[31]
PDDL 3.1 forms the foundation for most contemporary AI planning systems, with broad support in tools like Fast Downward, which implements its features for translating domains into SAS+ representations for efficient search. Its stability has ensured ongoing adoption in IPC events and research, without major revisions since 2011.[32][33]
Current Status and Standardization
PDDL 3.1 continues to serve as the prevailing version in 2025, functioning as a de facto standard within the AI planning community primarily through its adoption in the International Planning Competitions (IPC). The 2023 IPC, the most recent iteration, utilized a subset of PDDL 3.1 across its classical, learning, probabilistic, and other tracks to ensure consistent benchmarking and evaluation of planners on standardized domains. This approach has solidified PDDL's role in enabling reproducible research and solver comparisons, with the 2024 and anticipated 2025 competitions expected to maintain this foundation for continuity.
Lacking a formal central authority, PDDL's maintenance and evolution occur through collaborative community efforts, notably via workshops like the Knowledge Engineering for Planning and Scheduling (KEPS) held annually at the International Conference on Automated Planning and Scheduling (ICAPS). These gatherings address domain modeling, validation, and extensions, fostering incremental improvements while prioritizing backward compatibility to preserve existing tools and benchmarks. However, compatibility challenges persist, as many solvers support only subsets of PDDL 3.1 features—such as numeric fluents or conditional effects—necessitating careful selection of planner-domain pairs to avoid validation errors or suboptimal performance.
Emerging trends highlight the integration of machine learning techniques to augment PDDL's capabilities, including LLM-assisted tools for automated domain generation and validation. For instance, PDDL-GenAI, demonstrated at ICAPS 2025, leverages large language models to convert natural language descriptions into valid PDDL models, reducing modeling barriers for non-experts.[15] Community discussions increasingly advocate for a potential PDDL 4.0 to incorporate native support for AI-driven elements like probabilistic reasoning and learning-based formalization, as explored in recent works on LLM-enhanced planning copilots. Such advancements aim to bridge symbolic planning with modern AI while maintaining PDDL's core strengths in expressiveness and interoperability.
PDDL enjoys broad adoption in practical domains, including robotics for task orchestration in assembly lines, video games for dynamic scenario generation, and logistics for optimizing supply chain routes. Over 90 distinct planners support PDDL, ranging from classical solvers like Fast Downward to specialized temporal and probabilistic systems, enabling its integration into diverse AI applications.
Extensions and Variants
Deterministic and Temporal Extensions
PDDL+ is an extension of the Planning Domain Definition Language (PDDL) introduced in 2006 by Maria Fox and Derek Long to model mixed discrete-continuous domains, particularly for hybrid systems in applications such as robotics. It builds on the temporal planning capabilities of PDDL 2.1 and 2.2 by incorporating mechanisms for continuous time-dependent effects, enabling the representation of systems where discrete actions coexist with ongoing physical processes.
In terms of syntax, PDDL+ introduces processes to define continuous changes to numeric fluents over time, typically expressed through differential equations that model rates of change, such as linear or piecewise constant functions. These processes run indefinitely unless interrupted and can affect fluents like position or energy levels. Additionally, events are instantaneous actions triggered by conditions on fluents, allowing discrete interventions in continuous dynamics, while durative actions from earlier PDDL versions can start, end, or interact with these processes.
Semantically, PDDL+ treats planning in hybrid domains by integrating continuous evolution via numerical integration of differential equations for fluents with discrete event-based changes, ensuring that plans account for both temporal constraints and exogenous events. This allows for the validation of plans through simulation, where continuous effects are approximated during execution, providing a formal basis for reasoning about systems with nonlinear dynamics.
PDDL+ has found applications in robotics, such as modeling rover navigation where continuous processes represent movement and energy depletion, enabling optimal path planning under resource constraints.[34] In unmanned aerial vehicle (UAV) routing, it supports mission planning for high-altitude pseudo-satellites by capturing time-varying wind effects and discrete maneuvers.[35] For manufacturing scheduling, PDDL+ models batch chemical plants with continuous reactions and discrete setup actions to optimize production sequences.[36]
Another related extension is the Action Notation Modeling Language (ANML), an XML-based temporal planning language developed by NASA that provides a high-level alternative to PDDL for specifying durative actions, temporal constraints, and continuous effects in domains like spacecraft operations.[37] ANML emphasizes succinct modeling and has been used to translate problems into PDDL-compatible formats for solver interoperability.[37]
Probabilistic and Uncertainty Extensions
Probabilistic extensions to PDDL address uncertainty in planning domains by incorporating stochastic elements, such as probabilistic action effects and partial observability, enabling the modeling of real-world scenarios where outcomes are not deterministic. These extensions transform classical planning problems into frameworks like Markov Decision Processes (MDPs) or Partially Observable MDPs (POMDPs), where planners optimize expected rewards or utilities over probabilistic state transitions.[38]
PPDDL (Probabilistic Planning Domain Definition Language) 1.0, introduced in 2004 by Håkan L. S. Younes and Michael L. Littman, extends PDDL to express domains with stochastic actions and probabilistic effects, alongside rewards for utility optimization. It builds on PDDL's STRIPS-like structure by adding probabilistic branches in action effects, defined as distributions over possible outcomes (e.g., a probability vector over conditional effects), and supports initial state uncertainty via probability assignments to possible starting configurations. Semantically, PPDDL models problems as finite-horizon MDPs, where planning involves computing policies that maximize expected total reward through methods like value iteration or policy iteration. PPDDL served as the official language for the probabilistic track in the 4th International Planning Competition (IPC-4) in 2004, demonstrating its role in benchmarking planners for expected utility optimization in uncertain environments.
RDDL (Relational Dynamic Influence Diagram Language), developed by Scott Sanner in 2010 and updated through 2011, provides a more expressive PDDL-like syntax for specifying relational MDPs and POMDPs, overcoming limitations in PPDDL such as support for concurrent actions and continuous variables.[38] Key syntax additions include conditional probability functions (CPFs) for state transitions, defined using logical and arithmetic expressions over probability distributions like Bernoulli, Normal, or Discrete (e.g., next-state fluents as self + Normal(0, 1) for noisy increments); observation models via observ-fluent CPFs for POMDPs; and reward functions tied to influence diagrams.[38] RDDL's semantics ground domains as dynamic Bayesian networks with utility nodes for rewards, supporting finite-horizon planning with discounting (e.g., discount factor of 0.95) and enabling policy computation via value iteration over belief states.[38] It became the standard for the uncertainty track in IPC-7 (2011) and subsequent competitions, including IPPC-2011.[38]
These extensions facilitate applications in domains with inherent uncertainty, such as robotics for navigation under sensor noise (e.g., integrating PPDDL or RDDL models in ROSPlan frameworks for probabilistic task planning) and games involving partial observability (e.g., POMDP-based strategies in environments like partially observable pursuit-evasion games).[39] In robotics, they enable robust policies that account for stochastic effects like actuator failures, optimizing expected success probabilities over trajectories. For games, RDDL's support for observation models aids in modeling hidden information, as seen in benchmarks like the navigation and inventory management domains from IPC uncertainty tracks.[38]
Multi-Agent and Hierarchical Extensions
The Planning Domain Definition Language (PDDL) has been extended to support multi-agent planning, enabling the modeling of scenarios where multiple autonomous agents coordinate to achieve shared or individual goals. One prominent extension is MA-PDDL, introduced in 2011 as a modular augmentation of PDDL 3.1, which incorporates agent-specific actions, distinct capabilities for each agent, and communication predicates to represent interactions such as message passing between agents.[40] This allows for the definition of cooperative or competitive multi-agent domains while maintaining compatibility with classical PDDL solvers through lifted representations. Another influential language is the Multi-Agent Planning Language (MAPL), a variant of PDDL developed for distributed environments, which supports intent-based coordination via speech acts and joint actions that multiple agents can execute simultaneously.[41] MAPL extends PDDL by using non-boolean state variables to model partial knowledge and ignorance among agents, facilitating qualitative and quantitative temporal constraints in plans.[42]
Hierarchical extensions of PDDL address complex planning problems by introducing task decomposition over primitive actions, blending Hierarchical Task Network (HTN) paradigms with PDDL's state-based formalism. The Hierarchical Domain Definition Language (HDDL), an extension proposed in the 2020s, allows for the expression of hierarchical planning problems directly in a PDDL-like syntax, including methods for task reduction, ordering constraints on subtasks, and optional state goals to align with classical planning. An update, HDDL 2.1, was released in 2023 to provide a more formal semantics for hierarchical domains.[43] Hybrids like SHOP-PDDL integrate HTN planners such as SHOP2 with PDDL domains by translating temporal PDDL operators into HTN-compatible structures, enabling ordered task networks that decompose high-level tasks into executable actions while preserving domain independence.[44] These extensions support semantics where high-level tasks are refined recursively, reducing search complexity in domains with inherent structure.
In multi-agent and hierarchical PDDL variants, planning semantics distinguish between centralized and decentralized approaches to solving. Centralized solving treats the multi-agent problem as a single, expanded classical planning task, where a global planner generates coordinated plans for all agents, often using MA-PDDL's factored representations to manage state explosion.[40] Decentralized solving, in contrast, distributes planning among agents, with each using local knowledge and communication to resolve conflicts, as supported by MAPL's intent propagation and mutex constraints for synchronization.[45] Conflict resolution mechanisms, such as priority-based arbitration or negotiation predicates, ensure feasibility in distributed settings without full global visibility.[46]
These extensions find applications in robotics swarms, where MA-PDDL models coordinate heterogeneous robots for tasks like search-and-rescue, enabling agent-specific actions for navigation and sensing while resolving spatial conflicts through decentralized planning.[47] In team-based games, such as collaborative strategy simulations, MAPL and hierarchical variants like HDDL support intent-based coordination for joint maneuvers, decomposing complex tactics into subtasks for scalable multi-agent execution.[48]
Use in AI Planning Systems
PDDL serves as a foundational language for modeling and solving automated planning problems in AI systems, enabling the representation of domains, actions, and goals in a standardized format that facilitates integration with various solvers and tools. In AI planning systems, PDDL models are used to generate executable plans for complex tasks, supporting both classical deterministic planning and extensions for temporal, numeric, and probabilistic scenarios. This interoperability has made PDDL a cornerstone for practical deployments where reasoning over state transitions is essential.[9]
In robotics, PDDL is widely integrated with frameworks like ROS (Robot Operating System) to enable task and motion planning. For instance, PlanSys2 provides a modular planning system for ROS2, allowing the merging of PDDL domains for applications such as autonomous navigation and manipulation, where predicates define robot states and actions coordinate with hardware interfaces. Similarly, ROSPlan frameworks use PDDL to translate high-level goals into executable behaviors, supporting real-time execution in cognitive architectures for robots performing multi-step tasks like object grasping in dynamic environments. In logistics and supply chain management, PDDL models optimize resource allocation and routing; an AI planning approach formulates supply chain problems as PDDL tasks, enabling solvers to generate efficient delivery schedules that account for constraints like inventory levels and transportation capacities.[49][50][51]
PDDL finds application in video games for generating proactive non-player character (NPC) behaviors, where domains model environmental interactions and goals drive adaptive decision-making. The SimpleFPS benchmark uses PDDL to simulate FPS scenarios, allowing NPCs to plan patrols, ambushes, and responses based on player actions, enhancing realism without hardcoded scripts. Real-time PDDL planners integrate into game engines to handle dynamic events, such as NPC pathfinding in open-world environments, by grounding symbolic plans to low-level game mechanics. In space mission planning, NASA employs PDDL for on-board autonomy; the Jet Propulsion Laboratory (JPL) uses PDDL-based prototypes to generate task networks for rover operations, optimizing sequences for exploration under resource constraints like power and communication windows.[52][53][54]
Prominent PDDL solvers include Fast Downward, which supports PDDL 2.2 Level 1 and action-costs from PDDL 3.1, using heuristic search for efficient plan generation in large state spaces. The LAMA configuration of Fast Downward employs landmark analysis for cost-based anytime planning, making it suitable for real-world optimizations. Optic, a temporal planner, handles PDDL 2.1 and 2.2 extensions for durative actions, commonly used in time-sensitive domains like robotics. These solvers often support PDDL 3.1 features such as preferences and constraints through partial implementations, enabling validation of plan quality beyond optimality.[32][55]
Tools for PDDL development and integration include the VSCode PDDL extension, which provides syntax highlighting, validation, and plan visualization. The PDDL-GenAI plugin for the editor.planning.domains, demonstrated at ICAPS 2025, supports AI-assisted modeling by generating domains from natural language descriptions. The Unified Planning Library (UP) offers a Python-based PDDL parser and solver interface, allowing seamless integration of multiple planners and conversion between PDDL and other formats, facilitating hybrid workflows in research and industry.[56][15][57]
Benchmarks from the International Planning Competition (IPC) evaluate PDDL solvers using domains like Elevators, which models multi-agent coordination in building navigation, and Rovers, simulating planetary exploration with resource gathering and communication tasks. These suites test scalability and correctness, with validation tools ensuring domain models adhere to PDDL semantics through model checking techniques.[58][59]
Challenges in PDDL-based systems include scalability for large domains, where state explosion limits planning to instances with thousands of actions, necessitating heuristics or abstractions. Recent hybrid approaches integrate machine learning, such as large language models (LLMs) for plan generation; frameworks like PDDL-INSTRUCT use chain-of-thought prompting to enhance LLM reasoning over PDDL structures, improving accuracy in symbolic planning while addressing validation gaps in long-horizon tasks.[60]
Example Domain and Problem
The Blocksworld domain is a classic benchmark from the International Planning Competitions (IPCs) that illustrates core STRIPS planning in PDDL 1.2, where blocks are rearranged on a table using a single type of action to move a block from one position to another. To illustrate the core elements of PDDL, consider this simplified Blocksworld, incorporating typing for blocks as objects, along with the required STRIPS operators for add/delete effects.[9]
(define (domain blocksworld)
(:requirements :strips :typing)
(:types [block](/page/Block) - object)
(:constants table - object)
(:predicates
(on ?x - [block](/page/Block) ?y - object)
(clear ?x - [block](/page/Block))
)
(:action move
:parameters (?x - [block](/page/Block) ?y - object ?z - object)
:precondition (and (on ?x ?y)
(clear ?x)
(or (clear ?z) (= ?z table))
(not (= ?x ?z))
(not (= ?y ?z)))
:effect (and (on ?x ?z)
(clear ?y)
(not (on ?x ?y))
(when (not (= ?z table))
(not (clear ?z)))))
)
(define (domain blocksworld)
(:requirements :strips :typing)
(:types [block](/page/Block) - object)
(:constants table - object)
(:predicates
(on ?x - [block](/page/Block) ?y - object)
(clear ?x - [block](/page/Block))
)
(:action move
:parameters (?x - [block](/page/Block) ?y - object ?z - object)
:precondition (and (on ?x ?y)
(clear ?x)
(or (clear ?z) (= ?z table))
(not (= ?x ?z))
(not (= ?y ?z)))
:effect (and (on ?x ?z)
(clear ?y)
(not (on ?x ?y))
(when (not (= ?z table))
(not (clear ?z)))))
)
A corresponding problem file specifies the objects, initial state (e.g., two blocks on the table and one stacked), and goal (e.g., a specific stacking of block1 on block2). Here, the initial state has block3 on the table, block1 on block3, and block2 on the table, with appropriate clear predicates for the blocks; the goal requires block1 directly on block2.[61]
(define (problem bw-example)
(:domain blocksworld)
(:objects block1 block2 block3 - block
table - object)
(:init (on block3 table)
(on block1 block3)
(on block2 table)
(clear block1)
(clear block2))
(:goal (and (on block1 block2)
(clear block1)))
)
(define (problem bw-example)
(:domain blocksworld)
(:objects block1 block2 block3 - block
table - object)
(:init (on block3 table)
(on block1 block3)
(on block2 table)
(clear block1)
(clear block2))
(:goal (and (on block1 block2)
(clear block1)))
)
When this domain and problem are input to a PDDL planner such as FF, the solver searches for a sequence of applicable actions that transforms the initial state to the goal state, respecting preconditions and applying effects. For the above problem, a valid plan consists of two moves: first, move(block1, block3, table) (which places block1 on the table, clearing block3), followed by move(block1, table, block2) (which stacks block1 on block2). This plan achieves the goal in the minimal number of steps, demonstrating how PDDL enables declarative specification of states and transitions for automated plan generation.
A variation extends the domain with numeric fluents for action costs, as supported in PDDL 2.1, to model preferences or resource constraints; for instance, the move action could include an effect (:increase (total-cost) 1) to assign a unit cost per move, allowing the planner to optimize for minimal total cost via a metric definition in the problem file.