# Agente (software)

En ciencia de la computación, un agente de software (software agent) es un programa de computación que actúa para un usuario u otro programa en una relación de entidad, la cual deriva del Latín agere (hacer): un acuerdo para actuar en nombre propio. Tal "acción en nombre de" implica la autoridad para decidir cual acción, si existe, es adecuada.
Algunos ejemplos de estos Agentes son: agentes intelligentes (en particular exhibiendo algunos aspectos de inteligencia artificial, como aprendizaje y razonamiento), agentes autónomos (capaces de modificar la manera en que logran su objetivo), agentes distribuidos (ejecutados en distintas computadoras físicas), sistema multi-agente (agentes distribuidos que no tienen la capacidad de lograr un objetivo solos y deben comunicarse), y agentes móviles (agentes que pueden reubicar su ejecución encima de procesadores diferentes).

## Conceptos

Los atributos básicos de un agente informático son que dichos agentes
* no son invocados estrictamente por una tarea, sino que se activan ellos mismos,
* pueden estar en un servidor en estado de espera, preservando el contexto,
* pueden hacer que se ejecute un estado en un servidor sobre condiciones de inicio,
* no requieren acción de los usuarios,
* pueden invocar otras tareas incluyendo comunicación.
El término agente describe una abstracción en términos computacionales, una idea, o un concepto, similar a términos en la POO como métodos, funciones, y objetos. El concepto de un agente ofrece una conveniente y potente manera de describir una entidad computacional compleja la cual es capaz de actuar con un cierto grado de autonomía con el fin de completar tareas en nombre del servidor. Pero a diferencia de los objetos, los cuales son definidos en términos de métodos y atributos, un agente es definido en términos de su comportamiento..
Varios autores han propuesto diferentes definiciones de agentes, estas comúnmente incluyen conceptos tales como
* persistencia (el código no es ejecutado en demanda, sino que se ejecuta continuamente y por el mismo decide cuando debe realizar cierta actividad)
* autonomía (los agentes tienen la capacidad de seleccionar tareas, priorizar, comportarse enfocados en un objetivo (goal-directed behaviour), tomar decisiones sin intervención humana)
* habilidad social (los agentes son capaces de acoplar otras componentes mediante cierto tipo de comunicación y coordinación, pueden colaborar en una tarea)
* reactividad (los agentes perciben el contexto en el que operan y responden a este apropiadamente).

### Distinguiendo agentes de programas

Contrastando el término con conceptos relacionados pueden ayudar a clarificar su significado. Franklin & Graesser (1997) discuten cuatro nociones clave que distinguen a los agentes de programas arbitrarios: reacción con el medio ambiente, la autonomía, la meta de la orientación y la persistencia.

## Impactos de agentes de software

Los agentes de software pueden ofrecer varios beneficios a sus usuarios finales mediante la automatización de tareas complejas o repetitivas. Sin embargo, hay impactos organizativos y culturales de esta tecnología que necesitan ser considerados antes de la implementación de agentes computacionales.

### Impacto organizativo

Impactos organizativos incluyen la total transformación del sector del comercio electrónico, responsabilidad operacional, y la carga excesiva de seguridad. Los agentes computacionales son capaces de hacer búsquedas rápidas en Internet, identificar las mejores ofertas disponibles en línea, y presentar esta información a los usuarios finales en forma acumulada. Por lo tanto, los usuarios pueden no necesitar buscar manualmente distintos websites de un comerciante específico; ellos son capaces de encontrar el mejor tarto en cuestión de segundos. Al mismo tiempo, esto aumenta la competencia basada en precio y transforma todo el sector del comercio electrónico en una competición de mercado perfecta y uniforme. La implementación de agentes también requiere recursos adicionales de las compañías, colocando un peso extra en su red, y requiere nuevos procesos de seguridad.

### Satisfacción laboral e impacto en la satisfacción del trabajo

A las personas les gusta realizar tareas sencillas que proporcionan la sensación de éxito a menos que la repetición de dicha tarea afecte la producción total. En general, la aplicación de agentes de software para llevar a cabo los requisitos de administración proporciona un incremento sustancial en la satisfacción de trabajo, como la administración de la propia obra nunca es del agrado del trabajador. El esfuerzo liberado sirve para un mayor grado de compromiso en las tareas sustanciales de trabajo individual. Por lo tanto, los agentes de software pueden proporcionar lo básico para implementar trabajo autocontrolado, liberado de los controles jerárquicos y las interferencias. Estas condiciones se pueden asegurar mediante la aplicación de agentes de software para el apoyo formal requerido.

### Impacto Cultural

Los efectos culturales de la puesta en práctica de los agentes de software incluyen aflicción de confianza, la erosión de las habilidades, la deserción de privacidad y separación social. Algunos usuarios pueden no sentirse del todo a gusto delegando totalmente tareas importantes a las aplicaciones de software. Aquellos que empiezan a confiar únicamente en agentes inteligentes pueden perder habilidades importantes, por ejemplo, relacionados con la alfabetización informativa. Con el fin de actuar a nombre de los usuarios, un agente de software debe tener una comprensión completa de un perfil de los usuarios, incluyendo su / sus preferencias personales. Esto, a su vez, puede conducir a problemas de privacidad impredecibles. Cuando los usuarios empiezan a confiar más en sus agentes de software, sobre todo, por las actividades de comunicación, pueden perder contacto con otros usuarios humanos y mirar el mundo con los ojos de sus agentes. Estas son las consecuencias que los investigadores de los agentes y los usuarios deben tener en cuenta cuando tratan con tecnologías de agentes inteligentes.

### Historia

El concepto de un agente se remonta al modelo de agente de Hewitt (Hewitt, 1977) - "Un objeto autónomo, interactivo que se ejecuta simultáneamente, que posee un estado interno y la capacidad de comunicación".
Para ser más académico, los sistemas de agentes de software son una evolución directa de los Sistemas Multi-Agente (SMA). SMA evolucionaron a partir de la inteligencia artificial distribuida (IAD), Solución Distribuida de Problemas (SDP) e Inteligencia Artificial Paralela (IAP), con lo que hereda todas las características (buenas y malas) de IAD y IA.
En "Knowledge Navigator" de John Sculley en 1987 video retrata una imagen de una relación entre los usuarios finales y los agentes. Al ser un primer ideal, este campo ha experimentado una serie de infructuosas implementations top-down, en lugar de los enfoques pieza-por-pieza y bottom-up. La gama de tipos de agente es ahora (desde 1990) amplia: WWW, motores de búsqueda, etc.

## Ejemplos de agentes de software inteligentes

Haag (2006) sugirió que hay solo 4 tipos esenciales de agentes de software inteligentes:
* Agentes compradores o robots de compras
* Usuario o agentes personales
* Agentes de monitoreo y vigilancia
* Agentes de minería de datos

### Agentes compradores (robots compradores)

Los agentes compradores viajan por una red (ej, Internet) recuperando información sobre productos y servicios. Estos agentes, conocidos también como "robots de compras", trabajan de manera muy eficiente para productos de consumo, tales como CDs, libros, componentes electrónicos, y otros productos de talla única para todos.

### Agentes usuarios (agentes personal)

Agentes de usuarios, o agentes personales, son agentes inteligentes que realizan acciones en su nombre. A esta categoría pertenecen aquellos agentes inteligentes que realizan o realizaran en breve las siguientes tareas:
* Verificar tu correo electrónico, ordenándolos acorde a las preferencias de orden de los usuarios, y te alerta cuando arriban mensajes de correo electrónico importantes.
* Juegan juegos de computadora como tu oponente o patrullan áreas de juego para usted.
* Ensambla informes personalizados de noticias para ti. Hay varias versiones de los mismos, incluyendo CNN.
* Encuentre información para usted en el tema de su elección.
* Llena los formularios en la Web de forma automática, almacenado su información para futuras consultas.
* Explora páginas Web buscando y resaltando el texto que constituye la parte "importante" de la información allí.
* "Debate" con temas que van desde sus más profundos temores a los deportes.
* Facilita la búsqueda de trabajo en línea mediante el escaneo de trabajos conocidos y enviando el currículum a las oportunidades que cumplan con el criterio deseado.
* Perfil de sincronización a través de las redes sociales heterogéneas.

### Agentes (predictivos) de monitorización y vigilancia

Agentes de monitoreo y vigilancia se utilizan para observar e informar sobre equipos, por lo general los sistemas informáticos. Los agentes pueden realizar un seguimiento de los niveles de inventario de la empresa, observar los precios de los competidores y hacerlos llegar a la empresa, ver la manipulación de stock de información privilegiada y rumores, etc.
Por ejemplo, el Laboratorio de Aviones de Propulsión de la NASA tiene un agente que controla el inventario, la planificación, la programación y equipamiento para mantener los costos bajos, así como las instalaciones de almacenamiento de alimentos. Estos agentes suelen controlar complejas redes informáticas que pueden mantener un registro de la configuración de cada ordenador conectado a la red.
Un caso especial de agentes de monitoreo y vigilancia son las organizaciones de los agentes utilizados para emular el proceso de toma de decisiones humanas durante las operaciones tácticas. Los agentes monitorean el estado de los activos (municiones, armas disponibles, plataformas de transporte, etc) y reciben Objetivos(Misiones) de los agentes de nivel superior. Los Agentes luego siguen con los Objetivos de los Activos en la mano, lo que minimiza el gasto de los Activos y aumenta al máximo el logro de los Objetivos. (Ver Popplewell, "Agents and Applicability")

### Agentes en minería de datos (extracción de datos)

Este agente utiliza la tecnología de la información para encontrar tendencias y patrones en una gran cantidad de información de muchas fuentes diferentes. El usuario puede ordenar a través de esta información con el fin de encontrar toda la información que está buscando.
Un agente de minería de datos funciona en un almacén de datos de información descubriendo. Un 'almacén de datos' reúne información de muchas fuentes diferentes. "Minería de datos" es el proceso de mirar a través del almacén de datos para encontrar la información que usted puede utilizar para tomar acción, como forma de aumentar las ventas o mantener a los clientes que están pensando en desertar.
"Classification" es uno de los tipos más comunes de minería de datos, que encuentra patrones en la información y los clasifica en diferentes clases. Agentes de minería de datos también pueden detectar cambios importantes en las tendencias o un indicador clave y permite detectar la presencia de nueva información y avisarte de la misma. Por ejemplo, el agente puede detectar un descenso en el sector de la construcción de una economía, sobre la base de estos constructores será capaz de retransmitir información para la toma de decisiones inteligentes con respecto a la contratación / despido de empleados o la compra / arrendamiento de equipos para mejores demandas en su empresa.

### Agentes de conexión de redes y comunicación

Algunos otros ejemplos de los actuales Agentes inteligentes incluyen algunos filtros spam, robots de juego, y herramientas de monitoreo de servidores. Robots de indexacion en Motores de Búsqueda también califican como agentes inteligentes.
* Agente de usuario - para navegar por la World Wide Web
* Agente de transferencia de correo - Para servicios de correo electrónico, como Microsoft Outlook. Se comunica con el servidor de correo POP3, sin que los usuarios tengan que entender los comandos del protocolo POP3 . Incluso cuenta con conjuntos de reglas de filtros de correo que para el usuario, lo que les ahorra el trabajo de tener que hacerlo ellos mismos.
* Agente SNMP
* Servidores de red en estilo-Unix, httpd es un "deamon" de HTTP que implementa el Protocolo de Transferencia de Hipertexto en la raíz de la World Wide Web
* Agentes de administración usados para administrar dispositivos de telecomunicaciones
* Simulación de Multitudes para la planificación de la seguridad o de los gráficos por ordenador en 3D
* Agente de balizaje inalámbrico es un proceso simple que aloja entidades con tarea única para la aplicación de bloqueo inalámbrico o correa electrónica en conjunto con agentes de software más complejos alojados por ejemplo en los receptores inalámbricos.

## Cuestiones de diseño

Cuestiones interesantes a tener en cuenta en el desarrollo de sistemas basados en agentes incluyen
* cómo las tareas se programan y cómo la sincronización de tareas se logra
* cómo son priorizadas las tareas por los agentes
* cómo los agentes pueden colaborar, o reclutar recursos
* cómo los agentes pueden volver a ejecutarse en diferentes entornos, y cómo su estado interno puede ser almacenado
* cómo el entorno se explora y cómo un cambio de ambiente conduce a cambios en el comportamiento de los agentes
* cómo la mensajería y la comunicación se puede lograr
* cuáles jerarquías de agentes son útiles (por ejemplo, agentes de ejecución de tareas, agentes de planificación, proveedores de recursos ...).
Para que los agentes de software trabajen juntos de manera eficiente deben compartir la semántica de sus elementos de datos. Esto se puede lograr haciendo que los sistemas informáticos publiquen sus metadatos.
* procesamiento de estado interno y ontologías para representar el conocimiento
* protocolos de interacción - normas para las tareas de comunicación específicas
Sistemes de agentes son usados para modelar sistemas de mundo real con concurrencia o procesamiento en paralelo.
* Mecanismo de Agente - Motores de diversa índole, que apoyan las diferentes grados de inteligencia
* Contenido de Agente - Datos utilizados por la mecanismo en el razonamiento y aprendizaje
* Acceso de Agente - Métodos para que el mecanismo perciba contenido y realice acciones como resultado del Razonamiento
* Seguridad de Agente - Preocupaciones relacionadas con la computación distribuida, aumentada por algunas preocupaciones especiales relacionados con los agentes
El agente utiliza sus métodos de acceso para salir a bases de datos locales y remotas para forraje de contenido. Estos métodos de acceso pueden incluir la creación de flujos de entrega de noticias al agente, o la recuperación de tablas de boletines, o el uso de un crawler para caminar por la Web. El contenido que es recuperado de esta manera probablemente ya está parcialmente filtrado - por la selección de la fuente de noticias o las bases de datos en las que busca. El agente siguiente puede usar su búsqueda detallada o lenguaje de procesamiento de mecanismo para extraer palabras clave o signaturas desde el cuerpo del contenido que ha recibido o recuperado. Este contenido abstracto (o evento) es luego pasado al razonamiento del agente o al mecanismo de inferencia para decidir qué hacer con el nuevo contenido. Este proceso combina el contenido del evento con el contenido basado en reglas o el conocimiento proporcionado por el usuario. Si este proceso encuentra un buen resultado o "machea" en el nuevo contenido, el agente puede utilizar otra pieza de su mecanismo para realizar una búsqueda más detallada sobre el contenido. Finalmente, el agente puede realizar una acción basado en el contenido nuevo; por ejemplo, notificar al usuario que un nuevo evento ha ocurrido. Esta acción es verificada por una función de seguridad y a continuación, da la autoridad al usuario. El agente utiliza los métodos de acceso a usuario para entregar el mensaje al usuario. Si el usuario confirma que el evento es importante actuando rápido sobre la notificación, el agente también puede emplear su mecanismo de aprendizaje para aumentar su peso para este tipo de evento.

### Nociones y marcos de trabajos (frameworks) para agentes

* DAML (DARPA Agent Markup Language)
* Jason (plataforma de desarrollo de sistemas multi-agentes)
* 3APL (Artificial Autonomous Agents Programming Language)
* GOAL agent programming language
* Web Ontology Language (OWL)
* daemons in Unix-like systems.
* Java Agent Template (JAT)
* Java Agent Development Framework (JADE)