FIPA e JADE Una breve introduzione Vasco Gallotti Email: [email protected] Battle plan… Prima Parte FIPA La specifica SC00023J AMS DF MTS ACL Rappresentazione messaggi ACL Protocolli di invio Seconda Parte Cos’è JADE Installazione JADE Servizi forniti da JADE Scriviamo un agente in JADE Cos’è JADE? JADE: Java Agent DEvelopment framework è una piattaforma, altamente ingegnerizzata, scritta in Java, per la creazione e gestione di agenti intelligenti. La caratteristica principale è la struttura distribuita del sistema stesso, esso genera un “contenitore” (Container) nel qual gli agenti esistono e convivono. Ogni Istanza di JADE DEVE avere un contenitore principale (“MainContrainer”) il cui ruolo è quello fondamentale di organizzare la Comunicazione tra gli agenti. Ad ogni main può essere associato uno o più container residenti sulla stessa macchina o in qualsiasi altro posto nella rete…anche in internet! Altro aspetto fondamentale: JADE è “FIPA Compliant” FIPA FIPA: Foundation for Intelligent and Phisycal Agent È un’organizzazione che si è impegnata nella stesura degli standard che regolano la vita di un agente intelligente. Essa ha definito una serie di standard tra cui Ciclo di vita di un agente Protocolli di interazione tra agenti e altri agenti, e tra agenti e piattaforma Struttura di un sistema multiagente ACL ACL è un linguaggio grazie al quale vengono scritti i messaggi tra gli agenti, esso si basa sullo “stato intenzionale” dell’agente. Specifica SC00023J La specifica SC00023J fornisce gli standard per tutto ciò che concerne il “management” di un agente. E’ la specifica più importante per la gestione e creazione di una piattaforma: Software Agent Agent Management System Message Transport System Directory Facilitator Agent Un agente può trovarsi in vari stati durante la sua esistenza, FIPA formalizza questo concetto: WAITING SUSPENDED Resume Wait Wake up Suspend ACTIVE Destroy Quit Move Invoke Create TRANSIT Execute INITIATED Unknown AMS L’ams (Agent Mangement Service) è un servizio che deve esistere in ogni piattaforma per agenti. Deve esistere necessariamente solo un AMS per ogni piattaforma. L’ams è responsabile della gestione delle operazioni di una piattaforma per agenti intelligenti: Creazione di un nuovo agente Eliminazione di un agente Migrazione di un agente Mantenimento del ciclo di vita di un agente L’ams contiene al suo interno anche la lista degli agenti attualmente presenti nel residenti nella piattaforma. Va notato che un agente che si trova su una stessa piattaforma non è detto che stia su di una stessa macchina. DF La Directory Facilitator è un servizio associato ad una piattaforma per agenti grazie al quale un agente registra il servizio da lui stesso offerto. E’ possibile paragonarlo alle pagine gialle. Ad un agente è possibile: Registrare un servizio Modificare un suo servizio Eliminare una voce dal registro Cercare per trovare un agente associato ad un servizio La DF è opzionale, può esistere una piattaforma senza una DF; in una piattaforma possiamo trovare anche più di una DF. MTS Il Message Transport Service fornisce un meccanismo per trasferire messaggi ACL tra agenti. Ecco la struttura che deve avere: Nella sua forma astratta un messaggio è composto da una “envelope” e da un “payload”. L’”envelope” contiene solo informazioni utili alla consegna del messaggio. L’MTS non deve in nessun caso alterare il payload del messaggio. Il payload è rappresentato da un messaggio ACL ACL Messagge PARAMETRO CATEGORIA PARAMETRO ACL (Agent Communication Language) è il linguaggio utilizzato performative Tipo di atto comunicativo dagli agenti per scambiare messaggi. sender Partecipante alla comunicazione receiver Partecipante alla comunicazione ACL viene utilizzato anche tra agente e piattaforma per scopi Partecipante alla comunicazione interni.reply-to content Contenuto del messaggio language di content La specifica SC00061G definisce Descrittore in dettaglio i parametri dei encoding Descrittore di content messaggi ACL. ontology Descrittore di content protocol Controllo per la conversazione Un messaggio ACL è composto da una serie di parametri e deve conversation-id Controllo per la conversazione contenere obbligatoriamente il performative-act, sender, receiver e reply-with Controllo per la conversazione content. in-reply-to Controllo per la conversazione reply-by Controllo per la conversazione Atti comunicativi Un agente che vuole inviare un messaggio ad un altro deve esprimere la sua intenzione. Questo viene realizzato iniziando ogni messaggio con delle parole chiave che rappresentano l’intenzione dell’agente che ha inviato il messaggio stesso. Gli atti comunicativi sono: Accept proposal Propagate Agree Propose Cancel Proxy Call for proposal Query if Confirm Query ref Disconfirm Refuse Failure Reject proposal Inform Request Inform if Request when Inform ref Request whenever Not-undeerstood Subscribe ACL Messagge in “String Mode” Un messaggio ACL può essere rappresentato usando una serie di stringhe disposte in un preciso modo Message = “(” MessaggeType MessageParameter* “)”. La specifica SC00070J definisce il modo in cui scrivere messaggi ACL usando una grammatica ben definita. MessageParameter = “:sender” AgentIdentifier | “:receiver” AgentIdentifierSet Vediamo alcune regole di|questa grammatica… “:content” String | “:reply-with” Expression | “:reply-by” DateTime | “:in-reply-to” Expression | “reply-to” AgentIdentifierSet | “:language” Expression | “:encoding” Expression | “:ontology” Expression | “:protocol” Word | “:convesation-id” Expression. Altre regole indispensabili sono: AgentIdentifier = “(” “agent-identifier” “:name” word [“:addresses” URLSequence] [“:reslvers” AgentIdentifierSequence] AgentIdentifierSequence = “(” “sequence” AgentIdentifier* “)”. AgentIdentifierSet = “(” “set” AgentIdentifier* “)”. Queste tre regole servono per generare tutto ciò che riguarda gli identificativi agenti (AID). Questi possono servire in più parti del messaggio ACL. Vediamo alcuni esempi di messaggio in String mode: (INFORM (QUERY-IF :sender :sender (( agent-identifier agent-identifier :name :name simple@Blaskino:1099/JADE RMA@Blaskino:1099/JADE :addresses :addresses (sequence (sequence IOR:000000000000001149444C3A464950412F4D54533A312E30000000000000000100 IOR:000000000000001149444C3A464950412F4D54533A312E30000000000000000100 00000000000060000102000000000A3132372E302E302E3100042600000019AFABCB00 00000000000060000102000000000A3132372E302E302E3100042600000019AFABCB00 00000002E88E33210000000800000000000000000A0000000000000100000001000000 00000002E88E33210000000800000000000000000A0000000000000100000001000000 200000000000010001000000020501000100010020000101090000000100010100 )) )) 200000000000010001000000020501000100010020000101090000000100010100 :receiver :receiver (set (set (( agent-identifier agent-identifier :name :name RMA@Blaskino:1099/JADE simple@Blaskino:1099/JADE )) :addresses (sequence IOR:000000000000001149444C3A464950412F4D54533A312E30000000000000000100 :content “Homer goes to hollywood" 00000000000060000102000000000A3132372E302E302E3100042600000019AFABCB00 00000002E88E33210000000800000000000000000A0000000000000100000001000000 :in-reply-to homer 200000000000010001000000020501000100010020000101090000000100010100 )) :language English ):conversation-id "23" ) :content “Hallo Homer!!!" :reply-with RMA@Blaskino:1099/JADE1107708472917 ) Inviare messaggi ACL Esistono vari protocolli per inviare dei messaggi tra agenti, sia residenti sulla stessa piattaforma, sia residenti su piattaforme distinte. FIPA fornisce glil standard per inviare messaggi ACL usando i seguenti protocolli: HTTP IIOP WAP Tutti questi protocolli sono delegati al trasporto di messaggi ACL, la scelta di quale usare è lasciata al programmatore della piattaforma per agenti.