Download - INTEGRACIÓN OBJETOS - REGLAS
INTEGRACIÓN
OBJETOS - REGLAS
David Portolés Rodríguez
EL CASO DEL ASCENSOR
Í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/
• 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)