martes, 26 de febrero de 2013

Agentes de software


Por cortesía de Mente Errabunda;

A mediados de estos años que transcurren del siglo XXI, es cada vez mayor la necesidad de programas o aplicaciones computacionales flexibles, que sean capaces de anticiparse a las necesidades de los usuarios de sistemas informáticos y de adaptarse a ellas. Los agentes aparentan constituir una solución adecuada a esa necesidad. Un agente de software es una entidad autónoma que puede interaccionar con su entorno; James Hendler considera que los agentes de software no difieren mucho de los agentes humanos mencionando: “los agentes podrían encontrar posibles maneras de cumplir las necesidades de los usuarios y ofrecer al usuario elecciones para su realización. Del mismo modo que un agente de viajes podría darle una lista de varios vuelos que podría tomar, o una elección entre volar o tomar un tren, un agente podría ofrecer una lista de posibles maneras de obtener lo que necesita.

Los agentes proceden de los campos de la inteligencia artificial y de la ingeniería del software, en particular de la orientación a objetos. Desde un punto de vista conceptual los agentes tienen su origen en el modelo de actores concurrentes que propusieron Carl Hewitt, Peter Bishop y Richard Steiger el año 1973. Los actores, directos predecesores de los agentes, fueron definidos por Hewitt el año 1977 como “objetos autocontenidos, interactivos y que se ejecutan concurrentemente, que poseen estado interno y capacidad de comunicarse” y como “agentes computacionales que tienen una dirección de correo y un comportamiento”. Los actores se comunican mediante un intercambio de mensajes y llevan a cabo sus acciones de manera concurrente, es decir, sus acciones pueden ejecutarse en paralelo, sin secuencias fijadas de antemano. La principal diferencia entre los actores y los agentes es que estos últimos suelen tener restricciones relacionadas con metas o propósitos.

Existe una fuerte relación entre los agentes y la inteligencia artificial: los agentes provienen del campo de la inteligencia artificial distribuida, que estudia métodos y técnicas para la resolución de problemas mediante la colaboración de diversas entidades distribuidas, autónomas e inteligentes. En la inteligencia artificial distribuida se entremezclan dos disciplinas: la inteligencia artificial y los sistemas distribuidos. Un sistema distribuido es, según George Coulouris: “un sistema en el que los componentes de hardware o software localizados en computadoras en red se comunican y coordinan sus acciones intercambiando mensajes”. En la inteligencia artificial distribuida, la colaboración de unas entidades con otras produce comportamientos colectivos que resuelven problemas que serían irresolubles si se abordaran individualmente o que proporcionan soluciones eficaces en cuanto a tiempo, velocidad o calidad. Un ejemplo de inteligencia “natural” distribuida es proporcionado por una colonia de termitas: la colaboración entre ninfas, obreras, soldados y la reina permite la supervivencia de la colonia. Las termitas por separado no podrían sobrevivir, los soldados no pueden alimentarse por sí solos, la reina apenas puede moverse y las obreras no pueden defenderse; pero su cooperación les ha permitido existir desde hace millones de años en este planeta.

La inteligencia artificial distribuida consta de tres grandes ramas de investigación: (1) Sistemas multiagente. Que estudian, en primer lugar, sistemas en los cuales un conjunto de agentes cooperan, coordinan y se comunican para conseguir un objetivo común; en segundo lugar estudian la solución distribuida de problemas, donde se intenta conseguir la solución de problemas mediante procesamientos descentralizados y, en tercer lugar la inteligencia artificial en paralelo, donde se desarrolla métodos y algoritmos paralelos de inteligencia artificial. Al interior de la inteligencia artificial distribuida los agentes tiene sus orígenes en los sistemas multiagente, estos últimos son grupos de agentes autónomos, generalmente heterogéneos e independientes, que colaboran entre sí para conseguir ciertos objetivos; esta colaboración implica que cooperen, se coordinen y negocien unos con otros. En un sistema multiagente no hay un control global del sistema ni existe un lugar donde se encuentre toda la información. Por consiguiente, un agente de software es una parte del software que actúa para un usuario u otro programa como agente. El agente tiene la autoridad de decidir cuándo una acción es apropiada. La idea es que los agentes no son estrictamente invocados para una tarea, sino que se activan por cuenta propia.

El término “agente” describe una abstracción de software, una idea o concepto, similar a los métodos, funciones y objetos en la programación orientada a objetos. El concepto de agente proporciona una forma conveniente y poderosa de describir una compleja entidad de software, que es capaz de actuar con cierto grado de autonomía, para cumplir tareas en representación de de personas. Pero a diferencia de los objetos, los cuales son definidos por métodos y atributos, un agente es definido a través de su comportamiento. Un agente de software es un programa informático que habita en computadoras y redes informáticas, se encarga de ayudar a los usuarios en tareas relacionadas con el uso de la computadora como tal. El agente de software se diferencia del software normal en que está personalizado y adaptado al cliente, tiene iniciativa, una vida larga y capacidad de adaptación autónoma. Otra definición de agente que goza de especial prestigio sobre todo entre la escuela finlandesa, afirma que un agente es una entidad informática autorizada para actuar a nombre de una persona.

Varios autores han propuesto diferentes definiciones de agentes, en su mayoría estas definiciones incluyen generalmente los siguientes conceptos: (1) Persistencia. Se produce cuando el código no es ejecutado bajo demanda sino que se ejecuta continuamente y decide por sí mismo cuándo debería llevar a cabo alguna actividad. (2) Autonomía. Se produce cuando los agentes tienen la capacidad de seleccionar tareas, priorizarlas, tomar decisiones sin intervención humana, etc. (3) Capacidad o habilidad social. Se produce cuando los agentes son capaces de tomar otros componentes, a través coordinación y comunicación, capaces de colaborar en una determinada tarea. (4) Reactividad. Se produce cuando los agentes perciben el contexto en el cual operan y reaccionan a éste de manera apropiada.

Una interrogante interesante es saber ¿Cómo trabajan estos pequeños programas de software para volverse inteligentes?. La respuesta lógica es que están programados para aprender; los primeros agentes se basaban en la programación del usuario, eran prototipos lentos, poco inteligentes y limitados, útiles únicamente para el autor del invento. A continuación vinieron los “basados en conocimiento” que incluían en su programación una base de conocimiento; pese a todo seguían careciendo de efectividad y sobre todo de flexibilidad. Esto provocó un cambio en el enfoque, dando como resultado la programación de agentes con capacidad de aprendizaje, proporcionando cuatro formas básicas de aprender. La primera consiste en espiar al usuario, cuando éste está realizando tareas en la computadora, el agente “mira por encima del hombro” para estudiar hábitos, gustos, páginas preferidas, etc. La segunda forma básica consiste en recibir realimentación positiva o negativa por parte del usuario. La tercera es que responden a instrucciones explícitas dadas por el usuario, y finalmente, aprenden de otros agentes de software con los que intercambian información.
En la actualidad se pueden encontrar muchos tipos de agentes, con tantas clasificaciones como criterios se utilicen. Una de las más útiles se basa en el criterio de la función que desempeña el agente. Aún así la variedad de agentes es bastante grande, sin embargo es posible definir los siguientes tipos: En primer lugar se encuentran los agentes incansables, cuya misión consiste básicamente en ejercer las funciones de un buen secretario, esto incluye entre otras cosas la gestión de agenda y de citas. Otro tipo importante es el de los agentes guía, los cuales constituyen una categoría de agentes de software creados para facilitar la navegación en Internet, su misión habitual consiste en localizar páginas Web cuyo contenido coincide con una serie de palabras clave que se le asignan, esto es lo que se conoce como búsqueda por tópicos, solamente señala las páginas, pero no bucea en su interior. Los desmemoriados también tienen un agente que les echa una mano, se trata de los agentes recordatorio. Este tipo particular de agente se encarga de recordar fechas y citas, su utilidad no acaba ahí, algunos agentes recordatorio van más allá. Si el usuario está redactando un documento sobre un determinado tema, el agente le recuerda si tiene ya redactados o en su poder documentación sobre ese tema, así como su localización.

No hay comentarios: