viernes, 24 de septiembre de 2010

Motores de Regla Open Source en Java

Repasemos qué encontramos en la web si nos preguntamos: ¿Qué motores de Regla Open Source existen para Java hoy? es decir, estamos buscando sobre Open Source Rule Engines in Java, entonces estoy buscando una implementación libre de un motor de reglas de negocio compatible con la especificación JSR-94 Rules Engine API (http://www.jcp.org/en/jsr/detail?id=94). REPASEMOS!!!¿Y qué es un motor de reglas de negocio?. Es un componente que, a partir de una información inicial y un conjunto de reglas, detecta qué reglas deben aplicarse en un instante determinado y cuáles son los resultados de esas reglas.

Ok, entonces que tenemos disponible??....

  • Drools
Drools es un motor de reglas orientado a objetos para Java. Drools es una implementación del algoritmo Rete de Forgy, a medida para el lenguaje Java. La adaptación de Rete a una interfaz orientada a objetos permite una mayor expresión natural de reglas de negocio en lo que respecta a los objetos de negocio. Más importante aún, Drools establece la lógica de programación declarativa y es lo suficientemente flexible como para que coincida con la semántica de su dominio del problema. Las diversas partes que componen una regla podrá ser prorrogado a prestar el sentido específico de dominio a la regla.
  • JESS
Jess ® es un motor de reglas para la plataforma Java - es un superconjunto del lenguaje de programación CLIPS, desarrollado por Ernest Friedman-Hill de Sandia National Labs. Fue escrito por primera vez en finales de 1995.
Ofrece programación basado en normas adecuadas para la automatización de un sistema experto, y se refiere a menudo como un shell de sistema experto. En los últimos años, los sistemas de agentes inteligentes también han sido desarrollado, que dependen de una capacidad similar.
En lugar de un paradigma de procedimiento, en un solo programa tiene un bucle que se activa una sola vez, el paradigma declarativo utilizado por Jess aplica continuamente una colección de reglas a un conjunto de hechos mediante un proceso llamado "coincidencia de patrones".
Las reglas se pueden modificar la colección de hechos, o que pueden ejecutar cualquier código Java.
Jess se puede utilizar para construir servlets Java, EJB, applets y aplicaciones completas que utilizan el conocimiento en forma de reglas declarativas para sacar conclusiones y hacer inferencias.
Dado que muchas de las normas puede coincidir con muchas entradas, son pocos los algoritmos eficaces de uso general correspondiente. El motor de reglas de Jess utiliza el algoritmo Rete.
Es OpenSource como licencia para estudiantes, como producto comercial es pago.


  • OpenRules
OpenRules es Business Rules Management Framework de gran escala y OpenSource. Se utiliza eficientemente el poder de MS Excel, Eclipse IDE y bibliotecas de código abierto de Java
para crear, implementar, ejecutar y mantener los motores de diferentes reglas de negocio complejas con la lógica controlada por los analistas de negocio.

  • Mandarax
Mandarax es una biblioteca de clases Java de código abierto para generar reglas de deducción. Se proporciona una infraestructura para la definición, gestión y consulta de bases de reglas.

  • SweetRules
SweetRules es un conjunto integrado de herramientas de gran alcance únicamente de las normas web semántica y ontologías, que gira alrededor de la RuleML (Regla de marcado / Modeling Language), estándar emergente de las normas web semántica, y apoyar también la estrecha relación SWRL (Web Semántica artículo Language), junto con la norma de OWL para ontologías web semántica, que a su vez el uso de XML y, opcionalmente, RDF. (Reglas SWRL son esencialmente un subconjunto expresiva de las normas RuleML.) SweetRules apoya a los poderosos Situado Cortés lógica extensión de los programas de RuleML, incluyendo el manejo de los conflictos de prioridades y accesorios de procedimiento para las acciones y pruebas. capacidades SweetRules 'incluyen la semántica de preservación de la traducción y la interoperabilidad entre una variedad de lenguajes de reglas y la ontología (incluyendo XSB Prolog, las reglas de producción Jess, HP Jena-2, y CommonRules IBM), altamente escalable hacia atrás y hacia adelante inferencia, y la fusión de bases de reglas / ontologías . accesorios de procedimiento, incluso puede ser WSDL Servicios Web. enchufabilidad SweetRules y capacidades de composición permiten que los componentes nuevos que se añadirán con relativa rapidez. Implementado en Java, SweetRules tiene un código base compacta (~ 40K del total de líneas de código para las herramientas de varias decenas). El proyecto SweetRules es un esfuerzo internacional, multi-institucional, su origen y coordinado por el grupo en el MIT Sloan SweetRules dirigido por Benjamin Grosof, y su creación fue financiada en gran parte por el programa de investigación DAML (DARPA Agente Markup Language) que co-fue pionero en la semántica Web. DULCE ("Web Semántica Activación de la tecnología") es un conjunto global de herramientas que el Grupo de Benjamin Grosof (con colaboradores) se ha venido desarrollando desde el año 2001. Otros componentes que incluyen el enfoque SweetDeal la contratación electrónica del sistema y el prototipo, y el sistema SweetPH de ontologías de procesos de negocio establecido en el Manual de Procesos. Cientos de usuarios ya han descargado SweetRules, inspirado en parte por sus manifestaciones de buena acogida en las presentaciones detalladas de los investigadores principales de la reunión DAML y el Organismo Internacional de la Web Semántica programa de la Conferencia tutorial.

  • Take
Take (también conocido como Mandarax compilador) consiste en un lenguaje de script que puede ser utilizado para definir las reglas de derivación, y un compilador que genera código ejecutable de Java y la despliega en los sistemas en funcionamiento. Take se inspira en Mandarax, tiene un API similar pero no utiliza un intérprete independiente "motor de inferencia". El proceso de implementación es muy similar a cómo los servidores web, el tratamiento de las páginas del servidor. El resultado ha sido optimizado, reflexiva y fácil de mantener código.


  • JRuleEngine
JRuleEngine es un motor de reglas de Java, basado en la "Java Specification Request 94", versión 1.1, es decir, normas puede ser cargado por un archivo XML o por medio de JRuleEngine API, por lo que las reglas pueden ser almacenados en una base de datos externa, también. La distribución consta de una biblioteca que puede ser embebido en una aplicación Java, por lo que se puede utilizar en cualquier tipo de aplicación (basada en web o no).


  • JLisa
JLisa es un framework muy poderoso para construir reglas de negocio accessibles en Java y es compatible con JSR94 V, the JavaTM Rule Engine API


  • JEOPS - The Java Embedded Object Production System ( Sistema Integrado de objetos de producción )
JEOPS es un avance basado en motores de reglas de encadenamiento. Este motor de reglas se utiliza para alimentar el proceso de negocio por las normas de servidores de aplicaciones en Java, las aplicaciones cliente, y Servlets.

  • Prova language
Prova (from Prolog+Java) es un sistema basado en reglas (rule-based system) para Java y el agente de secuencias de comandos y la integración de la información se extiende el motor Mandarax con una sintaxis y la semántica del lenguaje adecuado mejorada. El lenguaje abre un nuevo camino en la combinación de la programación declarativa y expresiva. Combina la sintaxis natural y la tipificación de Java con las reglas Prolog estilo y envoltorios de base de datos. llamadas de Java pueden incluir las llamadas de constructor y el método como el acceso a wellas variables públicas en las clases. Distribuidos y la programación del agente transportados a través de protocolos JMS o JADE se basa en las normas de reacción se especifica en una sintaxis natural. El idioma hace que sea fácil para los agentes para participar en conversaciones simultáneas sin iniciar nuevos hilos utilizando la reacción y la novela normas de reacción en línea en una sintaxis muy natural y ecoonomic, directamente capturar conversaciones como máquinas de estado.

Tambien encontrè a:

Open Lexicon

Zilonis

Hammurapi Rules

OpenL Tablets

Pero no los he investigado a ninguno de los 4. Personalmente les recomiendo introducirse de lleno a Drools, ya que es una plataforma con mucho soporte y respaldo por parte de JBOSS.

Bueno, esto es todo por el momento, en le proximo post, comenzaremos con el "Hola Mundo" de Drools Expert 5.0.

saludos! Lic. Mariano Salvetti

Sistemas Expertos: Arquitectura básica







Por lo ya visto, sabemos que un Sistema Experto (SE) es una aplicación capaz de solucionar un conjunto de problemas que exigen un gran conocimiento sobre un determinado tema. Un sistema experto es un conjunto de programas que, sobre una base de conocimientos, posee información de uno o más expertos en un área específica.

De forma general, veamos la Arquitectura de un Sistema Experto, y luego estudiaremos como esto se implementa en Drools :

  1. Base de conocimientos (BC): Contiene conocimiento modelado extraído del diálogo con un experto. Es una parte muy importante de definir, y muy costosa. Tambien se lo llama knowledgebase en inglés; KB, kb or Δ y es un tipo especial de base de datos para la gestión del conocimiento. Provee los medios para la recolección, organización y recuperación de conocimiento. Es donde modelaremos "lo que sabemos" del problema a resolver.
  2. Base de hechos (Memoria de trabajo): contiene los hechos sobre un problema que se ha descubierto durante el análisis. Es donde trabajaremos.
  3. Motor de inferencia: Modela el proceso de razonamiento humano. Recordemos que una inferencia es una evaluación que realiza la mente entre expresiones bien formadas de un lenguaje, para obtener un resultado.
  4. Módulos de justificación: Es como se explica el razonamiento utilizado por el sistema para llegar a una determinada conclusión. Parte importante!
  5. Interfaz de usuario: es la interacción entre el SE y el usuario, y se realiza mediante el lenguaje natural. Muchas veces esto es simplemente un resultado, un reporte o un mensaje en una pantalla. Iterativamente, se puede ir mejorando.
Ahora bien, sobre el ultimo punto, ¿como interactua el usuario con un Sistema Experto?
El usuario de un SE puede estar operando en cualquiera de los siguientes modos:

Verificador. El usuario intenta comprobar la validez del desempeño del sistema.

Tutor. El usuario da información adicional al sistema o modifica el conocimiento que ya está presente en el sistema.

Alumno. El usuario busca rápidamente desarrollar pericia personal relacionada con el área específica mediante la recuperación de conocimientos organizados y condensados del sistema.

Cliente. El usuario aplica la pericia del sistema a tareas específicas reales.

El reconocimiento de las caracterizaciones anteriores contrasta con la percepción de un simple papel (el cliente) de los sistemas tradicionales de software.

En una próxima entrada volveremos un poco sobre la arquitectura recién presentada, estudiaremos la implementacion en diversos productos y herramientas.
Nombraremos los principales, con sus ventajas y desventajas.

Hasta la próxima entrega!


Antes que Drools, Starting Teorico....

Hello World! nuevamente, este post es ideal para las personas que tiene interes sobre la Inteligencia Artificial, que han realizado algunas lecturas sobre el tema, o han estudiado material de Inteligencia Artificial en la Universidad, pero que ni siquiera conoce la
plataforma Drools, o que si la conocen, solamente la conocen por el nombre. Es importante, recibir algo de orientación inicial, debido a que la documentación oficial, toma como base que estamos muy interiorizados con varios temas que a muchas personas les resulta difícil.

Si te sentís desorientado, perdido, no sabes por donde empezar, leyendo la documentación te das cuenta de que no manejas conceptos como por ejemplo: de motor de inferencia, motor de reglas, BPM, Procesos, CEP, etc. Este post esta orientado a ir iterativamente agregando distintas fuentes de información para introducir y relacionar todos estos temas, cuyas bases teóricas son fundamentales para entender como funciona Drools.

Por lo tanto a esta altura, tu gran problema es el Background teórico faltante. Y entender como funciona y como esta hecho internamente un motor de inferencia (el core de Drools como proyecto desde que empezó) se hace fundamental para aclarar el panorama. No hace falta irse al otro extremo de saber como implementar un motor de inferencia (me gustaría llegar a esto en algún post) pero si es necesario entender los conceptos básicos de funcionamiento y por sobre todo entender conceptualmente que representa y que soluciona.

Para esto voy a usar este post, para ir actualizandolo con artículos que explican y abordan temas conceptuales y genéricos, no solamente sobre Drools, sino sobre la teoria de fondo que es necesaria para entender como trabaja un Sistema Experto y qué utiliza de la Inteligencia Artificial.
Atacaremos los conceptos de motor de inferencias, sistemas expertos, sistemas de producción, etc, para que asi la documentación de Drools Expert empiece a tomar otra forma.

Algunos conceptos importantes
Dejemos en claro algunas definiciones muy cortas, usadas para empezar a entrar en tema, junto con un listado de lecturas de referencia para ampliar cada tema en particular. Por mi parte voy a ir tratando de extraer las secciones de máximo interés para armar una mini guia conceptual que nos introduzca las herramientas necesarias para empezar con el pie derecho.

Sistemas Expertos (Expert Systems)
Se conoce como un sistema experto, un programa o pieza de software, que intenta imitar las decisiones o acciones tomadas por un experto humano en un dominio (o tema) especifico.

Estos sistemas, hacen uso de motores de inferencia, o motores de razonamiento, para ser mas genéricos, los cuales permiten basándonos en el conocimiento de un dominio, llegar a conclusiones a las que un experto humano llegaría.

Referencias:
http://es.wikipedia.org/wiki/Sistemas_Expertos

Motor de inferencias (Inference Engine)
Básicamente es un programa, o pieza de software, que trata de derivar una respuesta basándose en una base de conocimientos. Donde por base de conocimientos, entendemos que es algo similar a una base de datos, pero especializada para guardar conocimiento, ordenarlo y poder obtenerlo fácilmente. Teniendo como foco principal el hecho de poder llegar a nuevas conclusiones, basadas en el conocimiento almacenado.

Los motores de inferencia están fuertemente relacionados con el ámbito de los sistemas expertos, ya que se considera que un motor de inferencia es el cerebro de un sistema experto.

Referencias:
http://en.wikipedia.org/wiki/Inference_engine
http://es.wikipedia.org/wiki/Inferencia

Sistemas de Producción (Production Systems)
Son sistemas muy relacionados con la inteligencia artificial, construidos con bases en reglas (producción/production) y comportamientos asociados. A grandes rasgos, y con mi visión muy superficial sobre estos temas tan teóricos, relaciono la palabra producción no con el hecho de producir algo, sino al revés con que algo se produce y debemos saber que comportamiento tenemos que tomar en ese momento.

Para ser mas claros, estas producciones/reglas están formadas por dos partes. La primera parte es conocida como pre condición, sensor, guarda o solamente condición y es la encargada de describir un estado particular de nuestro mundo.
Cuando nuestro mundo coincide con algún estado expresado por alguna de las N condiciones que podemos tener, se dice que la producción/regla es activada. Aquí es donde entra en juego la segunda parte de la producción, que es llamada acción. La cual se ejecuta cuando la regla es disparada.

La manera mas simple de ver una producción/regla es la siguiente:

RULE "nombre"
IF/WHEN
CONDITION
THEN
ACTION

Cuando la acción es ejecutada, podemos decir que la regla ha sido disparada.

Otro concepto importante aquí, es lo que se conoce como memoria de trabajo (working memory), que es la encargada de tener el estado del mundo y sobre cual se ejecutan las acciones. Estas acciones muchas veces tienen la función de modificar el estado del mundo, pudiendo así causar la activación de otras reglas de manera recursiva.

Como últimos detalles, podemos decir que los sistemas de producción deben incluir dos cosas claves:

Un algoritmo para comparar las condiciones y el estado actual del mundo eficiente, mas adelante vamos a estudiar este tema, ya que aca entran los conceptos de forward y backward chainning junto con el algoritmo RETE, LEAPS,TREAT, etc.
Un algoritmo para priorizar activaciones en caso de que dos o mas condiciones se activen al mismo tiempo.

Referencias:
http://en.wikipedia.org/wiki/Production_system
http://www.cse.unsw.edu.au/~billw/cs9414/notes/kr/rules/rules.html

Conclusión
Si bien las referencias son pocas, la idea es ir agregando y refinando los conceptos sobre este mismo post, a medida que las preguntas surjan, o sino tenerlo como referencia teoria al momento que se nos ocurran dudas.

Espero poder avanzar con cada uno de estos temas en particular, para que el background teórico vaya solidificándose hasta que el uso de la herramienta Drools sea solamente comprender como fue implementada cada parte y cada concepto.

Hasta la próxima entrada del blog,
Saludos

lunes, 20 de septiembre de 2010

Sistemas Expertos en Java - Comenzando...

Si googleamos y nos enfrentamos a una primera definición sobre que son estos tipos de sistemas, los sistemas expertos son llamados así porque emulan el comportamiento de un experto en un dominio concreto y en ocasiones son usados por éstos. Con los sistemas expertos se busca una mejor calidad y rapidez en las respuestas dando así lugar a una mejora de la productividad del experto.

Es un software capaz de solucionar problemas que necesitan de un gran conocimiento sobre un determinado tema. Un sistema experto es un conjunto de programas que, sobre una base de conocimientos, posee información de uno o más expertos en un área específica. Se puede entender como una rama de la inteligencia artificial, donde el poder de resolución de un problema en un programa viene del conocimiento de un dominio específico. Estos sistemas imitan las actividades de un humano para resolver problemas de distintos temas (no necesariamente tiene que ser de inteligencia artificial). También se dice que un Sistema Experto (SE) se basa en el conocimiento declarativo (hechos sobre objetos, situaciones) y el conocimiento de control (información sobre el seguimiento de una acción).

Para que un sistema experto sea herramienta efectiva, los usuarios deben interactuar de una forma fácil, reuniendo dos capacidades para poder cumplirlo:

  1. Explicar sus razonamientos o base del conocimiento: los sistemas expertos se deben realizar siguiendo ciertas reglas o pasos comprensibles de manera que se pueda generar la explicación para cada una de estas reglas, que a la vez se basan en hechos.
  2. Adquisición de nuevos conocimientos o integrador del sistema: son mecanismos de razonamiento que sirven para modificar los conocimientos anteriores. Sobre la base de lo anterior se puede decir que los sistemas expertos son el producto de investigaciones en el campo de la inteligencia artificial ya que ésta no intenta sustituir a los expertos humanos, sino que se desea ayudarlos a realizar con más rapidez y eficacia todas las tareas que realiza.

Debido a esto, en la actualidad se están mezclando diferentes técnicas o aplicaciones aprovechando las ventajas que cada una de estas ofrece para poder tener empresas más seguras, o al menos, realizar implementar software más seguro y estable. Un ejemplo de estas técnicas sería los agentes que tienen la capacidad de negociar y navegar a través de recursos en la web.

Un Sistema Experto está formado por:

  • Base de conocimientos (BC): Contiene conocimiento modelado extraído del diálogo con un experto.
  • Base de hechos (Memoria de trabajo): contiene los hechos sobre un problema que se ha descubierto durante el análisis.
  • Motor de inferencia: Modela el proceso de razonamiento humano.
  • Módulos de justificación: Explica el razonamiento utilizado por el sistema para llegar a una determinada conclusión.
  • Interfaz de usuario: es la interacción entre el SE y el usuario, y se realiza mediante el lenguaje natural.

Tipos de SE

Principalmente existen tres tipos de sistemas expertos:

En cada uno de estos, la solución a un problema planteado se obtiene:

  • Aplicando reglas heurísticas apoyadas generalmente en lógica difusa para su evaluación y aplicación.
  • Aplicando el razonamiento basado en casos, donde la solución a un problema similar planteado con anterioridad se adapta al nuevo problema.
  • Aplicando redes bayesianas, basadas en estadística y el teorema de Bayes.

VENTAJAS
Los Sistemas Expertos nos dan la capacidad de trabajar con grandes cantidades de información, que son uno de los grandes problemas que enfrenta el analista humano que puede afectar negativamente a la toma de decisiones pues el analista humano puede depurar datos que no considere relevantes, mientras un SE debido a su gran velocidad de proceso analiza toda la información incluyendo las no útiles para de esta manera aportar una decisión más sólida.

Ademas, permite manejar información y resolver problemas sin tener presente al "Experto Humano", algo que puede resultar muy costoso de tener.


LIMITACIONES
Es evidente que para actualizar se necesita de reprogramación de estos (tal vez este sea una de sus limitaciones más acentuadas) otra de sus limitaciones puede ser el elevado costo en dinero y tiempo, además que estos programas son poco flexibles a cambios y de difícil acceso a información no estructurada. Su desarrollo inicial, sobre todo al armar la Base de Conocimientos, es muy alto

Debido a la escasez de expertos humanos en determinadas áreas, los SE pueden almacenar su conocimiento para cuando sea necesario poder aplicarlo. Así mismo los SE pueden ser utilizados por personas no especializadas para resolver problemas. Además si una persona utiliza con frecuencia un SEaprenderá de el.

Por otra parte la inteligencia artificial no ha podido desarrollar sistemas que sean capaces de resolver problemas de manera general, de aplicar el sentido común para resolver situaciones complejas ni de controlar situaciones ambiguas.

El futuro de los SE da vueltas por la cabeza de cada persona, siempre que el campo elegido tenga la necesidad y/o presencia de un experto para la obtención de cualquier tipo de beneficio.


Nosotros aquí vamos a estudiar como integrar Drools Expert dentro de las aplicaciones de la Plataforma Java. Hasta la próxima entrada del blog!