PDDL Fernando Berzal, berzal@acm.org Lenguajes para planificación Lenguajes para la descripción de problemas de planificación: STRIPS [Stanford Research Institute Problem Solver] Richard Fikes & Nils Nilsson, SRI International, 1971 ADL [Action Description Language] Language] Edwin Pednault, Pednault, IBM Research, Research, 1987 PDDL [Planning Domain Definition Language] Drew McDermott, Yale University, 1998 International Planning Competition @ ICAPS [International Conference on Automated Planning and Scheduling] http://ipc.icaps--conference.org/ http://ipc.icaps 1 STRIPS Representación de estados en STRIPS Estado inicial = { at(p,l at(p,l), ), at(q,l at(q,l), ), at(r,l at(r,l), ), at(k,l at(k,l), ), in(c1,p), in(c2,p), top(c2,p), on(c2,c1), on(c1,p), empty(k), unloaded(r) } k c2 c1 r p q l Representación de objetivos en STRIPS Objetivo = { on(c1,r) } 2 STRIPS Representación de acciones en STRIPS Acción Nombre de la acción Precondiciones Proposiciones que deben cumplirse para poder aplicar la acción. acción. Efectos Consecuencias de la aplicación de la acción. acción. “Add list” (proposiciones que pasan a ser ciertas) ciertas) “Delete list” (proposiciones que pasan a ser falsas) falsas) 3 STRIPS Representación de acciones en STRIPS move(r,l,m)) move(r,l,m pre: adjacent(l,m adjacent(l,m), ), at(r,l at(r,l)) add: at(r,m at(r,m)) del: at(r,l at(r,l)) k c2 c1 r p q l load(k,l,c,r)) load(k,l,c,r pre: at(k,l at(k,l), ), holding(k,c holding(k,c), ), at(r,l at(r,l), ), unloaded(r) add: empty(k), loaded(r,c loaded(r,c)) del: holding(k,c holding(k,c), ), unloaded(r) put(k,l,c,d,p)) put(k,l,c,d,p pre: at(k,l at(k,l), ), at(p,l at(p,l), ), holding(k,c holding(k,c), ), top(d,p top(d,p)) add: empty(k), in(c,p in(c,p), ), top(c,p top(c,p), ), on(c,d on(c,d)) del: holding(k,c holding(k,c), ), top(d,p top(d,p)) 4 STRIPS Representación de acciones en STRIPS move(r,l,m)) move(r,l,m pre: adjacent(l,m adjacent(l,m), ), at(r,l at(r,l)) eff: eff: at(r,m at(r,m), ), ¬at(r,l at(r,l)) k c2 c1 r p q l load(k,l,c,r)) load(k,l,c,r pre: at(k,l at(k,l), ), holding(k,c holding(k,c), ), at(r,l at(r,l), ), unloaded(r) eff: eff: empty(k), loaded(r,c loaded(r,c), ), ¬holding( holding(k,c k,c), ), ¬unloaded(r) put(k,l,c,d,p)) put(k,l,c,d,p pre: at(k,l at(k,l), ), at(p,l at(p,l), ), holding(k,c holding(k,c), ), top(d,p top(d,p)) add: empty(k), in(c,p in(c,p), ), top(c,p top(c,p), ), on(c,d on(c,d), ), ¬holding( holding(k,c k,c), ), ¬top( top(d,p d,p)) 5 STRIPS Sólo se especifica aquello que cambia. Hipótesis de mundo cerrado (lo que no se menciona es falso). Sólo literales positivos en la descripción de estados. Sólo conjunciones de literales simples en el objetivo. P∧¬ ∧¬Q Q como efecto añade P y elimina Q Las variables no pueden tener tipos. 6 ADL Sólo se especifica aquello que cambia. Hipótesis de mundo abierto (lo que no se menciona no se conoce). Literales positivos y negativos en los estados. Conjunciones y disjunciones en el objetivo. P∧¬ ∧¬Q Q como efecto añade {P, ¬Q} y elimina {¬ {¬P, Q} Las variables sí pueden tener tipos. 7 PDDL Planning Domain Definition Language http://cs--www.cs.yale.edu/homes/dvm/ http://cs Estándar para la representación de tareas de planificación “clásica clásica”” utilizado desde 1998 en AIPS [International Conference on AI Planning & Scheduling], ahora ICAPS [International Conference on Automated Planning and Scheduling]. Inspirado en UCPOP, un planificador de orden parcial desarrollado en la Universidad de Washington e implementado inicialmente en Common Lisp, utiliza la sintaxis del lenguaje de programación LISP. 8 PDDL Componentes PDDL Objetos (entidades de interés). interés). Predicados (propiedades de los objetos objetos,, true/false). Estado inicial Especificación de objetivos Acciones//operadores (formas de cambiar el estado). Acciones estado). 9 PDDL Especificación PDDL Separada en dos ficheros: ficheros: Fichero del dominio (predicados y acciones) acciones) Fichero del problema (objetos, objetos, estado inicial y especificación de objetivos). objetivos). 10 PDDL Fichero de especificación de dominios PDDL (define (domain <domain name>) name>) <PDDL code for predicates> <PDDL code for first action> [...] <PDDL code for last action> ) 11 PDDL Fichero de especificación de dominios PDDL Especificación de predicados (propiedades) propiedades) (:predicates (room ?x) (robot--at ?x)) (robot ?x)) room(x) cierto si y sólo si x es una habitación. habitación. robot--at(x) cierto si y sólo si x es una habitación robot y, además, además, el robot está en x. 12 PDDL Fichero de especificación de dominios PDDL Especificación de acciones (precondiciones y efectos) efectos) (:action move :parameters (?x ?y) :precondition (and (room ?x) (room ?y) (robot--at ?x)) (robot :effect (and (robot(robot-at ?y) (not (robot(robot-at ?x))) ?x))))) 13 PDDL Fichero de especificación de problemas PDDL (define (problem <problem name>) name>) name>) (:domain <domain name>) <PDDL code for objects> <PDDL code for initial state> <PDDL code for goal specification> ) 14 PDDL Fichero de especificación de problemas PDDL Estado inicial (:init (room cocina) cocina) (room comedor comedor)) (room dormitorio) dormitorio) (robot--at comedor (robot comedor))) Objetivo (: goal (robot--at cocina (robot cocina))) 15 HTN [Hierarchical Task Network] (at yo MiCasa) (at yo miCasa) ir-andando ir-en-bus (at yo ETSII) (at yo ETSII) La planificación jerárquica facilita la representación de medios alternativos para la realización de tareas a distintos niveles de abstracción [abstraction gap]. 16 HTN [Hierarchical Task Network] Tarea compuesta Viajar Métodos Subtareas (compuestas/primitivas) Métodos Tareas primitivas enAvion irAeropuerto enAutobus Pagar irEnBus enCoche Volar enTaxi irEnTaxi enMetro Pagar irEnCoche irADestino Pagar irEnMetro enTaxi irEnTaxi Pagar En vez de buscar un plan que consista en una secuencia de acciones individuales, tratamos con un menor número de tareas que pueden corresponder a múltiples acciones cada una de ellas [refinement planning] 17 HTN [Hierarchical Task Network] Tarea compuesta Viajar Métodos Subtareas (compuestas/primitivas) Métodos Tareas primitivas enAvion irAeropuerto enAutobus Pagar irEnBus enCoche Volar enTaxi irEnTaxi enTaxi enMetro Pagar irEnCoche irADestino Pagar irEnMetro irEnTaxi Pagar Dominio de planificación basado en la representación de tareas [tasks] tasks] a distintos niveles de abstracción. Distinción entre tareas compuestas y tareas primitivas (acciones). Especificación de métodos alternativos para la realización de tareas. 18 HTN--PDDL HTN • Estándar para representar problemas clásicos de planificación • Extensión desarrollada por el Grupo de Sistemas Inteligentes del Departamento de Ciencias de la Computación e I.A. (DECSAI) de la Universidad de Granada para planificación jerárquica. • IActivePlanner: Planificador desarrollado por el grupo ISG y transferido a la spinoff IActive Intelligent Technologies PDDL HTN-PDDL Planificador 19 HTN--PDDL HTN Especificación de dominios HTNHTN-PDDL Requisitos,, constantes, Requisitos constantes, tipos, tipos, predicados y funciones (define (domain viajes viajes)) (:requirements :typing :fluents :fluents :derived :derived--predicates :negative--preconditions ::htn :negative htn--expansion) expansion) Persona Sitio - object (:types Hogar Aeropuerto - Sitio (:predicates (en ?p - Persona ?s – Sitio) Sitio)) Sitio)) (:functions (distancia ?x ?y – Sitio) … 20 HTN--PDDL HTN Especificación de dominios HTNHTN-PDDL Tareas y métodos (:task irAeropuerto :parameters (?p – Persona ?c – Hogar ?a – Aeropuerto Aeropuerto)) (:method enTaxi …) (:method enBus …) (:method andando …) ;; Uff !! ) 21 HTN--PDDL HTN Especificación de dominios HTNHTN-PDDL Tareas y métodos (:method enTaxi :precondition () :tasks ( (ir_en_taxi ?p ?c ?a) (:inline (bind ?tarifa ?tarifa (* (distancia (distancia ?c ?a) (precio_km (precio_km))) ))) ()) (pagar ?p ?tarifa ?tarifa)) ) 22 ) HTN--PDDL HTN Especificación de dominios HTNHTN-PDDL (:task viajar :parameters (?p – Persona ?x ?y – Sitio) Sitio) (:method enAvion :precondition (tiene prisa ?p) :tasks ( ((irAeropuerto irAeropuerto ?p ?x GRX) (volar ?p GRX MAD) (irDestino ?p MAD ?y) ) ) (:method enCoche :precondition (not (tiene_prisa (tiene_prisa ?p)) :tasks (irEnCoche ?p ?x ?y) ) ) 23 HTN--PDDL HTN Especificación de problemas HTNHTN-PDDL Objetos,, estado inicial y objetivos Objetos (define (problem UnViaje UnViaje)) (:domain Viajes Viajes)) (:objects MiCasa CasaMiPrimo – Hogar GRX MAD – Aeropuerto Yo – Persona ) (en Yo MiCasa) MiCasa) (:init (= (distancia (distancia MiCasa GRX) 20) ) (:tasks :tasks--goal :tasks( (Viajar (Viajar Yo MiCasa CasaMiPrimo)) CasaMiPrimo)) ) ) 24 Planificador HTN Modelo del mundo HTN-PDDL • Dominio • Problema Planificador HTN • Búsqueda • Razonamiento Plan • Secuencia de acciones 25 Planificador HTN (Viajar Yo MiCasa CasaMiPrimo) Descomponer la tarea de nivel superior Seleccionar un método (comprobando las precondiciones, en el orden en que se han escrito) Descomponer la tarea siguiendo el orden de las subtareas Seleccionar un método enTaxi Descomponer/aplicar si primitiva cogerTaxi enAvion enCoche irAeropuerto Volar irADestino enBus andando 26 Planificador HTN (Viajar Yo MiCasa CasaMiPrimo) Descomponer la tarea de nivel superior Seleccionar un método (comprobando las precondiciones, en el orden en que se han escrito) Descomponer la tarea siguiendo el orden de las subtareas Seleccionar un método Descomponer/aplicar si primitiva enTaxi Pagar enAvion enCoche irAeropuerto Volar irADestino enBus andando irEnBus 27 Dominio Depots Almacén o Distribuidor Almacén o oDistribuidor Almacén Distribuidor Problemas de logística 28 Dominio Depots Objetos (:types place locatable - object depot distributor - place truck hoist surface - locatable pallet crate - surface) Cajas [crate [crate]] Pallets [pallet] Almacenes [depot [depot]] Distribuidores [distributor] Grúas [hoist [hoist]] Camiones [truck [truck]] 29 Dominio Depots Acciones (tareas primitivas) primitivas) (:action (:action Drive ; Conducir un camión :parameters (?x - truck ?y - place ?z - place)… (:action (:action Lift ; Coger una caja con una grúa :parameters (?x - hoist ?y - crate ?z - surface ?p - place)… (:action (:action Drop ; Dejar una caja con una grúa :parameters (?x - hoist ?y - crate ?z - surface ?p - place)… (:action (:action Load ; Cargar un camión :parameters (?x - hoist ?y - crate ?z - truck ?p - place).. (:action (:action Unload ; Descargar un camión :parameters (?x - hoist ?y - crate ?z - truck ?p - place)… 30 Dominio Depots Objetivos (lista de tareas “apilar”) apilar”) Tarea objetivo “Main”: (:tasks(:tasks-goal :tasks((Main))) (:task Main :parameters () (! (:method itera :precondition (AND (apilar (apilar ?x ?y)) :tasks ( (… ?x ?y ) ; Tarea necesaria para apilar x sobre y (:inline () (not (apilar (apilar ?x ?y))) ; Objetivo cumplido (Main)) ; Descomposición recursiva ) caso--base :precondition () :tasks ()) (:method caso ) ) 31 Acciones primitivas: HTN--PDDL durative HTN durative--actions – Objetos del dominio: • • • • – constantes, tipos predicados,, predicados funciones Acciones primitivas: • • • • • Representación PDDL Parámetros con tipo, tipo, precondiciones, efectos, duración (define (domain (domain viajes) (:requirements (:requirements :typing :fluents :derived derived-predicates :negative negativepreconditions :htn htn-expansion expansion) ) (:constants (:constants <….>) (:types (:types Persona Sitio – object Hogar Aeropuerto - Sitio (:predicates (:predicates (en ?p - Persona ?s – Sitio)) (:functions (:functions (distancia ?x ?y – Sitio) (dinero ?p – Persona) (velocidad(velocidad -taxi) (precio_km precio_km) ) ) (:durative (:durative-action ir_en_taxi :parameters (?u – Persona ?o ?d – Sitio) :duration (= ? ?dur dur (* (distancia ?o ?d) (velocidad_taxi velocidad_taxi) ) ) :condition (and (en ?u ?o)) :effect (and ( (not not (en ?u ?o)) (en ?u ?d))) 32 Otros aspectos útiles de PDDL Valores numéricos/funciones Especificar cómo calcular duraciones de acciones Condiciones con expresiones aritméticas (:durative-action ir_en_taxi (:durative:parameters (?u – Persona ?o ?d – Sitio) :duration (= ?dur (* (distancia ?o ?d) (velocidad_taxi) (velocidad_taxi ) ) :condition (and (en ?u ?o) (> (dinero ?u) (* (precio_km)(distancia ?o ?d)) :effect (and (not (en ?u ?o)) (en ?u ?d))) 33 Otros aspectos útiles de PDDL Valores numéricos/funciones Derived literals: reglas de inferencia para “derivar” predicados de las precondiciones (:derived (tiene_dinero ?p – Persona ?org ?dst – Sitio) ((> (dinero ?u) (* (precio_km)(distancia ?o ?d))) (:durative-action ir_en_taxi (:durative:parameters (?u – Persona ?o ?d – Sitio) :duration (= ?dur (* (distancia ?o ?d) (velocidad_taxi) ) :condition (and (en ?u ?o) (tiene_dinero ?u ?o ?d)) :effect (and (not (en ?u ?o)) (en ?u ?d))) 34 Otros aspectos útiles de PDDL Valores numéricos/funciones Derived literals: reglas de inferencia para “derivar” predicados de las precondiciones Asignación, incremento/decremento de funciones (:derived (tiene_dinero ?p – Persona ?org ?dst – Sitio) ((> (dinero ?u) (* (precio_km)(distancia ?o ?d))) (:durative-action ir_en_taxi (:durative:parameters (?u – Persona ?o ?d – Sitio) :duration (= ?dur (* (distancia ?o ?d) (velocidad_taxi) ) :condition (and (en ?u ?o) (tiene_dinero ?u ?o ?d)) :effect (and (not (en ?u ?o)) (en ?u ?d))) (:durative-action pagar (:durative:parameters (?u – Persona ?c – number) :duration (= ?dur 1) :condition (> ((- (dinero ?u) ?c) 0) :effect (decrease (dinero ?u) ?c) 35 Bibliografía Stuart Russell & Peter Norvig: Norvig: Artificial Intelligence: A Modern Approach Prentice--Hall, 3rd edition, 2009 Prentice ISBN 0136042597 http://aima.cs.berkeley.edu/ Nils J. Nilsson The Quest for Artificial Intelligence Cambridge University Press, 2009 ISBN 0521122937 http://ai.stanford.edu/~nilsson/QAI/qai.pdf 36 Bibliografía Cursos de planificación MSC Automated Planning School of Informatics University of Edinburgh http://www.inf.ed.ac.uk/teaching/courses/plan/ También en Coursera: Coursera: https://www.coursera.org/course/aiplan CS541: Artificial Intelligence Planning USC Viterbi School of Engineering University of Southern California http://www.isi.edu/~blythe/cs541/ 37