Cougaar (acrónimo inglés de Cognitive Agent Architecture) es una arquitectura basada en Java para la construcción de aplicaciones distribuidas a gran escala basadas en agentes. Es un producto de dos programas consecutivos, de varios años de investigación DARPA (UltraLOG) en sistemas de agentes a gran escala que abarca ocho años de esfuerzo. El primer programa demostró de manera concluyente la viabilidad de la utilización de la tecnología basada en agentes avanzada para llevar a cabo rápida y a gran escala la planificación logística distribuida y la replanificación. El segundo programa desarrolló tecnologías de la información para mejorar la supervivencia de estos sistemas basados en agentes distribuidos que operan en ambientes extremadamente caóticos.
La arquitectura resultante, Cougaar, proporciona a los desarrolladores un marco para implementar aplicaciones de agentes distribuidos a gran escala, con una consideración mínima para la arquitectura y la infraestructura subyacente. La arquitectura Cougaar utiliza lo último en diseño orientado a agente basado en componentes y tiene una larga lista de características de gran alcance.
Cougaar Software Inc. fue formado en 2001 para realizar la transición de un potente conjunto de tecnologías avanzadas de la investigación militar para el mercado comercial. La inversión en este proyecto se remonta a 1996 cuando DARPA decidió que la arquitectura de agente cognitivo era la mejor solución a los difíciles problemas que enfrenta la logística militar. Puesto que ningún agente de la arquitectura existente puede satisfacer esas necesidades, DARPA comenzó a financiar proyectos para desarrollar lo que se convirtió en Cougaar Open Source con algunos de los pensadores más avanzados y desarrolladores en el país. Ellos se superaron con creces mediante el desarrollo de un enfoque tecnológico que se adapta a los dominios más allá de la logística. El trabajo se ha basado en perfeccionar y madurar esa base, para ampliar y probar esta tecnología en diversos entornos de funcionamiento seguros, donde el tiempo es crítico. Las soluciones resultantes representan algunos de los razonamientos más avanzados y capacidades de automatización inteligente existentes y se ha demostrado por ejemplo en aplicaciones del Departamento de Defensa. Se ha pasado los últimos dos años refinando dichas soluciones como plataforma comercial para la creación rápida y el despliegue de aplicaciones inteligentes tan robustas como las aplicaciones militares, pero para las necesidades comerciales y con la economía en mente.
Cougaar es una arquitectura de agente de código abierto, que incluye los servicios de infraestructura y núcleo. Los agentes son entidades autónomas de software que se comunican con otros agentes o servicios externos para lograr un dominio específico funcionalidad. Los agentes de computación están basados en una metodología de programación que facilita la descomposición directa de tareas complejas. Los agentes manejan comportamiento de las aplicaciones y el entorno se encarga de la adaptación sistémica. Los agentes y el entorno se pueden desarrollar, probar y configurar de forma independiente, pero corren juntos La abstracción de agente Cougaar incluye varios servicios avanzados integrados, como son:
Un agente Cougaar se ejecuta sobre un nodo Cougaar (Java Virtual Machine), que a su vez se ejecuta en un host. Dicho agente se compromete con uno o más plugins, que definen el comportamiento del agente. Un agente con cero plugins no hace nada. A diferencia de otras arquitecturas totalmente basadas en mensajes, Cougaar está basada en los plugins de la pizarra como gestores de datos principales. Los plugins reaccionan a los datos en la pizarra añadiendo/cambiando/eliminando notificaciones. La infraestructura de la plataforma Cougaar transforma los datos que hay en la blackboard en operaciones inter-agente, pero esto queda oculto al API del desarrollador. Toda la coordinación inter-plugins es ejecutada a través de suscripciones de datos asíncronas. La infraestructura de la blackboard añade/cambia/elimina las notificaciones por lotes, lo que proporciona mayor robustez y escalabilidad al sistema. Todo el estado es guardado en la blackboard, lo que proporciona soporte para recuperación en caso de fallo. Los servicios Cougaar de núcleo tienen una implementación basada en componentes, y cubren muchos campos como son la movilidad de agentes entre nodos, la persistencia del estado del agente y su posterior recuperación tras un bloqueo, un transporte de mensajes que soporte múltiples protocolos, etc.