Cásate con Inteligencia
Transcription
Cásate con Inteligencia
Cásate con Inteligencia Elia Moreno Catalán Anastasia Sotelsek Margalef Ingeniería de Telecomunicación Universidad Carlos III Ingeniería de Telecomunicación Universidad Carlos III Avda. de la Universidad, 30 28911, Leganés Avda. de la Universidad, 30 28911, Leganés [email protected] [email protected] RESUMEN En el presente trabajo se presenta un sistema experto en CLIPS, usando la versión de CLIPS en java llamada JESS. Este sistema responde a la conflictiva tarea de colocar los invitados de una boda en las distintas mesas. Se expone una breve introducción de CLIPS y JESS y se explica en detalle los criterios utilizados para el desarrollo del sistema. así como la programación del código. Por último se muestran simulaciones de distintas ejecuciones así como la programación del código. Categoría I.2.1 Applications and Expert Systems Palabras clave Sistema experto, CLIPS, JESS, boda, invitados. 1. INTRODUCCIÓN Creado en 1985, CLIPS (C Language Integrated System) provee una herramienta para manejar una amplia variedad de conocimiento. Está basado en las reglas, orientado a objetos y es de tipo procesal. La programación basada en las 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. La programación orientada a objetos permite que los sistemas complejos sean modelados como componentes modulares (“divide y vencerás”). Las capacidades de programación proporcionadas por CLIPS son similares a las capacidades encontradas en idiomas tales como C, Java y Ada. Portabilidad: Se escriben en C para proporcionar portabilidad y velocidad y ha estado instalado en muchos diversos sistemas operativos sin cambios en el código. Integración/extensibilidad: Se puede encajar dentro de código del procesador, llamar a la rutina como subprograma, e integrar con idiomas 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. Desarrollo interactivo: La versión estándar de CLIPS proporciona un ambiente interactivo, centrado en el desarrollo, incluyendo asistentes que eliminan errores, una ayuda on-line, y un redactor integrado. Bajo costo: CLIPS se mantiene como software de dominio publico. [1] JESS (Java Expert System Shell), la versión en java de CLIPS, está programado totalmente en Java por lFriedman-Colina de Ernest J. en los laboratorios nacionales de Sandia para el Ministerio de Energía de los EE.UU. Fue lanzado en 1995 y se puede poner en ejecución como applet. Otra alternativa posiblemente mejor es utilizar JESS en el lado del servidor y utilizar solamente el GUI en el lado del cliente. Como en CLIPS, también existe la posibilidad usando JESS de llamar a los procedimientos de JAVA o ser llamado por un procedimiento. [2]. 2. DESCRIPCIÓN DEL PROBLEMA El hecho de planear una boda no esta exento de problemas, lo primero y más importante es encontrar a la pareja ideal. Después de un tiempo, y con la pareja ya cerciorada de que lo correcto es dar el paso, comienzan los problemas de verdad. El traje de la novia, la iglesia o el ayuntamiento, el cura o el juez, el numero de invitados, el menú más adecuado para el convite de después, la tarta grande o pequeña, sin tarta mejor, el color de la corbata, la bebida… En fin, un elevado número de complicaciones que surgen a raíz de este evento. Con el desarrollo de este programa basado en JESS, se ha querido facilitar en cierto modo, el que es, posiblemente el problema más serio a la hora de planear una boda, las mesas de los invitados. Que persona debe estar con que persona para que no falte conversación y se lo pasen bien. Nos hemos basando en unas reglas que aunque sencillas a menudo se pierden a la hora de colocar gente en las mesas. De esta manera la gente invitada a la boda estará, al menos, sentada en un entorno que le será familiar, encontrará puntos en común con sus comensales de modo que los silencios incómodos quedarán erradicados. No obstante es necesario comentar que gracias a la implementación, y para el caso de bodas de otras culturas u otros modos de vivir, estas reglas pueden ser fácilmente modificadas, y las mesas a su vez ampliadas o reducidas. 1 2.1 Criterios de clasificación Al inicio del programa, se pregunta si el invitado a sentar es de la familia o no, este criterio se ha elegido ya que en muchas ocasiones el comportamiento que la pareja tenga con los amigos es posiblemente mejor que quede oculto a los familiares en general. Si continuamos en el lado familiar, no en el de las amistades, se preguntara si el sujeto o invitado es mayor de 65 años o no, en dependencia de la edad de los novios esta edad se podría aumentar, de este modo se crea una mesa de gente con un elevado índice de años. No obstante es preciso diferenciar a la gente mayor de las personas mayores, en el caso de que la persona mayor de edad sea alguien al que le gusta hablar de sus médicos todo el día, se le enviara a una mesa para que comparta esas historias con gente a la que también le contarlas. Si la persona no es de ese tipo sino que aún con cierta edad prefiere tocar cualquier tipo de tema, se le sentara en una mesa con gente de su edad , y quien sabe encontrar una pareja de modo que puede que sea el siguiente en utilizar nuestro servicio (con algún retoque en las edades de las mesas). Los amigos siempre son mas fáciles de colocar, dado que normalmente se conocen entre ellos, se preguntará si están casados o no, en el caso de no estar casados, se preguntará si son un buen partido o no, de este modo se juntara a los amigos que son un buen partido, de modo que si sale una pareja de la boda nadie podrá decir que es por interés. No obstante a los amigos casados y ya que el índice de divorcios en España en personas jóvenes es de casi el 50% se les preguntara si les apetece sentarse con su pareja (o si han venido con ella) si es negativo, se le llevara al nodo en el que de nuevo se pregunta si son un buen partido a o no. Con los criterios explicados tenemos 14 posibles mesas: -Mesa 1: Abuelos cascarrabias. -Mesa 2: Abuelos cachondos. -Mesa 3: Pañales. -Mesa 4: Gaviotas. -Mesa 5: Zapateros. -Mesa 6: Veras que resaca. -Mesa 7: Merengues. En el caso de las personas que no sean mayores de 65 años, se vuelve a hacer una diferenciación en la edad, mayores de 30 o menores, no obstante se puede hacer la vista gorda para personas mayores de 30 con un espíritu excesivamente jovial y viceversa. -Mesa 8: Anti-madridistas A las personas mayores de 30 años (que es más o menos la media de las madres primerizas en España) se le preguntara si tiene pareja, con el fin de sentarle con su pareja, si esta respuesta es de nuevo positiva, se le preguntara si tiene un bebé (se supone que lo lleva a la boda) y si así es se le sentara en una mesa con mas parejas en su situación. En caso de no tener un bebe, dado que la persona tiene pareja y es mayor de 30 años se le sentara en mesas por su afiliación política. -Mesa 11: Mil-euristas. -Mesa 9: Niños. -Mesa 10: Estudiantes. -Mesa 12: Enamorados. -Mesa 13: Ligoteo. -Mesa 14: Nada de ligar La forma de llegar a ellas recorriendo las distintas opciones puede apreciarse de una forma muy clara en el árbol de la Figura 1. Si no se tuviera pareja, se le preguntara si la persona en cuestión es bebedora o no, si la respuesta es afirmativa, se le sentara con gente que también beba para que de este modo el invitado no se sienta cohibido. En caso de ser no bebedor, o no bebedor en exceso, irán a la última mesa de personas entre 30 y 65 años que estará sin niños, mayores ni borrachos que puedan estropear la velada. No obstante y ya que estas personas lo que tienen son cosas en no común en vez de cosas en común, se les preguntara por algún tema de interés que les una o les desuna, en el caso de esta primera versión la pregunta es sobre fútbol, del Madrid o no del Madrid. En caso de que el invitado sea menor de 30 años, la primera pregunta es si es un niño, de modo que quedara confeccionada una mesa en la que nos ahorraremos el vino, el cava y puede que cambiemos el solomillo por pasta que a ellos les gustará y a nuestro bolsillo aun más. Si no es un niño, juntaremos estudiantes con estudiantes y trabajadores con trabajadores en la mesa de los mil- euristas. 2 Figura 1. Árbol de decisión 3. SIMULACIONES A continuación se mostraran una serie de simulaciones con el fin de explicar de modo más grafico como funciona el programa y la sencillez con la que el usuario puede colocar a sus invitados en una boda, al inicio, JESS se carga en el modo comandos y una vez ejecutado el fichero boda.clp aparecerá la primera sobre si el invitado es un familiar o no, en dependencia de esta respuesta la segunda pregunta será distinta y de esta forma se irá recorriendo el árbol hasta que el invitado quede colocando en una de las mesas mencionadas con anterioridad. 3.1 Ejemplo 1 Vamos a ver un primer ejemplo (ver Figura 2) en el que la respuesta afirmativa puede ser tanto “s” como “si”, en este caso el invitado es un familiar menor de 65 años pero mayor de 30 con pareja, sin un bebé al que cuidar en la boda, no bebedor en exceso y con ideologías políticas mas próximas a la izquierda que a la derecha. El usuario queda emplazado en la mesa denominada “zapateros”, y el programa acaba para este invitado esperando que se meta al siguiente invitado para de nuevo volver a emplazarle en su mesa. 3 Figura 2. Simulación ejemplo 1 3.2 Ejemplo 2 Se muestra este otro caso en el que el usuario es menor de 30 años, en este caso se pregunta si estudia trabaja, en el caso de trabajar y debido a su corta edad se le emplaza en la mesa de los mil-euristas (ver Figura 3). Figura 3. Simulación ejemplo 2 3.3 Ejemplo 3 Por último, se muestra el caso en el que el usuario es mayor de 30 años, se pregunta si bebe mucho, y al ser negativa la respuesta se pregunta por su equipo de fútbol (ver Figura 4). 4 Figura 4. Simulación ejemplo 3 4. DESCRIPCIÓN DEL CÓDIGO JESS es un lenguaje que permite usar símbolos, números, strings, listas, comentarios, llamadas a funciones, variables, variables globales, control de flujo, reglas, operadores lógicos, decisiones condicionales, branching (selección del camino de ejecución) etc.[3] (if (lexemep ?respuesta)then (bind ?respuesta (lowcase ?respuesta)) ) ?respuesta ) (do-backward-chaining minusculas) En nuestro programa se han usado en mayor medida funciones y reglas que es la característica mas sobresaliente de JESS, además de las variables necesarias para ir guardando las características de los invitados que el programa ha sido capaza de aprender. Las funciones usadas son dos, la denominada “afirmación” y la denominada “minúsculas”, afirmación es llamada en todas las reglas posteriores, esta función comprueba si lo pasado por parámetros es un si o un no, esta misma función llama a minúsculas de modo que si el usuario escribe en mayúsculas o en vez de un si escribe solo una s, se tomara como respuesta afirmativa para la función afirmativo. Para definir una función hay que poner la cabecera deffunction seguido del nombre de la función y después los parámetros que esta recibe. A continuación se programa la función en si. A modo de ejemplo la función minusculas se muestra a continuación. Una regla de JESS es algo como si (“if”)… entonces (“then”) de un lenguaje procesal, pero lo importante de JESS es que no lo utiliza de modo procesal, es decir, no sigue un orden en el código de modo descendente. Mientras que if… then en un lenguaje procesal se ejecuta en un momento específico y con una orden específica, según cómo el programador las escribe, en el caso de las reglas de JESS la ejecución se produce siempre y en cualquier momento que las restricciones sean satisfechas. Esto hace que las reglas de JESS sean menos deterministas que un programa procesal típico. [4] Esta característica explicada sobre las reglas anteriores puede verse en nuestro programa en el caso de que el invitado sea un amigo que tenga pareja pero que no desee sentarse con ella. En este caso se cumple la regla que se satisface con el invitado casado pero que no quiere sentarse con su pareja, y sin necesidad de implementar el código debajo JESS entenderá que le debe preguntar si es un buen partido o no. (deffunction minusculas (?opcion) (printout t ?opcion) (bind ?respuesta (read)) Todos los nodos del árbol explicados en el apartado criterio de evaluación se corresponden con reglas de JESS, la implementación es parecida a las funciones, se pone la cabecera defrule seguida del nombre de la regla y si se quiere un string. A 5 continuación se especifican las características que se deben satisfacer y separado por los caracteres >= las acciones a llevar a cabo. A modo de ejemplo la regla mayor-30 se adjunta. (defrule mayor-30 "" (declare (salience 10)) (invitacion familia) La regla se llama mayor-30, en este caso entraran los familiares, y los que sean no-fosil, esto es las personas menores de 65 años, a partir de ahí, lo que sigue es lo que la regla debe hacer, en este caso se preguntara si el invitado es menor de 30 años, si así es se le dará a la variable edad el valor joven, además si el invitado es un niño, se le colocara en la mesa de los niños. Los jóvenes después se colocaran en trabajadores o no, quedando confeccionadas las mesas de estudiantes y la de los mil- euristas. (genero no-fosil) => (if (afirmacion "es menor de 30 (si/no)? ") En caso de ser mayor de treinta años el invitado recibirá en su parámetro edad el valor de maduro, y después entrara en la regla que su estado, (familiar y maduro) satisfaga. then (assert (edad joven)) (if (afirmacion "es un niño pequeño (si/no)?") En el caso de las restricciones para entrar en una regla, se pueden poner operadores lógicos, or, if, etc. then (assert (mesa ninos)) else 5. REFERENCIAS (if(afirmacion "esudia (si/no)?") then (assert (mesa estudiantes)) else (assert (mesa mil-euristas)) ) [1] http://www.ghg.net/clips/WhatIsCLIPS.html [2] http://www.comp.lancs.ac.uk/~kristof/research/notes/clips [3] http://herzberg.ca.sandia.gov/jess/docs/70/basics.html [4] http://herzberg.ca.sandia.gov/jess/docs/70/rules.html [5] Scott, Donia R. Artificial Intelligence: Methodology, Systems and Applications. Springer, 2002. ) else (assert (edad maduro)) ) ) (do-backward-chaining mayor-30) 6