390 likes | 568 Views
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.
E N D
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
¿ 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/ (ejfried@ca.sandia.gov) • 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
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.
¿ 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.
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.