El presente trabajo de investigación se realizo utilizando un lenguaje de programación Prolog, hemos conseguido resolver el problema del desarrollo de un sistema experto en turismo de una manera relativamente sencilla.
Por medio de la declaración de una base de hechos y unas sencillas reglas somos capaces de, a partir de ciertas premisas, llegar a la recomendación de la ciudad más adecuada para el viajero que utiliza nuestro programa.
esperando que sea de mucha ayuda para todos que empiezan y sirva de guía para el desarrollo de otros proyectos de investigación
SISTEMA EXPERTO EN TURISMO
PRESENTADO POR:
Ø Jarol, RIVERA VILLACORTA.
Ø Lleferson,
GUERRA INGA.
Ø Milton,
HERNANDEZ CASTAÑEDA.
Ø Johann,
CHAVEZ PINCHI.
Ø Sergio,
PANDURO BALTAZAR.
ÍNDICE
1.
Introducción...............................................................................................2
2. Planteamiento del problema......................................................................2
3. Resolución
del
problema...........................................................................3
4. Implementación
de la solución..................................................................4
5. Pruebas.....................................................................................................6
6. Conclusiones.............................................................................................7
7. Código.......................................................................................................8
1. Introducción
Actualmente se le da mucha importancia al ocio en nuestras vidas, y
un campo muy importante
dentro del terreno del ocio es el tema de
los
viajes. Muchas veces tenemos
ganas de viajar, conocer nuevos sitios,
nuevas culturas, o simplemente pegarnos unos
“chapuzones”
al rio o ir de juerga
con
los amigos para
evadirnos de
la “rutinaria ciudad”.
Después de conseguir poner de acuerdo a las personas adecuadas para realizar un viaje en una fecha
determinada, surgen los problemas para decidir
cuál es la
ciudad adecuada
para ese viaje. Y es aquí cuando entra en juego nuestro programa: El sistema experto en turismo.
Se trata
de un programa fácil de
interactuar con él, implementado en el lenguaje de programación “Prolog”, el cual, a partir de nuestras preferencias y
restricciones económicas nos recomienda todas las opciones turísticas que se amoldan a
esas
características, así
como el
precio del viaje y lo
que hay que visitar en
cada ciudad.
2. Planteamiento del problema
“Sistema experto
en
turismo”
Sistema de recomendación de una ciudad,
aconsejando qué sitios visitar según la ubicación del usuario, sus
preferencias, sus posibilidades (si tiene coche o no, su presupuesto...), su
experiencia (por ejemplo, si conoce la ciudad o no), etc.
Este
enunciado quedaba bastante
abierto a diferentes
modos de implementar
el programa, por lo que pensamos en alguna solución que resultara útil
para todas aquellas personas que disponen de fines de semana libres para poder
viajar por la península española.
De este modo, decidimos que nuestro programa
recomendaría un viaje (partiendo Tarapoto) a cualquier ciudad San Martin (de
entre 5 posibles), calculando los costes del trayecto, la estancia. Y teniendo siempre en cuenta las preferencias de
los viajeros.
Todos estos viajes son factibles tanto en
tiempo como en dinero para un fin de semana (los datos introducidos son
reales), por lo que nos parece una buena referencia para al menos orientarse.
3. Resolución del problema
Para llegar a la solución final, pasamos por
diferentes fases, las cuales detallamos a continuación:
- Fase I: “Búsqueda de información”
Debido a que nuestra intención era elaborar
un programa lo más realista posible, buscamos información real en Internet de
los precios para cada transporte a cada
una de las ciudades que se iban a
implementar. El precio
de los viajes en autos
se calculó partiendo de la distancia entre las ciudades, un consumo medio de 3
Galones a los 100 km, y un coste de la gasolina de S/13.
Además, visitamos una agencia de viajes para
informarnos acerca de los precios de hoteles en las distintas ciudades. Nos
recomendaron la utilización de los cheques de “RIO SHILCAYO”, que por un coste
de S/ 100 por noche, se disponía de una
habitación doble.
- Fase II: “Elección de las características y
descripción de las ciudades”
Esta fase era crítica para el funcionamiento
de nuestro programa. Debíamos escoger las características adecuadas para cada
ciudad, y para ello nos basamos en nuestra propia experiencia, y a información
que buscamos en internet sobre los mejores lugares para visitar en cada ciudad.
- Fase III: “Creación de reglas
e instrucciones”
Durante esta fase nos dedicamos a declarar los predicados y
las reglas derivadas. Implementamos distintas funciones para la resolución del programa completo. Esta
fase se explica más en
profundidad
en el
siguiente apartado.
4. Implementación
de la solución
Implementamos
distintas
funciones
para la resolución del
programa completo.
En primer lugar, realizamos la base de hechos, en la que incluimos
la
información de las
diferentes ciudades y sus atributos.
Incluimos diferentes tipos
de información:
en_bus(ciudad, precio).
finde_hotel(ciudad,50).
Debido
a que en todas las ciudades podemos encontrar hoteles por este precio
También incluimos las distintas características
de las ciudades, para poder escoger de acuerdo a las preferencias de cada
viajante.
Hemos clasificado las ciudades con los
siguientes atributos:
Característica
Ciudad
|
Rio
|
Cultural
|
Juerga
|
Montaña
|
Norte-Sur
|
Fiestas
|
Moyobamba
|
X
|
x
|
x
|
x
|
Norte
|
(Junio)
|
Rioja
|
X
|
x
|
x
|
|
Norte
|
(Mayo)
|
Lamas
|
X
|
x
|
x
|
|
Norte
|
(Agosto)
|
Tarapoto
|
X
|
X
|
X
|
|
Sur
|
(Julio)
|
Juanjui
|
|
x
|
x
|
|
Sur
|
(agosto)
|
Por
lo que,
dependiendo
de
las
preferencias
que
escoja el
viajero,
el programa
seleccionará todas las ciudades que
encajen con esas
características:
opcion_elegida(juerga,_,Ciudad):-juerga(Ciudad).
opcion_elegida(playa,_,Ciudad):-rio(Ciudad).
opcion_elegida(cultural,_,Ciudad):-cultural(Ciudad).
opcion_elegida(montaña,_,Ciudad):-montaña(Ciudad).
opcion_elegida(norte,_,Ciudad):-norte(Ciudad). opcion_elegida(sur,_,Ciudad):-sur(Ciudad).
opcion_elegida(fiestas,Mes,Ciudad):-fiestas(Ciudad,_,Mes).
A continuación, el programa calculará el coste que le conlleva al viajero llegar hasta
esas
ciudades con
todos los medios
de transporte posibles.
transporte(Ciudad,bus,Coste):- en_bus(Ciudad,Coste).
Y se calcula el precio total del fin de
semana en cada
ciudad seleccionada para cada medio
de transporte:
viaje(Ciudad,Transporte,Precio):- transporte(Ciudad,Transporte,Coste_t),
finde_hotel(Ciudad,Coste_h),
Precio is Coste_t+Coste_h.
Una vez que se ha
calculado el precio del viaje,
se comprueba
si está dentro de nuestro
presupuesto permitido,
con la siguiente función:
comprueba_precio(Ciudad,Transporte,Presupuesto,Precio):- viaje(Ciudad,Transporte,Precio),
Z is Presupuesto-Precio,Z>0.
Debido a la
utilización del valor de Presupuesto en el programa, es necesario que el cliente introduzca un Presupuesto para su viaje, aún cuando no tenga
límite de presupuesto (en ese caso, bastará con
introducir una elevada cantidad).
Finalmente, se imprimen por pantalla los resultados (Ciudad(es), Precios y
Tranpsporte(s)) y se muestra información turística de cada una de las
ciudades.
La función
“descripción” contiene información escrita de la ciudad en
concreto, mientras que
la función
“separa” consiste en
una
línea para resaltar esta información.
La función
principal
del
programa es
la
siguiente:
finde(Ciudad,Mes,Presupuesto,Transporte,Precio_total,Preferencias):- opcion_elegida(W,Mes,Ciudad),
comprueba_precio(Ciudad,Transporte,Presupuesto,Precio_total), imprimir(Ciudad,Transporte).
Se encarga de
recoger
todos los parámetros de entrada e ir llamando a las funciones anteriormente explicadas
para devolver la solución
del problema. En el último
parámetro se pueden incluir una o más opciones acerca de lo que pretende el usuario durante su
viaje.
El programa consta además de una función
“ayuda” en
la
que
se explica la funcionalidad del programa y se informa al
usuario cómo se deben
introducir los parámetros.
5. Pruebas
A continuación,
realizaremos
una
serie
de
pruebas, para
mostrar los resultados
obtenidos.
Función principal del programa:
En esta primera prueba, el programa no nos devuelve ninguna ciudad acorde con los requisitos especificados por el usuario porque el presupuesto introducido es insuficiente para desplazarse a cualquier ciudad situada al norte y con playa. Posteriormente, vemos cómo aumentando el presupuesto, obtenemos más ciudades y diferentes medios de transporte.
Gracias al lenguaje de programación Prolog,
hemos
conseguido resolver el problema del
desarrollo de un
sistema experto en
turismo
de una manera relativamente sencilla.
Por medio de la declaración de una base de hechos y unas sencillas reglas somos capaces de, a partir de ciertas premisas, llegar a la recomendación de la ciudad más adecuada para el viajero que utiliza nuestro
programa.
Durante
la implementación de
este
programa
hemos profundizado más en el
conocimiento
del lenguaje
Prolog,
disfrutando en
su
programación
y aumentando
nuestro interés
en el
campo
de la inteligencia artificial, y la
creación de
sistemas expertos.
Por otro lado, consideramos que aplicaciones de este tipo son útiles para el ser humano,
y pensamos darle uso
más de una vez para escoger una ciudad
a la que viajar.
7. Código
%******************
%* BASE DE HECHOS *
%******************
%------------------------------
%CIUDADES
ciudad(moyobamba).
ciudad(rioja).
ciudad(lamas).
ciudad(tarapoto).
ciudad(juanjui).
%------------------------------
%DE PRECIOS TRANSPORTE (Ida/Vuelta)
%bus
en_bus(moyobamba,50).
en_bus(rioja,60).
en_bus(lamas,50).
en_bus(tarapoto,30).
en_bus(juanjui,90).
%------------------------------
% PRECIOS DE HOTELES POR DIA
finde_hotel(moyobamba,120).
finde_hotel(rioja,75).
finde_hotel(lamas,90).
finde_hotel(tarapoto,140).
finde_hotel(juanjui,100).
%------------------------------
%CARACTERISTICAS DE LAS CIUDADES
%...............................
% ********
% * RIOS *
% ********
%Ciudad de tarapoto
rio(cancum).
rio(mayo).
%...............................
%*********
%*CULTURA*
%*********
%Ciudades de elevada importancia
cultural moyobamba
cultural(moyobamba).
cultural(rioja).
cultural(lamas).
cultural(tarapoto).
cultural(juanjui).
%...............................
%********
%*JUERGA*
%********
% Ciudades por las que salir de juerga
tarapoto
juerga(moyobamba).
juerga(rioja).
juerga(lamas).
juerga(tarapoto).
juerga(juanjui).
%...............................
%*******
%*CAMPO*
%*******
% Zona u otros moyobamba .
montaña(moyobamba).
%...............................
%***********
%*GEOGRAFIA*
%***********
% Situación geografica.
norte(tarapoto).
sur(moyobamba).
%...............................
%*************
%*ANIVERSARIO*
%*************
% Fiestas autonómicas
%
fiestas(moyobamba,22,junio).
fiestas(rioja,3,mayo).
fiestas(lamas,22,agosto).
fiestas(tarapoto,8,julio).
fiestas(juanjui,15,agosto).
%------------------------------
%****************************************************
%* DECLARACION DE PREDICADOS O
RELACIONES DERIVADAS *
%****************************************************
% Precio del transporte a una Ciudad,
según se vaya coche o bus.
transporte(Ciudad,bus,Coste):-
en_bus(Ciudad,Coste).
transporte(Ciudad,bus,Coste):-
en_bus(Ciudad,Coste).
%Precio del viaje completo a una
ciudad.
% viaje dice el precio de un fin de semana
en una ciudad, teniendo en cuenta el hotel y el precio del transporte.
viaje(Ciudad,Transporte,Precio):-
transporte(Ciudad,Transporte,Coste_t),finde_hotel(Ciudad,Coste_h),Precio is
Coste_t+Coste_h.
% Seleccion de una ciudad en funcion
de la opcion elegida
opcion_elegida(juerga,_,Ciudad):-juerga(Ciudad).
opcion_elegida(rio,_,Ciudad):-rio(Ciudad).
opcion_elegida(cultural,_,Ciudad):-cultural(Ciudad).
%opcion_elegida(parque,_,Ciudad):-parque(Ciudad).
opcion_elegida(montaña,_,Ciudad):-montaña(Ciudad).
opcion_elegida(norte,_,Ciudad):-norte(Ciudad).
opcion_elegida(sur,_,Ciudad):-sur(Ciudad).
opcion_elegida(fiestas,Mes,Ciudad):-fiestas(Ciudad,_,Mes).
% Descripcion de la informacion de
cada ciudad.
descripcion(moyobamba):- write('Ciudad: MOYOBAMBA.'),
nl,write('Podrás visitar (entre
otros):'),
nl,
nl,write('-Baños Sulfurosos de
Oromina, 7 km de la ciudad de
Moyobamba.'),
nl,write('Afloramiento natural de agua
sulfurosa. Son conocidos por las propiedades,'),
nl,write('terapéuticas de sus aguas'),
nl,
nl,write('-Cataratas de Asnacyacu,
A 7 km de la ciudad de Moyobamba.Caída
de agua de'),
nl,write('8 metros) de altura, se
caracteriza por sus aguas cristalinas y frías. Es un buen'),
nl,write('lugar para observar
diferentes especies de aves de la selva alta'),
nl,
nl,write('-Baños Termales de San
Mateo, A 4 km de la ciudad de Moyobamba, son bien'),
nl,write('conocidas por sus
propiedades medicinales. Según se cuenta, las aguas son'),
nl,write('ideales para el tratamiento
de la artritis,el reumatismo, los dolores musculares'),
nl,write('hasta el estrés.'),
nl,
nl,write('-Cataratas del Gera, A 21 km
de la ciudad de Moyobamba Rodeadas de'),
nl,write('una densa vegetación
intocada por el hombre, se observa el agua caer con'),
nl,write('fuerza en tres etapas, desde
una altura de 120 metros. '),
nl,
nl,write('-La Cueva de los Huacharos,
A 38 km al suroeste de la ciudad de Moyobamba.'),
nl,write('Esta poblada por centenares
de aves nocturnas denominadas Huacharos, que'),
nl,write('anidan en su bóveda.').
descripcion(rioja):- write('Ciudad:
RIOJA.'),
nl,write('Podrás visitar (entre
otros):'),
nl,
nl,write('-Cueva del Diamante, A 58 km
la noroeste de la ciudad de Rioja, en la localidad de Naranjos,'),
nl,write('Visitas: lunes-domingo
8:00-18:00 Ubicada dentro del Bosque de Protección del Alto Mayo,'),
nl,write('tiene estalactitas y
estalagmitas con figuras caprichosas.'),
nl,
nl,write('-Naciente del Río Tioyacu, A
14 km de la ciudad de se llega hasta el poblado de Segunda Jerusalén,'),
nl,write('desde allí se recorren 600
metros hasta la naciente del río. El río Tioyacu nace desde la base de la
montaña,'),
nl,write('ubicada a 898 msnm. Es de
aguas frías y cristalinas; a lo largo de su recorrido'),
nl,write('va formando pozas y cascadas
naturales.').
descripcion(lamas):-
write('Ciudad:LAMAS.'),
nl,write('Podrás visitar (entre
otros):'),
nl,
nl,write('-Museo Etnico de Lamas, A 22
km al noroeste de la ciudad de Tarapoto. Muestra la historia, costumbres'),
nl,write('y el folklore de la cultura
quechua-lamista. Utilizando madera y arcilla, se ambientan las
representaciones'),
nl,write('de algunas costumbres como
el enamoramiento, el "lanta-tipina" o primer corte de pelo,'),
nl,write('la confección de sus
vestidos con algodón nativo y fibras vegetales, el teñido y las danzas de los
lamas'),
nl,
nl,write('-Cascada de Chapawanka, A 3
km de la ciudad de Tarapoto. Tiene 4 metros de altura'),
nl,write('y una poza de 2,5 metros de
profundidad.'),
nl,write('Alpie de la cascada, se observa
caer el agua sobre una base rocosa que la divide en dos torrentes.'),
nl,write('Está rodeada por un paisaje
exuberante, vegetación conformada por pashacas, shapajas, quinillas,
renacos,'),
nl,write('orquídeas y helechos y
diversas aves, mariposas e insectos.').
descripcion(tarapoto):- write('Ciudad:
TARAPOTO.'),
nl,write('Podrás visitar (entre
otros):'),
nl,
nl,write('Laguna Azul, A 35 km desde
la ciudad de Tarapoto se llega hasta el puerto López,'),
nl,write('desde allí se recorren 17, 5
km hasta la laguna Sauce Alcanza una extensión de 430,80 hectáreas'),
nl,write('y una profundidad aproximad
de 35 metros, está a 650 msnm. Sus aguas tienen una temperatura que oscila'),
nl,write('entre los 25ºC (77ºF)a 28ºC
(82,4ºF) y su color varía entre tonos verduscos o azulados.'),
nl,
nl,write('Cataratas de Ahuashiyaku, A
14 km al noroeste de la ciudad de Tarapoto
caída de agua de 40 metros de altura.'),
nl,write('Se ubica en e cerro La
Escalera, a 465 msnm. Las aguas discurren sobre una roca rodeada de tupidos
helechos,'),
nl,write('orquídeas y otras especies d
árboles. La poza, de unos 12 metros de largo'),
nl,
nl,write('Lago Lindo, A 35 km al
sureste de la ciudad de se llega hasta el distrito del Sauce,'),
nl,write('desde allí se recorre 1 km
hasta la laguna (10 minutos en auto aproximadamente) Se formó como consecuencia
'),
nl,write('de la acumulación de las
lluvias en la parte baja del terreno. '),
nl,
nl,write('Petroglifos de Polish, A 8,5
km de la ciudad de Tarapoto Son cinco
piedras que han sido cuidadosamente'),
nl,write('decoradas con figuras de
animales y plantas en bajo relieve; aún no se puede precisar la época'),
nl,write('a la que pertenecen.').
descripcion(juanjui):- write('Ciudad:
JUANJUI.'),
nl,write('Podrás visitar (entre
otros):'),
nl,
nl,write('-Cataratas del Breo, A 22 km
al sur desde la ciudad de Juanjui, se llega hasta la localidad'),
nl,write('de Huicongo, desde allí se
recorren 58 km hasta las cataratas (5 horas 10 minutos en balsa aproximadamente.'),
nl,write('Se ubican en la cuenca alta
del río Huayabamba, sobre un macizo rocoso cubierto por vegetación '),
nl,write('de bosque primario típico de
selva alta. La caída de agua es de aproximadamente 140 metros'),
nl,write('y presenta cuatro niveles.
'),
nl,
nl,write('-Gran Pajatén, Complejo
arqueológico atribuido a la cultura Chachapoyas (años 1200 a 1500 d.C.).'),
nl,write('Se ubica en la margen
derecha del río Montecristo, a 2850 msnm dentro del Parque Nacional Río
Abiseo.'),
nl,write('A primera vista, aparece
cubierto por una densa vegetación. Las construcciones se extienden'),
nl,write('desde los flancos de la
meseta hasta un sector denominado Las Palmas. Los edificios fueron'),
nl,write('construidos en diferentes
niveles. ').
% Función que imprime una linea
separadora.
separa
:- write_ln(''),
write('********************************************************************'),write_ln('').
% Comprobacion del precio del viaje
%Funcion que comprueba si la ciudad
está dentro del presupuesto del cliente
comprueba_precio(Ciudad,Transporte,Presupuesto,Precio):-viaje(Ciudad,Transporte,Precio),Z
is Presupuesto- Precio,Z>0.
% Imprime la informacion de la ciudad.
imprimir(Ciudad,bus):-separa,descripcion(Ciudad),separa.
imprimir(_,coche):-write_ln('').
imprimir(_,tren):-write_ln('').
% Funcion principal del programa ¡es
la que llama a todas las demas
%Invocación de la función
"finde(X,playa...).
finde(Ciudad,Mes,Presupuesto,Transporte,Precio_total,W):-
opcion_elegida(W,Mes,Ciudad),
comprueba_precio(Ciudad,Transporte,Presupuesto,Precio_total),imprimir(Ciudad,Transporte).
finde(Ciudad,Mes,Presupuesto,Transporte,Precio_total,X,Y):-
opcion_elegida(X,Mes,Ciudad), opcion_elegida(Y,Mes,Ciudad),
comprueba_precio(Ciudad,Transporte,Presupuesto,Precio_total),imprimir(Ciudad,Transporte).
presentacion:- nl,
write('******************************************************'),
nl,
nl,
write(' "INTELIGENCIA
ARTIFICIAL" '),
nl,
nl,
write(' RESPONSABLES:'),
nl,
nl,
write(' - Jarol Rivera Villacorta'),
nl,
write(' - Milton Hernandez
Castañeda'),
nl,
write(' - Lleferson Guerra Inga'),
nl,
write(' - Sergio Baltazar Panduro'),
nl,
write(' - Johan Chavez Pinchi'),
nl,
nl, write('******************************************************'),
nl,
nl, write(' SISTEMA
EXPERTO EN TURISMO. '),
nl,write('Para pasar un buen fin de
semana en SAN MARTIN:'),
nl,
nl,write(' "Preferencias"
puede ser: fiestas, montaña, norte, sur, rio, cultural, juerga o parque'),
nl,write(' Pulse "r" detrás
de cada resultado para ver todas las posibilidades.'),nl.
% Final del Programa.
No hay comentarios:
Publicar un comentario