Pràctica de Planificació
Un model en PDDL d'una agència de viatges: vols, hotels, durada d'estada i una mètrica d'interès numèrica a minimitzar. Explora el domini de l'Extensió 2, descarrega fitxers .pddl o executa el planificador quan hi hagi un backend ENHSP desplegat.
Aquesta demo inclou:
- Diagrama de la xarxa de vols i resum de restriccions per a l'Extensió 2
- Codi font PDDL del domini i problema (només lectura)
- Arxius .pddl descarregables
- Descripció de les extensions d'un cop d'ull
- Planificador simulat amb solució òptima pre-calculada
L'app web completa (execució local) afegeix:
- Explorador d'arxius per a totes les extensions (Bàsic a Extensió 4)
- Visualització interactiva del graf de l'estructura del problema
- Execució del planificador integrat sobre qualsevol domini/problema
- Ruta planificada ressaltada sobre el graf
- PDDL editable amb suport per a re-execució
Executa'l localment per accedir a l'app completa: cd Practica_de_Planificacion && make dev
Xarxa de vols
El hub cg1 connecta amb tres ciutats formant un triangle. Cada ciutat té un hotel. Estrelles = valor d'interès (el planificador minimitza la suma).
Restriccions i objectiu
Acció única: anadir_ciudad — volar a nova ciutat, reservar hotel, triar durada de l'estada (1–4 dies). Requereix un planificador PDDL numèric (ENHSP, LPG).
Extensions
Domini (Ext 2)
Descarregar ↓(define (domain agencia_viaje)
(:requirements :strips :typing :fluents)
(:types
ciudad - ciudad
hotel - hotel
vuelo - vuelo
dias_por_ciudad - dias_por_ciudad
)
(:functions
(num_ciudades_escogidas)
(num_dias_recorrido)
(min_ciudades_a_recoger)
(min_dias_recorrido)
(min_dias_por_ciudad)
(max_dias_por_ciudad)
(dias_por_ciudad ?x - dias_por_ciudad)
(interes_ciudad ?c - ciudad)
(interes_actual)
)
(:predicates
(va_a ?x - vuelo ?y - ciudad ?z - ciudad)
(esta_en ?x - hotel ?y - ciudad)
(ciudad_visitada ?c - ciudad)
(current_ciudad ?c - ciudad)
)
(:action anadir_ciudad
:parameters (?c1 - ciudad ?c2 - ciudad ?v - vuelo ?h - hotel ?d - dias_por_ciudad)
:precondition (and
(<= (min_dias_por_ciudad) (dias_por_ciudad ?d))
(>= (max_dias_por_ciudad) (dias_por_ciudad ?d))
(not (ciudad_visitada ?c2))
(current_ciudad ?c1)
(va_a ?v ?c1 ?c2)
(esta_en ?h ?c2))
:effect (and
(ciudad_visitada ?c2)
(not (current_ciudad ?c1))
(current_ciudad ?c2)
(increase (num_ciudades_escogidas) 1)
(increase (num_dias_recorrido) (dias_por_ciudad ?d))
(increase (interes_actual) (interes_ciudad ?c2))
)
)
)Problema (Ext 2)
Descarregar ↓(define (problem agencia_viaje)
(:domain agencia_viaje)
(:objects
cg1 c1 c2 c3 - ciudad
vg1 v1 v2 v3 - vuelo
h1 h2 h3 - hotel
dias1 dias2 dias3 dias4 - dias_por_ciudad
)
(:init
(= (num_ciudades_escogidas) 0)
(= (min_ciudades_a_recoger) 2)
(= (min_dias_por_ciudad) 1)
(= (max_dias_por_ciudad) 4)
(= (num_dias_recorrido) 0)
(= (min_dias_recorrido) 10)
(= (dias_por_ciudad dias1) 1)
(= (dias_por_ciudad dias2) 2)
(= (dias_por_ciudad dias3) 3)
(= (dias_por_ciudad dias4) 4)
(= (interes_actual) 0)
(= (interes_ciudad c1) 1)
(= (interes_ciudad c2) 2)
(= (interes_ciudad c3) 3)
(= (interes_ciudad cg1) 3)
(current_ciudad cg1)
(ciudad_visitada cg1)
(va_a vg1 cg1 c1) (va_a vg1 cg1 c2) (va_a vg1 cg1 c3)
(va_a v1 c1 c2) (va_a v2 c2 c3) (va_a v3 c3 c1)
(esta_en h1 c1) (esta_en h2 c2) (esta_en h3 c3)
)
(:goal (and
(<= (min_ciudades_a_recoger) (num_ciudades_escogidas))
(<= (min_dias_recorrido) (num_dias_recorrido))
))
(:metric minimize (interes_actual))
)Vista prèvia del planificador
MockPla òptim pre-calculat per al problema de l'Extensió 2.