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