Sisteme multiagent. Platforma JADE. Crearea statica a agentilor
Click here to load reader
-
Upload
enrollinfo -
Category
Documents
-
view
255 -
download
2
description
Transcript of Sisteme multiagent. Platforma JADE. Crearea statica a agentilor
1
Modelarea şi analiza sistemelor multi-agent Laboratorul 1
Platforma JADE. Crearea statică a agenţilor
1. Prezentarea arhitecturii generale JADE 1.1. Platforma Jade pentru aplicaţii distribuite multi-agent 1.2. Componentele platformei JADE
2. Crearea statică a agenţilor 3. Aplicaţii
1. Prezentarea arhitecturii generale JADE 1.1. Platforma JADE pentru aplicaţii distribuite multi-agent
Un agent este un sistem situat în mediul său de execuţie şi care este capabil de acţiuni autonome în
scopul de a îndeplini obiectivele pentru care a fost proiectat. Agenţii inteligenţi păstrează
proprietăţile agenţilor autonomi şi, în plus, prezintă un comportament flexibil, caracterizat prin:
reactivitate: capacitatea de a percepe propriul mediu şi de a răspunde în timp util la
schimbările care apar în acesta;
pro-activitate: capacitatea de a expune un comportament orientat spre scop prin preluarea
iniţiativei;
capacitatea socială de a interacţiona cu alţi agenţi şi, eventual, cu utilizatori umani.
Probabil cea mai mare diferenţă între programarea tradiţională orientată pe obiect şi cea bazată pe
agent este libertatea unui agent de a răspunde la o cerere. Atunci când un obiect primeşte un mesaj,
adică una dintre metodele sale este apelată, fluxul de control se mută în mod automat la acea
metodă. Atunci când un agent primeşte un mesaj, acesta poate decide dacă trebuie să acţioneze
conform acestuia sau nu.
Din cauza caracteristicilor distribuite, autonome şi de cooperare, proiectarea şi implementarea
algoritmilor într-o platfromă multiagent ridică o serie diferită de probleme faţă de cele generate de
proiectarea şi implementarea într-un mediu orientat pe obiect.
JADE (Java Agent Development Framework) este o platformă care facilitează dezvoltarea
aplicaţiilor distribuite multi-agent, conform specificaţiilor FIPA (Foundation of Inteligent Physical
Agent). Framework-ul a fost dezvoltat de către CSELT (Centro Studi e Laboratori
Telecommunicazioni, cunoscut şi ca Telecomm Italia Lab) împreună cu Computer Engineering
Group de la Universitatea din Parma.
Creat iniţial în Java, JADE a fost portat în .NET compilându-se cu ANT (un utilitar de tip Makefile
ce foloseşte ca intrare fisiere XML). Pentru a putea crea agenţi JADE, în proiectul .NET trebuie
adăugate ca referinţă assembly-ul obţinut în urma compilării cu ANT şi biblioteca vjslib.dll.
JADE este un proiect cu o dinamică extraordinară şi suferă de problemele pe care orice proiect le
are la început (cod sursă mult şi nedocumentat, clase care nu conţin cod, surse neactualizate pe site,
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm
2
instrucţiuni care nu se potrivesc pentru toate versiunile, add-on-uri ce nu sunt compatibile cu
anumite versiuni, etc.).
Pentru evitarea pierderii inutile de timp, cei ce întâmpină greutăţi în compilare, dezvoltare sau
rulare sunt îndemnaţi să caute soluţii ale acestor probleme inerente cu ajutorul celor ce lucrează la
acest proiect prin mailing-list-ul developer-ilor JADE / LEAP (înregistrarea se face pe site-ul
http://jade.tilab.com, secţiunea Community & developers).
Se recomandă folosirea la compilare a versiunii .NET Framework 2.0 şi nu 1.1 pentru performanţe
superioare.
1.2. Componentele platformei JADE
Platforma JADE a devenit unul dintre cele mai populare software middleware orientate agent. Este
un sistem complet distribuit cu o infrastructură flexibilă, având scopul de a facilita dezvoltarea de
aplicaţii complet bazate pe agent prin intermediul unui mediu run-time ce implementează
caracteristicile care stau la baza ciclului de viaţă solicitate de agenţi, precum şi logica de bază a
agenţilor înşişi.
FIPA (Foundation for Intelligent Physical Agents) este o organizaţie având standardele IEEE
Computer Society, care promovează tehnologia bazată pe agent şi interoperabilitatea propriilor
standarde cu alte tehnologii. Standardul FIPA se bazează pe principiul că ar trebui specificat numai
comportamentul extern al componentelor sistemului, lăsând arhitectura internă şi detaliile de
implementare dezvoltatorilor de platforme individuale. Acest lucru asigură interoperarea între
platforme conforme.
Platforma JADE oferă compatibilitate completă cu specificaţiile FIPA (comunicare, management şi
de arhitectură), care oferă cadrul în care agenţii pot exista, opera şi comunica, în timp ce adoptă o
arhitectura internă unică şi implementarea serviciilor de agent cheie.
JADE conţine, pe lângă biblioteca de clase pentru dezvoltarea şi manipularea agenţilor, un runtime
environment ce trebuie activat pentru a putea lansa agenţii în execuţie. Fiecare instanţă a acestui
runtime environment este numită Container. Fiecare container poate conţine mai mulţi agenţi. Toate
containerele active formează o Platformă, în care trebuie să existe obligatoriu un singur container
special numit Main Container.
JADE este o platformă de dezvoltare a agenţilor inteligenţi, cu o arhitectură modulară, bazată pe
locaţii în care agenţii pot rula. În figura 1 este prezentată arhitectura platformei JADE. Din această
figură se pot trage următoarele concluzii:
Un Agent poate rula numai într-un Container (fie el principal – MainContainer – sau nu –
Container);
Un Container poate să conţină niciun Agent, un Agent sau mai mulţi agenţi;
Un Container poate aparţine unui singure platforme (Platform);
Fiecare Platformă trebuie să conţină exact un container principal (MainContainer);
Un Computer poate să găzduiască unul sau mai multe Containere ale aceleiaşi Platforme;
Un Computer poate să găzduiască una sau mai multe Platforme.
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm
3
Rularea platformei JADE / LEAP în mediul de dezvoltare Visual Studio implică o serie de paşi:
Crearea unui nou proiect C# sau VB .NET cu specificaţia că varianta framework-ului
proiectului este recomandată să coincidă cu cea cu ajutorul căreia s-a compilat biblioteca
JadeLeap.dll;
Adăugarea referinţelor către JadeLeap.dll şi vjslib.dll (categoria .NET – bibliotecă provenită
din instalarea Visual J# Redistributable 1.1.4233).
Figura 1. Arhitectura platformei JADE
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm
4
2. Crearea statică a agenţilor
Pentru a lansa în execuţie agenţii JADE trebuie executaţi următorii paşi:
1. [C#] Includerea în directorul executabilului aplicaţiei a unui fişier text de
configurare numit "leap.properties" care să conţină următoarele linii:
main = mainURL = icp = agents =
[JAVA] Nu este necesar un astfel de fisier, agentii se vor specifica folosind
argumentele liniei de comandă.
2. Scrierea codului sursă pentru crearea unui container principal:
[C#]
class Program
{
static void Main(string[] args)
{
Profile p = new ProfileImpl("leap.properties");
Runtime rt = Runtime.instance();
jade.wrapper.AgentContainer mc = rt.createMainContainer(p);
}
}
Trebuie adăugate ca referinţe la proiect assembly-urile: JadeLeap.dll (de pe hard disk - Browse)
şi vjslib.dll (din lista .NET).
[JAVA]
public class Lab1Ex1Java
{
public static void main(String args[])
{
Profile p = new ProfileImpl();
Runtime rt = Runtime.instance();
jade.wrapper.AgentContainer mc = rt.createMainContainer(p);
}
}
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm
5
3. Implementarea agentului propriu-zis:
[C#]
class SimpleAgent : Agent
{
public override void setup()
{
Console.WriteLine("Hello, I'm " + getLocalName() + " and I'm
living in " + this.getContainerController().getContainerName() +
"\n");
}
}
[JAVA]
public class SimpleAgent extends Agent
{
@Override
public void setup()
{
System.out.println("Hello, I'm " + getLocalName() + " and I'm
living in " + this.getContainerController().getName());
}
}
Pentru a crea şi lansa un agent de tipul SimpleAgent:
[C#]
Fişierul “leap.properties” trebuie modificat astfel:
main = mainURL = icp = agents = Agent1:Lab1Example1.SimpleAgent(last:true);
unde AgentSimplu este numele agentului. Dacă dorim lansarea mai multor agenţi vom modifica
ultima linie a fişierului de mai sus astfel:
agents = Agent1:Lab1Example1.SimpleAgent; Agent2:Lab1Example1.SimpleAgent; Agent3:Lab1Example1.SimpleAgent (last:true);
Observaţie! După ";" nu se foloseşte enter.
[JAVA]
Agentii se specifică utilizând argumentele liniei de comandă:
-agents "Agent1:lab1ex1java.SimpleAgent; Agent2:lab1ex1java.SimpleAgent;
Agent3:lab1ex1java.SelfDestructAgent"
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm
6
Se vor lansa astfel în paralel 3 agenţi cu numele de mai sus.
Pentru a elimina un agent, vom apela metoda doDelete() din cadrul agentului. Acesta va fi oprit şi
va fi şters din containerul din care face parte. Se pot adăuga secvenţe de cod pentru a marca şi
anunţa distrugerea acestuia suprascriind metoda takeDown() din clasa Agent, aceasta fiind apelată
automat înaintea opririi agentului.
[C#] class SelfDestructAgent : Agent
{
public override void setup()
{
Console.WriteLine("Agent " + getAID().getName() + " has started...");
// wait 3 seconds
Thread.Sleep(3000);
// delete agent
doDelete();
}
public override void takeDown()
{
Console.WriteLine("Agent " + getAID().getName() + " is being removed...");
}
}
[JAVA] public class SelfDestructAgent extends Agent
{
@Override
public void setup()
{
System.out.println("Agent " + getAID().getName() + " has started");
try
{
Thread.sleep(3000);
}catch(InterruptedException e)
{
}
doDelete();
}
@Override
public void takeDown()
{
System.out.println("Agent " + getAID().getName() + " is being removed");
}
}
Rularea exemplelor din laborator va conduce la un rezultat de tipul celui din figura 2.
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm
7
Figura 2. Exemplu de rulare
3. Aplicaţii
3.1. Să se creeze un agent care să numere de la 1 la 100, cu o pauză de jumătate de secundă între
două numere succesive. La fiecare incrementare, agentul va afişa la consolă valoarea la care a ajuns
printr-un mesaj:
Eu, agentul [nume agent], am numarat pana la [valoarea la care a ajuns]
3.2. Să se creeze 4 agenţi care să facă aceeaşi operaţie ca la problema 1. Setaţi un interval aleatoriu
pentru fiecare agent între 0,5 şi 5 secunde pe care agentul îl aşteaptă înainte de a trece la următorul
număr. Observaţi cum agenţii lucrează în paralel.
3.3. Să se creeze 2 agenţi care să calculeze suma, respectiv media aritmetică, pentru 10000 de
numere generate aleatoriu în intervalul [1, 10]. Fiecare agent, după ce a prelucrat 100 de numere,
trebuie să informeze utilizatorul printr-un mesaj pe ecran:
Eu, agentul [nume agent], am prelucrat [numarul de numere prelucrate] si am
obtinut pana acum rezultatul partial [valoare partiala]
Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm