ift615 – intelligence artificielle pddl : planning domain definition language jean-françois...
TRANSCRIPT
IFT615 – Intelligence artificielle
PDDL : “Planning Domain Definition Language”
Jean-François Landry
Département d’informatique
Université de Sherbrooke
IFT615 – Été 2011 1
Objectifs
• Motivation d’une solution générique pour résoudre des problèmes de génération de plans.
• Comprendre la structure de PDDL.
IFT615 – Été 2011 2
EXEMPLE D’APPLICATIONS
3
Exemple 1 : robot livreur de colis
p1 p2 p3 p4
c1 c2robot
O1 O2
O3
4
Exemple 1 : robot livreur de colis (problème)
État initial p1 p2 p3 p4
c1 c2robot
O1 O2
O3
But p1 p2 p3 p4
c1 c2robot
O1O2
O3
5
Exemple 1 : robot livreur de colis (solution)
Solution : exécuter le plan suivant1. Aller à : p12. Prendre l’objet : o13. Aller à : c14. Aller à : c25. Aller à : p46. Déposer l’objet : o17. Aller à : c28. Aller à : p39. Prendre l’objet o210.Aller à : c211.Aller à : c112.Aller à : p113.Déposer l’objet : o2
6
Exemple 1 : un robot pour déplacer des objets (simulation)
p1 p2 p3 p4
c1 c2robot
O1 O2
O3
7
Exemple 2 : monde des blocs (BlocksWorlds)
A B
D C
A D
B C
Configuration initiale But Actions possibles:• Prendre un bloc.• Déposer un bloc.
Problème :• Trouver la séquence d’actions pour y arriver.
8
Exemple 2 : monde des blocs (Solution)
A B
D C
État 0
A B
D
C
A B D
C
A B D
C
État 1 État 2 État 3
A B D
C
État 4
A B
DC
État 5
A B
DC
État 6
9
Exemple 3 : Mars Rovers• Planifier des actions telles que:
– Collecter des données à divers sites d’intérêt.
– Se déplacer vers un site d’intérêt.– Transmettre vers la Terre les données
collectées.
• Contraintes:– Énergie limitée (batteries).– Incertitude sur les déplacements (durée +
ressources).– Fenêtre de faisabilités.
• Solution générique:– On veut seulement donné un but.– Le robot doit trouver le plan de lui-même.
10
Exemple 4 : livraison de colis
11
Comment résoudre ses problèmes?
• On pourrait écrire 4 programmes différents, chacun étant spécifique à un type de problème en particulier.
Résolveur_RobotLivreur.cpp
Résolveur_BlocksWorld.cpp
Résolveur_MarsRover.cpp
Résolveur_LivraisonColis.cpp
Problème
Problème
Problème
Problème
Solution
Solution
Solution
Solution
12
IFT615 – Été 2010
Comment résoudre ses problèmes de façon générique?
• Écrire un seul planificateur générique indépendant des problèmes.
• Écrire quatre (4) spécifications de problème.
But(problème)
Domaine(actions)
État Initial(connaissances
sur l’environnement)
Planificateurgénérique
Plan(séquenced’actions)
13
Planification : modèle générique d’actions
Goto(A, B)
• Position(Robot) = A
• Énergie >= k*distance(A,B)
• Position(Robot) = B
• Énergie -= k * distance(A,B)
• Temps += distance(A,B) / v
TakeObject(O, P)
• PositionObject(O) = P
• Position(Robot) = P
• Position(O) = <non défini>
• RobotHave(O) = true
Effe
tsP
réco
nditi
ons
Effe
tsP
réco
nditi
ons
14
Génération des plansPos=p1E=100%
T=0
Pos=p3E=98%T=120
Pos=p2E=99%T=60
Pos=p7E=98%T=120
Déplacer(p1,p2)
Livrer(m1,p5)
Déplacer(p1,p2)
Déplacer(p1,p
2)
…
… … Pos=p3E=97%
T=180,{m1}
Pos=p5E=95%
T=400,{m1}
Pos=p5E=94%
T=460,m1@p5
Déplacer(p3,p5)
Prendre
(m1,p
3)
MissionLivrer message m1 de p3 à p5
État initialPosition = p1Énergie = 100%Temps = 0s
Plan1. SeDéplacer(p1, p3)2. PrendreMsg(m1, p3)3. SeDéplacer(p3, p5)4. Livrer(m1, p5)
p1
p2
p3p4
p5
p6p7
p8
p9 p10p11
15
Langage pour un planificateur
• Il est possible de créer un langage pour un planificateur.
• Il suffit de décrire formellement :– la description des actions possibles (préconditions /
effets);– la situation initiale;– le but.
• La syntaxe doit être conviviale à l’utilisateur ET au planificateur, donc :– 1) lisible et compréhensible par un humain;– 2) analysable par un parseur LL ou LR : donc il faut
pouvoir décrire le langage par une grammaire bien structurée.
16
Exemple : PDDL
• Basé sur la logique du premier ordre.• PDDL = Planning Domain Definition Language.• Langage utilisé lors des compétitions ICAPS
(International Conference on Automated Planning and Scheduling)
• Basé sur la syntaxe de Lisp, donc facile à lire.• Pour un domaine, on décrit :
– Les objets pouvant exister– Les relations pouvant exister– Pour chaque actions possible, on décrit:
• Le nom de l’action, les paramètres, les préconditions, les effets.
17
(:action unstack :parameters (?x – block ?y - block) :precondition (and (on ?x ?y) (clear ?x) (handempty) :effects (and (not (on ?x ?y)) (not (clear ?x)) (not (handempty)) (holding ?x) (clear ?y))
(:action stack :parameters (?x – block ?y - block)
:precondition (and (holding ?x) (clear ?y)):effects (and (not (holding ?x)) (not (clear ?y))
(on ?x ?y) (clear ?x) (handempty))
(:action pickup :parameters (?x – block) :precondition (and (ontable ?x) (clear ?x) (handempty) :effects (and (ontable ?x) (clear ?x) (handempty) (holding ?x))
(:action putdown:parameters (?x – block) :precondition (holding ?x) :effects (and (not (holding ?x)) (ontable ?x) (clear ?x) (handempty))
Exemple PDDL pour le monde des blocksc
a b
ca b
c
a b
c
ab
c
a b
18
Exemple livraison de colis(define (domain SimTransport) (:requirements :strips :equality :typing :fluents :durative-actions ) (:types location - object robot - object
box - object ) (:predicates (robot-at ?r - robot ?l - location)
(box-at ?b - box ?l - location)(box-on ?b - box ?r - robot)
(link ?x - location ?y - location) ) (:functions (distance ?l1 - location ?l2 - location)
(speed ?r - robot) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Goto : Navigation between 2 locations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (:durative-action Goto :parameters(?r - robot ?from - location ?to - location) :duration (= ?duration (/ (distance ?from ?to) (speed ?r))) :condition(and (at start (robot-at ?r ?from)) ;;(over all (link ?from ?to)) ) :effect(and (at start (not (robot-at ?r ?from))) (at end (robot-at ?r ?to)) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Load ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (:durative-action Load :parameters(?r - robot ?loc - location ?b - box) :duration (= ?duration 60) :condition(and (over all (robot-at ?r ?loc))
(at start (box-at ?b ?loc)) ) :effect(and (at start (not (box-at ?b ?loc))) (at end (box-on ?b ?r)) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Unload ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (:durative-action Unload :parameters(?r - robot ?loc - location ?b - box) :duration (= ?duration 60) :condition(and (over all (robot-at ?r ?loc))
(at start (box-on ?b ?r)) ) :effect(and (at end (box-at ?b ?loc)) (at start (not (box-on ?b ?r))) ) ) )
19