integraciÓn objetos - reglas david portolés rodríguez el caso del ascensor

39
INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Upload: ruben-asuncion

Post on 02-Apr-2015

111 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

INTEGRACIÓN

OBJETOS - REGLAS

David Portolés Rodríguez

EL CASO DEL ASCENSOR

Page 2: 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

Page 3: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

JAVA - JESS

Page 4: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

¿ 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).

Page 5: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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

Page 6: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 7: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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).

Page 8: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 9: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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

Page 10: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 11: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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...

Page 12: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Extender Jess

• Se pueden añadir nuevas funciones a Jess programadas en Java (Userfunction)

• También se puede añadir paquetes de funciones (Userpackage)

Page 13: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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”.

Page 14: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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

Page 15: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

EL CASO DEL ASCENSOR

Page 16: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez 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....).

Page 17: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 18: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 19: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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)

Page 20: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 21: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Comparación entre versiones (1)

Page 22: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Comparación entre versiones (2)

Page 23: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Comparación entre versiones (3)

Page 24: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Comparación entre versiones (4)

Page 25: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

El motor de inferencia

Page 26: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Control del edificio

Page 27: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

¿ 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.

Page 28: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

¿ 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)

Page 29: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 30: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 31: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 32: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Paquete ISBC_Jess

Page 33: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 34: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 35: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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…)

Page 36: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

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.

Page 37: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Interfaz gráfica (1)

Page 38: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Interfaz gráfica (2)

Page 39: INTEGRACIÓN OBJETOS - REGLAS David Portolés Rodríguez EL CASO DEL ASCENSOR

Interfaz gráfica (3)