Planning Domain Definition Language(PPDL) (original) (raw)

Last Updated : 22 Aug, 2025

The Planning Domain Definition Language (PDDL) is a simple and standard way to describe planning problems for computers, especially in the field of Artificial Intelligence (AI). It helps define all the things, actions and goals needed for a computer to plan out a series of actions to solve a problem like moving robots, scheduling tasks or solving puzzles. PDDL describes planning problems using plain text files written in a specific format. There are always two parts:

State Representation

Structure of PDDL Files

pddl

Structure of PDDL

**1. Domain File

**2. Problem File

Domain File Breakdown

Lets see some key parts of Domain File,

Problem File Breakdown

Let's see some key parts of Problem File,

**Example: Blocksworld Domain

Here’s a classic scenario where a robotic arm manages blocks. The domain file defines actions for picking up and putting down blocks either on the table or on other blocks.

Domain File

Lisp `

(define (domain blocksworld) (:requirements :typing :fluents :negative-preconditions) (:types block) (:predicates (on ?a ?b - block) (clear ?a - block) (holding ?a - block) (handempty) (ontable ?x - block) )

(:action pickup :parameters (?x - block) :precondition (and (ontable ?x) (handempty) (clear ?x)) :effect (and (holding ?x) (not (handempty)) (not (clear ?x)) (not (ontable ?x))) )

(:action unstack :parameters (?x ?y - block) :precondition (and (on ?x ?y) (handempty) (clear ?x)) :effect (and (holding ?x) (not (handempty)) (not (clear ?x)) (clear ?y) (not (on ?x ?y))) )

(:action putdown :parameters (?x - block) :precondition (and (holding ?x)) :effect (and (ontable ?x) (not (holding ?x)) (handempty) (clear ?x)) )

(:action stack :parameters (?x ?y - block) :precondition (and (holding ?x) (clear ?y)) :effect (and (on ?x ?y) (not (holding ?x)) (handempty) (not (clear ?y)) (clear ?x)) ) )

`

Problem File

Lisp `

(define (problem blocks-problem) (:domain blocksworld) (:objects a b c - block) (:init (ontable a) (ontable b) (on c b) (clear a) (clear c) (handempty)) (:goal (and (on a b) (on b c))) )

`

Result

Applications of PDDL

Advantages

Limitations