Sistema Experto en Actividades de Ocio

Transcription

Sistema Experto en Actividades de Ocio
Sistema Experto en Actividades de Ocio
Sherezade Fraile Paniagua
Ingenierı́a de Telecomunicación
Universidad Carlos III
Avda. de la Universidad, 30
28911, Leganés
[email protected]
7 de diciembre de 2012
Resumen
riedad de conocimientos. Está basado en las reglas, y es
de tipo procesal.
Se ha diseñado un sistema basado en el conocimiento
(SBC) en lenguaje CLIPS, que sugiera posibles planes de
ocio según gustos.
La programación basada en reglas, permite que el conocimiento sea representado como heurı́stica, es decir, especifican un sistema de acciones que se realizarán para una
situación dada.
Básicamente se trata de un programa, que previo almacenamiento de un conjunto de actividades (en el programa
como tal puede ya estar cargado), interactúa con el usuario para adquirir las caracterı́sticas básicas de las actividades que le gustan. Tras ello, el programa realizará una
búsqueda dentro del conjunto de actividades, para seleccionar aquellas que se ajustan a la información obtenida
del usuario y mostrarla por pantalla.
Se trata de un lenguaje caracterizado por:
Portabilidad: Capaz de ser instalado en muchos y
diversos sistemas operativos sin cambios en el código.
Categorı́a
Integración/extensibilidad: Se puede integrar con
lenguajes tales como C, Java, FORTRAN y ADA.
Además se puede ampliar fácilmente por un usuario
con el uso de varios protocolos bien definidos.
Sistema Experto y Aplicaciones
Palabras clave
Bajo costo: Se trata de un software de dominio publico
Sistema Experto, CLIPS, reglas, actividades de ocio,
busqueda.
1.
Probablemente CLIPS se trate del sistema experto más
ampliamente usado sobre todo debido a que es rápido,
eficiente y gratuito. Aunque ahora es de dominio público, aún es actualizado y mantenido por su autor original,
Gary Riley.
Introducción
Creado en 1985, CLIPS (C Language Integrated System) provee una herramienta para manejar una amplia va1
2.
2.1.
Descripción del proyecto
2.5.
Una actividad necesita tener:
Identificación
Nombre: Dato mostrado en la pantalla final.
El primer paso es saber en qué consiste el problema,
pensar en si es apropiado para resolverlo con un SBC, y
encontrar fuentes de conocimiento que ayuden a solucionarlo.
Tipo: Se indica en que categorı́a de las que se pregunta se encuentra: cultural, entretenimiento, gastronómica, aventura, deportiva o parque temática.
Cuando como en este caso, no existe una solución algorı́tmica adecuada fácil, es necesario usar un sistema experto. Por tanto, el problema es apropiado para ser resuelto por un SBC.
2.2.
Conceptos
Costo: Se indica si la actividad requiere un precio
alto o no.
Grupal: Si es apropiada para ir en grupo o no.
Recomendada: Nos indicara si la actividad se ajusta
a los gustos, y que esta actividad ya ha sido recomendad una vez, por lo que no la volvera a recomendar
otra vez durante la ejecución.
Fuentes de información
Como el tema es bastante sencillo para casi cualquier
persona, los ”expertos” hemos sido nosotros mismos, ya
que conocemos bastantes actividades de ocio.
Una persona tiene:
Para la parte técnica, hemos consultado programas parecidos, como el sistema experto de ”reparación de averı́as
de coche”
Presupuesto
2.3.
Gustos sobre actividades
Si va en grupo o no
Descripción del problema
Al final, nuestro problema queda en:
2.6.
1. Preguntar datos sobre el usuario. Éstos incluyen, como mı́nimo:
Tras pensar en diversas soluciones, la mejor opción
consiste en agrupar mucha información bajo una sola pregunta, de ahı́ que se trabaje con preguntas genéricas.
si quiere gastar mucho o poco
Preguntas
Además, se hacen preguntas fijas: si va en grupo, si le
importa el precio, . . .
si va o no en grupo
qué actividades le gustan y cuáles no le gustan
2.6.1.
2. Buscar entre las actividades existentes, aquellas que
se ajustan.
En algunas preguntas, la respuesta nos sirve para orientar las próximas preguntas: la pregunta ”¿Prefieres un actividad tranquila?” nos indica si tenemos que consultarle
sobre actividades de carácter sosegado o vivaz. Esta relación de hechos está basada en el conocimiento que se
posee, y naturalmente no cumple los gustos de todos los
usuarios, pero sı́ de la mayorı́a. En esta parte es cuando
el conocimiento del problema nos ayuda a simplificar la
información.
3. Escribir en pantalla el resultado.
2.4.
Cantidad de información
Conceptualización
Es importante describir qué elementos tiene el problema, y qué relación hay entre ellos.
2
2.8.
Esquema de las preguntas:
Toda la información que se obtiene es fiable, consistente, fija (excepto un atributo que indica si una actividad es
apta o no, el resto no cambia con el tiempo), y precisa.
¿Contamos con un presupuesto alto (si/no)?
¿Se trata de una actividad individual (si/no)?
En ningún momento tenemos que corregir las decisiones tomadas, porque se trabaja siempre con hechos seguros.
¿Quieres una actividad tranquila (si/no)?
• Sı́
Sin embargo, hay que tener en cuentra que a la hora
de introducir una actividad en el sistema, las premisas para señalar si una actividad es grupal o individual, cara o
barata,. . . son una abstracción de un criterio personal.
◦ ¿Te gustan las actividades culturales
(si/no)?
◦ ¿Te gustan las actividades de entretenimiento (si/no)?
◦ ¿Te gustan las actividades gastronómicas
(si/no)?
3. Implementación
Como se indicó anteriormente, se ha creado un programa en lenguaje CLIPS, caracterizado por estar basado en
reglas para la representación del conocimiento, además de
por su portabilidad e integridad.
• No
◦ ¿Te gustan las actividades de aventura
(si/no)?
◦ ¿Te gustan las actividades deportivas
(si/no)?
◦ ¿Te gustan los parques temáticos (si/no)?
En el programa encontramos distintas partes, para una
mejor comprensión:
En la parte deffunction, se han definido las funciones correspondientes a la impresión de las preguntas y su
análisis (sera admisible solo un ”s” como respuesta afirmativa o una ”n” como respuesta negativa).
Todas las preguntas nos aportan información concreta
para la funcionalidad de nuestro programa, ya sea para el
descarte o la selección de actividades.
2.7.
Incertidumbre
En defftemplates, se definen 3 ”clases”.
Actividad: En un objeto inicialmente vacio de esta
clase será donde se introducirá la información obtenida mediante las diferentes preguntas (cada pregunta modificara el valor por defecto de cada uno de los
slots).
Condiciones que se comprueban
Para decir si una actividad es buena, se comprueban en
ese orden, las distintas condiciones:
1. La actividad es apta para tu bolsillo.
(deftemplate actividad
(slot presupuesto (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot individual (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot tranquila (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot cultural (type SYMBOL)
2. La actividad es apropiada para tu tamaño de grupo.
3. La actividad es del tipo que le gusta.
Si finalmente no se ha encontrado ninguna actividad
que se ajuste, se mostrará un mensaje en pantalla para indicarlo.
3
(allowed-values si no nose)
(default nose))
(slot entrenamiento (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot gastronomica (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot aventura (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot deporte (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot tematica (type SYMBOL)
(allowed-values si no nose)
(default nose))
)
A continuación se encuentra deffacts. En esta parte
será donde se crearán los distintos objetos, anteriormente
mencionados. Un ejemplo de cada tipo serı́a:
(deffacts actividad-no-encontrada
(actividad-no-encontrada (encontrada no))
)
(deffacts actividades-programadas
(actividades-programadas (nombre Exposiciones
)
(tipo cultural)
(costo no)
(grupal no)
(recomendada nose)
)
)
Actividades-programadas: Encontraremos distintos
objetos de estas clase, que corresponderán a las
actividades almacenas, que una vez seleccionada,
será mostrada por pantalla.
(deffacts inicia
(actividad))
(deftemplate actividades-programadas
(slot nombre (type SYMBOL))
(slot tipo (type SYMBOL)
(allowed-values cultural
entrenamiento gastronomica
aventura deporte tematica) )
(slot costo (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot grupal (type SYMBOL)
(allowed-values si no nose)
(default nose))
(slot recomendada (type SYMBOL)
(allowed-values si no nose)
(default nose))
)
Realmente de la única clase que habrá más de un objeto, será de actividades-programadas.
Seguidamente encontraremos reglas. En ella se definen
las reglas fundamentales del programa. Básicamente encontraremos un conjunto de reglas parecidas, para la introducción de los datos en Actividad dependiendo de la
pregunta realizada; y dos reglas finales, una para la selección e impresión de las Actividades-programadas elegidas
finalmente (según expusimos en la descripción del proyecto), y otra para el caso en el que no se haya encontrado
ninguna actividad recomendada.
A continuación se muestra un ejemplo de regla para la
introducción de datos en Actividad.
Actividad-no-encontrada: Encontraremos un único
objeto de esta clase, que será empleada para determinar si no existe ninguna actividad a recomendar,
ya que sólo cuando se encuentre una actividad que
se ajusta a las necesidades, su valor será modificado.
(defrule determina-presupuesto ""
?A <- (actividad (presupuesto nose))
=>
(if (si-o-no-p "Contamos con un presupuesto
alto (si/no)? ")
then (modify ?A (presupuesto si))
else (modify ?A (presupuesto no))
))
(deftemplate actividad-no-encontrada
(slot encontrada (type SYMBOL)
(allowed-values si no)
(default no))
4
cambiar el valor de recomendada, no aseguramos que la
actividad, no entrará en un bucle y será recomendada infinitamente.
Se trata de una regla en la que se realizará una pregunta por pantalla y a partir de su respuesta, se introducirá el
valor correspondiente a lo deseado por el usuario. Concretamente se determinará con que presupuesto contamos.
Finalmente encontramos Inicia, que incluye la regla
que inicia el programa, donde se mostrará como mensaje
de bienvenida: Sistema Experto de Actividades de Ocio.
También se puede ver el codigo de la regla fundamental
del programa:
(defrule inicia
(declare (salience 1))
=>
(printout t crlf crlf)
(printout t "Sistema Experto de Actividades
de Ocio")
(printout t crlf crlf))
(defrule actividades ""
?p <- (actividades-programadas (nombre ?x)
(tipo ?t)
(costo ?c)
(grupal ?g)
(recomendada ?r))
?A <- (actividad (presupuesto ?pre) (
individual ?ind) (cultural ?cul) (
entrenamiento ?en) (gastronomica ?gas) (
aventura ?av) (deporte ?de) (tematica ?
tem))
?e <- (actividad-no-encontrada (encontrada ?
find))
(test (eq ?c ?pre))
(test (neq ?g ?ind))
(or
(test (and (eq ?cul si) (eq ?t cultural)))
(test (and (eq ?en si) (eq ?t entrenamiento)))
(test (and (eq ?gas si) (eq ?t gastronomica)))
(test (and (eq ?av si) (eq ?t aventura)))
(test (and (eq ?de si) (eq ?t deporte)))
(test (and (eq ?tem si) (eq ?t tematica)))
)
(test (eq ?r nose))
=>
(modify ?e (encontrada si))
(modify ?p (recomendada si))
(printout t "Se recomienda la actividad:" ?x "
." crlf)
El archivo concluye con las acciones de carga y ejecución del programa.
El sistema ha sido implementado de modo que podemos añadir una nueva actividad-programada en cualquier
momento, y el sistema seguirá funcionando correctamente, teniendo en cuenta esta nueva posibilidad introducida.
4. Ejemplos
En esta parte, mostraremos distintos comportamientos
del programa.
)
Para ello, se muestran distintas tablas, correspondientes
a las actividades programadas introducidas en el sistema
para las diferentes pruebas.
Regla encargada de una vez adquiridos todos los datos
comprobar de una en una las distintas actividades y ver si
se ajustan a lo deseado, en cuyo caso la mostraremos por
pantalla.
Aunque ya se mencionó anteriormente, remarcaremos
la importancia de la modificación de los valores, encontrada y recomendada. Al cambiar el valor de encontrado
a si, la última regla no se activará, puesto que hemos encontrado una actividad que se ajusta como mı́nimo. Y al
Figura 1: Actividades Gastronomicas
5
NOTA: Para realizar las distintas tenemos que tener en cuenta como
funciona el programa.
Para cargar el programa emplearemos:
$ CLIPS> (batch actividades.clp)
El programa quedara, como se muestra a continuación.
$ CLIPS> (run)
Figura 2: Actividades Culturales
Pulsaremos un intro el programa arrancará.
Una vez la ejecución termine, si queremos volver a ejecutarlo, primero deberemos dar un reset, para limpiar los hechos introducidos dentro
de los objetos, seguido de un run para que se ejecute.
Si queremos introducir nuevas actividades en mitad de la ejecución,
primero deberemos hacer el reset, luego introducir la información mediante assert, y por ultimo run.
4.1.
Figura 3: Actividades Entrenamiento
Ejemplos1
En este primer ejemplo (ver figura 5), realizaremos una
ejecución en la que la persona consta de un alto presupuesto, y desea una actividad individual y tranquila (en
tranquila no se va a descartar ninguna de las subclases).
Por tanto, la recomendación que esperamos de nuestro
sistema, siguiendo las tablas anteriormente comentadas,
es la compuesta por todas las actividades individuales y
caras, dentro del tipo cultural, gastronómico y de entretenimiento:
Figura 4: Actividades Deportivas
Culturales: Teatro y Concierto de Música Clásica
Cada tabla corresponderá a un tipo diferente de actividad.
Entretenimiento: Spa y Curso
Gastronómica: Cata y Degustación.
Estas se encuentra dividida en dos: en parte superior,
las actividades de bajo coste y en la parte inferior, las acComo se ve en la realización, el programa funciona cotividades de coste elevado (Excepto actividades Gastronomicas que solo contendra parte inferior). Además, se rrectamente ya que obtenemos la salida esperada.
ha añadido un código de colores para diferenciar a simple vista, las actividades de carácter individual, frente a 4.2. Ejemplos2
las de carácter colectivo, más concretamente, empleareEn este segundo ejemplo (ver figura 6), realizaremos
mos naranjas para actividades individuales y verde para
una ejecución en la que la persona dispone también de un
las actividades grupales.
alto presupuesto, y desea una actividad individual y tranAunque existe más actividades introducidas por defec- quila, pero dentro de estas, solo les gustan las actividades
to, sólo expondremos aquellas que serán empleadas para gastronómicas.
las pruebas.
6
de costo y número de componentes a realizarla (ver figura
8), por lo que del mismo modo, no se le puede recomendar
ninguna actividad.
Figura 5: Ejemplo1
Figura 7: Ejemplo3a
Figura 6: Ejemplo2
Podemos observar que las actividades recomendadas,
son una pequeña parte de la anterior (las correspondientes a las actividades gastronómicas), cumpliendose asi, el
comportamiento deseado.
4.3.
Figura 8: Ejemplo3b
En ambos casos podemos comprobar que el resultado
es el mismo. En ambos casos no existen actividades a recomendar.
Ejemplos3
En este ejemplo, mostraremos dos ejecuciones, en las
cuales el comportamiento es el mismo. En la primera ejecución se mostrara una persona en la que tras elegir una 4.4. Ejemplos4
actividad tranquila, no le gusta ninguna de las subcategorı́as (ver figura 7) y por lo tanto, no se le puede recoEn este último ejemplo, mostraremos también dos ejemendar ninguna actividad. Y una segunda, en la que aun- cuciones. En ambas se hará la misma búsqueda, pero tras
que se selecciona un tipo de estas, en el momento de la la primera, introduciremos una nueva actividad (ver figuejecución, no existe actividad que satisfaga los requisitos ra 9 y 10 respectivamente).Esta se ajustará a la búsqueda
7
Otra buena opción puede ser, incluir preguntar para el
analisis de las subcategorias. Por ejemplo, una vez que
sabemos que a un cierto usuario le gustan las actividades
culturales, podriamos preguntar ¿Quiere opinar sobre actividades culturales (si/no)?, ya que dentro de esta, podrı́a
haber actividades que no son de su interes.
y que por tanto, deberá ser mostrada en la segunda ejecución.
Referencias
[1] http://ccc.inaoep.mx/ emorales/Cursos/Representa/node65.html
[2] http://ocw.uc3m.es/ingenieriatelematica/inteligencia-en-redes-decomunicaciones/material-de-clase-1/04b-clips/view
[3] es.wikipedia.org/wiki/CLIPS
Figura 9: Ejemplo4a
Figura 10: Ejemplo4b
Como era de esperar, mientras en la primera ejecución
no aparece, ya que aun no existe. En la segunda tras insertarla, la acepta y pasa a ser procesada, recomendándola.
5.
Mejoras
Quizás una mejora serı́a la inclusión de nuevos criterios
que aportaran más información acerca de la actividad para
una mejor selección de esta, tales como edad, duración, y
horario.
8

Documents pareils