JADE - Java Agent DEvelopment Framework

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

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

Przetwarzanie Zespołowe

Architektury usług internetowych. Laboratorium 5. JADE

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

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

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

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Java Agent DEvelopment Framework Systemy Agentowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Architektury Usług Internetowych. Laboratorium 5

Wykład 7: Pakiety i Interfejsy

Java Agent DEvelopment Framework Systemy Agentowe

JADE Java Agent Development Framework. MiASI2, TWO2,

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

Zaawansowane aplikacje WWW - laboratorium

Tworzenie i wykorzystanie usług

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

Multimedia JAVA. Historia

Wywoływanie metod zdalnych

Laboratorium Programowania Kart Elektronicznych

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

JADE Java Agent Development Framework. MiASI2, TWO2,

Java. Programowanie Obiektowe Mateusz Cicheński

Java: interfejsy i klasy wewnętrzne

Wywoływanie metod zdalnych

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Programowanie obiektowe

Programowanie rozproszone w języku Java

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

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

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

Programowanie obiektowe

Podejście obiektowe do budowy systemów rozproszonych

[Android] Podstawy programowania

Aplikacje RMI Lab4

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

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

Dokumentacja do API Javy.

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Programowanie obiektowe

Bezpieczne uruchamianie apletów wg

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Pobieranie argumentów wiersza polecenia

Kurs programowania. Wykład 8. Wojciech Macyna

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

Remote Method Invocation 17 listopada 2010

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

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

Podstawy i języki programowania

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Algorytmy z powrotami. Algorytm minimax

Tworzenie aplikacji w języku Java

KLASY, INTERFEJSY, ITP

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Aplikacje RMI

Kurs programowania. Wykład 9. Wojciech Macyna

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

Wykład 4: Klasy i Metody

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Programowanie telefonów z Windows Phone 7, cz. 4

1. Podstawowe usługi bezpieczeństwa. 2. Użytkownicy i role. przydzielanie uprawnie ń metodom, role komponentów, korzystanie i konfiguracja

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Przetwarzanie równoległe i współbieżne

Podstawy programowania obiektowego

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Systemy operacyjne na platformach mobilnych

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe zastosowanie języka Java SE

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

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Programowanie obiektowe

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

11.1 Obsługa błędów i wyjątków Polecenia try, throw, catch CLI C++, klasa Exception... 9

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

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

Wykład 1: Wprowadzenie do technologii Java

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Transkrypt:

WYKŁAD 6 JADE - Java Agent DEvelopment Framework http://jade.tilab.com/index.html JADE jest systemem oprogramowania ułatwiającym tworzenie systemów agentowych i wieloagentowych. Składa się z trzech części:! systemu czasu wykonania (runtime environment) środowiska w którym żyją programy agentów (jade.boot)! biblioteki klas, które są wykorzystywane do oprogramowania podstawowych funkcji życiowych agenta! zestawu narzędzi (programów) umożliwiających monitorowanie i administrowanie wszystkimi elementami infrastruktury JADE. Organizacja infrastruktury JADE: container - działająca instancja środowiska - systemu czasu wykonania platform - zbiór aktywnych instancji (uruchomionych na jednym komputerze lub na kilku komputerach połączonych siecią). Każda platforma zawiera przynajmniej jeden container, pierwszy z uruchomionych nazywa się main container. main container posiada zawsze dwóch specjalnych agentów: AMS - Agent Management System realizujący usługi nazywania-identyfikacji i zarządzania agentami, DF - Directory Facilitator realizujący usługi YellowPages 1

Instalacja:! system JADE i oprogramowanie agentów jest napisane w języku Java, do poprawnego działania konieczne jest wcześniejsze zainstalowanie JDK, przynajmniej w wersji 1.4 ( http://java.sun.com/j2se )! pliki instalacyjne systemu JADE można uzyskać ze strony internetowej TILAB: http://jade.tilab.com/index.html należy je rozpakować i skopiować do katalogu JADE (np. x:\jade ) jadebin.zip skompilowane-gotowe do użycia pliki systemu JADE w postaci zbioru archiwów JAR x:\jade\lib\jade.jar \jadetools.jar \Base64.jar \http.jar \iiop.jar Ścieżkę x:\jade należy dodać do CLASSPATH. Uruchomienie środowiska: java\jade.boot gui jadedoc.zip dokumentacja systemu, opis bibliotek, wraz z instrukcjami administrowania i programowania, w postaci HTML oraz plików PDF x:\jade\doc\api\ \examples\ \html\ \tools\ \tutorials\ jadesrc.zip kody źródłowe całego systemu JADE (free software, GNU License) jadeexamples.zip kody źródłowe demo oraz przykładów opisywanych w dokumentacji 2

Implementacja prostego agenta HalloWorld W systemie JADE agenci tworzeni są poprzez dziedziczenie własności podstawowej klasy jade.core.agent i przedefiniowanie podstawowych jej metod: protected void setup( ) This protected method is an empty placeholder for application specific startup code. protected void takedown( ) This protected method is an empty placeholder for application specific cleanup code. import jade.core.agent; public class HalloWorldAgent extends Agent protected void setup() System.out.println( Hallo World! my name is + getaid().getname()); uruchomienie kodu: java jade.boot Pierwszy:HalloWorldAgent Wybrane metody klasy jade.core.agent: void addbehaviour( Behaviour b ) This method adds a new behaviour to the agent. protected void afterclone() Actions to perform after cloning. protected void aftermove() Actions to perform after moving. protected void beforeclone() This empty placeholder method shall be overridden by user defined agents to execute some actions before copying an agent to another agent container. 3

protected void beforemove() This empty placeholder shall be overridden by user defined agents to execute some actions before the original agent instance on the source container is stopped ACLMessage blockingreceive( ) Receives an ACL message from the agent message queue. ACLMessage blockingreceive(long millis) Receives an ACL message from the agent message queue, waiting at most a specified amount of time. ACLMessage blockingreceive(messagetemplate pattern) Receives an ACL message matching a given message template. void doactivate() Make a state transition from suspended to active or waiting (whichever state the agent was in when dosuspend() was called) within Agent Platform Life Cycle. void doclone(location destination, java.lang.string newname) Make this agent be cloned on another location. void dodelete( ) Make a state transition from active, suspended or waiting to deleted state within Agent Platform Life Cycle, thereby destroying the agent. void domove(location destination) Make this agent move to a remote location. void dosuspend() Make a state transition from active or waiting to suspended within Agent Platform Life Cycle; the original agent state is saved and will be restored by a doactivate() call. void dowait() Make a state transition from active to waiting within Agent Platform Life Cycle. void dowait(long millis) Make a state transition from active to waiting within Agent Platform Life Cycle. void dowake() Make a state transition from waiting to active within Agent Platform Life Cycle. AID getaid() Method to query the private Agent ID. AID getams() Get the Agent ID for the platform AMS. getarguments( ) protected java. lang.object[] Get the array of arguments passed to this agent. AgentContainer getcontainercontroller() Return a controller for the container this agent lives in. ContentManager getcontentmanager() Retrieves the agent's content manager 4

int getcurqueuesize() This method retrieves the current lenght of the message queue of this agent. AID getdefaultdf() Get the Agent ID for the platform default DF. java.lang.string getlocalname( ) Method to query the agent local name. java.lang.string getname( ) Method to query the agent complete name (GUID). Location here( ) Method to retrieve the location this agent is currently at. void postmessage(aclmessage msg) Put a received message into the agent message queue. void putback(aclmessage msg) Puts a received ACL message back into the message queue. ACLMessage receive( ) Receives an ACL message from the agent message queue. receive( MessageTemplate pattern ) ACLMessage receive Receives an ACL message matching a given template. void removebehaviour( Behaviour b ) This method removes a given behaviour from the agent. void restore(java.io.inputstream s) This method reads a previously saved agent, replacing the current state of this agent with the one previously saved. void send( ACLMessage msg ) Send an ACL message to another agent. protected void setup() This protected method is an empty placeholder for application specific startup code. protected void takedown() This protected method is an empty placeholder for application specific cleanup code. void write(java.io.outputstream s) Write this agent to an output stream; this method can be used to record a snapshot of the agent state on a file or to send it through a network connection 5

Każdy z agentów ma swoją globalnie unikalną nazwę: <local-name>@<platform-name> Nazwa local-name nadawana jest w poleceniu uruchomienia agenta: java jade.boot... Tomek:HalloWorldAgent Janek:HalloWorldAgent Domyślna nazwa platformy <platform-name> ma postać: <main-host>:<main-port>/ JADE Inicjalizacja i kończenie życia agenta: Uruchamiając program agenta można mu z linii poleceń przekazać parametry inicjalizacyjne: java jade. Boot... Nazwa:myPackage.MyAgent( arg1 arg2 ) Zawartość tych parametrów może być odczytana za pomocą funkcji getarguments(): protected void setup() System.out.println( Hallo World! my name is + getaid().getname()); Object[] args = getarguments(); if (args!= null) System.out.println( My arguments are: ); for (int i = 0; i < args.length; i++) System.out.println( - + args[i] ); 6

Zakończenie życia agenta następuje po wywołaniu przez jego kod metody dodelete( ) lub w wyniku działań podjętych przez AMS. W ramach kończenia życia agenta automatycznie wywoływana jest metoda takedown( ), która powinna uporządkować (posprzątać) zasoby środowiska wykorzystywane przez agenta (na podobnej zasadzie jak destruktor). protected void setup( ) System.out.println( My name is + getaid().getname()); Object[] args = getarguments(); if (args!= null) System. out. println( My arguments are: ); for (int i = 0; i < args. length; i++) System.out.println( - + args[ i] ); dodelete( ); protected void takedown( ) System.out.println( Bye... ); Diagram cyklu życia agenta: 7

Działanie agenta poprzez wykonywanie zachowań (behaviour): Działanie agenta zazwyczaj realizowane jest poprzez równoległe wykonywanie wielu zachowań. Nowe zachowania są kreowane poprzez dziedziczenie po podstawowej klasie jade.core.behaviours.behaviour lub po jednej ze specjalizowanych klas: OneShotBehaviour CyclicBehaviour SequentialBehaviour ParallelBehaviour FSMBehaviour WakerBehaviour TickerBehaviour Hierarchia klas pakietu jade.core.behaviours: 8

Agent tworzy/uruchamia nowe zachowania poprzez wywołanie metody addbehaviour(... ) której parametrem jest nazwa klasy implementującej to zachowanie (zdefiniowanej na podstawie jade.core.behaviours) Każda klasa nowego zachowania musi implementować dwie metody: public void action() Implements what the behaviour actually does public boolean done() Informs, whether the behaviour is finished. Shemat działania głównego wątku agenta: 9

Przykłady: public class MyThreeStepBehaviour extends Behaviour private int step = 0; public void action( ) switch (step) ; case 0: // perform operation X step++; break; case 1: // perform operation Y step++; break; case 2: // perform operation Z step++; break; //switch(...) public boolean done( ) return step == 3; public class MyAgent extends Agent protected void setup( ) addbehaviour( new TickerBehaviour(this, 1000) protected void ontick( ) // perform operation Y System.out.println("\nMineła kolejna sekunda"); ); 10

Przykłady cd. import java.io.*; import jade.core.*; import jade.core.behaviours.*; import jade.lang.acl.*; public class AgentSender extends Agent protected void setup() addbehaviour(new SimpleBehaviour(this) private boolean finished = false; public void action() try System.out.println("\nEnter responder agent name: "); BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); String responder = buff.readline(); ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.addreceiver(new AID(responder)); msg.setcontent("firstinform"); send(msg); System.out.println("\nFirst INFORM sent"); dowait(5000); msg.setlanguage("plaintext"); msg.setcontent("secondinform"); send(msg); System.out.println("\nSecond INFORM sent"); dowait(5000); // same that second msg.setcontent("\nthirdinform"); send(msg); System.out.println("\nThird INFORM sent"); dowait(1000); msg.setontology("receivetest"); msg.setcontent("fourthinform"); send(msg); System.out.println("\nFourth INFORM sent"); finished = true; myagent.dodelete(); catch (IOException ioe) ioe.printstacktrace(); public boolean done() return finished; ); // addbehaviour(...) 11 dodanie i definicja zachowania