Documente Academic
Documente Profesional
Documente Cultură
Probabil cea mai mare diferen ntre programarea tradiional orientat pe obiect i cea bazat pe agent este libertatea unui agent de a rspunde la o cerere. Atunci cnd un obiect primete un mesaj, adic una dintre metodele sale este apelat, fluxul de control se mut n mod automat la acea metod. Atunci cnd un agent primete un mesaj, acesta poate decide dac trebuie s acioneze 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 aplicaiilor distribuite multi-agent, conform specificaiilor FIPA (Foundation of Inteligent Physical Agent). Framework-ul a fost dezvoltat de ctre CSELT (Centro Studi e Laboratori Telecommunicazioni, cunoscut i ca Telecomm Italia Lab) mpreun cu Computer Engineering Group de la Universitatea din Parma. Creat iniial n Java, JADE a fost portat n .NET compilndu-se cu ANT (un utilitar de tip Makefile ce folosete ca intrare fisiere XML). Pentru a putea crea ageni JADE, n proiectul .NET trebuie adugate ca referin assembly-ul obinut n urma compilrii 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 conin cod, surse neactualizate pe site,
instruciuni 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 ntmpin greuti n compilare, dezvoltare sau rulare sunt ndemnai s caute soluii 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, seciunea Community & developers). Se recomand folosirea la compilare a versiunii .NET Framework 2.0 i nu 1.1 pentru performane superioare.
Rularea platformei JADE / LEAP n mediul de dezvoltare Visual Studio implic o serie de pai: Crearea unui nou proiect C# sau VB .NET cu specificaia c varianta framework-ului proiectului este recomandat s coincid cu cea cu ajutorul creia s-a compilat biblioteca JadeLeap.dll; Adugarea referinelor ctre JadeLeap.dll i vjslib.dll (categoria .NET bibliotec provenit din instalarea Visual J# Redistributable 1.1.4233).
[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 adugate ca referine 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); } }
[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()); } }
unde AgentSimplu este numele agentului. Dac dorim lansarea mai multor ageni vom modifica ultima linie a fiierului de mai sus astfel:
agents = Agent1:Lab1Example1.SimpleAgent; Agent2:Lab1Example1.SimpleAgent; Agent3:Lab1Example1.SimpleAgent (last:true);
Se vor lansa astfel n paralel 3 ageni 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 aduga secvene de cod pentru a marca i anuna 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() + " // wait 3 seconds Thread.Sleep(3000); // delete agent doDelete(); } public override void takeDown() { Console.WriteLine("Agent " + getAID().getName() + " } }
has started...");
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.
6 Modelarea si analiza sistemelor multi-agent - Laborator http://florinleon.byethost24.com/lab_masma.htm
3. Aplicaii
3.1. S se creeze un agent care s numere de la 1 la 100, cu o pauz de jumtate de secund ntre dou numere succesive. La fiecare incrementare, agentul va afia 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 ageni care s fac aceeai operaie ca la problema 1. Setai un interval aleatoriu pentru fiecare agent ntre 0,5 i 5 secunde pe care agentul l ateapt nainte de a trece la urmtorul numr. Observai cum agenii lucreaz n paralel. 3.3. S se creeze 2 ageni 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]