• Nie Znaleziono Wyników

Systemy wieloagentowe (MAS) – zasady tworzenia systemów wieloagentowych za pomocą

N/A
N/A
Protected

Academic year: 2021

Share "Systemy wieloagentowe (MAS) – zasady tworzenia systemów wieloagentowych za pomocą"

Copied!
73
0
0

Pełen tekst

(1)

2010-11-24 Systemy wieloagentowe 1

Systemy wieloagentowe (MAS) – zasady tworzenia systemów wieloagentowych za pomocą

technologii MASE i JADE- część 2

http://www.MultiAgent.com

Autor:

Zofia Kruczkiewicz

(2)

2010-11-24 Systemy wieloagentowe 2

Struktura prezentacji

 Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS – przykład 2

 Zastosowanie techniki JADE do implementacji przykładu MAS – przykład 2

 Charakterystyka techniki JADE

 Zakończenie

 Wprowadzenie do MAS

 Zastosowanie inżynierii odwrotnej do wykazania

spójności modeli projektowego i implementacji

(3)

2010-11-24 Systemy wieloagentowe 3

Struktura prezentacji

 Wprowadzenie do MAS

(4)

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

(5)

2010-11-24 Systemy wieloagentowe 5

Techniki tworzenia MAS

(6)

2010-11-24 Systemy wieloagentowe 6

Struktura prezentacji

 Charakterystyka techniki MASE

 Wprowadzenie do MAS

(7)

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

(8)

2010-11-24 Systemy wieloagentowe 8

Proces transformacji modelu ról (analizy) do modelu projektowego

(9)

2010-11-24 Systemy wieloagentowe 9

(10)

2010-11-24 Systemy wieloagentowe 10

Struktura prezentacji

 Charakterystyka techniki MASE

 Charakterystyka techniki JADE

 Wprowadzenie do MAS

(11)

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

(12)

2010-11-24 Systemy wieloagentowe 12

Rozproszona AP w systemie

JADE

(13)

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

(14)

2010-11-24 Systemy wieloagentowe 14

(15)

2010-11-24 Systemy wieloagentowe 15

(16)

2010-11-24 Systemy wieloagentowe 16

(17)

2010-11-24 Systemy wieloagentowe 17

(18)

2010-11-24 Systemy wieloagentowe 18

Środowisko graficzne JADE

(19)

2010-11-24 Systemy wieloagentowe 19

(20)

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 modelu projektowego i implementacji

(21)

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)

(22)

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)

(23)

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)

(24)

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)

(25)

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ład2

 Wprowadzenie do MAS

 Zastosowanie inżynierii odwrotnej do wykazania

spójności modelu projektowego i implementacji

(26)

2010-11-24 Systemy wieloagentowe 26

MASE- aplikacja Client-Seller Sprzedaz2MASE

przykład 2 - sprzedaz2-v1.83.maml

• Analiza

(27)

2010-11-24 Systemy wieloagentowe 27

Diagram celów

(28)

2010-11-24 Systemy wieloagentowe 28

Diagram ról

(29)

2010-11-24 Systemy wieloagentowe 29

Diagram use case

(30)

2010-11-24 Systemy wieloagentowe 30

Diagram sekwencji

(31)

2010-11-24 Systemy wieloagentowe 31

MASE- aplikacja Client-Seller Sprzedaz2MASE

przykład 2 - sprzedaz2-v1.83.maml

• Projekt

(32)

2010-11-24 Systemy wieloagentowe 32

Diagram Agent Template Diagram

(33)

2010-11-24 Systemy wieloagentowe 33

Architektura typu ClientAgent

(34)

2010-11-24 Systemy wieloagentowe 34

Komponenty agenta typu ClientAgent (1)

(35)

2010-11-24 Systemy wieloagentowe 35

Komponenty agenta typu ClientAgent (2)

(36)

2010-11-24 Systemy wieloagentowe 36

Seller Agent – architektura i komponenty (taki sam jak w Sprzedaz1)

(37)

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ą

i określa warunki występowania błędów.

(38)

2010-11-24 Systemy wieloagentowe 38

Testowanie protokołu komunikacji przed procesem

implementacji za pomocą narzędzia Spin

(39)

2010-11-24 Systemy wieloagentowe 39

Diagram klas jako efekt inżynierii odwrotnej dla modelu MASE (Sprzedaz1MASE)

(40)

2010-11-24 Systemy wieloagentowe 40

Metoda run komponentu typu Wysylanie_zadania_ofert

public void run() { int state = 0;

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 : n = 3;

sellers = newList(n);

state = Idle_out; break;

case Idle_out : // /Conversation5_1(<sellers>) Conversation5_1(sellers);

notDone = false; break;

} }

}

(41)

2010-11-24 Systemy wieloagentowe 41

Metoda run komponentu typu Wybor_najtanszej_oferty

public void run()

{int state = 0; boolean notDone = true; final int StartState = 0;

final int Choice = 1; final int StartState_out = 2; final int Choice_out = 3;

while (notDone) { switch (state) {

case StartState : state = StartState_out; break;

case StartState_out : n = 3; ///n = 3; bestPrice = 9999; bestOffer = null bestPrice = 9999;

bestOffer = null;

state = Choice; break;

case Choice : [offer_bestPrice]/bestOffer = Seller;

[offer_bestPrice]//bestPrice = offer;

state = Choice_out; break;

case Choice_out : m = checkExternal();

if(m != null){ // receive(replay(), Seller)[n>0 && timeout >0] /Conversation6_1(Seller); n--() if(m.performative.equals("replay")){

if(n>0 && timeout >0) { Conversation6_1(Seller);

n--();

state = Choice;} } }

else { // [!(n>0 && timeout>0)] ^bestOffer() if(!(n>0 && timeout>0)) {

m = new Message();

m.performative = "bestOffer";

notDone = false; } } break;

} } }

(42)

2010-11-24 Systemy wieloagentowe 42

Metoda run komponentu typu Drukowanie_ofert

public void run()

{ int state = 0; boolean notDone = true; final int StartState = 0;

final int Printing = 1; final int StartState_out = 2; final int Printing_out = 3;

while (notDone) { switch (state) {

case StartState : state = StartState_out; break;

case StartState_out :m = checkInternal();

if(m != null)

{ // bestOffer()[n>0 && bestOffer!=null] /wiersz = <"Nie, wszyscy, sprzedajacy, odpowiedzieli">

if(m.performative.equals("bestOffer")){

if(n>0 && bestOffer!=null) {

wiersz = "Nie_wszyscy_sprzedajacy_odpowiedzieli";

state = Printing; } }

// bestOffer()[n==0 && bestOffer!=null] /wiersz = <"Best, price"+bestPrice>

else if(m.performative.equals("bestOffer")){

else if(n==0 && bestOffer!=null) { wiersz = "Best_price"+bestPrice;

state = Printing; } }

else if(m.performative.equals("bestOffer")) { // bestOffer()[bestOffer==null]

else if(bestOffer==null) {

state = Printing; } } } break;

case Printing : print(wiersz);

state = Printing_out; break;

case Printing_out : notDone = false; break;

} } }

(43)

2010-11-24 Systemy wieloagentowe 43

Metoda run komponentu typu Przygotowanie_ofert (taki sam w Sprzedaz1)

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;

} } }

(44)

2010-11-24 Systemy wieloagentowe 44

Metoda run komponentu typu Opoznione_wysylanie_ofert (taki sam w Sprzedaz1)

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;

} } }

(45)

2010-11-24 Systemy wieloagentowe 45

Struktura prezentacji

 Charakterystyka techniki MASE

 Charakterystyka techniki JADE

 Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS – przykład2

 Wprowadzenie do MAS

 Zastosowanie techniki JADE do implementacji przykładu MAS – przykład2

 Zastosowanie inżynierii odwrotnej do wykazania

spójności modelu projektowego i implementacji

(46)

2010-11-24 Systemy wieloagentowe 46

Projekt JADE

przykład 2 - Sprzedaz2JADE

(47)

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_sellers-net typu user-defined w JADE 3

0..3

(48)

2010-11-24 Systemy wieloagentowe 48

Diagram klas jako efekt inżynierii odwrotnej dla aplikacji JADE

(Sprzedaz2JADE)

(49)

2010-11-24 Systemy wieloagentowe 49

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 int N=3;

private MessageTemplate template;

private Wybor_najtanszej_oferty odbior;

private Wysylanie_zapytania_o_oferte pytanie;

private Drukowanie_ofert drukowanie;

private Oferta oferta = new Oferta(N);

public Oferta getOferta() { return oferta; }

public void setOferta(Oferta oferta) { this.oferta = oferta; }

(50)

2010-11-24 Systemy wieloagentowe 50

protected void setup() {

SequentialBehaviour seq = new SequentialBehaviour(); //główne zach.sekw.

ACLMessage msgs[] = new ACLMessage[3];

addBehaviour(seq); //dodano główne zachowanie sekwencyjne

SequentialBehaviour seq1 = new SequentialBehaviour(); //1-e zachowanie

for (int i=0; i<3;i++) //sekwencyjne

{ msgs[i] = newMsg(ACLMessage.QUERY_REF, "",

new AID("Sprzedajacy"+(i+1), AID.ISLOCALNAME));

pytanie = new Wysylanie_zapytania_o_oferte(msgs[i]);

seq1.addSubBehaviour(pytanie);

} //1-e zachowanie sekwencyjne zawiera 3 zachowania wysyłania zapytania o ofertę

seq.addSubBehaviour(seq1); //dodano 1-go zachowanie sekwencyjne

ParallelBehaviour par = new ParallelBehaviour(); //2-ie zachowanie równoległe

seq.addSubBehaviour(par); //dodano 2-ie zachowanie równoległe

for (int i=0;i<3;i++)

{ template = MessageTemplate.and(

MessageTemplate.MatchPerformative(ACLMessage.INFORM),

MessageTemplate.MatchConversationId(msgs[i].getConversationId()));

odbior = new Wybor_najtanszej_oferty(this, 1000, template);

par.addSubBehaviour(odbior);

//2-ie zachowanie zawiera 3 równoległe zachowania wyboru najtańszej wiadomości

}

drukowanie = new Drukowanie_ofert(this);

seq.addSubBehaviour(drukowanie); } //3-ie zachowanie drukuje ofertę

(51)

2010-11-24 Systemy wieloagentowe 51 // ========== 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;

} }

(52)

2010-11-24 Systemy wieloagentowe 52

Pomocniczy obiekt Oferta

public class Oferta {

private int oferta = 1000;

private int n;

private int bestPrice = 999;

public int getBestPrice() { return bestPrice; }

public void setBestPrice(int bestPrice) { this.bestPrice = bestPrice; } public int getN() { return n; }

public void setN(int n) { this.n = n; } public void DecN() { --n; }

public int getOferta() { return oferta; }

public void setOferta(int oferta) { this.oferta = oferta; } public Oferta(int N) { n = N; }

public void ustaloferte(int q) {

if (q < getOferta() && q < getBestPrice() && q > 0) setOferta(q);

DecN();

}

public String ocenaoferty() { String wiersz=null;

if (getN() == 0 && getOferta() < 1000)

wiersz = "Najlepsza oferta: " + getOferta();

else if (getN() > 0 && getOferta() < 1000)

wiersz = "Oferta bez " + (getN()) + " wynosi: " + getOferta() + "\n";

else if (getOferta() == 1000) wiersz = "Brak oferty";

return wiersz; } }

(53)

2010-11-24 Systemy wieloagentowe 53

import jade.core.behaviours.*;

import jade.lang.acl.*;

// (taki sam w Sprzedaz1)

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*/

}

(54)

2010-11-24 Systemy wieloagentowe 54

import jade.core.Agent;

import jade.core.behaviours.SimpleBehaviour;

import jade.lang.acl.*;

public class Wybor_najtanszej_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 Wybor_najtanszej_oferty(Agent a, int millis, MessageTemplate mt) { super(a);

timeOut = millis;

template = mt; }

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 void onStart() {

wakeupTime=(timeOut < 0 ?Long.MAX_VALUE:System.currentTimeMillis()+timeOut);}

public boolean done() { return finished; }

(55)

2010-11-24 Systemy wieloagentowe 55

public void action() {

long dt = 0; boolean notDone = true; final int StartState = 0;

final int Choice = 2; final int StartState_out = 1; final int Choice_out = 3;

while (notDone) { switch (state) {

case StartState: state = StartState_out; break;

case StartState_out: state = Choice;; break;

case Choice : state = Choice_out; break;

case Choice_out:

msg = myAgent.receive(template);

if (msg != null) {

String p[]=(msg.getContent()).split(" ");

int q=Integer.parseInt(p[2]);

((ClientAgent)myAgent).getOferta().ustaloferte(q);

finished=true;

handle(msg); } else {

dt = wakeupTime - System.currentTimeMillis();

if (dt > 0) block(dt);

else

{ handle(msg);

finished=true; }

} notDone = false; break;

} } } /*koniec metody action*/ }

(56)

2010-11-24 Systemy wieloagentowe 56

import jade.core.Agent;

import jade.core.behaviours.SimpleBehaviour;

import jade.lang.acl.*;

public class Drukowanie_ofert extends SimpleBehaviour {

private boolean finished = false;

private String wiersz;

int state = 0;

//arybut, który „pamięta”, w którym miejscu zakończyła się metoda action

public Drukowanie_ofert(Agent a) { super(a); }

public boolean done()

{ return finished; }

(57)

2010-11-24 Systemy wieloagentowe 57

public void action() {

boolean notDone = true; long dt = 0; final int StartState = 0;

final int Printing = 2; final int StartState_out = 1; final int Printing_out = 3;

while (notDone) { switch (state) {

case StartState: state = StartState_out;

break;

case StartState_out:

wiersz = ((ClientAgent) myAgent).getOferta().ocenaoferty();

state = Printing;

break;

case Printing: System.out.println(wiersz);

state = Printing_out;

break;

case Printing_out:

finished = true;

notDone = false;

break;

} } } //koniec metody action

}

(58)

2010-11-24 Systemy wieloagentowe 58

Definicja klasy SellerAgent taka sama jak

w przykładzie Sprzedaz1

(59)

2010-11-24 Systemy wieloagentowe 59

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);

}

}

(60)

2010-11-24 Systemy wieloagentowe 60

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; }

(61)

2010-11-24 Systemy wieloagentowe 61

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;

(62)

2010-11-24 Systemy wieloagentowe 62

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);

finished = true;

notDone = false; break;

} } } /*koniec metody action*/ }

(63)

2010-11-24 Systemy wieloagentowe 63

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);

}

(64)

2010-11-24 Systemy wieloagentowe 64

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 }

(65)

2010-11-24 Systemy wieloagentowe 65

Sprzedaz2JADE- przykład działania 1 (a)

(66)

2010-11-24 Systemy wieloagentowe 66

Sprzedaz2JADE- przykład działania 1 (b)

(67)

2010-11-24 Systemy wieloagentowe 67

Sprzedaz2JADE- przykład działania 2 (a)

(68)

2010-11-24 Systemy wieloagentowe 68

Sprzedaz2JADE- przykład działania 2 (b)

(69)

2010-11-24 Systemy wieloagentowe 69

Sprzedaz2JADE- przykład działania 3 (a)

(70)

2010-11-24 Systemy wieloagentowe 70

Sprzedaz2JADE- przykład działania 3 (b)

(71)

2010-11-24 Systemy wieloagentowe 71

Sprzedaz2JADE- przykład działania 4

(72)

2010-11-24 Systemy wieloagentowe 72

Struktura prezentacji

 Charakterystyka techniki MASE

 Charakterystyka techniki JADE

 Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS – przykład 2

 Wprowadzenie do MAS

 Zakończenie

 Zastosowanie techniki JADE do implementacji przykładu MAS – przykład 2

 Zastosowanie inżynierii odwrotnej do wykazania

spójności modelu projektowego i implementacji

(73)

2010-11-24 Systemy wieloagentowe 73

Podsumowanie

• Podano zarys MAS

• 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

Cytaty

Powiązane dokumenty

Phillips J., Zarządzanie projektami IT, Wydanie III, Helion Gliwice 2011, Kontakt.

Proces wnioskowania odbywa się zgodnie z wybraną metodą wnioskowania, wywodzącą się najczęściej z nauk matematycznych – logiki, rachunku..

Nadawca żąda wykonania zadania przez odbiorcę, w dowolnym momencie, kiedy zostaną spełnione podane propozycje w wiadomości

 Zastosowanie inżynierii odwrotnej do wykazania spójności modelu projektowego i implementacji.. 2010-11-24 Systemy

 Zastosowanie techniki MASE do wykonania modeli analizy i projektowania przykładu MAS. 

 Zapis atrybutów - Zezwala bądź odmawia prawa do zmieniania atrybutów pliku lub folderu takich jak Tylko do odczytu, Ukryty Zapis rozszerzonych atrybutów -. Zezwala bądź

• ISO 9660 (CD ROM) — przydział ciągły, wpis katalogowy zawiera indeks pierwszej jednostki alokacji oraz rozmiar pliku, wpisy katalogowe są posortowane alfabetycznie....

III Algorytmy wspomagania decyzji w systemach wielo- agentowych 153 8 Algorytmy stosowane w systemach wieloagentowych 155 8.1 Rozproszone spełnianie