0% encontró este documento útil (0 votos)
204 vistas15 páginas

Prolog - Uso de Estructuras

Este documento presenta un ejemplo de uso de estructuras de datos en Prolog para implementar una base de datos de vuelos. Se define la base de datos con cláusulas que almacenan información sobre horarios de vuelos entre diferentes ciudades. También se definen selectores que permiten consultar y extraer información específica de la base de datos, como encontrar rutas de vuelo entre dos ciudades en un día determinado. El documento explica el proceso de implementación detallando la representación de los datos, la definición de selectores y ejemplos de consultas.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
204 vistas15 páginas

Prolog - Uso de Estructuras

Este documento presenta un ejemplo de uso de estructuras de datos en Prolog para implementar una base de datos de vuelos. Se define la base de datos con cláusulas que almacenan información sobre horarios de vuelos entre diferentes ciudades. También se definen selectores que permiten consultar y extraer información específica de la base de datos, como encontrar rutas de vuelo entre dos ciudades en un día determinado. El documento explica el proceso de implementación detallando la representación de los datos, la definición de selectores y ejemplos de consultas.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

Prolog

Uso de estructuras: programas ejemplo

David Gelpi Fleta


[ correo ]

Laboratorio de Introduccin a los Sistemas Informticos Inteligentes Escuela Superior de Ingeniera Informtica - Universidad Vigo

Nota: Expos icin bas ada en el captulo 4 del libro Prolog: Programming for Articial Intelligence de Ivan Bratko - Ed. Pears on - contenido en la bibliografa recomendada de la as ignatura.

Prolog - ISII 05/06


2

Contenido

Bases de datos como ejemplo de informacin estructurada. Abstraccin de datos. Selectores Problema del viajante de comercio.

Prolog - ISII 05/06


3

Una base de datos en Prolog


familia

persona

persona

roberto

perez

fecha

trabaja

ana

perez

fecha

trabaja

.
persona

15

abril 1974

xunta

1700

marzo 1971 pasteleria 1500 [ ]

BBDD = conjunto de clusulas familia


familia( persona(roberto, perez, fecha(15, abril, 1974), trabaja(xunta,1700) ), persona(ana, perez, fecha(1, marzo, 1971), trabaja(pasteleria,1500) ), [ persona(eva, perez, fecha(21, julio, 2005), paro) ]).

eva

perez

fecha

paro

21

julio 2004

familia( estructura(, estructura(), ), estructura (), lista[ ] ).

Prolog - ISII 05/06


4

Prolog como lenguaje de consultas de BBDD


Prolog permite referirnos a un objeto sin especicar sus componentes individuales: indicamos slo la estructura.
Ejemplos: ?- familia( persona(_, porto,_,_),_,_) devuelve todas las familias de apellido porto ?- familia(_,_, [_,_,_ ]) devuelve todas las familias con tres hijos ?- familia(_, persona(Nombre, Apellido,_,_), [_,_,_ ]) devuelve el nombre y el apellido de todas las mujeres casadas que posean tres hijos.

As, podemos denir varios procedimientos para trabajar con las estructuras contenidas en la BBDD familia:
marido(X):- familia(X, _, _). esposa(X):- familia(_,X,_). hijo(X):- familia(_,_,Hijos), member(X,Hijos). existe(Persona):- marido(Persona) ; esposa(Persona) ; hijo(Persona). **cumpleaos(persona(_,_,Fecha,_),Fecha).

Prolog - ISII 05/06


5

Abstraccin de datos
Trataremos de organizar varias piezas de informacin en unidades naturales a ser posible de manera jerrquica. La informacin as conceptualmente. estructurada debe poseer signicado

Cada unidad de informacin debera ser fcilmente accesible en el programa. Los detalles de la implementacin de la estructura sern invisibles para el usuario de la estructura. El programador piensa en objetos y relaciones entre ellos, no en cmo est representada la informacin. Cmo se lleva a cabo esto en Prolog?:
Ejemplo BBDD familia: cada familia es una coleccin de piezas de informacin estas piezas se dividen en unidades naturales como persona o familia pueden ser tratadas como objetos simples

Prolog - ISII 05/06


6

Selectores
Un selector es una relacin que permite acceder a objetos sin conocer los detalles sobre cmo est representada la informacin. En nuestra BBDD familia permitir acceder a componentes particulares de una familia sin conocer los detalles de la gura de la transparencia 4. Selector:

selector( Objeto, Seleccin)

s elector es la relacin selector Objeto es el objeto que contiene a S eleccin ,el componente seleccionado. El nombre del s elector ser el mismo que el del Componente s eleccionado

Ejemplo: esposa( familia(_,Esposa,_), Esposa). hijos( familia(_,_,ListaHijos), ListaHijos).

Prolog - ISII 05/06


7

Mejoras en la implementacin de programas


Podemos escribir un programa mediante el conjunto de hechos que representan la informacin (bbdd) ms los selectores que permitan acceder a la informacin. El uso de selectores en un programa permite abstraernos de cmo est representada la informacin estructurada. Para manipular la informacin es suciente con conocer las relaciones denidas por los selectores. Los programas que emplean selectores resultan ms fciles de modicar: al variar la representacin de la informacin (base de conocimiento) no es necesario modicar la manera de acceder a ella (selectores). Variar la representacin de la informacin puede mejorar la eciencia del programa.

Programa hechos
(representacin)

+
Selectores
(acceso)

Prolog - ISII 05/06


8

Problema del viajante de comercio (TSP)


Este programa se emplea para planicar viajes en avin. Contesta a cuestiones como:
Qu das de la semana existe vuelo directo por la tarde entre dos determinadas ciudades? Cmo puedo viajar entre dos ciudades el martes? Si quiero visitar tres ciudades en determinado orden, empezando el martes y retornando el viernes, qu ruta debo seguir si slo dispongo de un vuelo al da? BBDD = conjunto de clusulas horario que contienen la informacin sobre los vuelos. Selectores: cmo consultar la informacin. Denir la BBDD con los horarios de los vuelos. Establecer qu consultas (selectores) extraen la informacin de la BBDD.

Programa = BBDD + Selectores.


Pasos en la implementacin del problema:


1. 2.

Prolog - ISII 05/06


9

TSP: BBDD
Denir la BBDD con los horarios de los vuelos: representacin de la informacin. horario(Lugar1, Lugar2, ListaVuelos).

Programa BBDD
(representacin)

ListaVuelos = [ Vuelo1, Vuelo2, , Vuelon] lista de items estructurados, separados por el operador /

LitaVuelos = [HoraSalida/ HoraLlegada/ NumVuelo/ ListaDias, ...]


HoraSalida estructura de dos componentes separados por el operador :

+
Selectores
(acceso)

HoraSalida = 9:40
ListaDias lista de das o el tomo todos

ListaDias = [lu, ma, mi, ju, vi, sa ]


Clusula horario:

horario( edimburgo, [9:40 / 10:50 / 13:40 / 14:50 / 19:40 / 20:50 / ]).


Prolog - ISII 05/06

londres, ba4733 / todos, % Vuelo1 ba4773 / todos, % Vuelo2 ba4833 / [lu,ma,mi,ju,vi,sa]

10

TSP: selectores
Denir los selectores del programa: cmo acceder a la informacin El principal problema es encontrar rutas entre dos ciudades dadas en un determinado da de las semana. selector( Objeto, Seleccin) ruta( Lugar1, Lugar2, Dia, Ruta) Una ruta (selector, relacin) es una secuencia de vuelos que satisfacen los siguientes criterios:
El origen de la ruta es Lugar1 El destino de la ruta es Lugar2 Todos los vuelos se encuentran en el mismo da de la semana, Da. Todos los vuelos en Ruta estn en la relacin horario. Existe suciente tiempo para realizar el trasbordo entre dos vuelos si la ruta consta de varios vuelos.

Programa hechos
(representacin)

+
Selectores
(acceso)

Objeto Ruta: lista de objetos estructurados separados por el operador / Ruta = [De/ Hacia/ NumVuelo/ HoraSalida ]

Prolog - ISII 05/06


11

TSP: selectores
La relacin ruta entre dos ciudades consta de dos reglas:
si existe vuelo directo:
ruta( Lugar1, Lugar2, Dia, [Lugar1/ Lugar2/ NumVuelo/ HoraSalida ]) :vuelo(Lugar1, Lugar2, Dia, NumVuelo, HoraSalida, HoraLlegada).

si existe vuelo indirecto entre las ciudades:


ruta( Lugar1, Lugar2, Dia, [Lugar1/ Lugar3/ NumVuelo/ HoraSalida| RestoRuta ]) :ruta(Lugar3, Lugar2, Dia, RestoRuta), vuelo(Lugar1, Lugar2, Dia, NumVuelo1, HoraSalida1, HoraLlegada1), salida(RestoRuta, HoraSalida2), trasbordo(HoraLlegada1, HoraSalida2).

Ahora debemos denir las relaciones que componen el selector ruta.

Prolog - ISII 05/06


12

TSP: resto de relaciones


% Selector ruta y relaciones vuelo( Lugar1, Lugar2, Dia, NumVuelo, HoraSalida, HoraLlegada):horario( Lugar1, Lugar2, ListaVuelos), member(HoraSalida/ HoraLlegada/ NumVuelo/ ListaDias, ListaVuelos), diaVuelo( Dia, ListaDias). diaVuelo( Dia, ListaDias):member( Dia, ListaDias). diaVuelo( Dia, todos):member(Dia,[lu,ma,mi,ju,vi,sa]). horaSalida( [P1/ P2/ NumVuelo/ Salida | _ ], Salida). trasbordo( Horas1:Minutos1, Horas2:Minutos2):60 * (Horas2 - Horas1) + Minutos2 - Minutos1 >= 40. member( X, [X | L ] ). member( X, [Y | L ] ):member( X, L).
Prolog - ISII 05/06
13

TSP: BBDD
% Base de datos con los vuelos
timetable( edinburgh, london, [9:40 / 10:50 / ba4733 / alldays, 13:40 / 14:50 / ba4773 / alldays, 19:40 / 20:50 / ba4833 / [mo,tu,we,th,fr,su] ] ). timetable( london, edinburgh, [9:40 / 10:50 / ba4732 / alldays, 11:40 / 12:50 / ba4752 / alldays, 18:40 / 19:50 / ba4822 / [mo,tu,we,th,fr] ] ). timetable( london, ljubljana, [ 13:20 / 16:20 / jp212 / [mo,tu,we,fr,su], 16:30 / 19:30 / ba473 / [mo,we,th,sa] ] ). timetable( london, zurich, [ 9:10 / 11:45 / ba614 / alldays, 14:45 / 17:20 / sr805 / alldays ] ). timetable( london, milan, [ 8:30 / 11:20 / ba510 / alldays, 11:00 / 13:50 / az459 / alldays ] ). timetable( ljubljana, zurich, [ 11:30 / 12:40 / jp322 / [tu,th] ] ). timetable( ljubljana, london, [ 11:10 / 12:20 / jp211 / [mo,tu,we,fr,su], 20:30 / 21:30 / ba472 / [mo,we,th,sa] ] ). timetable( milan, london, [ 9:10 / 10:00 / az458 / alldays, 12:20 / 13:10 / ba511 / alldays ] ). timetable( milan, zurich, [ 9:25 / 10:15 / sr621 / alldays, 12:45 / 13:35 / sr623 / alldays ] ). timetable( zurich, ljubljana, [ 13:30 / 14:40 / jp323 / [tu,th] ] ). Prolog - ISII 05/06
14

TSP: cuestiones
Qu das de la semana hay vuelo directo por la tarde de Ljubliana a Londres?:
?- vuelo( ljuljana, london, Dia, _, HoraSalida: _, _), HoraSalida >= 18. Dia = lu; Dia = mi; ...

Cmo puedo viajar de Ljubljana a Edimburgo en martes?:


?- ruta(ljubljana, edimburgo, ma, Ruta). Ruta= [ljubljana/ zurich/ jp322/ 11:30, zurich/ londres/ sr806/ 16:10, londres/ edimburgo/ ba4822/ 18:40 ]

Prolog - ISII 05/06


15

También podría gustarte