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