· Le langage ADL
(Action Description language) est une extension significative en
planification classique, permet l'utilisation de quantificateurs et
d'expressions conditionnelles dans la description des opérateurs. Ainsi,
une description plus générale de l'opérateur de
déplacement Déplacer(b, x, y) serait :
Déplacer(b :bloc, x :bloc, y
:bloc)
Precond : Sur(b,
x)?Dégagé(b)?Dégagé(y) ? ~(b, y)
?~(x,y)
Effet : Sur(b, y)?#172;Sur(b, x)?(
~ (x, Table) -* Dégagé(x))?(? (y,
Table) -*Dégagé(y))
Le « tableau1.1 » décrit brièvement le
langage ADL en le comparant avec STRIPS [12]:
Tableau!.!: comparaison entre STRIPS et
ADL
· Le langage PDDL (Planning Domain
Definition Language) [20] est une tentative pour standardiser
les langages de description des domaines et des problèmes de
planification. C'est un langage créé en 1998 par Drew McDermott
pour la compétition IPC-98 dans le but de développer un seul
langage de description des domaines de planification utilisé par tous
les planificateurs de cette compétition. Il est ensuite devenu comme un
standard utilisé par tous les planificateurs. La
dernière version est PDDL3.1.
En PDDL, les composants nécessaires à la
description de la planification sont :
· Les objets : les choses du monde qui nous
intéresse.
· Les prédicats : propriétés des
objets intéressants pour nous, peuvent être vraies ou fausses.
· L'état initial : l'état du monde de
départ.
· La spécification de l'objectif : les choses que
nous voulons soient vraies dans le monde.
· Actions/Opérateurs : chemins pour changer
l'état du monde.
Ainsi, les problèmes de planification
spécifiés dans ce langage sont séparés dans deux
fichiers :
Fichier du domaine : pour la
spécification des prédicats et des actions. La structure de ce
fichier est la suivante :
(define (domain < nom du domaine >)
< code PDDL pour les prédicats >
< code PDDL pour la première action >
[...]
< code PDDL pour la dernière action >
)
< nom du domaine > : une chaîne de
caractères identifiant le domaine de planification.
Exemple : pour notre exemple des blocs : un
fichier du domaine en PDDL peut être spécifié comme suit
:
(define (domain monde_blocs)
(: predicates (Sur ?x ?y) (Dégagé ?x))
(: action Déplacer
: parameters (?x ?y ?z)
: precondition
(and (Sur ?x ?y)(Dégagé
?x)(Dégagé ?z)
(not (= ?y ?z)) (not (= ?x ?y))
(not (= ?x ?z)) (not (= ?x Table)))
: effect
(and (Sur ?x ?z) (not (Sur ?x ?y))
(when (not (= ?y Table)) (Dégagé
?y))
(when (not (= ?z Table)) (not (Dégagé ?z)))))
Fichier du problème : pour la
spécification des objets, de l'état initial et de l'objectif. La
structure de ce fichier est la suivante :
(define (problem < nom du problème >)
(:domain < nom du domaine >)
< code PDDL pour les objets >
< code PDDL pour l'état initial >
< code PDDL pour la specification de l'objectif
>
)
< nom du problème > : une chaîne de
caractères identifiant le problème de planification.
< nom du domaine > : doit être similaire au
nom du domaine dans le fichier du domaine correspondent.
Exemple : pour notre exemple des blocs : un
fichier du problème de la « figure1.4 » en PDDL peut
être spécifié comme suit :
(define (problem < problème_blocs >)
(:domain < monde_blocs >)
(:objects A B C Table )
(:init (Bloc A) (Bloc B) (Bloc C)
(Dégagé A) (Dégagé B)
(Dégagé C) (Sur A Table) (Sur B Table) (Sur C Table)) (:goal (and
(Sur A B) (Sur B C))
)