Sisteme multiagent. Mobilitatea agentilor

download Sisteme multiagent. Mobilitatea agentilor

of 14

Transcript of Sisteme multiagent. Mobilitatea agentilor

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    1/14

    1

    Modelarea i analiza sistemelor multiagentLaboratorul 4

    Mobilitatea agenilor

    1.

    Considerente generale ................................................................................................................... 1

    1.1

    Mobilitatea ntre diferite containere ...................................................................................... 1

    1.2 Mobilitatea indirect.............................................................................................................. 32.

    Exemplificare printr-o aplicaie .................................................................................................... 6

    3. Aplicaii ...................................................................................................................................... 14

    1. Considerente generale

    Mobilitatea unui agent se referla mutarea sau duplicarea (clonarea) acestuia din containerul ncare rezid n alt container de pe aceeai platform. Deplasarea agentului ntre containere se

    realizeaz prin apelul metodei doMove(), care primete ca parametru o instan a claseiContainerID, care conine datele referitoare la containerul destinaie.

    1.1 Mobilitatea ntre diferite containere

    Procesul de mutare al unui agent din containerul curent ntr-un container din aceeai platformse realizeazprintr-un simplu apel al funciei doMove(), ce aparine clasei Agent.

    [C#]

    publ i c cl ass Mobi l eAgent : Agent{

    publ i c over r i de voi d setup(){Consol e. Wr i t eLi ne( "Agent {0} st ar t ed. . . " , get AI D( ) . get Name( ) ) ;doMove( new Cont ai ner I D( "Cont ai ner1", nul l ) ) ;

    }

    publ i c over r i de voi d bef oreMove( ){

    Consol e. Wr i t eLi ne( "Agent {0} began movi ng. . . " , get AI D( ) . get Name( ) ) ;}

    publ i c over r i de voi d af t er Move( ){

    Consol e. Wr i t eLi ne( "Agent {0} f i ni shed movi ng. . . " , get AI D( ) . get Name( ) ) ;}

    }

    [JAVA]

    publ i c cl ass Mobi l eAgent ext ends Agent{

    @Over r i depubl i c voi d setup( ){

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    2/14

    2

    Syst em. out . pr i nt l n( "Agent " + get AI D( ) . get Name( ) + " s tar t ed. . . " ) ;doMove( new Cont ai ner I D( "cont ai ner 1" , nul l ) ) ;

    }

    @Over r i depubl i c voi d bef or eMove( ){

    Syst em. out . pr i nt l n( "Agent " + get AI D( ) . get Name( ) + " began movi ng. . . " ) ;}

    @Over r i depubl i c voi d af t erMove( ){

    Syst em. out . pr i nt l n( "Agent " + get AI D( ) . get Name( ) + " f i ni shed movi ng. . . " ) ;}

    }

    n exemplul de mai sus, agentul se va muta automat n containerul Container1 dup ce va fipornit. Dup cum se poate observa, JADE pune la dispoziie dou metode ce pot fi suprascrisepentru a realiza o serie de funcii necesare operaiilor pe care agentul le are de fcut nainte de aprsi containerul curent, prin metoda beforeMove(), i a operaiilor imediat urmtoare mutrii,cnd agentul se afl deja n noul container, prin metoda afterMove(). Aceste dou metode sunt

    apelate automat de ctre JADE, nainte, respectiv dupce agentul a trecut din starea ACTIVE nstarea TRANSIT, specificciclului de viaal agentului mobil.

    Pe lngmutarea unui agent, JADE pune la dispoziie i funcia doClone() pentru clonarea unuiagent pe un container (poate fi i acelai container). Se vor obine astfel douinstane ale agentului.De asemenea, ca i la mutarea unui agent, avem la dispoziie funciile beforeClone() i afterClone()

    pentru a interpune diferite secvene de cod n procesul de clonare al agentului.

    [C#]

    publ i c cl ass Cl oni ngAgent : Agent{

    publ i c over r i de voi d setup()

    { Consol e. Wr i t eLi ne( "Agent {0} st ar t ed. . . " , get AI D( ) . get Name( ) ) ;Thread. Sl eep( 1000) ;doCl one( new Cont ai ner I D( "Cont ai ner1", nul l ) , "Mobi l eAgent _Cl one") ;

    }

    publ i c over r i de voi d bef or eCl one( ){

    Consol e. Wr i t eLi ne( "Cl oni ng agent {0}. . . " , get AI D( ) . get Name( ) ) ;}

    publ i c over r i de voi d aft erCl one( ){

    Consol e. Wr i t eLi ne( "Cl one {0} r eady. . . " , get AI D( ) . get Name( ) ) ;}

    }

    [JAVA]

    publ i c cl ass Cl oni ngAgent ext ends Agent {

    @Over r i depubl i c voi d setup( ){

    Syst em. out . pr i nt l n( "Agent " + get AI D( ) . get Name( ) + "star t ed. . . " ) ;t ry

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    3/14

    3

    {Thread. sl eep( 1000) ;

    }cat ch( I nt er r upt edExcept i on e) {}doCl one( new Cont ai ner I D( "cont ai ner 1" , nul l ) , "Agent_Cl one") ;

    }

    @Over r i depubl i c voi d bef oreCl one( ){

    Syst em. out . pr i nt l n( "Cl oni ng agent " + get AI D( ) . get Name( ) + " . . . " ) ;}

    @Over r i depubl i c voi d af t er Cl one( ){

    Syst em. out . pr i nt l n( "Cl one " + get AI D( ) . get Name( ) + " ready. . . " ) ;}

    }

    1.2. Mobilitatea indirect

    Mutarea unui agent poate fi fcut i din exteriorul agentului ce urmeaz a fi mutat, folosind

    serviciul AMS (Agent Management Service) din containerul n care se afla agentul (prinintermediul clasei AMSService). Acestuia i se pot trimite mesaje cu un limbaj standardizat (FIPA-SL) prin care sse ceara mutarea unui agent n alt container. Aceastprocedureste simplificat

    prin aciunea move-agent (clasa MoveAction), pentru care se vor specifica numele agentului cetrebuie mutat i destinaia (ContainerID sau PlatformID). n JADE exist mai multe clase de tipAction ce comunicn diverse scopuri cu serviciul AMS, astfel cse recomandfolosirea metodeiurmtoare pentru a stabili ontologia i tipul comunicaiei cu acesta, indiferent de aciunea pe caredorim so executm:

    [C#]

    publ i c cl ass Common

    {/ / sends a r equest t o t he AMS ( Agent Management Ser vi ce)publ i c s tat i c voi d sendRequest ( Agent cal l er , Acti on acti on){

    / / r egi st er s t he ont ol ogy and t he st andard l anguage f or communi cat i ng wi t ht he AMS

    cal l er. get Cont ent Manager ( ) . r egi st erLanguage( new SLCodec( ) ) ;

    cal l er . get Cont ent Manager ( ) . r egi st er Ont ol ogy(Mobi l i t yOnt ol ogy. get I nstance( ) ) ;

    / / Send t he r equest t o the AMSACLMessage r equest = new ACLMessage( ACLMessage. REQUEST) ;r equest . set Language(new SLCodec( ) . get Name( ) ) ;r equest . setOnt ol ogy(Mobi l i t yOnt ol ogy. get I nst ance( ) . get Name( ) ) ;

    t ry{cal l er. get Cont ent Manager ( ) . f i l l Cont ent ( r equest , acti on) ;r equest . addRecei ver ( act i on. get Act or ( ) ) ;cal l er. send( r equest ) ;

    }catch ( Except i on ex){

    Consol e. Wr i t eLi ne( ex. St ackTr ace) ;}

    }

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    4/14

    4

    }

    [JAVA]

    publ i c cl ass Common{

    / / sends a r equest t o t he AMS ( Agent Management Ser vi ce)publ i c s tat i c voi d sendRequest ( Agent cal l er , Acti on acti on){

    / / r egi st ers t he ont ol ogy and t he st andar d l anguage f or communi cati ng wi t ht he AMS

    cal l er . getContentManager( ) . r egi st er Language( new SLCodec( ) ) ;

    cal l er . getContentManager( ) . r egi st er Ont ol ogy( Mobi l i t yOnt ol ogy. get I nst ance( ) ) ;

    / / Send t he r equest t o t he AMSACLMessage r equest = new ACLMessage( ACLMessage. REQUEST) ;r equest . set Language( new SLCodec( ) . get Name( ) ) ;r equest . setOnt ol ogy( Mobi l i t yOnt ol ogy. get I nst ance( ) . get Name( ) ) ;t ry{

    cal l er . getContentManager ( ) . f i l l Cont ent ( r equest , acti on) ;r equest . addRecei ver ( acti on. get Act or( ) ) ;

    cal l er . send( r equest ) ;}catch ( Except i on ex){

    Syst em. out . pr i nt l n( ex. St ackTrace) ;}

    }}

    n continuare, ne vom folosi de metoda sendRequest() pentru a trimite cererea de mutare a unuiagent. Pentru uurin, s-a folosit un agent custom MobilityServiceAgent ce va avea ca unic scopmutarea unui agent:

    [C#]

    publ i c cl ass Mobi l i t yServi ceAgent : Agent{

    pri vat e AI D agent ToMove;

    pr i vat e Cont ai ner I D newCont ai ner ;

    publ i c Mobi l i t ySer vi ceAgent ( AI D AgentToMove, Cont ai ner I D NewCont ai ner ){

    agent ToMove = AgentToMove;newContai ner = NewCont ai ner ;

    }

    publ i c over r i de voi d setup(){base. set up() ;

    addBehavi our ( new Request ToMoveAgent Behavi our( agent ToMove, newCont ai ner ) ) ;

    t akeDown( ) ;}

    }

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    5/14

    5

    publ i c cl ass Request ToMoveAgent Behavi our : OneShot Behavi our{

    pri vat e AI D agent ToMove;

    pr i vat e Cont ai ner I D newCont ai ner ;

    publ i c Request ToMoveAgent Behavi our( AI D AgentToMove, Cont ai ner I D NewCont ai ner ){

    agent ToMove = AgentToMove;

    newContai ner = NewCont ai ner ;}

    publ i c over r i de voi d acti on( ){

    MoveAct i on moveAct i on = new MoveAct i on( ) ;

    Mobi l eAgent Descr i pt i on descr i beMovement = new Mobi l eAgent Descr i pt i on( ) ;descr i beMovement. set Name( agent ToMove) ;descr i beMovement . set Dest i nat i on( newCont ai ner ) ;

    moveAct i on. set Mobi l eAgentDescr i pt i on( descr i beMovement ) ;

    Common. sendRequest ( myAgent , new Acti on( myAgent. getAMS() , moveAct i on) ) ;

    }}

    [JAVA]

    publ i c cl ass Mobi l i t yServi ceAgent ext ends Agent{

    pri vat e AI D agentToMove;

    pr i vat e Cont ai ner I D newContai ner ;

    publ i c Mobi l i t yServi ceAgent ( AI D AgentToMove, Cont ai ner I D NewCont ai ner )

    {agentToMove = AgentToMove;newContai ner = NewCont ai ner ;

    }

    @Over r i depubl i c voi d setup( ){

    super ( ) ;

    addBehavi our( new Request ToMoveAgent Behavi our( agentToMove, newContai ner) ) ;

    t akeDown( ) ;}

    }

    publ i c cl ass Request ToMoveAgent Behavi our ext ends OneShot Behavi our{

    pri vat e AI D agentToMove;

    pr i vat e Cont ai ner I D newContai ner ;

    publ i c Request ToMoveAgent Behavi our( AI D AgentToMove, Cont ai ner I D NewCont ai ner ){

    agentToMove = AgentToMove;

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    6/14

    6

    newContai ner = NewCont ai ner ;}

    @Over r i depubl i c voi d acti on( ){

    MoveAct i on moveAct i on = new MoveAct i on( ) ;

    Mobi l eAgent Descr i pt i on descr i beMovement = new Mobi l eAgent Descr i pt i on( ) ;

    descr i beMovement . set Name( agentToMove) ;descr i beMovement . set Dest i nat i on( newContai ner) ;

    moveAct i on. setMobi l eAgent Descri pt i on( descr i beMovement ) ;

    Common. sendRequest ( myAgent , new Acti on( myAgent . get AMS( ) , moveAct i on) ) ;}

    }

    2. Exemplificare printr-o aplicaie

    Dorim sdezvoltm o aplicaie cu doucontainere care sconindoutipuri de ageni:

    - MonitorAgent, care va conine cte o fereastr(Form, Frame etc.) pentru fiecare container dinsistem

    - MyAgent, ageni ce se vor putea muta ntre containere i care vor trimite MonitorAgent-uluimesaje de informare legate de starea lor curent

    Vor exista 4 ageni de tip MyAgent: Agent0 i Agent1 n primul container, Agent2 i Agent3 ncel de-al doilea. Agent0 i Agent2 se vor putea muta de la un container la altul i vor informaMonitorAgent-ul n acest sens. MonitorAgent-ul va afia n ferestre lista agenilor din fiecarecontainer, precum i diverse mesaje legate de starea i aciunile ntreprinse de ceilali ageni dinsistem.

    Agentul MonitorAgent va implementa urmtoarele comportamente:

    Refresh periodic la cele douferestre ce monitorizeazcontainerele din aplicaie Ateaptmesaje de la ceilali ageni: unde se aflacetia n mod curent, unde doresc s

    se mute, etc.

    Agentul MyAgent va implementa urmtoarele comportamente:

    Agent0 i Agent2 se vor muta periodic de la un container la altul i, de fiecare dat, vortrimite agentului monitor mesaje informative nainte i dupmutare

    Agent1 i Agent3 vor rmne n containerele n care au fost ceai i vor trimite agentuluimonitor cate un mesaj de salut.

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    7/14

    7

    Construim clasa care implementeazMonitorAgent-ul. In metoda setup() se iniializeazdouferestre, care corespund celor doucontainere ntre care se vor muta ceilali ageni.

    [C#]

    publ i c cl ass Moni t orAgent : Agent

    {publ i c stat i c For mContai ner f c1, f c2;

    publ i c over r i de voi d setup(){

    f c1 = new For mContai ner ( ) ;f c1. Text = "Cont ai ner 1M" ;f c1. Locat i on = new Syst em. Dr awi ng. Poi nt ( 100, 100) ;

    f c2 = new For mContai ner ( ) ;f c2. Text = "Cont ai ner 2" ;f c2. Locat i on = new Syst em. Dr awi ng. Poi nt ( 120 + f c1. Wi dt h, 100) ;

    f c1. Show( ) ;

    f c2. Show( ) ;

    f c1. Wr i t e( t hi s. get Local Name( ) + " started" ) ;

    t hi s. addBehavi our ( new Moni t orRef r eshBehavi our ( t hi s, 100) ) ;t hi s. addBehavi our ( new Moni t orRecei veBehavi our ( t hi s) ) ;

    }

    publ i c over r i de voi d t akeDown( ){

    Moni t or Agent . f c1. Wri t e( "Bye f r om " + t hi s. get Local Name( ) ) ;}

    }

    [JAVA]publ i c cl ass Moni t orAgent ext ends Agent {

    publ i c stat i c For mCont ai ner f c1, f c2;

    @Over r i depubl i c voi d setup(){

    f c1 = new For mCont ai ner ( ) ;f c1. set Name( "Cont ai ner 1M") ;f c1. set Ti t l e( "Cont ai ner 1M") ;

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    8/14

    8

    f c1. set Locat i on( 100, 100) ;

    f c2 = new For mCont ai ner ( ) ;f c2. set Name( "Cont ai ner2") ;f c2. set Ti t l e( "Cont ai ner 2" ) ;f c2. set Locat i on( 120 + f c1. get Si ze( ) . wi dt h, 100) ;

    f c1. set Vi si bl e( true) ;f c2. set Vi si bl e( true) ;

    f c1. Wr i t e( t hi s. get Local Name( ) + " started" ) ;

    t hi s. addBehavi our ( new Moni t orRef r eshBehavi our ( thi s, 250) ) ;t hi s. addBehavi our ( new Moni t orRecei veBehavi our ( thi s) ) ;

    }

    @Over r i depubl i c voi d t akeDown( ){

    Moni t or Agent . f c1. Wr i t e( "Bye f r om " + t hi s. get Local Name( ) ) ;}

    }

    MonitorAgent are dou comportamente. Primul realizeaz refresh-ul ferestrelor de afiare. Aldoilea, de tip CyclicBehavior, asteaptmesaje de la ceilalti ageni, care i vor semnala schimbareastrii sau mutarea de la un container la altul. MonitorAgentul va actualiza corespunztor ferestrelecontainerelor, adaugnd/tergnd din liste agenii care sosesc/pleac.

    [C#]

    publ i c cl ass Moni t orRecei veBehavi our : Cycl i cBehavi our{

    publ i c Moni t orRecei veBehavi our ( Agent a ) : base( a) { }

    publ i c over r i de voi d acti on( ){

    ACLMessage message = myAgent . r ecei ve( ) ;

    i f ( message ! = nul l ){

    s t r i ng[ ] msg = message. getCont ent ( ) . Spl i t ( ' | ' ) ;

    swi t ch ( msg[0] ){

    case "Cr eat ed":i f ( msg[ 2] == "Cont ai ner 1M"){

    Moni t orAgent . f c1. AddToLi st ( msg[ 1] ) ;Moni t orAgent . f c1. Wr i t e(msg[1] + " was cr eat ed") ;

    }

    el se i f ( msg[ 2] == "Cont ai ner2"){Moni t orAgent . f c2. AddToLi st ( msg[ 1] ) ;Moni t orAgent . f c2. Wr i t e(msg[1] + " was cr eat ed") ;

    }break;

    case "Di ed" :i f ( msg[ 2] == "Cont ai ner 1M"){

    Moni t orAgent . f c1. RemoveFr omLi st ( msg[1] ) ;

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    9/14

    9

    Moni t orAgent . f c1. Wr i t e(msg[1] + " di ed") ;}el se i f ( msg[ 2] == "Cont ai ner2"){

    Moni t orAgent . f c2. AddToLi st ( msg[ 1] ) ;Moni t orAgent . f c2. Wr i t e(msg[1] + " di ed") ;

    }break;

    case "Movi ng":i f ( msg[ 2] == "Cont ai ner 1M"){

    Moni t orAgent . f c1. Wr i t e(msg[1] + " i s about t o movef r o m" + msg[ 2]) ;

    }el se i f ( msg[ 2] == "Cont ai ner2"){

    Moni t orAgent . f c2. Wr i t e(msg[1] + " i s about t o movef r o m" + msg[ 2]) ;

    }break;

    case "Moved" :

    i f ( msg[ 2] == "Cont ai ner 1M"){Moni t orAgent . f c1. Wr i t e(msg[1] + " has moved t o " +msg[2] ) ;Moni t orAgent . f c2. RemoveFr omLi st ( msg[1] ) ;Moni t orAgent . f c1. AddToLi st ( msg[ 1] ) ;

    }el se i f ( msg[ 2] == "Cont ai ner2"){

    Moni t orAgent . f c2. Wr i t e(msg[1] + " has moved t o " +msg[2] ) ;Moni t orAgent . f c1. RemoveFr omLi st ( msg[1] ) ;Moni t orAgent . f c2. AddToLi st ( msg[ 1] ) ;

    }break;

    case "Hel l o" :i f ( msg[ 2] == "Cont ai ner 1M"){

    Moni t orAgent . f c1. Wr i t e(msg[1] + " says hel l o f r om " + msg[ 2]) ;

    }el se i f ( msg[ 2] == "Cont ai ner2"){

    Moni t orAgent . f c2. Wr i t e(msg[1] + " says hel l o f r om " + msg[ 2]) ;

    }break;

    }

    }

    t hi s. bl ock( ) ;}

    }

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    10/14

    10

    [JAVA]

    publ i c cl ass Moni t orRecei veBehavi our ext ends Cycl i cBehavi our {

    publ i c Moni t orRecei veBehavi our ( Agent a) {super ( a) ;

    }

    @Over r i depubl i c voi d acti on( ) {ACLMessage message = myAgent . r ecei ve( ) ;

    i f ( message ! = nul l ) {St r i ng[ ] msg = message. getCont ent ( ) . spl i t ( " \ \ | ") ;swi t ch ( msg[0] ) {

    case "Cr eat ed":i f ( msg[2] . equal s( "Cont ai ner 1M")) {

    Moni t or Agent . f c1. AddToLi st ( msg[ 1] ) ;Moni t orAgent . f c1. Wr i t e( msg[1] + " was cr eat ed" ) ;

    } el se i f ( msg[2] . equal s( "Cont ai ner2")) {Moni t or Agent . f c2. AddToLi st ( msg[ 1] ) ;Moni t orAgent . f c2. Wr i t e( msg[1] + " was cr eat ed" ) ;

    }

    break;

    case "Di ed" :i f ( msg[2] . equal s( "Cont ai ner 1M")) {

    Moni t orAgent. f c1. RemoveFr omLi st ( msg[ 1] ) ;Moni t orAgent . f c1. Wr i t e( msg[1] + " di ed" ) ;

    } el se i f ( msg[2] . equal s( "Cont ai ner2")) {Moni t or Agent . f c2. AddToLi st ( msg[ 1] ) ;Moni t orAgent . f c2. Wr i t e( msg[1] + " di ed" ) ;

    }break;

    case "Movi ng" :i f ( msg[2] . equal s( "Cont ai ner 1M")) {

    Moni t orAgent . f c1. Wr i t e( msg[1] + " i s about t o move f r om" + msg[ 2] ) ;

    } el se i f ( msg[2] . equal s( "Cont ai ner2")) {Moni t orAgent . f c2. Wr i t e( msg[1] + " i s about t o move f r om

    " + msg[ 2] ) ;}break;

    case "Moved" :i f ( msg[2] . equal s( "Cont ai ner 1M")) {

    Moni t orAgent . f c1. Wr i t e( msg[1] + " has moved t o " +msg[2] ) ;

    Moni t orAgent. f c2. RemoveFromLi st ( msg[ 1] ) ;Moni t or Agent . f c1. AddToLi st ( msg[ 1] ) ;

    } el se i f ( msg[2] . equal s( "Cont ai ner2")) {Moni t orAgent . f c2. Wr i t e( msg[1] + " has moved t o " +msg[2] ) ;

    Moni t orAgent. f c1. RemoveFromLi st ( msg[ 1] ) ;Moni t or Agent . f c2. AddToLi st ( msg[ 1] ) ;

    }break;

    case "Hel l o" :i f ( msg[2] . equal s( "Cont ai ner 1M")) {

    Moni t orAgent . f c1. Wr i t e( msg[1] + " says hel l o f r om " +

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    11/14

    11

    msg[2] ) ;} el se i f ( msg[2] . equal s( "Cont ai ner2")) {

    Moni t orAgent . f c2. Wr i t e( msg[1] + " says hel l o f r om " +msg[2] ) ;

    }break;

    }

    } el se {

    t hi s. bl ock( ) ;}

    }}

    Construim clasa care va implementa agentul MyAgent. Agenii de acest tip vor comunicaMonitorAgentului locaia i starea lor. Unii dintre aceti ageni (Agent0 i Agent2) se vor puteamuta ntre cele doucontainere:

    [C#]

    publ i c cl ass MyAgent : Agent{

    publ i c st r i ng l ocal host;

    publ i c voi d sendToMoni t orAgent ( s t r i ng messageCont ent s){

    ACLMessage m = new ACLMessage( ) ;m. addRecei ver ( new AI D( "MonAgent @" + l ocal host + " : 1090/ J ADE",

    AI D. I SGUI D) ) ;m. set Cont ent ( messageCont ent s) ;send( m) ;

    }

    publ i c over r i de voi d setup(){

    s t r i ng st r Host Name = Dns. GetHost Name( ) ;I PHost Ent r y i pEnt r y = Dns. Get Host ByName( st r Host Name) ;

    I PAddress[ ] addr = i pEnt r y. Addr essLi st ;l ocal host = addr [ 0] . ToSt r i ng( ) ;

    sendToMoni t orAgent ( "Cr eat ed| " + getLocal Name( ) + "| " +her e( ) . get Name( ) ) ;

    addBehavi our ( new MySendBehavi our ( t hi s) ) ;

    i f ( t hi s. get Local Name( ) == "Agent0"){

    t hi s. addBehavi our ( new MyMoveBehavi our ( thi s, 3000) ) ;}

    i f ( t hi s. get Local Name( ) == "Agent2"){

    t hi s. addBehavi our ( new MyMoveBehavi our ( thi s, 5000) ) ;}

    }

    publ i c over r i de voi d t akeDown( ){

    sendToMoni t orAgent ( "Di ed| " + get Local Name( ) + "| " +her e( ) . get Name( ) ) ;

    }

    publ i c over r i de voi d bef oreMove( )

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    12/14

    12

    {sendToMoni t orAgent ( "Movi ng| " + get Local Name( ) + " | " +

    her e( ) . get Name( ) ) ;}

    publ i c over r i de voi d af t erMove(){

    sendToMoni t orAgent ( "Moved| " + getLocal Name( ) + " | " +her e( ) . get Name( ) ) ;

    }}

    [JAVA]

    publ i c cl ass MyAgent ext ends Agent {

    publ i c St r i ng l ocal host;

    publ i c voi d sendToMoni t orAgent ( St r i ng messageCont ent s) {ACLMessage m = new ACLMessage( ) ;m. addRecei ver ( new AI D( "MonAgent @" + l ocal host + ": 1090/ J ADE" ,

    AI D. I SGUI D) ) ;m. set Cont ent ( messageCont ent s) ;send( m) ;

    }

    @Over r i depubl i c voi d setup( ) {

    I net Address[ ] addr = nul l ;t r y {

    addr =I netAddr ess. get Al l ByName( I net Addr ess. getLocal Host ( ) . get HostName( ) ) ;

    } cat ch ( UnknownHost Except i on ex) {Logger . get Logger ( MyAgent . cl ass. get Name() ) . l og( Level . SEVERE, nul l ,

    ex) ;}St r i ng[ ] add = addr [ 0] . t oSt ri ng( ) . spl i t ( " / " ) ;

    l ocal host = add[ 1] ;

    sendToMoni t or Agent ( "Cr eat ed| " + get Local Name( ) + " | " +her e( ) . get Name( ) ) ;

    addBehavi our ( new MySendBehavi our( t hi s) ) ;

    i f ( t hi s. getLocal Name() . equal s( "Agent0")) {t hi s. addBehavi our ( new MyMoveBehavi our ( t hi s, 3000) ) ;

    }

    i f ( t hi s. getLocal Name() . equal s( "Agent2")) {t hi s. addBehavi our ( new MyMoveBehavi our ( t hi s, 5000) ) ;

    }

    }

    @Over r i depubl i c voi d t akeDown( ) {

    sendToMoni t or Agent ( "Di ed| " + getLocal Name( ) + "| " + her e( ) . get Name( ) ) ;}

    @Over r i depubl i c voi d bef oreMove( ) {

    sendToMoni t or Agent ( "Movi ng| " + getLocal Name( ) + "| " + her e() . getName( ) ) ;

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    13/14

    13

    }

    @Over r i depubl i c voi d af t er Move() {

    sendToMoni t or Agent ( "Moved| " + get Local Name( ) + " | " + here( ) . getName() ) ;}

    }

    Unii ageni se vor putea muta de la un container la altul la anumite intervale, fapt definit prinintermediul urmtorului comportament:

    [C#]

    publ i c cl ass MyMoveBehavi our : Ti cker Behavi our{

    pri vat e i nt _i t er = 8;

    publ i c MyMoveBehavi our ( Agent a, l ong per i od) : base( a, per i od) { }

    publ i c over r i de voi d onTi ck( ){

    i f ( - - _ i t er > 0){i f ( myAgent . her e( ) . get Name( ) == "Cont ai ner 1M")

    myAgent . doMove( new Cont ai ner I D( "Cont ai ner2", nul l ) ) ;el se

    myAgent . doMove( new Cont ai ner I D( "Cont ai ner 1M", nul l ) ) ;}el se

    bl ock() ;}

    }

    [JAVA]

    publ i c cl ass MyMoveBehavi our extends Ti cker Behavi our {

    pr i vat e i nt _i t er = 8;

    publ i c MyMoveBehavi our ( Agent a, l ong per i od){

    super ( a, per i od) ;}

    @Over r i depubl i c voi d onTi ck( ){

    i f ( - - _ i t er > 0){

    i f ( myAgent . her e( ) . getName() . equal s( "Cont ai ner 1M")) {myAgent . doMove( new Cont ai nerI D( "Cont ai ner2", nul l ) ) ;

    }el se {

    myAgent . doMove( new Cont ai nerI D( "Cont ai ner 1M" , nul l ) ) ;}

    }el se {

    bl ock( ) ;}

    }}

    Modelarea si analiza sistemelor multi-agent - Laboratorhttp://florinleon.byethost24.com/lab_masma.htm

  • 7/30/2019 Sisteme multiagent. Mobilitatea agentilor

    14/14

    14

    3. Aplicaii

    3.1.Sse creeze doucontainere, primul container sconindoi ageni:

    un agent (DisplayAgent) n containerul principal care afiseazinformaiile primite de laali ageni ntr-o fereastrwindows

    un agent mobil ReadFileMobileAgent n containerul principal care citete o list de

    preuri de produse dintr-un fiier i le transmite apoi la agentul DisplayAgent.

    Containerul secundar s coninun agent FilePathInfoAgent care tie din ce fiier trebuiecitite informaiile cu lista de produse.

    Implementai urmtorul comportament: agentul ReadFileMobileAgent se va muta ncointainerul secundar i va cere agentului FilePathInfoAgent (prin intermediul mesajelor) locaian care se aflfiierul cu lista de produse i va trimite aceastlistla agentul DisplayAgent.

    3.2Sse creeze o aplicaie cu mai multe containere, n care iniial sexiste un numr inegal de

    ageni. Creai un alt tip de agent (DistributorAgent) care sredistribuie agenii astfel nct ei sfieuniform repartizai n fiecare container.Pe msur ce agenii obinuii intr n sistem, ei vor trimite mesaje ctre DistributorAgent n

    care se vor identifica. DistributorAgent va ine evidena pe containere a agenilor i le va trimitemesaje n care le va solicita sse mute, astfel nct containerele sfie echilibrate.