INTEGRACIÓN
OBJETOS - REGLAS
EL CASO DEL ASCENSOR
David Portolés Rodríguez
ÍNDICE
• Integración Java - Jess
• El caso del ascensor
• Paquete ISBC_Jess
JAVA - JESS
¿ Qué es Jess ?
• JESS (Java Expert System Shell).
• Diseñado para integrar fácilmente Clips y Java.
• Originalmente (1995) era un clon de Clips,
programado en Java.
• Hoy es mucho más. (versión actual: 6.0)
• Acepta casi cualquier fichero que funciona con
Clips.
• Objetivo: Aplicaciones Java + razonamiento de
un sistema experto (reglas).
Características
• Utiliza el algoritmo de Rete para procesar
las reglas.
• Puede obtener mayor rapidez que CLIPS.
• Incluye encadenamiento hacia atrás (5.0)
• Permite manipulación directa de objetos
Java (incluso scripts de Java)
• Incluye lógica difusa en la 5.0 (FuzzyJess):
http://ai.iit.nrc.ca/IR_public/fuzzyJToolKit.html
Interacción con Jess
• Jess es una librería para programadores.
• Posee 3 interfaces: mediante línea de
comandos, consola o applets.
• Permite ampliarlo con otros interfaces.
Para ello, provee un lenguaje de
programación de scripts.
Interacción con Jess (2)
• Jess provee un interfaz de línea de
comandos a través de la clase “jess.Main”
c:\jdk> java jess.Main
jess> ...
• Si se usa “jess.Console” se tiene un interfaz
en modo gráfico (consola).
Interacción con Jess (3)
• Jess está diseñado para integrarse en
applets.
• Esta posibilidad sólo incorpora lo esencial de
Jess para minimizar el tamaño de las páginas
(no incorpora funciones opcionales).
• La clase “jess.ConsoleApplet” proporciona la
posibilidad de incorporar un interfaz como el
anterior en páginas web.
Comunicación de valores:
Store & Fetch
• Jess provee dos funciones “store” y “fetch”
que almacenan y recogen valores.
jess>(store RESULT (+ 2 3))
jess>(fetch RESULT)
5
• Java provee las mismas funciones y
comparte el espacio de almacenamiento de
dichos valores con Jess.
Rete rete_engine = new Rete(nd);
rete_engine.fetch("RESULT");
Comunicación de valores:
Store & Fetch (2)
• La correspondencia entre los tipos de datos
que manejan Java y Jess los da la clase
“jess.Value”.
• Si se almacena un valor que ya existía, éste
se sobreescribe y esta acción devuelve el
valor que existía anteriormente.
• Cada motor de inferencia (objeto jess.Rete)
tiene asociado un espacio separado de
almacenamiento de este tipo.
Clases de Jess
• Jess está programado en Java; sus clases
se usan como cualquier otra.
• La clase “jess.Rete” es el motor de inferencia
e implementa el algoritmo de rete.
• Existen clases para todo lo que se maneja
con un lenguaje de reglas:
Hechos, reglas, plantillas, clases, instancias,
átomos, strings, agendas, funciones, ....
• Además de otras clases interesantes
(heredadas de la POO):
Excepciones, routers, parser, estruct. de datos...
Extender Jess
• Se pueden añadir nuevas funciones a Jess
programadas en Java (Userfunction)
• También se puede añadir paquetes de
funciones (Userpackage)
Acceso a objetos Java
• Desde Jess se puede crear una instancia de
cualquier clase de Java y acceder a sus
métodos y atributos públicos:
(defglobal ?*str-buf* = (new java.lang.StringBuffer
100))
(call ?*str-buf* append "Some String Data To Append")
• El orden de los argumentos es el que realiza
el enlace entre la llamada y el método, y la
equivalencia de tipos es la contemplada en
la clase “jess.Value”.
Jess en la WWW
• El sitio oficial de Jess en Internet se encuentra en:
http://herzberg.ca.sandia.gov/jess/
([email protected])
• Se permite el uso libre en ámbitos educativos, sin
fines comerciales.
• En esa página se puede descargar Jess, aceptando
los términos de su licencia.
• Es la página con información relevante sobre Jess
EL CASO DEL
ASCENSOR
Descripción
• Se trata de implementar una parte del
ejercicio que se propone en el apéndice F
del libro de Deitel & Deitel “Cómo
programar en Java”.
• El ejercicio propone una aproximación
incremental a la implementación de un
simulador de un edificio con ascensores.
• El ejercicio completo toca todos los
aspectos interesantes de la programación
en Java (threads,excepciones,clases....).
Historia del trabajo
• Se realiza una primera versión del problema
del ascensor controlado por reglas.
• Dicha implementación posee una interfaz
gráfica estática y un conjunto de reglas
básico .
• Posteriormente, se realiza una nueva
versión ampliando y mejorando diferentes
aspectos.
Primera versión
• La situación inicial era una implementación
parcial del problema del ascensor.
• Objetivo: hacer funcionar un motor de
inferencia conjuntamente con el ascensor.
• Se pretende que la política de movimientos
del ascensor sea configurable mediante
ficheros de reglas Clips.
Ampliaciones realizadas (1)
• Se rediseña la GUI de la aplicación para facilitar
el seguimiento de la ejecución de una forma más
intuitiva.
• Se revisa el conjunto de reglas para eliminar o
unificar reglas.
• Objetivo: desarrollar clases genéricas para
simplificar al máximo la integración Java - Jess
(paquete ISBC_Jess)
Ampliaciones realizadas (2)
• Se amplía a múltiples ascensores.
• La aplicación es más genérica y fácilmente
parametrizable.
• Se corrigen errores detectados.
Comparación entre versiones (1)
Comparación entre versiones (2)
Comparación entre versiones (3)
Comparación entre versiones (4)
El motor de inferencia
Control del edificio
¿ Dónde interviene Jess ?
• El programa contiene una clase llamada
“Controlador” que se ocupa de decidir la
dirección del ascensor y su parada.
• Se trata de sustituir el engorroso código
que contiene, por una base de conocimiento
y un motor de inferencia en Jess.
¿ Dónde interviene Jess ? (2)
• Se intentará que el programa al arrancar
lea unos ficheros Clips en el que aparecen
las reglas que usará para estas decisiones.
• Para ello, se utilizarán las clases
desarrolladas para facilitar la integración
Java - Jess (ISBC_Jess)
Objetivos
• Aprender a enlazar el lenguaje Java con
otro diferente (en este caso, Jess)
• Utilizar la interfaz gráfica de forma más
sofisticada.
• Desarrollar la capacidad de análisis de
código desarrollado anteriormente con el
fin de optimizarlo y/o detectar errores.
• Manejo de Threads y excepciones en Java.
Posibles ampliaciones
•Revisión de las reglas Clips con el objetivo
de optimizarlas y dotarlas de mayor
“inteligencia” (algoritmo del elevador).
•Intentar reducir el número de hechos que
se asertan desde el código Java, para
simplificarlo.
•Permitir que la interfaz gráfica no esté
limitada a un número máximo de elementos
(pisos, ascensores…) en la pantalla.
Posibles ampliaciones (2)
• Incluir limitaciones físicas: ascensores con
capacidad máxima…
• Generación de pasajeros más realista: en
lugar de generarlos periódicamente y con
destino aleatorio, establecer unas
probabilidades de origen y destino.
Paquete ISBC_Jess
Problemas con Jess
• El código que se genera al integrar Jess es
muy enrevesado.
•Jess no provee de métodos para realizar
funcionalidades “comunes”.
•Se necesita un conocimiento algo profundo
y detallado sobre Jess para utilizarlo.
Descripción
• Desarrollo del paquete ISBC_Jess como
envoltura de Jess.
•Se sitúa en un nivel intermedio entre Java y
Jess.
•Contiene clases que provee de
funcionalidades de interés habituales.
Objetivos (1)
• El conocimiento necesario para utilizarlo
sea mínimo, ocultando los detalles de Jess.
• El número de clases sea reducido.
•Automatizar al máximo las funcionalidades
útiles (apertura y parseado de ficheros,
control de excepciones…)
Objetivos (2)
• Proveer una interfaz gráfica genérica para
interaccionar con el sistema experto.
• En resumen: que el usuario únicamente
tenga que preocuparse de desarrollar las
reglas.
Interfaz gráfica (1)
Interfaz gráfica (2)
Interfaz gráfica (3)
Descargar

Sin título de diapositiva