Systemy wieloagentowe (MAS) zasady tworzenia systemów wieloagentowych za pomocą technologii MASE i JADEczęść.

Podobne dokumenty
Systemy wieloagentowe (MAS) zasady tworzenia systemów wieloagentowych za pomocą technologii MASE i JADEczęść.

Autor: Zofia Kruczkiewicz Systemy wieloagentowe 1

Agentowe języki komunikacji (KIF, KQML, ACL)

Architektury Usług Internetowych. Laboratorium 3. Usługi w środowisku wielo-agentowym

Architektury usług internetowych. Laboratorium 5. JADE

JADE - Java Agent DEvelopment Framework

Diagramy stanów Na podstawie UML 2.0 Tutorial Zofia Kruczkiewicz

TECHNOLOGIE INTERNETOWE W ZARZĄDZANIU I BIZNESIE TIZIB 05 ZOFIA KRUCZKIEWICZ PROJEKTOWANIE SYSTEMÓW WIELOAGENTOWYCH MULTIAGENT SYSTEM PROJECT

Programowanie obiektowe

Architektury Usług Internetowych. Laboratorium 5

Laboratorium 8 Diagramy aktywności

Diagram stanów Laboratorium 9

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Java: interfejsy i klasy wewnętrzne

Algorytmy z powrotami. Algorytm minimax

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Java Agent DEvelopment Framework Systemy Agentowe

Diagramy stanów tworzenie modeli analizy i projektowania Na podstawie UML 2.0 Tutorial

Diagramy czynności Na podstawie UML 2.0 Tutorial

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Przetwarzanie Zespołowe

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Współbieżność w środowisku Java

Java Platform Micro Edition

Diagramy stanów Na podstawie UML 2.0 Tutorial Zofia Kruczkiewicz

METODY PROGRAMOWANIA

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Tworzenie aplikacji w języku Java

JADE Java Agent Development Framework. MiASI2, TWO2,

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Języki i metody programowania Java Obsługa zdarzeń - przykłady

Komponenty sterowane komunikatami

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Klasy i obiekty cz II

JADE Java Agent Development Framework. MiASI2, TWO2,

Diagramy czynności tworzenie modelu przypadków użycia Wykład 2

Wykład 7: Pakiety i Interfejsy

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Aplikacja wielowątkowa prosty komunikator

Języki i metody programowania Java. Wykład 2 (część 2)

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Programowanie, algorytmy i struktury danych

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

5. Model komunikujących się procesów, komunikaty

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Model przypadków użycia - rola diagramów aktywności Część 2 Wykładowca Dr inż. Zofia Kruczkiewicz

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Informatyka Systemów Autonomicznych Praca zaliczeniowa

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Język ludzki kod maszynowy

Programowanie obiektowe

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Multimedia JAVA. Historia

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Wykład 3_1 Przykład aplikacji: Wyszukiwanie informacji w internecie

Dialogowe akty mowy w modelach sztucznej inteligencji

JAX-RS czyli REST w Javie. Adam Kędziora

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Systemy operacyjne na platformach mobilnych

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

UML w Visual Studio. Michał Ciećwierz

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Kurs programowania. Wykład 9. Wojciech Macyna

Programowanie obiektowe

Enterprise JavaBeans

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Aplikacja wielow tkowa prosty komunikator

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Zaawansowane aplikacje WWW - laboratorium

Podejście obiektowe. Tablice (1) obiektów

Programowanie obiektowe

Podstawy programowania III WYKŁAD 4

Programowanie współbieżne Laboratorium nr 11

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów niestacjonarnych studiów II stopnia)

Java Agent DEvelopment Framework Systemy Agentowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Systemy Informatyki Przemysłowej

Programowanie obiektowe

O-MaSE Organization-based Multiagent System Engineering. MiASI2, TWO2,

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Aplikacje RMI

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Transkrypt:

Systemy wieloagentowe (MAS) zasady tworzenia systemów wieloagentowych za pomocą technologii MASE i JADEczęść 2 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ład 2 Zastosowanie techniki JADE do implementacji przykładu MAS przykład 2 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 modelu 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ład2 2010-11-24 Systemy wieloagentowe 25

MASE- aplikacja Client-Seller Sprzedaz2MASE przykład 2 - sprzedaz2-v1.83.maml Analiza 2010-11-24 Systemy wieloagentowe 26

Diagram celów 2010-11-24 Systemy wieloagentowe 27

Diagram ról 2010-11-24 Systemy wieloagentowe 28

Diagram use case 2010-11-24 Systemy wieloagentowe 29

Diagram sekwencji 2010-11-24 Systemy wieloagentowe 30

MASE- aplikacja Client-Seller Sprzedaz2MASE przykład 2 - sprzedaz2-v1.83.maml Projekt 2010-11-24 Systemy wieloagentowe 31

Diagram Agent Template Diagram 2010-11-24 Systemy wieloagentowe 32

Architektura typu ClientAgent 2010-11-24 Systemy wieloagentowe 33

Komponenty agenta typu ClientAgent (1) 2010-11-24 Systemy wieloagentowe 34

Komponenty agenta typu ClientAgent (2) 2010-11-24 Systemy wieloagentowe 35

Seller Agent architektura i komponenty (taki sam jak w Sprzedaz1) 2010-11-24 Systemy wieloagentowe 36

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 37 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 38

Diagram klas jako efekt inżynierii odwrotnej dla modelu MASE (Sprzedaz1MASE) 2010-11-24 Systemy wieloagentowe 39

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; } } } 2010-11-24 Systemy wieloagentowe 40

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"; 2010-11-24 Systemy wieloagentowe 41 notdone = false; } } break; } } }

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; 2010-11-24 case Printing_out : notdone Systemy = false; wieloagentowe break; 42 } } }

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; } } } 2010-11-24 Systemy wieloagentowe 43

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; } } } 2010-11-24 Systemy wieloagentowe 44

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ład2 Zastosowanie techniki JADE do implementacji przykładu MAS przykład2 2010-11-24 Systemy wieloagentowe 45

Projekt JADE przykład 2 - Sprzedaz2JADE 2010-11-24 Systemy wieloagentowe 46

Client1: ClientAgent Seller1 :SellerAgent Q uerry_ref 3 Inform 0..3 Diagram protokołu interakcji (PD) client_sellers-net typu user-defined w JADE 2010-11-24 Systemy wieloagentowe 47

Diagram klas jako efekt inżynierii odwrotnej dla aplikacji JADE (Sprzedaz2JADE) 2010-11-24 Systemy wieloagentowe 48

import jade.core.agent; import jade.core.behaviours.*; import jade.core.aid; import jade.lang.acl.*; Agent Jade typu ClientAgent 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; } 2010-11-24 Systemy wieloagentowe 49

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); 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ę //dodano 2-ie zachowanie równoległe 2010-11-24 Systemy wieloagentowe 50

// ========== 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 51

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"; 2010-11-24 return wiersz; } Systemy wieloagentowe 52 }

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; case StartState_out: state = Idle; case Idle: //msg = newmsg(querry_ref); break; break; 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; } } } /*koniec metody action*/ break; 2010-11-24 Systemy wieloagentowe 53

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);} 2010-11-24 Systemy wieloagentowe 54 public boolean done() { return finished; }

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*/ } 2010-11-24 Systemy wieloagentowe 55

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; } 2010-11-24 Systemy wieloagentowe 56

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 } 2010-11-24 Systemy wieloagentowe 57

Definicja klasy SellerAgent taka sama jak w przykładzie Sprzedaz1 2010-11-24 Systemy wieloagentowe 58

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); } 2010-11-24 Systemy wieloagentowe 59

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 60

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 61

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*/ } 2010-11-24 Systemy wieloagentowe 62

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 63

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

Sprzedaz2JADE- przykład działania 1 (a) 2010-11-24 Systemy wieloagentowe 65

Sprzedaz2JADE- przykład działania 1 (b) 2010-11-24 Systemy wieloagentowe 66

Sprzedaz2JADE- przykład działania 2 (a) 2010-11-24 Systemy wieloagentowe 67

Sprzedaz2JADE- przykład działania 2 (b) 2010-11-24 Systemy wieloagentowe 68

Sprzedaz2JADE- przykład działania 3 (a) 2010-11-24 Systemy wieloagentowe 69

Sprzedaz2JADE- przykład działania 3 (b) 2010-11-24 Systemy wieloagentowe 70

Sprzedaz2JADE- przykład działania 4 2010-11-24 Systemy wieloagentowe 71

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ład 2 Zastosowanie techniki JADE do implementacji przykładu MAS przykład 2 Zakończenie 2010-11-24 Systemy wieloagentowe 72

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 73