2010-11-24 Systemy wieloagentowe 1
Systemy wieloagentowe (MAS) – zasady tworzenia systemów wieloagentowych za pomocą
technologii MASE i JADE- część 1
http://www.MultiAgent.com
Autor:
Zofia Kruczkiewicz
2010-11-24 Systemy wieloagentowe 2
Struktura prezentacji
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
Zastosowanie inżynierii odwrotnej do wykazania spójności modeli projektowego i implementacji
Charakterystyka techniki JADE
Zakończenie
Wprowadzenie do MAS
2010-11-24 Systemy wieloagentowe 3
Struktura prezentacji
Wprowadzenie do MAS
2010-11-24 Systemy wieloagentowe 4
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 5
Techniki tworzenia MAS
2010-11-24 Systemy wieloagentowe 6
Struktura prezentacji
Charakterystyka techniki MASE
Wprowadzenie do MAS
2010-11-24 Systemy wieloagentowe 7 Początkowy kontekst
systemu Hierarchia celów
Przypadki użycia (Use Cases)
Diagramy sekwencji Zadania
współbieżne Role
Klasy agentów
Konwersacje
Architektura agentów Diagramy
wdrożenia
Określenia celów
Określenia przypadków użycia
Konstruowanie konwersacji Grupowanie klas
agentów Projektowanie
systemu
Tworzenie klas agentów Udoskonalanie ról
Projekt Analiza
2010-11-24 Systemy wieloagentowe 8
Proces transformacji modelu ról (analizy) do modelu projektowego
2010-11-24 Systemy wieloagentowe 9
2010-11-24 Systemy wieloagentowe 10
Struktura prezentacji
Charakterystyka techniki MASE
Charakterystyka techniki JADE
Wprowadzenie do MAS
2010-11-24 Systemy wieloagentowe 11
Infrastruktura fizyczna MAS – System JADE
oparty na specyfikacji FIPA
System Zarządzania Agentami (AMS)
Katalog Usług (DF)
Platforma Agenta (AP)
System transportu wiadomości (MTS) Agent
System transportu wiadomości (MTS) Platforma Agenta (AP)
IIOP, HTPP
RMI
2010-11-24 Systemy wieloagentowe 12
Rozproszona AP w systemie
JADE
2010-11-24 Systemy wieloagentowe 13
MAS – mobilny (3 komputery)
MySQL Server Container 1 Searcher 1
Container 2 Host 2
MySQL Server Container 3
Host 3
Container 4 Searcher 2 AMS DF
Host 1
doMove()
doMove()
Manager
Main Container Agent
Platform
2010-11-24 Systemy wieloagentowe 14
2010-11-24 Systemy wieloagentowe 15
2010-11-24 Systemy wieloagentowe 16
2010-11-24 Systemy wieloagentowe 17
2010-11-24 Systemy wieloagentowe 18
Środowisko graficzne JADE
2010-11-24 Systemy wieloagentowe 19
2010-11-24 Systemy wieloagentowe 20
Struktura prezentacji
Charakterystyka techniki MASE
Charakterystyka techniki JADE
Wprowadzenie do MAS
Zastosowanie inżynierii odwrotnej do wykazania
spójności modeli projektowego i implementacji
2010-11-24 Systemy wieloagentowe 21 Komponenty agenta - odwzorowanie (2)
ConversationI_1
Konwersacje typu proste zdarzenia komunikacyjne typu nadawanie lub odbiór wiadomości - odwzorowanie (3)
MASE (1)
Klasa agenta - odwzorowanie (1)
2010-11-24 Systemy wieloagentowe 22 Przekształcenie
komponentów do obiektów typu Behaviour -
odwzorowanie(2)
^send1_4
Odwzorowanie zbioru zdarzeń komunikacyjnych typu nadawanie lub odbiór do zbioru metod nadawania i odbioru – odwzorowanie (3)
JADE (1)
Klasa agenta - odwzorowanie (1)
2010-11-24 Systemy wieloagentowe 23 Proste zdarzenia komunikacyjne
typu nadawanie lub odbiór wiadomości - odwzorowanie (5)
Rys.5. Model Agenta MASE
Konwersacje typu proste zdarzenia komunikacyjne typu nadawanie lub odbiór wiadomości (3)
Konwersacja opisana złożonym diagramem stanu – odwzorowanie (4)
Komponenty agenta – odwzorowanie (2)
ConversationI_1
MASE (2)
Klasa agenta -odwzorowanie (1)
2010-11-24 Systemy wieloagentowe 24
Rys. 6. Model agenta JADE
Odwzorowanie zbioru zdarzeń
komunikacyjnych typu nadawanie lub odbiór do zbioru metod nadawania i odbioru – odwzorowanie (3)
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 odbioru – odwzorowanie (5)
JADE (2)
Klasa agenta - odwzorowanie (1)
2010-11-24 Systemy wieloagentowe 25
Struktura prezentacji
Charakterystyka techniki MASE
Charakterystyka techniki JADE
Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS – przykład1
Wprowadzenie do MAS
Zastosowanie inżynierii odwrotnej do wykazania
spójności modelu projektowego i implementacji
2010-11-24 Systemy wieloagentowe 26
MASE- aplikacja Client-Seller Sprzedaz1MASE
przykład 1 – sprzedaz1-v1.83.maml
• Analiza
2010-11-24 Systemy wieloagentowe 27
Diagram celów
2010-11-24 Systemy wieloagentowe 28
Diagram ról aplikacji Client-Seller
2010-11-24 Systemy wieloagentowe 29
Diagram przypadku użycia
2010-11-24 Systemy wieloagentowe 30
Diagram sekwencji - scenariusz przypadku użycia
2010-11-24 Systemy wieloagentowe 31
Diagramy zadań roli Client
2010-11-24 Systemy wieloagentowe 32
Diagramy zadań roli Seller
2010-11-24 Systemy wieloagentowe 33
MASE- aplikacja Client-Seller Sprzedaz1MASE
przykład 1 – sprzedaz1-v1.83.maml
• Projekt
2010-11-24 Systemy wieloagentowe 34
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 35
Komponenty agenta ClientAgent
2010-11-24 Systemy wieloagentowe 36
Komponenty agenta SellerAgent
2010-11-24 Systemy wieloagentowe 37
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 38
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ą
i określa warunki występowania błędów.
2010-11-24 Systemy wieloagentowe 39
Testowanie protokołu komunikacji przed procesem
implementacji za pomocą narzędzia Spin
2010-11-24 Systemy wieloagentowe 40
Struktura prezentacji
Charakterystyka techniki MASE
Charakterystyka techniki JADE
Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS – przykład1
Wprowadzenie do MAS
Zastosowanie techniki JADE do implementacji przykładowego MAS – przykład1
Zastosowanie inżynierii odwrotnej do wykazania
spójności modelu projektowego i implementacji
2010-11-24 Systemy wieloagentowe 41
Diagram klas jako efekt inżynierii odwrotnej dla modelu MASE (Sprzedaz1MASE)
2010-11-24 Systemy wieloagentowe 42
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; break;
case StartState_out : state = Idle; break;
case Idle : msg = newMsg(Querry_ref);
state = Idle_out; break;
case Idle_out : Conversation5_1(Seller);
notDone = false; break;
}}}
2010-11-24 Systemy wieloagentowe 43
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 44
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 45
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 Printing = 2; final int StartState_out = 3;
final int Init_out = 4; final int Printing_out = 5;
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 46
Diagram klas jako efekt inżynierii odwrotnej dla
aplikacji JADE (Sprzedaz1JADE)
2010-11-24 Systemy wieloagentowe 47
Q u erry_ ref
Info rm C lient1 :
C lientA g ent
S eller1
:S ellerA g ent
Diagram protokołu interakcji (PD)
client_seller-net typu user-defined w JADE
2010-11-24 Systemy wieloagentowe 48
Agent Jade typu ClientAgent
import jade.core.Agent;
import jade.core.behaviours.*;
import jade.core.AID;
import jade.lang.acl.*;
public class ClientAgent extends Agent {
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 49
// ========== 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; } }
50
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 }
2010-11-24 Systemy wieloagentowe 51
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 actionpublic 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 52
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 53
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;
notDone = false; break;
} }
} //koniec metody action }
2010-11-24 Systemy wieloagentowe 54
Agent Jade typu SellerAgent
import jade.core.Agent;
import jade.lang.acl.*;
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 55
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 56
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 57
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 58
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 59
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:
dt = wakeupTime - System.currentTimeMillis();
state = Delay_out; break;
case Delay_out:
if (dt <= 0) {
finished = true;
// /Conversation6_1(Client);
handleElapsedTimeout(); } else
{ block(dt);
state = Delay; }
notDone = false; break;
} }
} //koniec metody action }
2010-11-24 Systemy wieloagentowe 60
Przykład Sprzedaz1JADE działania 1
2010-11-24 Systemy wieloagentowe 61
Przykład Sprzedaz1JADE działania 2
2010-11-24 Systemy wieloagentowe 62
Struktura prezentacji
Charakterystyka techniki MASE
Charakterystyka techniki JADE
Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS – przyklad1
Wprowadzenie do MAS
Zakończenie
Zastosowanie techniki JADE do implementacji przykładu MAS – przykład1
Zastosowanie inżynierii odwrotnej do wykazania
spójności modelu projektowego i implementacji
2010-11-24 Systemy wieloagentowe 63