Está en la página 1de 39

INTEGRACIN OBJETOS - REGLAS

EL CASO DEL ASCENSOR


David Portols Rodrguez

NDICE

Integracin Java - Jess El caso del ascensor Paquete ISBC_Jess

JAVA - JESS

Qu es Jess ?
JESS (Java Expert System Shell). Diseado para integrar fcilmente Clips y Java. Originalmente (1995) era un clon de Clips, programado en Java. Hoy es mucho ms. (versin actual: 6.0) Acepta casi cualquier fichero que funciona con Clips. Objetivo: Aplicaciones Java + razonamiento de un sistema experto (reglas).

Caractersticas
Utiliza el algoritmo de Rete para procesar las reglas. Puede obtener mayor rapidez que CLIPS. Incluye encadenamiento hacia atrs (5.0) Permite manipulacin directa de objetos Java (incluso scripts de Java) Incluye lgica difusa en la 5.0 (FuzzyJess):
http://ai.iit.nrc.ca/IR_public/fuzzyJToolKit.html

Interaccin con Jess


Jess es una librera para programadores. Posee 3 interfaces: mediante lnea de comandos, consola o applets. Permite ampliarlo con otros interfaces. Para ello, provee un lenguaje de programacin de scripts.

Interaccin con Jess (2)

Jess provee un interfaz de lnea de comandos a travs de la clase jess.Main c:\jdk> java jess.Main jess> ... Si se usa jess.Console se tiene un interfaz en modo grfico (consola).

Interaccin con Jess (3)

Jess est diseado para integrarse en applets. Esta posibilidad slo incorpora lo esencial de Jess para minimizar el tamao de las pginas (no incorpora funciones opcionales). La clase jess.ConsoleApplet proporciona la posibilidad de incorporar un interfaz como el anterior en pginas web.

Comunicacin 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");

Comunicacin 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 exista, ste se sobreescribe y esta accin devuelve el valor que exista 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, ....

Adems de otras clases interesantes (heredadas de la POO):


Excepciones, routers, parser, estruct. de datos...

Extender Jess

Se pueden aadir nuevas funciones a Jess programadas en Java (Userfunction) Tambin se puede aadir paquetes de funciones (Userpackage)

Acceso a objetos Java


Desde Jess se puede crear una instancia de cualquier clase de Java y acceder a sus mtodos y atributos pblicos:
(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 mtodo, 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 pgina se puede descargar Jess, aceptando los trminos de su licencia. Es la pgina con informacin relevante sobre Jess

EL CASO DEL ASCENSOR

Descripcin
Se trata de implementar una parte del ejercicio que se propone en el apndice F del libro de Deitel & Deitel Cmo programar en Java. El ejercicio propone una aproximacin incremental a la implementacin de un simulador de un edificio con ascensores. El ejercicio completo toca todos los aspectos interesantes de la programacin en Java (threads,excepciones,clases....).

Historia del trabajo


Se realiza una primera versin del problema del ascensor controlado por reglas. Dicha implementacin posee una interfaz grfica esttica y un conjunto de reglas bsico . Posteriormente, se realiza una nueva versin ampliando y mejorando diferentes aspectos.

Primera versin

La situacin inicial era una implementacin parcial del problema del ascensor. Objetivo: hacer funcionar un motor de inferencia conjuntamente con el ascensor. Se pretende que la poltica de movimientos del ascensor sea configurable mediante ficheros de reglas Clips.

Ampliaciones realizadas (1)


Se redisea la GUI de la aplicacin para facilitar el seguimiento de la ejecucin de una forma ms intuitiva. Se revisa el conjunto de reglas para eliminar o unificar reglas. Objetivo: desarrollar clases genricas para simplificar al mximo la integracin Java - Jess (paquete ISBC_Jess)

Ampliaciones realizadas (2)

Se ampla a mltiples ascensores. La aplicacin es ms genrica y fcilmente parametrizable. Se corrigen errores detectados.

Comparacin entre versiones (1)

Comparacin entre versiones (2)

Comparacin entre versiones (3)

Comparacin entre versiones (4)

El motor de inferencia

Control del edificio

Dnde interviene Jess ?

El programa contiene una clase llamada Controlador que se ocupa de decidir la direccin del ascensor y su parada. Se trata de sustituir el engorroso cdigo que contiene, por una base de conocimiento y un motor de inferencia en Jess.

Dnde 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 utilizarn las clases desarrolladas para facilitar la integracin Java - Jess (ISBC_Jess)

Objetivos
Aprender a enlazar el lenguaje Java con otro diferente (en este caso, Jess) Utilizar la interfaz grfica de forma ms sofisticada. Desarrollar la capacidad de anlisis de cdigo desarrollado anteriormente con el fin de optimizarlo y/o detectar errores. Manejo de Threads y excepciones en Java.

Posibles ampliaciones
Revisin de las reglas Clips con el objetivo de optimizarlas y dotarlas de mayor inteligencia (algoritmo del elevador). Intentar reducir el nmero de hechos que se asertan desde el cdigo Java, para simplificarlo. Permitir que la interfaz grfica no est limitada a un nmero mximo de elementos (pisos, ascensores) en la pantalla.

Posibles ampliaciones (2)

Incluir limitaciones fsicas: ascensores con

capacidad mxima

Generacin de pasajeros ms realista: en lugar de generarlos peridicamente y con destino aleatorio, establecer unas probabilidades de origen y destino.

Paquete ISBC_Jess

Problemas con Jess

El cdigo que se genera al integrar Jess es

muy enrevesado.

Jess no provee de mtodos para realizar funcionalidades comunes. Se necesita un conocimiento algo profundo y detallado sobre Jess para utilizarlo.

Descripcin

Desarrollo del paquete ISBC_Jess como envoltura de Jess. Se sita en un nivel intermedio entre Java y Jess. Contiene clases que provee de funcionalidades de inters habituales.

Objetivos (1)

El conocimiento necesario para utilizarlo sea mnimo, ocultando los detalles de Jess. El nmero de clases sea reducido. Automatizar al mximo las funcionalidades tiles (apertura y parseado de ficheros, control de excepciones)

Objetivos (2)

Proveer una interfaz grfica genrica para interaccionar con el sistema experto. En resumen: que el usuario nicamente tenga que preocuparse de desarrollar las reglas.

Interfaz grfica (1)

Interfaz grfica (2)

Interfaz grfica (3)

También podría gustarte