230 likes | 489 Views
IFT615 – Intelligence artificielle PDDL : “ Planning Domain Definition Language ”. Jean-François Landry Département d’informatique Université de Sherbrooke. 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.
E N D
IFT615 – Intelligence artificiellePDDL : “Planning Domain Definition Language” Jean-François Landry Département d’informatique Université de Sherbrooke
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.
p1 p2 p3 p4 O3 O1 O2 robot c1 c2 Exemple 1 : robot livreur de colis
p1 p2 p3 p4 O3 O1 O2 robot c1 c2 Exemple 1 : robot livreur de colis (problème) État initial But p1 p2 p3 p4 O3 O1 O2 robot c1 c2
Exemple 1 : robot livreur de colis (solution) Solution : exécuter le plan suivant • Aller à : p1 • Prendre l’objet : o1 • Aller à : c1 • Aller à : c2 • Aller à : p4 • Déposer l’objet : o1 • Aller à : c2 • Aller à : p3 • Prendre l’objet o2 • Aller à : c2 • Aller à : c1 • Aller à : p1 • Déposer l’objet : o2
robot Exemple 1 : un robot pour déplacer des objets (simulation) p1 p2 p3 p4 O3 O1 O2 c1 c2
Exemple 2 : monde des blocs (BlocksWorlds) • Actions possibles: • Prendre un bloc. • Déposer un bloc. • Problème : • Trouver la séquence d’actions pour y arriver. But Configuration initiale D C B C A B A D
Exemple 2 : monde des blocs (Solution) État 0 État 1 État 2 État 3 D C C D C C A B A B D A B A B D État 5 État 6 État 4 D C C D C A B A B A B D
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.
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 Problème Solution Résolveur_BlocksWorld.cpp Problème Solution Résolveur_MarsRover.cpp Problème Solution Résolveur_LivraisonColis.cpp Problème Solution
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. Domaine (actions) Planificateur générique But (problème) Plan (séquence d’actions) État Initial (connaissances sur l’environnement)
TakeObject(O, P) Goto(A, B) Planification : modèle générique d’actions • PositionObject(O) = P • Position(Robot) = P • Position(Robot) = A • Énergie >= k*distance(A,B) Préconditions Préconditions • Position(O) = <non défini> • RobotHave(O) = true • Position(Robot) = B • Énergie -= k * distance(A,B) • Temps += distance(A,B) / v Effets Effets
Pos=p1 E=100% T=0 p4 p5 p3 p6 p2 p7 p1 p8 p11 p10 p9 Génération des plans Déplacer(p1,p2) Déplacer(p1,p2) … Mission Livrer message m1 de p3 à p5 État initial Position = p1 Énergie = 100% Temps = 0s Déplacer(p1,p2) Pos=p7 E=98% T=120 Pos=p3 E=98% T=120 Pos=p2 E=99% T=60 Prendre(m1,p3) … … Pos=p3 E=97% T=180,{m1} Déplacer(p3,p5) Pos=p5 E=95% T=400,{m1} • Plan • SeDéplacer(p1, p3) • PrendreMsg(m1, p3) • SeDéplacer(p3, p5) • Livrer(m1, p5) Livrer(m1,p5) Pos=p5 E=94% T=460,m1@p5
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.
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.
Exemple PDDL pour le monde des blocks c (: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)) a b c a b (: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)) c a b (:action pickup :parameters (?x – block) :precondition (and (ontable ?x) (clear ?x) (handempty) :effects (and (ontable ?x) (clear ?x) (handempty) (holding ?x)) c b a (:action putdown :parameters (?x – block) :precondition (holding ?x) :effects (and (not (holding ?x)) (ontable ?x) (clear ?x) (handempty)) c a b
Exemple livraison de colis ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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))) ) ) ) (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)) ) )