Universitatea Politehnica Bucuresti Facultatea de Automatica si Calculatoare

JADE
Ungureanu Bogdan

Cuprins Introducere Platforma JADE JADE si paradigma agentilor Arhitectura JADE Instalarea platformei JADE si lansarea in executie Pachetele JADE Serviciul pentru transportul mesajelor Instrumente pentru administrare si debugging Consola pentru gestiunea platformei Agentul pentru teste (DummyAgent) Agentul de monitorizare (sniffer agent) Agentul de introspectie Agentul pentru managementul log-urilor Serviciul de notificare pentru evenimente Programarea cu ajutorul JADE 2 2 2 2 3 4 5 5 5 7 7 8 8 9 10

1

Acesta simplifica implementarea sistemelor multi-agent printr-un middle-ware care respecta specificarile FIPA si printr-un set de instrumente care ajuta la fazele de debugging si instalare.  Implementarea ambelor feluri de index-uri “white pages” si “yellow pages”. 2 .4 sau o versiune ulterioara. Alte implementari care merita mentionate sunt: SL. si capabili sa comunice transparent intre ei. Platforma JADE JADE si paradigma agentilor JADE a fost implementat pentru a oferi programatorilor urmatoare functionalitati de baza gata de a fi utilizate si usor de adaptat:  Un sistem distribuit populat de agenti. Arhitectura comunicatiei ofera o cale eficienta si flexibila de a trimite mesaje. polling. Agentii exista in containere care reprezinta procesul Java care suporta JADE in timpul executiei si toate servicile necesare mentinerii si executiei agentilor. Configuratia poate fi schimbata chiar in timpul rularii prin mutarea agentilor de pe o masina pe alta dupa cum se necesita. Exista un container special numit “main” (principal) care reprezinta punctul de legatura al platformei si este primul container care a fost lansat in executie. timeout si pe baza de pattern matching. pe masini diferite. alegand in mod transparent cel mai bun protocol (HTTP. Arhitectura JADE O platforma JADE este alcatuita din mai multe containere pentru agenti ce sunt distribuite intr-o retea.Introducere JADE (Java Agent DEvelopment Framework) este un framework implementat in Java. fiecare ruland pe un thread separat.  Suport pentru platforma J2ME si wireless.  Un kernel extensibil. servicii web).  Suport pentru ontologii si limbaje bazate pe continut. Platforma pe care sunt implementati agentii poate fi distribuita pe mai multe masini ce pot folosi sisteme de operare diferite. managementul agent al ontologiilor. envelope. In particular.  Respectarea integrala a specificatiilor FIPA  Transport eficient al mesajelor asincrone printr-un set de API-uri transparent in ceea ce priveste locatiile. IIOP.  O librarie de protocoale de interactiune.  Suport pentru mobilitatea agentilor.  O gestionare simpla dar eficienta a ciclului de viata al agentilor. si configuratia poate fi controlata prin intermediul unei interfete grafice. Majoritatea protocoalelor de interactiune definite de FIPA sunt disponibile si pot fi instantiate dupa definirea fiecarei stari a protocolului reprezentand comportamentul unei anumite aplicatii. dar se pot adauga cu usurinta si altele). private pentru fiecare agent. Java RMI .  Mecanism de notificare pentru agenti care se pot inscrie pentru a primi informatii despre producerea diferitelor evenimente.  O multime de instrumente grafice pentru facilitarea la debugging si instalare.  Interactiunea cu diferite tehnologii bazate pe web (JSP. integrarea cu JESS. sablone de encodare. agentii isi pot accesa coada de mesaje prin mai multe moduri: blocking. limbaje bazate pe continut. mecanismul de transport este ca un cameleon pentru ca se adapteaza la fiecare situatie. si toate celelalte containere trebuie sa se inregistreze la un container principal. ACL. S-a implementat tot modelul comunicational din FIPA si componentele acestuia au fost bine individualizate si integrate: protocoale de interactiune. Singura prerechizita este Java Run Time version 1.  O interfata process pentru lansarea unei platforme dintr-o aplicatie externa. unde JADE creaza si gestioneaza o coada de mesaje ACL. ontologii si in final protocoale de transport.

tilab.  Hostarea AMS si DF.  Gestionarea tabelei global de descrieri ale agentilor (GADT) ce contine informatii despre toti agentii existenti pe platforma inclusiv statutul curent si locatia. si respectiv serviciul “yellow pages” al platformei.Principalele elemente arhitecturale ale unei platforme JADE se pot observa in figura urmatoare: Containerul principal are urmatoarele responsabilitati:  Gestionarea tabelei de containere (CT) care contine referinte la obiecte si adrese de transport ale tuturor containelor ce apartin platformei.zip – contine documentatia disponibila si online  jadeExamples. Instalarea platformei JADE si lansarea in executie Distributia JADE este disponibila online la http://jade.zip – contine sursele platformei JADE  jadeAll. cei doi agenti speciali care furnizeaza serviciile de gestiune agenti si “white pages”.zip – contine variantele precompilate ale librariilor JADE (fisiere jar) gata de a fi folosite  jadeDoc.zip – contine codul sursa pentru diferite exemple  jadeSrc.zip – contine cele 4 arhive de mai sus Dezarhivarea fisierelor de mai sus va avea ca rezultat un director /jade cu urmatoarea structura: 3 .com si contine 5 arhive:  jadeBin.

domain – contine implementarea agentilor AMS si DF.util – contine cateva clase folosite arbitrar  jade. inclusiv transferul starii si codului acestora.jar – contine toate instrumentele grafice  http. − jade. Contine urmatoarele sub-pachete: − jade.replication – realizeaza replicarea containerului de baza ca o masura de siguranta in cazul unei defectari in cel original.jar – contine MTP – ul bazat pe IIOP (acesta nu este folosit prea des)  commons-codec\commons-codec-1.proto – implementarea unor protocoale de uz general  jade.wrapper.  jade.  jade. cum se specifica in standardul FIPA. − jade.core.core.gui – contine niste componente Jave pentru uz general in interfete grafice si componente pentru a reprezenta abstractiile JADE. Pachetele JADE Sursele platformei JADE sunt organizate intr-o ierarhie de pachete si sub-pachete.messaging – implementeaza serviciul pentru distributia de mesaje − jade.nodeMonitoring faciliteaza monitorizarea intre containere si descoperirea containerelor care nu pot fi contactate sau cele “moarte' − jade.behaviours – este un sub-pachet al jade.Profile.core. Include clasa fundamentala jade.Agent precum si toate clasele de baza pentru executie necesare pentru a implementa containere pentru agenti.lang.core.core care contine o ierarhie ale comportamentelor independente pentru aplicatiile de baza.  jade. Principalele pachete sunt:  jade.Boot -gui”.jar – contine MTP – ul bazat pe HTTP care este lansat la pornirea platformei  iiop. completat cu unele extensii JADE. jade. Un comportament JADE reprezinta o misiune pe care un agent poate sa o indeplineasca. Dupa acest pas se poate lansa containerul principal optional cu o interfata grafica cu ajutorul comenzii “java jade. mediul distribuit de executie care sta la baza intregii platforme si a instrumentelor.management – implementeaza serviciul pentru gestiunea ciclului de viata al unui agent distribuit − jade.mtp – setul de interfete care trebuie implementate de un MTP JADE.jar – contine codecul Base64 folosit de JADE Pentru lansarea platformei trebuie setata local variabila java CLASSPATH pentru a include referinte spre librariile prezentate mai sus. MTP – uri si instrumentele grafice  jadeTools.event – implementeaza serviciul distribuit de notificare.mobility – implementeaza serviciul pentru mobilitatea agentilor si clonarea acestora.core.3.  jade. 4 .tools – implementarea tuturor instrumentelor grafice JADE  jade.core.content – contine o colectie de clase ce ofera suport pentru programatorii care vor sa creeze si sa foloseasca expresii cu continut complex in legatura cu o ontologie si un limbaj bazat pe continut.core. in care fiecare pachet (in principiu) contine o multime de clase si interfete care implementeaza o anumita functionalitate.  jade.acl – suport pentru FIPA-ACL  jade.Runtime – suport pentru folosirea JADE de alte aplicatii externe.core.core.core – implementeaza kernelul JADE. Acesta faciliteaza entitatilor inregistrate sa fie notificate in legatura cu diferitele evenimente generate de alte entitati ale platformei.imtp – implementare pentru JADE IMTP (protocol de transmitere de mesaje in mediul intern)  jade.jar – contine toate pachetele JADE in afara de clasele auxiliare.Pentru executie JADE are nevoie de clasele existente in librariile aflate in directorul /jade/lib:  jade. jade. − jade.core.

serviciul MTU transmite mesajul respectiv entitatii din cadrul platformei care este de cele mai multe ori un agent. My name is "+getLocalName()).println("Hello. Interfata este similara cu cea din figura 5 . platforma foloseste un protocol de transport proprietar numit IMTP.rma.out.lang. unde Pet este numele agentului reprezentat de numele clasei Java care il implementeaza.Agent.Boot -container -host tehpwnerer Pet:HelloWorldAgent .core. Consola pentru gestiunea platformei Agentul JADE RMA este un instrument ce implementeaza o consola grafica pentru gestiunea sistemului. JADE ofera o consola pentru management-ul sistemului si un set de instrumente grafice. if (msgRx != null) { System.core. import jade.tools. } else { block(). FIPA – pachet ce include IDL (limbaj pentru definirea interfetei) specificat de FIPA pentru MTP bazat pe IIOP.acl. } } }). Instrumente pentru administrare si debugging Pentru a usura complexitatea analizei unui sistem distribuit in care fiecare agent este un thread. In interior.setContent("Hello!").behaviours.out. public class HelloWorldAgent extends Agent { public void setup() { System.println(msgRx). Instrumentul este implementat de clasa jade. ACLMessage msgTx = msgRx. addBehaviour(new CyclicBehaviour() { public void action() { ACLMessage msgRx = receive(). precum si platforma JADE in sine.CyclicBehaviour. Agentul RMA se inregistreaza la AMS pentru a primi informatii despre toate evenimentele ce au loc in cadrul platformei. import jade. Cand se realizeaza o conexiune si se transmite un mesaj cu succes. import jade.ACLMessage. send(msgTx). msgTx. } } Dupa ce am compilat codul agentului putem lansa un container care sa contina agentul de mai sus cu urmatoarea comanda: java jade. Serviciul MTU porneste initial doar pe containerul principal pornindu-se un socket de server ce asculta peste HTTP la un URL specificat pentru conexiuni din partea altor entitati JADE. Se poate totusi activa serviciul MTP ce implementeaza diverse protocoale pe orice container.rma dar in general se lanseaza din linia de comanda cu optiunea -gui . Pentru a analiza aceste instrumente. vom considera un agent HelloWorldAgent cu o functionalitate restransa: de fiecare data cand primeste un mesaj ii afiseaza continutul si trimite inapoi un mesaj ce contine “Hello!”. Serviciul pentru transportul mesajelor JADE implementeaza toate standardele de MTU specificate de FIPA pentru a promova interoperabilitatea intre platforme.createReply().

Dupa ce se alege adaugarea unei platforme cu un AMS AID. Selectarea unui container permite crearea unui nou agent prin specificarea informatiilor prezentate cu ajutorul interfetei de mai jos. cu conditia ca acestea sa intruneasca standardele FIPA. care trebuie sa includa numele si cel putin o adresa de transport valida. Acestea se pot afla indrumand agentul RMA sa incerce sa comunice cu AMS-ul local. Pentru a comunica cu o platforma trebuie introduse informatii despre AMS-ul acesteia (AMS AID). Ciclul de viata al entitatilor din acest arbore se poate controla prin selectarea entitatii respective cu clic dreapta. ca si cum ar fi pe o alta platforma. 6 . RMA poate controla mai multe platforme.urmatoare : Panoul din stanga afiseaza topologia platformei reprezentata de un arbore de containere ale caror frunze sunt agenti. se poate introduce ams si selecta casuta pentru a indica ca nu este un GUID.

Agentul are o interfata similara cu: 7 . iar fiecare mesaj trimis sau primit de entitatile urmarite este reprezentat prin interfata acestui agent.inf cu urmatorul continut: ams inform propose d* Agentul va urmari AMS-ul platformei selectand doar mesajele ACL de tip inform sau propose. Acest intrument este proiectat pentru a analiza conversatiile dintre agenti. Printr-un fisier de configurare 'sniffer.DummyAgent. si toti agentii care au nume ce incepe cu litera d. Pentru un fisier sniffer.DummyAgent Agentul de monitorizare (sniffer agent) Pana acum toate instrumentele au fost proiectate pentru analizarea unui singur agent.inf' aflat in directorul curent se poate configura comportamentul acestui agent si se pot defini filtre si tipuri de mesaje ce sunt dorite a fi analizate.tools. Singurul lui scop este acela de a trimite si a primi mesaje ACL compuse cu ajutorul unei intergere grafice ca cea de mai jos: Acesta se poate lansa cu urmatoarea comanda executata intr-o consola: java jade. Pentru aceasta el se inregistreaza la AMS.Boot myDummy:jade.Agentul pentru teste (DummyAgent) Este un instrument foarte usor de folosit pentru trimiterea stimulilor sub forma de mesaje ACL pentru a testa comportamentul altor agenti. Utilizatorul poate alege apoi sa vada detaliile oricarui mesaj si sa salveze informatiile captate. Utilizatorul poate alege sa analizeze un singur agent sau un grup de agenti.

tools.Sniffer(d*) Agentul de introspectie Daca agentul de monitorizare(sniff) este folosit pentru a analiza conversatiile unei multimi de agenti. Comportamentul agentului poate fi executat pas cu pas adica a metodei action() a unei instante a unei clase Behaviour.Boot mySniffer:jade.sniffer.Agentul poate fi pornit cu urmatoarea linie de comanda (care poate avea si parametrii 'd*'): java jade. acest agent este folosit pentru analiza unui singur agent. Figura urmatoare arata interfata grafica a acestui agent analizand DF: Agentul pentru managementul log-urilor Este un instrument ce simplifica management dinamic si distribuit al facilitatilor de logging furnizand o interfata care permite nivelele de logging ale fiecarei componente JADE sa fie schimbate in timpul 8 . Acest instrument permite controlul asupra ciclului de viata al unui agent si asupra cozilor de mesaje primite si transmise.

inghetare. terminare. Evenimente de tip intern pentru agent care se refera la schimbarea starii comportamentelor agentilor. Agentii interactioneaza cu ENS prin schimbul de mesaje cu AMS. ENS-ul este ilustrat in figura urmatoare: 9 . reluare activitate) si schimbarile in ciclul de viata al containerelor (adaugare. numite evenimente de tip platforma pentru ca implica containerul principal.core. Acest tip de evenimente sunt analizate in general de agentul de introspectie.rularii. Agentul de monitorizare (sniffer) analizeaza in general acest tip de evenimente. Evenimente de tip MTP generate de platforma cand un MTP este de/activat si cand un mesaj este trimis/primit de/de la un MTP.Notification si este lansat implicit in fiecare container. Acestea se refera la schimbarile in ciclul de viata al agentilor (incepere existenta.event. autoritatea de baza a platformei. atunci cand se realizeaza comunicatie intre platforme. De fiecare data cand un eveniment este generat in cadrul unui container. este interceptat de ENS si este directionat catre toti agentii ce s-au inregistrat pentru a primi notificari despre acest fel de eveniment. scoatere). Sunt 4 categorii principale de evenimente: − − − − Evenimente legate de ciclul de viata. Acest agent are o interfata asemanatoare cu urmatoarea: Serviciul de notificare pentru evenimente Serviciul de notificare pentru evenimente (ENS) este un serviciu la nivel de platforma care gestioneaza notificarea distribuita a tuturor evenimentelor generate de fiecare nod al platformei. Evenimente de tip distributie mesaj generate atunci cand se primeste/trimite/ruteaza/posteaza un mesaj ACL intr-o coada de mesaje a unui agent. suspendare. Serviciul este java.

> jade. La initializarea unui agent se executa metode setup(). clasa Agent avand o metoda getAID().Boot -name foo-platform Peter:HelloWorldAgent(arg1 arg2 arg3). Pentru a termina un agent trebuie executata metoda doDelete().behaviours. Clasa AID are metode ce returneaza numele local (getLocalName() ). Putem transmite si parametrii unui agent direct modificand linia de comanda in felul urmator: java -cp <.core. La terminarea executiei unui agent este invocata metoda takeDown(). . Un obiect AID include un nume global unic (GUID) si un numar de adrese. Fiecare clasa Behaviour trebuie sa implementeze doua metode abstracte: action() defineste operatiile ce trebuie efectuate atunci cand agentul se afla in executie. Pentru a face un agent sa execute o sarcina implementata de un obiect Behaviour. GUID-ul (getName() ) si adresele (getAllAddresses() ).core.Behaviour .Programarea cu ajutorul JADE Crearea unui agent JADE se face prin definirea unei clase ce extinde clasa jade. Executia thread-ului unui agent este ilustrata in figura urmatoare: 10 . Numele din jade au forma <nume-local>@<nume-platforma>.AID. Un comportament reprezinta o sarcina pe care un agent trebuie sa o indeplineasca si este implementat ca un obiect al unei clase ce extinde jade.Agent. acesta trebuie sa fie adaugat la clasa agentului prin metoda addBehaviour() . Fiecare agent este identificat de o instanta a clasei jade.core. . De la linia de comanda putem da numai string-uri ca argumente dar din cod putem da orice fel de obiect. Metoda done() returneaza un boolean pentru a indica daca s-a terminat comportamentul respectiv sau nu si urmeaza sa fie scos din multimea de comportamente pe care agentul le executa. Sarcina sau sarcinile concrete pe care un agent le are de indeplinit sunt realizate prin 'comportamente' .

Trimiterea de mesaje spre alti agenti se realizeaza completand campurile unui obiect te tip ACLMessage si apoi apeland metoda send() a agentului cu parametrul reprezentat de mesajul completat. si este trezit atunci cand un comportament devine disponibil pentru executie.Cand nu sunt comportamente disponibile pentru executie. Un agent poate selecta mesaje din coada sa de mesaje executand metoda receive() care returneaza primul mesaj din coada sau null daca nu sunt mesaje. Fiecare agent are “casuta postala” (coada de mesaje) unde JADE plaseaza mesaje trimise de alti agenti si agentul care a primit mesajul este notificat. Acest lucru este ilustrat in urmatoarea figura: 11 . Comunicarea dintre agenti se bazeaza pe trimiterea de mesaje asincrone. Agentul DF implementeaza un serviciu de tip “yellow pages” care permite celorlalti agenti sa publice o lista de servicii pe care le ofera pentru a fi descoperiti mai usor si pentru o mai buna folosire a resurselor. agentul trece in starea sleep pentru a nu comsuma timp CPU.