jueves, 29 de abril de 2010

Agentes Inteligentes

1. Qué es un agente


Un agente se puede definir como: “Una entidad software que, basándose en su propio conocimiento, realiza un conjunto de operaciones destinadas a satisfacer las necesidades de un usuario o de otro programa, bien por iniciativa propia o porque alguno de éstos se lo requiere. “[3]




Se puede decir, que un agente es todo aquello que puede considerarse que percibe su ambiente mediante sensores y que responde o actúa por medio de efectores. Ver Figura 1.2.



2. Características de un Agente


Son muchas las características que debe tener un componente software o hardware para ser considerado un agente. A continuación se explicaran ciertas características de los agentes:


a. Autonomía: Pueden actuar basados en sus propios principios, sin la intervención humana o de software.

b. Habilidad Social: Representa la habilidad de interactuar con otros agentes a través de un lenguaje común.

c. Reactividad: Un agente debe reaccionar a estimulos o cambios en el entorno.

d. Pro-actividad: Son capaces de tomar la iniciativa y pasar a realizar ciertas acciones por sí solos.

e. Comunicabilidad: Deben ser capaces de comunicarse con otros agentes, asi como también con humanos.

f. Cooperación: Deben tener capacidad de trabajar en conjunto de manera de concluir tareas de interés común.

g. Movilidad: Pueden cambiar de localización de unos entornos a otros, ya sea dentro del mismo equipo o a través de una red de computadoras.

h. Continuidad temporal: Pueden seguir ejecutándose mientras dure su ciclo de vida.

i. Adaptabilidad: Pueden adaptarse a los cambios del entorno, para llevar a cabo eficazmente sus obligaciones.

j. Veracidad: Se supone que el grado de confianza que se debe tener en los agentes es máximo.

k. Benevolencia: No servirían de nada las características de sociabilidad o de coordinación, si los agentes no estuvieran dispuestos a compartir sus conocimientos.



3. Diferencia entre agentes inteligentes y software convencional


Hay dos principales características que distinguen a los agentes inteligentes del desarrollo de software tradicional, estas son la inteligencia y la agencia.


a. La dimensión de inteligencia se refiere al grado en el cual la aplicación utiliza razonamiento, aprendizaje y otras técnicas para interpretar la información o conocimiento al cual tiene acceso.


Se puede decir que hay tres niveles de formas de inteligencia:

  • La forma más modesta de inteligencia permite al usuario expresar sus preferencias.

  • Una forma intermedia podría formalizar un conjunto de reglas de razonamiento que combinadas con conocimiento a corto y largo plazo, siguiendo un proceso de inferencia puede conducir a la toma de alguna acción.

  • Y un nivel superior es la capacidad del agente de modificar su capacidad de razonamiento, en base nuevo conocimiento derivado de muchas fuentes, es decir, aprender.



b. La agencia es el grado en el cual el agente puede percibir su entorno y actuar en el. Define al agente, en otras palabras, para que un programa sea un agente debe poseer autonomía, habilidad social, reactividad y proactividad.



4. ¿Por qué utilizar agentes?


El origen por el cual la tecnología de los agentes inteligentes surge es por la necesidad de aplicarlos a los sistemas complejos, donde la aplicación de las técnicas existentes ha fracasado o es muy difícil de comprender o mantener. Los agentes inteligentes surgen como una alternativa para dar solución a situaciones que la Programación Orientada a Objetos (OO) no puede resolver eficientemente.


Este paradigma constituye en la actualidad un área de profunda investigación, lo que trae como consecuencia que existan un gran número de criterios acerca de qué son los agentes y sus características fundamentales.


La necesidad de construir aplicaciones complejas compuestas de multitud de subsistemas que interaccionan entre sí. En este tipo de sistemas, la utilización de agentes y técnicas multiagente permite la gestión inteligente de un sistema complejo, coordinando los distintos subsistemas que lo componen e integrando objetivos particulares de cada subsistema en un objetivo común.

martes, 27 de abril de 2010

Frameworks

1. Qué es un framework

Un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado o desarrollado.

El framework representa una arquitectura de software que modela relaciones generales de las entidades del dominio, el cual provee una estructura y una metodología de trabajo la que extiende o utilizan las aplicaciones.

FreeDictionary extrae una definición de framework de Jonhson y Foote 1988 [1]

Un Framework es un diseño reutilizable de un sistema (o subsistema). Está expresado por un conjunto de clases abstractas y el modo en que sus instancias colaboran para un tipo específico de software. Todos los frameworks de software son diseños orientados a objetos".

Estos componentes son diseñados, con el afán de facilitar los desarrollos a los programadores, para poder pasar más tiempo buscando soluciones a los problemas dados, que ocuparse de las funcionalidades de bajo nivel, como los son: validaciones, conexiones a bases de datos, formateo de números o de strings, etc.

Los frameworks suelen ser implementaciones de patrones de diseño conocidos, con algunas funciones, métodos o librerías que asisten a los desarrolladores.

En general, un Framework en el contexto de la programación es un set de funciones o código genérico el cual se encarga de llevar a cabo tareas comunes.


2. Arquitectura de implementación

En cuanto a la arquitectura de los frameworks el patrón diseño, más implementado para la creación de cualquier framework tenemos al conocido modelo MVC.

Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones Web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página, el modelo es el Sistema de Gestión de Base de Datos y el controlador representa la Lógica de negocio. [8]

El modelo MVC es un patrón de arquitectura creado por gente de la comunidad Smalltalk que consiste en separar una aplicación en tres componentes principales. Como muestra la figura 1.1.





El Controlador, es el responsable de recibir las peticiones requests de los clientes. Construyendo un modelo apropiado y enviarlo a la vista para su correcta visualización. Para el caso de una aplicación Web basada en java, el controlador generalmente es un servlet.

El Modelo, que posee el estado interno de la aplicación (determinado por el estado de sus entidades) y las reglas del negocio.

La Vista, es la responsable de transformar correctamente lo que el modelo, intenta representar al usuario de manera visual o como archivo, por ejemplo HTML, XML, etc.

La mayoría de los frameworks Web buscan separar estos tres componentes por lo que en muchos manuales y tutoriales se podrá ver escrito que fueron desarrollados siguiendo el patrón MVC. Sin embargo, los amantes de smalltalk dirán que dichos frameworks no tienen una implementación pura de MVC sino una adaptación realizada para adecuarse a las características propias de la Web (Ej. sincronismo de mensajes). Una de las formas que utilizan para implementar el patrón MVC es a través del patrón FrontController en el cual el servlet que procesa todas las peticiones se encarga de comunicarse con el modelo y seleccionar la siguiente vista proveyendo abstracción entre los componentes.



3. Ventajas y desventajas de los frameworks en general

Las ventajas y desventajas de los frameworks son variadas y se pueden sub-dividir en utilización y desarrollo, esto quiere decir que, un framework posee ciertas características favorables en su implementación o bien la creación de uno propio. Ver tabla adjunta.






4. Ventajas y Desventajas de Frameworks actuales


Las ventajas y desventajas entre frameworks, son variadas pero para efectos de este proyecto de título, solo se analizan las siguientes como muestra la tabla:



jueves, 22 de abril de 2010

Que es IA-Framework

Bienvenidos a todos los interados, en estudiar el aréa de los agentes, este es un framework implementado sobre JADE 3.4, Bluejade, y por supuesto JDK 1.5

IA-Framework, es capaz de entregar, las herramientas necesarias para la construcción de cualquier aplicación Web, generando el interés en las empresas y desarrolladores de esta tecnología a implementar, una herramienta completamente configurable y adaptable a cualquier ambiente y/o arquitectura de implementación.

El framework, tendrá la posibilidad de comunicación con agentes JADE (Java Agent Development Framework), a través de la implementación de bluejade, la cual es una herramienta de integración de agentes en ambientes J2EE, es decir, se podrá trabajar tanto en ambientes J2EE puros o hibrídos conformados por J2EE y JADE, generando así un ambiente más rico para el desarrollo de aplicaciones Web cada vez más inteligentes.

Es un framework, orientado a objetos, que da soporte para el desarrollo de aplicaciones Web, con la implementación del patrón de diseño MVC (Model View Controller – Modelo Vista Controlador), bajo la arquitectura J2EE (Java Enterprise Edition).

IA-framework fue creado para dar mayor, libertad a los programadores, entregando una amplia gamma de funcionalidades que otros frameworks, no poseen, como por ejemplo entregar conectividad a componentes software llamados “agentes inteligentes”, los cuales son un nuevo paradigma dentro del desarrollo de software.

Una de las principales características que posee, es que logra abstraer casi todo lo que tiene que ver con el manejo de información desde y hacia una base de datos, y esto se logra a través de documentos XML de configuración.

Es decir, la mayor parte de lógica y programación se basa en estos documentos, ya que son los encargados de definir los parámetros de entrada y salida para una consulta a un motor de datos, además de las acciones a seguir, en determinadas oportunidades.

IA-framework, fue creado principal y exclusivamente para diferenciarse de uno de los frameworks mas conocido que es Apache Struts, el cual también implementa el modelo vista controlador y define las acciones en un XML de configuración, el problema es que para cada acción o tarea se deben definir n objetos (Java Beans), para poder modelar la información que la aplicación requiere, es decir, acopla demasiado la orientación a objetos dentro de la aplicación. Por ejemplo:

Si se necesita crear un formulario donde el cliente ingrese la información, se deberá crear un Java Bean, donde se deberán identificar todos los atributos necesarios para poder ingresar y/o obtener dicha información. Pero que pasa si debemos agregar o modificar estos valores.

1. Se debe abrir el código
2. Realizar la operaciones de agregar o quitar atributos
3. Modificar el retorno desde la capa de lógica, para que llene o deje de llenar el valor del atributo.
4. Compilar la aplicación
5. Empaquetar
6. y por ultimo probar.


Para un objeto o aplicación pequeña no seria gran problema, pero que pasaría si son “n” objetos y una aplicación demasiado grande, el costo de la mantención de dicha aplicación crecería exponencialmente.

Y es por esta razón es que nació IA-Framework, el cual abstrae todo el manejo de objetos a un único objeto estructurado, el cual emula una tabla de datos, pero con las características que algunos objetos java poseen, como por ejemplos las listas y los HashMap´s, dejando de lado lo que son los java beans para la aplicación Web.

Esto funcionalidad se logra, como se mencionó anteriormente a través de documentos XML, los cuales viven dentro del o los servidores de aplicaciones utilizados, para efectos de este proyecto de titulo son: Apache Tomcat 6.0 y JBoss 4.0.3. Dentro de los cuales viven los documentos XML Bean y XML DB, respectivamente, además de los documentos base para el funcionamiento del framework.

La desacoplo de objetos como así también la conectividad se logra a través del siguiente modelo.



El modelo ilustra como la aplicación toma los documentos XML Bean, luego toma los valores definidos dentro de este, desde la aplicación y los envía para poder realizar la consulta indicada, el framework formatea la consulta que se encuentra en el XML DB, apropiado con los valores entregados, y ejecuta la consulta y devuelve la respuesta a la aplicación, el como se muestra las información, se vera mas adelante.

Es decir toda la definición del proceso, esta definido dentro los documentos XML que existen dentro de la aplicación, dejando a los programadores solo la parte de la creación de los formularios, y consultas hacia la base de datos, con esto ya podemos crear y poner en funcionamiento nuestra Web.

El framework, posee otras caracteristicas, que no dejan de ser atractivas.