Studiu privind activitatea de creditare bancara a agentilor economici
Sisteme multiagent. Mobilitatea agentilor
-
Upload
enrollinfo -
Category
Documents
-
view
218 -
download
0
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.