Systemy wieloagentowe (MAS) zasady tworzenia systemów wieloagentowych za pomocą technologii MASE i JADEczęść 1 http://www.multiagent.com Autor: Zofia Kruczkiewicz 2010-11-24 Systemy wieloagentowe 1
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki JADE Zastosowanie inżynierii odwrotnej do wykazania spójności modeli projektowego i implementacji Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS przykład1 Zastosowanie techniki JADE do implementacji przykładowego MAS przykład 1 Zakończenie 2010-11-24 Systemy wieloagentowe 2
Struktura prezentacji Wprowadzenie do MAS 2010-11-24 Systemy wieloagentowe 3
Przykłady narzędzi do tworzenia MAS AgentBuilder AgenTalk AgentTool Agent Building Environment Agent Development Environment Agentx Aglets Concordia DirectIA SDK Gossip Grasshopper Infosleuth igen Intelligent Agent Factory Intelligent Agent Library JACK Intelligent Agents JADE Jumping Beans Engineering Kafka LiveAgent Microsoft Agent Swarm Versatile Intelligent Agents (VIA) Voyager 2010-11-24 Systemy wieloagentowe 4
Techniki tworzenia MAS 2010-11-24 Systemy wieloagentowe 5
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki MASE 2010-11-24 Systemy wieloagentowe 6
Hierarchia celów Początkowy kontekst systemu Określenia celów Przypadki użycia (Use Cases) Diagramy sekwencji Określenia przypadków użycia Analiza Zadania współbieżne Role Klasy agentów Udoskonalanie ról Tworzenie klas agentów Konwersacje Diagramy wdrożenia Architektura agentów Konstruowanie konwersacji Grupowanie klas agentów Projektowanie systemu Projekt 2010-11-24 Systemy wieloagentowe 7
Proces transformacji modelu ról (analizy) do modelu projektowego 2010-11-24 Systemy wieloagentowe 8
2010-11-24 Systemy wieloagentowe 9
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki MASE Charakterystyka techniki JADE 2010-11-24 Systemy wieloagentowe 10
Infrastruktura fizyczna MAS System JADE oparty na specyfikacji FIPA Agent Platforma Agenta (AP) System Zarządzania Agentami (AMS) Katalog Usług (DF) RMI System transportu wiadomości (MTS) IIOP, HTPP System transportu wiadomości (MTS) Platforma Agenta (AP) 2010-11-24 Systemy wieloagentowe 11
Rozproszona AP w systemie JADE 2010-11-24 Systemy wieloagentowe 12
MAS mobilny (3 komputery) Agent Platform Host 1 Main Container AMS DF Manager Host 2 Host 3 Searcher 1 Container 1 Container 2 domove() domove() Container 3 Searcher 2 Container 4 MySQL Server MySQL Server 2010-11-24 Systemy wieloagentowe 13
2010-11-24 Systemy wieloagentowe 14
2010-11-24 Systemy wieloagentowe 15
2010-11-24 Systemy wieloagentowe 16
2010-11-24 Systemy wieloagentowe 17
Środowisko graficzne JADE 2010-11-24 Systemy wieloagentowe 18
2010-11-24 Systemy wieloagentowe 19
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki MASE Charakterystyka techniki JADE Zastosowanie inżynierii odwrotnej do wykazania spójności modeli projektowego i implementacji 2010-11-24 Systemy wieloagentowe 20
MASE (1) Klasa agenta - odwzorowanie (1) Komponenty agenta - odwzorowanie (2) ConversationI_1 2010-11-24 Systemy wieloagentowe 21 Konwersacje typu proste zdarzenia komunikacyjne typu nadawanie lub odbiór wiadomości - odwzorowanie (3)
JADE (1) Klasa agenta - odwzorowanie (1) ^send1_4 Przekształcenie komponentów do obiektów typu Behaviour - odwzorowanie(2) Odwzorowanie zbioru zdarzeń komunikacyjnych typu nadawanie lub odbiór do zbioru metod nadawania i odbioru odwzorowanie (3) 2010-11-24 Systemy wieloagentowe 22
MASE (2) Klasa agenta - odwzorowanie (1) Komponenty agenta odwzorowanie (2) ConversationI_1 Proste zdarzenia komunikacyjne typu nadawanie lub odbiór wiadomości - odwzorowanie (5) 2010-11-24 Systemy wieloagentowe 23 Rys.5. Model Agenta MASE Konwersacja opisana złożonym diagramem stanu odwzorowanie (4) Konwersacje typu proste zdarzenia komunikacyjne typu nadawanie lub odbiór wiadomości (3)
JADE (2) Klasa agenta - odwzorowanie (1) Przekształcenie komponentów do obiektów typu Behaviour odwzorowanie (2) Odwzorowanie złożonej konwersacji do klasy typu Behaviours odwzorowania (4) oraz odwzorowania zbioru zdarzeń komunikacyjnych typu nadawanie lub odbiór do zbioru metod nadawania i Odwzorowanie zbioru zdarzeń komunikacyjnych typu nadawanie lub odbiór do zbioru metod nadawania i odbioru odwzorowanie (3) odbioru odwzorowanie (5) 2010-11-24 Systemy wieloagentowe 24 Rys. 6. Model agenta JADE
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki MASE Charakterystyka techniki JADE Zastosowanie inżynierii odwrotnej do wykazania spójności modelu projektowego i implementacji Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS przykład1 2010-11-24 Systemy wieloagentowe 25
MASE- aplikacja Client-Seller Sprzedaz1MASE przykład 1 sprzedaz1-v1.83.maml Analiza 2010-11-24 Systemy wieloagentowe 26
Diagram celów 2010-11-24 Systemy wieloagentowe 27
Diagram ról aplikacji Client-Seller 2010-11-24 Systemy wieloagentowe 28
Diagram przypadku użycia 2010-11-24 Systemy wieloagentowe 29
Diagram sekwencji - scenariusz przypadku użycia 2010-11-24 Systemy wieloagentowe 30
Diagramy zadań roli Client 2010-11-24 Systemy wieloagentowe 31
Diagramy zadań roli Seller 2010-11-24 Systemy wieloagentowe 32
MASE- aplikacja Client-Seller Sprzedaz1MASE przykład 1 sprzedaz1-v1.83.maml Projekt 2010-11-24 Systemy wieloagentowe 33
Diagram agentów z przydziałem ról systemu jako element projektu Diagram agentów z przydziałem ról systemu jako element projektu 2010-11-24 Systemy wieloagentowe 34
Komponenty agenta ClientAgent 2010-11-24 Systemy wieloagentowe 35
Komponenty agenta SellerAgent 2010-11-24 Systemy wieloagentowe 36
Połówka konwersacji nadawczej agent Client wysyła zapytanie o ofertę Połówka konwersacji odbiorczej agent Seller odbiera zapytanie o ofertę Połówka konwersacji nadawczej agent Seller wysyła ofertę Połówka konwersacji odbiorczej agent Client odbiera ofertę 2010-11-24 Systemy wieloagentowe 37
Informacja o weryfikacji protokołów komunikacjina etapie projektowania Języki formalne i narzędzia do automatycznej weryfikacji systemów komunikacji 1. Procesy Sekwencyjnej Komunikacji (CSP Communicating Sequential Processes 1978 r. C.A.R.Hoare) 2. Usuwanie Błędów Rozbieżności (FDR2-Failure-Divergence Refinement 2 1997 r.) 3. Rachunek Systemów Komunikacyjnych (CCS-Calculus of Communicating Systems 1972 r.) 4. Równoległe Narzędzie Pracy (CWB-Concurency WorkBench 1998 r.) 5. Meta Język Procesów (Promela Process Meta Language 1997 r.: konwersacje są modelowane jako procesy, ścieżki konwersacji jako kanały, testowane są zmienne i parametry konwersacji) 6. Spin Spin jest narzędziem automatycznej weryfikacji opracowanym przez Bell Labs, opartym na języku modelowania Promela. Jest on przeznaczony do weryfikacji oprogramowania systemów rozproszonych i protokołów komunikacyjnych (1997). Spin wykrywa: blokadę (deadlock) wstrzymanie (livelock) warunki naruszania przebiegu komunikacji inne błędy komunikacji Spin wspiera komunikację: synchroniczną asynchroniczną zastosowanie kanałów do przesyłania komunikatów i buforów kanałów (rozmiar bufora równy 0 oznacza komunikację synchroniczną) Spin umożliwia różne typy symulacji: losową sterowaną 2010-11-24 Systemy wieloagentowe 38 i określa warunki występowania błędów.
Testowanie protokołu komunikacji przed procesem implementacji za pomocą narzędzia Spin 2010-11-24 Systemy wieloagentowe 39
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki MASE Charakterystyka techniki JADE Zastosowanie inżynierii odwrotnej do wykazania spójności modelu projektowego i implementacji Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS przykład1 Zastosowanie techniki JADE do implementacji przykładowego MAS przykład1 2010-11-24 Systemy wieloagentowe 40
Diagram klas jako efekt inżynierii odwrotnej dla modelu MASE (Sprzedaz1MASE) 2010-11-24 Systemy wieloagentowe 41
Metoda run komponentu typu Wysylanie_zapytania_o_oferte public void run() { int state = 0; boolean notdone = true; /* state constant definitions */ final int StartState = 0; final int Idle = 1; final int StartState_out = 2; final int Idle_out = 3; while (notdone) { switch (state) { case StartState : state = StartState_out; case StartState_out : state = Idle; case Idle : msg = newmsg(querry_ref); state = Idle_out; case Idle_out : Conversation5_1(Seller); notdone = false; }}} break; break; break; break; 2010-11-24 Systemy wieloagentowe 42
Metoda run komponentu typu Przygotowanie_ofert public void run() { int state = 0; boolean notdone = true; /* state constant definitions */ final int StartState = 0; final int Oferta = 1; final int Oferta_out = 2; final int StartState_out = 3; while (notdone) { switch (state) { case StartState : state = StartState_out; break; case StartState_out : m = checkexternal(); if(m!= null) if(m.performative.equals("msg")) { Conversation5_1(Client); state = Oferta; } break; case Oferta : oferta = set(msg); state = Oferta_out; break; case Oferta_out : m = new Message(); m.performative = "oferta"; notdone = false; break; } } } 2010-11-24 Systemy wieloagentowe 43
Metoda run komponentu typu Opoznione_wysylanie_ofert public void run() { int state = 0; boolean notdone = true; /* state constant definitions */ final int StartState = 0; final int Delay = 1; final int StartState_out = 2; final int Delay_out = 3; while (notdone) { switch (state) { case StartState : state = StartState_out; break; case StartState_out : m = checkinternal(); if(m!= null) if(m.performative.equals("oferta")) state = Delay; break; case Delay : timeout(t); state = Delay_out; break; case Delay_out : if(timeout<=0) { Conversation6_1(Client); notdone = false; } break; } } } 2010-11-24 Systemy wieloagentowe 44
Metoda run komponentu typu Odbior_drukowanie_ofert public void run() { int state = 0; boolean notdone = true; final int StartState = 0; final int Init = 1; final int Init_out = 4; final int Printing = 2; final int Printing_out = 5; final int StartState_out = 3; while (notdone) { switch (state) { case StartState : state = StartState_out; break; case StartState_out: state = Init; break; case Init : timeout(t); state = Init_out; break; case Init_out : m = checkexternal(); if (m!= null){ if (m.performative.equals("replay")){ Conversation6_1(Seller); state = Printing; } } else if (timeout<0) { string = "Timeout"; state = Printing; } break; case Printing : print(string); state = Printing_out; break; case Printing_out : notdone = false; break; 2010-11-24 } } } Systemy wieloagentowe 45
Diagram klas jako efekt inżynierii odwrotnej dla aplikacji JADE (Sprzedaz1JADE) 2010-11-24 Systemy wieloagentowe 46
Client1: ClientAgent Seller1 :SellerAgent Q uerry_ref Inform Diagram protokołu interakcji (PD) client_seller-net typu user-defined w JADE 2010-11-24 Systemy wieloagentowe 47
import jade.core.agent; import jade.core.behaviours.*; import jade.core.aid; import jade.lang.acl.*; public class ClientAgent extends Agent { Agent Jade typu ClientAgent private Odbior_drukowanie_oferty odbior; private Wysylanie_zapytania_o_oferte pytanie; private MessageTemplate template; protected void setup() { ACLMessage msg = newmsg(aclmessage.query_ref, "", new AID("Sprzedajacy", AID.ISLOCALNAME)); template = MessageTemplate.and( MessageTemplate.MatchPerformative(ACLMessage.INFORM), MessageTemplate.MatchConversationId(msg.getConversationId())); SequentialBehaviour seq = new SequentialBehaviour(); addbehaviour(seq); // główne zachowanie sekwencyjne pytanie = new Wysylanie_zapytania_o_oferte(msg); odbior = new Odbior_drukowanie_oferty(this, 1000, template); seq.addsubbehaviour(pytanie); // 1- e zachowanie sekwencyjne do wysyłania zapytania o ofertę seq.addsubbehaviour(odbior); // 2-ie zachowanie sekwencyjne do odbioru i drukowania oferty } 2010-11-24 Systemy wieloagentowe 48
// ========== Utility methods Jade Primer========================= // --- generating Conversation IDs ------------------- protected static int cidcnt = 0; String cidbase = null; String gencid() { if (cidbase == null) { cidbase = getlocalname() + hashcode() + System.currentTimeMillis() % 10000 + "_"; } return cidbase + (cidcnt++); } // --- Methods to initialize ACLMessages ------------------- ACLMessage newmsg(int perf, String content, AID dest) { ACLMessage msg = newmsg(perf); if (dest!= null) { msg.addreceiver(dest); } msg.setcontent(content); return msg; } } ACLMessage newmsg(int perf) { ACLMessage msg = new ACLMessage(perf); msg.setconversationid(gencid()); return msg; } 2010-11-24 Systemy wieloagentowe 49
import jade.core.behaviours.*; import jade.lang.acl.*; class Wysylanie_zapytania_o_oferte extends OneShotBehaviour { ACLMessage msg; int state = 0; //arybut, który pamięta, w którym miejscu zakończyła się metoda action public Wysylanie_zapytania_o_oferte(ACLMessage m) { msg = m; } } public void action() { boolean notdone = true; final int StartState = 0; final int Idle = 1; final int StartState_out = 2; final int Idle_out = 3; while (notdone) { switch (state) { case StartState: state = StartState_out; break; case StartState_out: state = Idle; break; case Idle: //msg = newmsg(querry_ref); state = Idle_out; break; case Idle_out: // /Conversation5_1(Seller) System.out.println("\n" + myagent.getlocalname() + " wysyla wiadomosc:\n\n" + msg); myagent.send(msg); notdone = false; break; } } } //koniec metody action 50
import jade.core.agent; import jade.core.behaviours.simplebehaviour; import jade.lang.acl.*; public class Odbior_drukowanie_oferty extends SimpleBehaviour { private MessageTemplate template; private long timeout, wakeuptime; private boolean finished = false; private ACLMessage msg=null; int state = 0; //arybut, który pamięta, w którym miejscu zakończyła się metoda action public Odbior_drukowanie_oferty(Agent a, int millis, MessageTemplate mt) { super(a); timeout = millis; template = mt; } public void onstart() { wakeuptime = (timeout < 0? Long.MAX_VALUE : System.currentTimeMillis() + timeout); } 2010-11-24 Systemy wieloagentowe 51
public void handle(aclmessage msg) { if (msg == null) { System.out.print("\n" + myagent.getlocalname() + ": Czas zostal przekroczony: "); System.out.println(timeOut); } else System.out.println("\n" + myagent.getlocalname() + " odebral wiadomosc:\n\n" + msg); } public boolean done() { return finished; } public void action() { boolean notdone = true; long dt = 0; final int StartState = 0; final int Init = 1; final int Printing = 2; final int StartState_out = 3; final int Init_out = 4; final int Printing_out = 5; 2010-11-24 Systemy wieloagentowe 52
while (notdone) { switch (state) { case StartState: state = StartState_out; break; case StartState_out: state = Init; break; case Init: state = Init_out; break; case Init_out: // receive/conversation6_1(seller); msg = myagent.receive(template); if (msg!= null) state = Printing; else { dt = wakeuptime - System.currentTimeMillis(); if (dt > 0) { block(dt); notdone = false; } else state = Printing; } break; case Printing: handle(msg); state = Printing_out; break; case Printing_out: finished = true; } } } } //koniec metody action notdone = false; break; 2010-11-24 Systemy wieloagentowe 53
import jade.core.agent; import jade.lang.acl.*; Agent Jade typu SellerAgent public class SellerAgent extends Agent { private Przygotowanie_oferty oferta; private MessageTemplate template = MessageTemplate.MatchPerformative(ACLMessage.QUERY_REF); } protected void setup() { oferta = new Przygotowanie_oferty(this, template); addbehaviour(oferta); //1-e zachowanie do odbioru zapytania o ofertę } 2010-11-24 Systemy wieloagentowe 54
import jade.core.agent; import jade.core.behaviours.*; import jade.lang.acl.*; import java.util.random; public class Przygotowanie_oferty extends SimpleBehaviour { private Opoznione_wysylanie_ofert oferta_o; private ACLMessage reply; private MessageTemplate template; private Random rnd = new Random(); private boolean finished = false; int state = 0; //arybut, który pamięta, w którym miejscu zakończyła się metoda action public Przygotowanie_oferty(Agent a, MessageTemplate t) { super(a); template = t; } public boolean done() { return finished; } 2010-11-24 Systemy wieloagentowe 55
public void action() { ACLMessage msg = null; int delay = 0; boolean notdone = true; final int StartState = 0; final int Oferta = 1; final int Oferta_out = 2; final int StartState_out = 3; 2010-11-24 Systemy wieloagentowe 56
while (notdone) { switch (state) { case StartState: state = StartState_out; break; case StartState_out: //receive/conversation5_1(client); msg = myagent.receive(template); state = Oferta; break; case Oferta: // we create the reply if (msg!= null) { reply = msg.createreply(); reply.setperformative(aclmessage.inform); reply.setcontent("cena oferty: " + rnd.nextint(100)); delay = rnd.nextint(2000); System.out.println("\n" + myagent.getlocalname() + " odebral wiadomosc:\n\n" +msg + "\n\n i odpowie po uplywie czasu " + delay); state = Oferta_out; // but only send it after a random delay } else { block(); state= StartState_out; //zapamiętanie, że metodę action należy rozpocząć od case StartState_out notdone = false; } break; case Oferta_out: // ^oferta() but only send it after a random delay oferta_o = new Opoznione_wysylanie_ofert(myAgent, delay, reply); myagent.addbehaviour(oferta_o); //2-ie zachowanie wysyłania oferty finished = true; notdone = false; break; } } } /*koniec metody action*/ } 2010-11-24 Systemy wieloagentowe 57
import jade.core.agent; import jade.core.behaviours.simplebehaviour; import jade.lang.acl.*; public class Opoznione_wysylanie_ofert extends SimpleBehaviour { private ACLMessage replay; private long timeout, wakeuptime; private boolean finished = false; int state = 0; //arybut, który pamięta, w którym miejscu zakończyła się metoda action } public Opoznione_wysylanie_ofert(Agent ag, int delay, ACLMessage r) { super(ag); timeout = delay; replay = r; } public void onstart() { wakeuptime = System.currentTimeMillis() + timeout; } public boolean done() { return finished; } public void handleelapsedtimeout() { System.out.println("\nOpoznienie " + timeout + " minelo"); System.out.println("\n"+myAgent.getLocalName()+" wysyla wiadomosc:\n\n"+replay); myagent.send(replay); 2010-11-24 Systemy wieloagentowe 58
} public void action() { boolean notdone = true; long dt = 0; final int StartState = 0; final int Delay = 1; final int StartState_out = 2; final int Delay_out = 3; while (notdone) { switch (state) { case StartState: state = StartState_out; break; case StartState_out: state = Delay; break; case Delay: case Delay_out: } } } //koniec metody action dt = wakeuptime - System.currentTimeMillis(); state = Delay_out; break; if (dt <= 0) { finished = true; // /Conversation6_1(Client); handleelapsedtimeout(); } else { block(dt); state = Delay; } notdone = false; break; 2010-11-24 Systemy wieloagentowe 59
Przykład Sprzedaz1JADE działania 1 2010-11-24 Systemy wieloagentowe 60
Przykład Sprzedaz1JADE działania 2 2010-11-24 Systemy wieloagentowe 61
Struktura prezentacji Wprowadzenie do MAS Charakterystyka techniki MASE Charakterystyka techniki JADE Zastosowanie inżynierii odwrotnej do wykazania spójności modelu projektowego i implementacji Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS przyklad1 Zastosowanie techniki JADE do implementacji przykładu MAS przykład1 Zakończenie 2010-11-24 Systemy wieloagentowe 62
Podano zarys MAS Podsumowanie Przedstawiono elementy inżynierii oprogramowania zorientowanego agentowo -Agent-Oriented Software Engineering (AOSE) Podano charakterystyki techniki MASE oraz JADE Przedstawiono projekt przykładowego MAS wykonanego w technice MASE i oprogramowanego w JADE Zastosowano inżynierię odwrotną do określenia równoważności modeli i możliwości łączenia produktów obu technik: MASE i JADE 2010-11-24 Systemy wieloagentowe 63