Automated Planning · FIB-UPC

Pràctica de Planificació

A PDDL model of a travel agency: flights, hotels, stay duration, and a numeric interest metric to minimize. Browse the Extension 2 domain, download .pddl files, or run the planner when an ENHSP backend is deployed.

Flight network

vg1vg1vg1v1v2v3cg13c11c22c33

Hub cg1 connects to three cities forming a triangle. Each city has a hotel. Stars = interest value (planner minimizes the sum).

Constraints & objective

🏙️
≥ 2 cities visited
min_ciudades_a_recoger
📅
≥ 10 total trip days
min_dias_recorrido
🏨
1–4 days per city
min/max_dias_por_ciudad
📉
Minimize total interest
metric minimize

Single action: anadir_ciudad — fly to new city, book hotel, choose stay duration (1–4 days). Requires a numeric PDDL planner (ENHSP, LPG).

Extensions

BásicoExtension 1Extension 2Extension 3/4Extra 2
Básico: STRIPS-style: visit a minimum number of cities.
Extension 1: Same structure, different instance sizes.
Extension 2: Days per city, minimum trip days, per-city interest + minimize metric.
Extension 3/4: Problem variants and Python test generators.
Extra 2: Additional benchmark problems.

Domain (Ext 2)

Download ↓
(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))
		)
	)
)

Problem (Ext 2)

Download ↓
(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))
)

Run planner

Requires deployed planner API

Planner API not configured. Set PUBLIC_PLANNER_URL in .env before building. You can still browse the PDDL above and download the files.
domain.pddl ↓problem.pddl ↓