Un enfoque de programación orientado a agentes (en adelante, AOP) es una especie de representación de programa o un paradigma de programación en el que los conceptos fundamentales son los conceptos de un agente y su comportamiento mental , dependiendo del entorno en el que se encuentre. El concepto fue propuesto por Shochem ( Ing. Yoav Shoham ) en 1990 [ 1] . Definición de paradigma dada por el autor: [2]
Este nuevo paradigma de programación se llama razonablemente programación racional. Así como la programación orientada a objetos ha cambiado el paradigma de escribir procedimientos a crear objetos, la programación racional ha cambiado el paradigma de crear objetos de información a crear agentes motivados.
Un agente es todo lo que puede considerarse que percibe su entorno con la ayuda de sensores y actúa sobre este entorno con la ayuda de actuadores . [3]
Shochem, al presentar el enfoque orientado al agente como un nuevo paradigma, analiza con suficiente detalle en qué sentido se usa la palabra agente en él . El hecho es que esta palabra puede usarse en varios sentidos relacionados. Y aunque Shochem entiende a un agente software como un agente , se basa en la teoría de la inteligencia artificial y parte del concepto de agente inteligente , que ya existía con anterioridad. Pero al darse cuenta de que este concepto es bastante vago, se fija el objetivo de transformarlo para una aplicación más formal en la programación, proponiendo un marco AOP especial . Como resultado, el concepto de agente, en contraste con un objeto simple , está dotado de una serie de construcciones mentales, como creencias, deberes y habilidades. Por lo tanto, aparecerán varias categorías mentales en el lenguaje de programación y la semántica de la programación estará conectada con la semántica de las construcciones mentales. [una]
Según el grado de libertad del entorno, que implica la presencia de un tipo de agente apropiado en él, los entornos se dividen en [5] :
Cerrado La última descripción determinista o probabilística de todo el entorno, que el agente conoce a priori o a través de la exploración . abierto La descripción final determinista o probabilística del área local del entorno en el que se encuentra el agente y que le es conocida a priori o mediante investigación. transformable Entornos en desarrollo dinámico, cuya estructura en desarrollo es un agente.El enfoque orientado al agente es un caso especial (especialización) de la programación orientada a objetos (POO). En OOP, un proceso computacional se entiende de manera bastante amplia como un sistema ensamblado a partir de objetos que interactúan entre sí a través de mensajes . AOP especializa estos conceptos al establecer un estado (llamado estado mental) de objetos (llamados agentes) formados por componentes tales como creencias (incluidas creencias sobre el mundo, sobre uno mismo y sobre los demás), habilidades y decisiones. , cada uno de los cuales tiene una sintaxis específica. Además, se imponen varias restricciones al estado mental del agente. La computación consiste en informar a los agentes, cumplir con sus requisitos, cumplir con sus sugerencias, aceptar, rechazar, competir y ayudarse mutuamente. [una]
Programación orientada a objetos | POA | |
---|---|---|
Unidad básica | un objeto | agente |
Parámetros que determinan el estado de la unidad principal | ilimitado | creencias, compromisos, habilidades, elecciones.... |
Proceso de cálculo | métodos de llegada y respuesta de mensajes | métodos de llegada y respuesta de mensajes |
tipos de mensajes | ilimitado | información, petición, oferta, promesa, negativa…. |
Restricciones del método | No | honestidad, coherencia.... |
La presencia de un mecanismo de fijación de objetivos en un agente proporciona un nivel de autonomía fundamentalmente nuevo. Un agente no sigue necesariamente las órdenes de ningún otro agente o usuario, simplemente depende de las condiciones del entorno, incluidos los objetivos e intenciones de otros agentes. A diferencia de un objeto, un agente puede asumir ciertas obligaciones o, por el contrario, negarse a realizar algún trabajo, motivando esto por falta de competencia, estar ocupado con otra tarea, etc. Al mismo tiempo, un agente puede realizar acciones como generar, supresión y sustitución de otros agentes, activación de funciones (tanto propias como de otros agentes), activación de un escenario de actividad, memorización del estado actual de otros agentes, etc. [6] .
Razones para el surgimiento de un enfoque basado en agentes:
En general, un sistema AOP debe incluir los siguientes componentes básicos: [7] [8]
Las principales propiedades que deben tener los agentes se consideran :
Las arquitecturas de objetos distribuidos ( CORBA , DCOM , Java RMI , servicios WEB ), que tienen muchas de las propiedades enumeradas, tienen las siguientes desventajas:
El entorno de objetos distribuidos de JADE (basado en Java RMI, Java CORBA IDL, Java Serialization y Java Reflection API) otorga a los agentes de Java las siguientes propiedades:
Estructuralmente, el agente se puede representar de la siguiente manera :
Agente | |->Recursos | |->Objetos | |->funciones | |->datosUn ejemplo típico de un enfoque orientado a agentes son los programas especiales que imitan las acciones de los jugadores en los juegos de computadora. Un nombre común para este tipo de programas es bots . Sin embargo, el uso de bots no se limita a los juegos de ordenador . Se pueden encontrar como un elemento del programa en chats y foros que juegan el papel de "interlocutor" y apoyan "discusiones". Sin embargo, algunos bots no solo cumplen el papel de imitadores en el proceso de comunicación o juegos, sino que se utilizan para editar información textual (incluida Wikipedia), establecer conexiones de red, moderar recursos, etc.
Echemos un vistazo al área temática de los libreros, que ilustrará los pasos necesarios para crear aplicaciones basadas en agentes.
Cada agente de compra recibe el título del libro que va a comprar como argumento de línea de comando y consulta periódicamente a todos los agentes de venta conocidos para realizar una solicitud de compra. Una vez recibida la oferta, el agente comprador la confirma y envía el pedido. Si más de un agente de venta proporciona el libro, el comprador elige la mejor oferta (mejor precio). Habiendo comprado el libro requerido, el agente de compras finaliza el trabajo. Cada agente vendedor tiene una interfaz mínima a través de la cual el usuario puede agregar nuevos títulos (y sus precios) al catálogo local de libros a la venta. Los agentes de venta están esperando solicitudes de los agentes de compra. Cuando reciben una solicitud de un libro, verifican si el libro está en su catálogo. Si es así, responden con una oferta con un precio. De lo contrario, se niegan. Cuando reciben una orden de compra, la procesan y eliminan el libro solicitado de su catálogo.
Para crear un agente en JADE, basta con definir su método de inicialización:
importar jade.core.Agente ; public class BookBuyerAgent extends Agent { protected void setup () { // Imprime un mensaje de bienvenida System . fuera _ println ( " ¡ Hola ! Comprador - agente " + getAID (). getNombre () + " está listo . " ); } }El trabajo real que tiene que hacer un agente generalmente se realiza dentro del "comportamiento del agente". Un comportamiento es una tarea que un agente puede realizar.
Un agente puede ejecutar múltiples comportamientos al mismo tiempo. Sin embargo, es importante señalar que la programación de varias conductas en un agente no es proactiva, sino cooperativa. Esto significa que cuando se programa la ejecución de un comportamiento, se llama a su método action()y se ejecuta hasta que se completa. Por lo tanto, es el programador quien determina cuándo el agente pasa de ejecutar un comportamiento determinado a ejecutar el siguiente.
Dado el mecanismo de programación descrito, es importante enfatizar que un comportamiento como el que se muestra a continuación evita que se ejecute cualquier otro comportamiento porque su action()método nunca se completa.
public class OverbearingBehavior extiende el comportamiento { public void action () { while ( true ) { // hacer algo } } public boolean hecho () { return true ; } }