Centro de Investigación en Computación
www.jesusolivares.com
El Portal del Conocimiento

mail@jesusolivares.com

XI CO
idioma
English
 
 
 
Portal

Introducción

Modelo MIA

Lenguaje LIA

Ontologías Mixtas

Sistema SEA

Manual del Usuario

Publicaciones

Contactos

Interacción entre Agentes
Lenguaje de Interacción entre Agentes

El Lenguaje de Interacción entre Agentes (LIA) permite definir ambientes conteniendo Agentes y Escenarios (Interacciones) donde los agentes interactuan para alcanzar sus propósitos.

El Ambiente está representado mediante variables globales y regionales. Las variables globales son aquellas que cualquier hebra de los agentes tiene acceso. Las variables regionales se accesan solamente por las hebras de los agentes que las declaran. Ejemplo:

global {  // VARIABLES GLOBALES
    int Reloj ;
    port pcliente ; // PUERTO DONDE ESCUCHA MENSAJES UN CLIENTE
    port pprovedor ; // PUERTO DONDE ESCUCHA MENSAJES UN PROVEEDOR
    char id_msg[30] ;
    int duracion, lectores ;
}
regional { // VARIABLES REGIONALES
     float localidad ;
     char  sucursal[40] ;
}
NOTA: Adelante de las diagonales (//) se indican los comentarios

Los Agentes se declaran con sus variables regionales, sus variables internas que representan a sus recursos y características, sus propósitos, los eventos inesperados que percibe el agente, las acciones que usa para superar a los eventos inesperados, y los papeles iniciales con los que inicia su ejecución cuando se crea. Ejemplo:

agent Cliente {  // AGENTE CLIENTE
    regional { // VARIABLE REGIONAL QUE PUEDE REFERENCIAR
      localidad ;
    }
    internal { // VARIABLES INTERNAS
       char tiene[30], dinero[30], comidaAporta[30], 
            obtiene[30], quiere[30], desea[30], 
            ofrece[30], alimento[30]  ;
       char articulo[100] ; int comprar_a ;
    }
    purpose { // PROPOSITOS DEL AGENTE
        vacaciones_cancun ; // SE INTERPRETA COMO vacaciones(cancun)
     }
    percieve { // EVENTOS INESPERADOS QUE PERCIBE EL AGENTE
       lluvia, terremoto, caida  ;
    }
    action { // ACCIONES ANTE EVENTOS INESPERADOS 
       pedirAyuda  ;
    }
    initial { //  PAPELES INICIALES
       esperar  ;
    }
}

Los escenarios se declaran mediante la palabra reservada de LIA: interaction, en cada uno se describen los papeles que componen al escenario. En cada papel se indican los recursos que se utilizan en el mismo y el número de instancias activas del papel una vez que se encuentra en ejecución, por ejemplo, presidente de una corporación solamente existe 1, pero obreros en una fábrica existen 40 o hasta 300. En cada papel se indican los recursos o características que debe cumplir un agente para tomarlo, y los efectos positivos o negativos que produce ejecutar dicho papel, la sintaxis de los efectos hasta ahora es predicado_valor que se interpreta como predicado(valor). Se indican también sus variables locales y las instrucciones que lo forman.

    interaction Buscando {
    role buscador(producto, oferta)[instances 1] {
    requisite {
      ofrece_oferta, dinero_oferta, desea_producto, alimento_producto ;
    }
    positive {
     quiere_producto ;
    }
    negative {
      ofrece_oferta ;
    }
    local  {
       char logro[100] ;
       char linea[100] ;
       int encontro ;
    }
   
   linea := "Buscando ";
   append(linea, articulo);
   print(linea);
   mensaje := "( BUY ARTICULO ";
   append(mensaje ,articulo);
   tmp := " )";
   append(mensaje ,tmp);
   id_msg := "mensaje1";
   lectores = 10;
   duracion = 120; // EN SEGUNDOS
   // EMITE EL MENSAJE DE LO QUE QUIERE EL CLIENTE
   out(pcte, id_msg, mensaje, lectores, duracion);
   // ESPERA UN TIEMPO PARA QUE AGENTES VENDEDORES SE ENTEREN
   wait(10);
   encontro = 0;
   while( encontro == 0 )  { 
      // ACEPTA UNA OFERTA
      id_msg := "acuerdo";
      espera = 100;
      accept(pcte, id_msg, linea, espera);
      // REVISA SI LO QUE PIDEN LO PUEDE SURTIR
      dato:= "ARTICULO";
      extract(solicitud, dato, cual);
      compare(cual, articulo, resultado);
      // EN CASO QUE LO PUEDE SURTIR
      if( resultado == 1 )  { 
          encontro = 1;
      }
   }   
   logro := "quiere_";
   append(logro, desea); // 'ARTICULO'
   goal(logro);  // INDICA QUE SE HA OBTENIDO UN ARTICULO
                 // SI ES EL DESEADO ENTONCES SE ALCANZO EL PROPÓSITO
  }
}

Las instrucciones de LIA que se han establecido hasta ahora son:

INSTRUCCIÓN

DESCRIPCIÓN

if

esta instrucción es de control del flujo de ejecución, si la condición que evalúa es verdadera se ejecutan las instrucciones que forman su cuerpo.

while

es otra instrucción de control de flujo, que hace que se repitan las instrucciones contenidas en el bloque mientras la condición que se evalúa es verdadera.

print

despliega el contenido de una variable o una cadena constante.

addagent

se utiliza para crear instancias de un agente, se coloca el identificador del agente del que se crea su instancia, luego el nombre del agente creado, algunos propósitos que se le adicionan y se asignan los valores iniciales a sus variables internas. Se usa sólo en main.

addinteract

se utiliza para crear instancias de una interacción, se indica la interacción de la que se crea la instancia y el nombre de la interacción creada. Se usa sólo en main.

goal

indica cuando un propósito se ha alcanzado, el predicado indicado se busca en los que tiene un agente y causa que los papeles subsecuentes del plan generado para el propósito, se cancelen en ejecución.

out

sirve para que un agente coloque un mensaje en un puerto, se explica más adelante en este capítulo.

accept

sirve para que un agente acepte un mensaje en un puerto, se explica mas adelante en este capítulo.

deletemessage

sirve para que un agente retire voluntariamente un mensaje que el mismo haya colocado en una cola.

append

permite concatenar cadenas, en este caso se anexa la segunda cadena en la primera, dando como resultado una cadena concatenada.

extract

extrae el valor de una cadena utilizando como prefijo el contenido de la primera .

compare

indica el resultado de comparar el contenido de las cadenas indicadas por los primeros dos identificadores y dejando el resultado en la variable que aparece como tercer identificador.

wait

indica que se haga una pausa de los segundos indicados en la instrucción.

expresiones aritméticas

permiten realizar cálculos aritméticos y asignarlos a una variable.

expresiones de cadena

permite asignar valores a las variables de cadena.

En un ambiente descrito en LIA se debe incluir una sección principal donde inicia la ejecución de la misma y se crean instancias de agentes y escenarios.

main() 
{
   print("Industria del Maíz");
   // CREACION DE INTERACCIONES
   addinteract(Casa ,casaAntonio );
   addinteract(Mercado,CentralAbasto);
   addinteract(Buscando, Buscar);
   // CREACION DE AGENTES
   addagent(Cliente , Antonio, // ANTONIO ES UN AGENTE CLIENTE
         obtiene_energia,  // SE ADICIONAN PROPÓSITOS
         ofrece := "dinero"; // SE ASIGNAN VALORES A SUS VAR. INTERNAS
         desea := "tortillas"; alimento := "tortillas"; 
         dinero := "dinero"; comidaAporta := "energia"; 
         articulo := "MAIZ-SEMILLA";
         ontology := "cliente" ); // SE INDICA LA ONTOLOGÍA QUE USA

   addagent(Provedor, Rafael, 
         gana_dinero,  
         ofrece := "maíz"; desea := "dinero"; recurso := "dinero";
         persona := "humano"; capta := "humano";  
         producto := "MAIZ-SEMILLA-BLANCO"; precio := "80.00"; 
         id := "1"; ontology := "provedor" );

   addagent(Provedor, Juan, 
         gana_dinero,  
         ofrece := "maíz"; desea := "dinero"; recurso := "dinero";
         persona := "humano"; capta := "humano"; 
         producto := "MAIZ-JARABE"; precio := "15.00"; id := "2";
         ontology := "provedor" );

   addagent(Provedor, Esteban, 
         gana_dinero, 
         ofrece := "maíz"; desea := "dinero"; recurso := "dinero";
         persona := "humano"; capta := "humano"; 
         producto := "MAIZ-FRUCTUOSA"; precio := "12.00"; id := "3";
         ontology := "provedor" );
}

<< Modelo MIA >> Ontologías Mixtas

© Adolfo Guzmán, Jesús Olivares, Carmen Domínguez Última actualización junio 2003 mail@jesusolivares.com México