Systemy wieloagentowe (MAS) struktura komunikacji między agentami http://www.multiagent.com Autor: Zofia Kruczkiewicz
Agenda 1. Wprowadzenie do zagadnień komunikacji między agentami 2. Specyfikacje FIPA 3. Komunikacja między agentami BUI 4. Wiadomości typu ACL 5. Semantyka wiadomości ACL 6. Protokoły interakcji 7. Przykład aplikacji realizujacej standardowy protokół Contact-Net Projekt MASE 8. Zastosowanie różnych mechanizmów JADE (2) zastosowanie szablonów protokołów
1. Wprowadzenie do zagadnień komunikacji między agentami
Wieloagentowy system informatyczny
Jakie są agenty? Autonomous - autonomiczne Interactive - interaktywne Adaptive przystosowujące się Sociable zdolne do zachowań społecznych Mobile - mobilne Proxy mogą wystąpić jako pełnomocnicy w różnych zadaniach Proactive zorientowane na cel Rational zdolne do racjonalnego działania Unpredictable - nieprzewidywalne Temporally continuous zdolne do ciągłej realizacji procesu Transparent and accountable - zrozumiałe i odpowiedzialne Coordinative skoordynowane planem, mechanizmami zarządzania Cooperative - współpracujące Competitive rywalizujące bez wyrządzania szkody innym agentom Rugged zdolne do zarządzania danymi obarczonymi błędami i danymi niepewnymi Trustworthy godne zaufania
Klasyfikacja paradygmatów agentów Autonomia dynamiczna (reaktywna, proaktywna) wynika z wewnętrznej struktury agenta nieprzewidywalna, przewidywalna wynika z zewnętrznych warunków Adaptacja Reakcja Wnioskowanie Uczenie Ewolucja Interakcja Komunikacja Koordynacja Kooperacja Współzawodnictwo
Interakcja - Dostępne, otwarte, niedeterministyczne, dynamiczne, ciągłe (wg J.Ferber)
2. SPECYFIKACJE FIPA Foundation for Intelligent Physical Agents normy- specyfikują zewnętrzne zachowania agenta i jego współpracę z innymi podsystemami ujętymi w specyfikacji FIPA informacje o aplikacjach określające sposób użycia technologii FIPA
Specyfikacje FIPA 2005 (97)
Część 1 - Agent Management Część 1 opisuje normy dotyczące: istnieniem agentów operacyjnością agentów zarządzaniem agentami Definicja platformy agenta, pojęcie białej i żółtej księgi, przysyłaniem wiadomości oraz zarządzaniem cyklami życia agenta, akty komunikacyjne agenta wyrażające jego inteligentne zachowanie oraz odpowiadająca ontologia oraz język zawartości wiadomości
Część 2 - Język komunikacji agenta The FIPA Agent Communication Language (ACL) jest oparty na teorii aktów mowy: wiadomości są aktami komunikacyjnymi. Specyfikacja składa się : ze zbioru typów wiadomości, które zawierają opis pragmatyki tych wiadomości wyrażające stosunek typu BUI agenta do innego agenta/agentów. Opis jest przedstawiony w formie narracyjnej i formalnej opartej na logice modalnej. Ze zbioru opisów protokołów komunikacji
Część 3 - Reprezentacja wiadomości i transportu wiadomości FIPA Agent Message Transport specifications deal with the transport and representation
Część 4 - Integracja Agent/Software Część 4 opisuje sposób integrowania oprogramowania nieagentowego z oprogramowaniem agentowym: Systemy baz danych Oprogramowanie sieciowe Oprogramowanie narzędziowe
Część 5 - Aplikacje (Osobisty Asystent Podróży) Turystyka obejmuje następujące komponenty: Zaopatrzeniowiec Pośrednik Usługi osobiste Role te pełni agent typu PTA - Personal Travel Agent
Część 5 - Aplikacje (Osobisty Asystent) Jest nim półautonomiczny agent typu PA (Personal Assistant) o następujących cechach: Realizuje usługi zaopatrzeniowe Informuje Zarządza podstawowymi danymi Organizuje rozrywkę Planuje czas przeznaczony na pracę i odpoczynek Organizuje spotkania Część 5 - Aplikacje (Przedsięwzięcia Audio/Video i transmisje) Wybór właściwych programów uwzględniając preferencje użytkownika Negocjowanie zmiany w programach
Część 5 - Aplikacje (Zarządzanie i zabezpieczanie sieci) Dostarczanie usług końcowym użytkownikom zgodnie z zasadą jakości usług i kosztu usług Idea VPN (Virtual Private Network) połączenia z wybranymi użytkownika na ich życzenie, dostarczanie usług audiowizualnych Zapewniają te usługi trzy typy agentów: The Personal Communications Agent (PCA) reprezentuje użytkownika The Service Provider Agent (SPA) - dostarcza usługi The Network Provider Agent (NPA) umożliwia dostęp do sieci
3. Komunikacja między agentami - BUI Cechy komunikacji : Komunikacja między agentami wynika ze spełnianych przez nich misji. Oparta jest ona na następujących mentalnych atrybutach agenta: Belief (wiara) oznacza zbiór propozycji, które agent akceptuje i zbiór propozycji, które agent nie akceptuje podczas negocjacji Uncertainty (niepewność) oznacza zbiór propozycji, które agent akceptuje lub nie akceptuje z pewnym poziomem niepewności, czy są prawdziwe lub fałszywe. Oznacza to, że agent przyjmuje model negocjacji, gdy przedmiotem jest niepewna informacja Intention (intencja) oznacza intencję, zamiar lub cel lub zbiór celów, które agent uważa za prawdziwe i te, w ktore agent nie wierzy. Intencje są przedstawiane w postaci planu akcji (np. za pomocą mapy stanów), prowadzących do zmiany stanów świata rzeczywistego, wybieranych przez agenta
Wnioski (1) Sprzeczności: dana jest propozycja p - wtedy stan wiary p, stan niewiary p, stan niepewności p i stan pewności p wykluczają się wzajemnie. W rozproszonych systemach agent jest jedynie zdolny do spełnienia swoich intencji za pomocą wpływu wywieranego na innych agentów do wykonania akcji. Wpływ wywierany na innych agentów osiąga się za pomocą specjalnej klasy akcji zwanych aktami komunikacyjnymi (communicative acts) czyli wysyłaniu wiadomości zawierających zakodowany akt komunikacyjny przez nadawcę do odbiorcy. Ważną rolę odgrywa typ wiadomości oraz posiadanie tej samej wiedzy opartej na koncepcji BUI. Np. Agent i wierzy, że lepiej jest czytać książki niż oglądać TV i uważa, że agent j będzie uważał podobnie. Agent i w ACL inform informuje j swojej o wierze. Agent j na podstawie semantyki inform wie, że agent i chce wpłynąć na jego intencje dotyczące wiary w wartość czytania książek, ale dla agenta j przyjęcie wiary agenta i może stanowić pewien problem.
Wnioski (2) transport wiadomości między agentami struktura wiadomości syntaktyka transportu wiadomości ACL w postaci strumienia bajtów katalog standardowych aktów komunikacyjnych zbiór i definicja podstawowych protokołów komunikacji zawierających zbiór wiadomości definicja modelu semantyki komunikacji.
4. Wiadomości typu ACL
Cechy wiadomości - FIPA ACL Typ wiadomości jest zgodny z typem zawartości wiadomości, którą powinna charakteryzować: kompletność prostota zwięzłość. Wiadomość reprezentuje akt komunikacyjny, jest jego synonimem Semantyka języka komunikacji jest oparta na precyzyjnym formalizmie, pozbawionym sprzeczności.
Wymagania transportu wiadomości ACL Usługę transportu wiadomości spełnia system zarządzania agentami Wymagania usług transportu wiadomości (niezbędne): przesyłanie zakodowanej wiadomości w postaci sekwencji bajtów usługi transportu powinny być niezawodne, dokładne, uporządkowane (kolejność) nie spełnienie tych własności powinno być sygnalizowane agent ma opcję wyboru sposobu odebrania wiadomości: uśpienie lub oczekiwania na wiadomość (tryb synchroniczny) lub wykonywanie innych czynności podczas oczekiwania na odpowiedź czas przeterminowania nie jest parametrem aktu komunikacyjnego, tylko systemu usług transportu wiadomości po wykryciu błędów, system może wysłać informację o tym fakcie do nadawcy w postaci wiadomości o błędzie system zapewnia wybór poprawnego mechanizmu transportu (TCP/IP, SMTP, HTTP, etc)
Wymagania dotyczące wiadomości ACL Wymaganie 1: Agenty mogą wysłać wiadomość not-understood, jeśli otrzymają wiadomość, której nie rozpoznają lub nie są w stanie odczytać zawartości wiadomości. Agenty muszą odebrać i obsłużyć taką wiadomość Wymaganie 2: Agent powinien posiadać predefiniowany zbiór typów wiadomości i protokołów, zgodnych z definicją semantyki aktów komunikacyjnych Wymaganie 3: Agent nie może zmieniać znaczenia istniejących predefiniowanych aktów komunikacyjnych Wymaganie 4: Agenty mogą wprowadzać nowe akty komunikacyjne zrozumiałe przez odbiorcę, jednak nie wolno im nadawać znaczenia istniejących aktów komunikacyjnych.
Wymaganie 5: Agent powinien poprawnie syntaktycznie formułować zawartość generowanej wiadomości oraz z taką samą poprawnością odczytywać wiadomości. Zawartość wiadomości Zawartość wiadomości odpowiada przeznaczeniu aktu komunikacyjnego. Wiadomość czyli akt komunikacyjny jest zdaniem, natomiast zawartość jest gramatycznym obiektem zdania. Zawartość jest zapisana w języku podanym w parametrze :language. Wymaganie 6: Ogólnie, język zawartości wiadomości musi wyrażać propozycje, obiekty i akcje. Język ten służy jedynie do wyrażania typów akcji: propozycji, informowania, żądania itp. Stany propozycji - true lub false Obiekty rzeczy abstrakcyjne lub konkretne Akcje agent staje sie aktywny (iota <variable> <term>) np. iota x(p x) oznacza, że x taki, że P [jest prawdziwe] dla x. Słowo iota jest konstruktorem dla termów.
Definicja 1: Język zawartości wiadomości FIPA jest oparty na gramatyce s-wyrażeń lub jej podgramatyce i umożliwia wyrażanie propozycji, obiektów i akcji odpowiadających cyklowi życia agenta. Wymaganie 7: Agent jest zobowiązany do wyrażania swoich możliwości wymieniając wiadomości napisane za pomocą języka zawartości wiadomości i stosując określoną ontologię.
Budowa wiadomości ACL
Parametry :performative :sender :receiver :reply-with :in-reply-to :envelope Znaczenie wiadomości typ wiadomości Nazwa agenta nadającego akt komunikacyjny (opcjonalna) Nazwa agenta, do którego wysłana jest wiadomość. Może to być pojedyncza nazwa lub zbiór nazw agentów - multicasting (opcjonalna) Atrybut zawiera wyrażenie, które identyfikuje oryginalną wiadomość. Może być używane w wątku konwersacji, jeśli jednocześnie prowadzi się kilka dialogów jednocześnie. Np. Agent i wysyła wiadomość do agenta j wiadomość, która zawiera :reply-with query1, agent j powinien odpowiedzieć :in-reply-to query1. Wiadomość wysłana jako odpowiedź zawiera w tym atrybucie wyrażenie, które jest również zawarte w parametrze reply-with w odebranej wiadomości, Wyrażenie użyteczne dla systemu usług transportowych i zawiera czas wysłania, czas odbioru, trasę itp. Struktura koperty jest listą par słów kluczowych, które oznaczają pewne aspekty usług wiadomości
:content :language :encoding :ontology :reply-by :protocol :conversationid Atrybut zawiera dane wiadomości, czyli treść akcji Atrybut zawiera schemat kodowania zawartości wiadomości. Opis kodowania wyrażeń zawartych w wiadomości Oznacza ontologię, która jest używana do podania znaczenia symboli używanych w wyrażeniu zawartości wiadomości (często domyślna) Oznacza czas i/lub datę wyrażenia, która oznacza najdłuższy czas, po którym wysyłający agent oczekuje na odpowiedź Identyfikator oznacza protokół, który zastosował wysyłający agent. Protokół dodatkowo podaje kontekst wiadomości (opcjonalny). W domyślnej sytuacji każda wiadomość może być traktowana indywidualnie, bez stosowania protokołu. Nadaje się wtedy niezerowy conversation-id. Odpowiedzi mogą być identyfikowane za pomocą tego samego conversation-id. Czas przeterminowania w reply-by oznacza maksymalny czas oczekiwania na kolejną wiadomość wyznaczoną przez protokół Wyrażenie jest używane do identyfikacji sekwencji wychodzących wiadomości, które tworzą konwersację. Konwersacja może być użyta do zarządzania strategią komunikacji i aktywności agenta oraz do dodatkowej interpretacji znaczenia wiadomości
Wykaz standardowych wiadomości ACL
Typ wiadomości accept proposal agree cancel cfp confirm disconfirm failure inform inform if (macro act) inform ref (macro act) Interpretacja znaczenia wiadomości Nadawca akceptuje wykonanie zadania przez odbiorcę, które zostało wcześniej zaproponowane przez odbiorcę Nadawca zgadza się na wykonanie zleconego zadania przez odbiorcę w przyszłości po spełnieniu pewnych warunków Nadawca anuluje wykonania zadania przez odbiorcę Nadawca podaje propozycję wykonania zadania przez odbiorcę, podając definicję tego zadania Nadawca potwierdza odbiorcy, że ufa wysłanej wcześniej przez niego informacji (nadawca zazwyczaj nie ufa) Nadawca potwierdza odbiorcy, że nie ufa wysłanej wcześniej przez niego informacji (nadawca zazwyczaj ufa) Nadawca wykonuje zadanie, ale powiadamia odbiorcę, że nie może go skończyć Nadawca przesyła propozycję do odbiorcy Nadawca przesyła propozycję do odbiorcy, podając, czy jest prawdziwa Nadawca przesyła wiadomość do odbiorcy, zawierającą odwołanie do propozycję,
not understood propose query if query ref refuse reject proposal request request when request whenever subscribe Nadawca nie rozumie wiadomości otrzymanej wcześniej od odbiorcy i informuje go o tym Nadawca informuje odbiorcę, że przyjmuje jego propozycje wykonania zadania, podanego w wiadomości cfp Nadawca pyta odbiorcę, czy wysyłana propozycja jest prawdziwa Nadawca pyta odbiorcę, czy wskazana propozycja w wiadomości jest prawdziwa Nadawca odmawia odbiorcy wykonania zadania Nadawca nie przyjmuje propozycji od odbiorcy Nadawca żąda wykonania zadania przez odbiorcę Nadawca żąda wykonania zadania przez odbiorcę, kiedy zostaną spełnione podane propozycje Nadawca żąda wykonania zadania przez odbiorcę, w dowolnym momencie, kiedy zostaną spełnione podane propozycje w wiadomości Nadawca żąda, aby był przez odbiorcę powiadamiany o wskazanej informacji oraz o zmianach tej informacji
Zależności między wiadomościami ACL
Typ wiadomości Kategorie wiadomości Przesyłanie informacji Żądanie informacji Negocjacje Wykonanie akcji Osługa błędu accept-proposal + agree cancel + + cfp + confirm disconfirm + + failure + inform inform-if (macro act) inform-ref (macro act) + + + not-understood + propose + query-if query-ref + + refuse + reject-proposal + request request-when request-whenever + + + subscribe +
5. Semantyka wiadomości ACL
Semantyka języka ACL Język semantyki typu Semantic Language (SL) jest formalnym językiem używanych do definicji semantyki języka typu FIPA Agent Communication Language (FIPA ACL).
(I John (B Bob(temperature 10)))
Przykłady Definicja aktu komunikacyjnego <i, act (j, C)> Równoważna definicja aktu komunikacyjnego (act :sender i :receiver j :content C) FP: φ1 RE: φ2 gdzie i jest inicjatorem akcji, j jest uczestnikiem, act jest nazwą aktu, C reprezentuje semantyczny kontekst φ1 and φ2 są propozycjami, FP jest możliwym skutkiem działania act, RE jest racjonalnym efektem działania act.
Przykład (1) ogólny model request Model aktu komunikacyjnego typu request (FIPA00037, 2000): <i, request (j, a)> FP: φ1 RE: φ2 Równoważny zapis (request :sender i :receiver j :content a) FP: FP(a) [i\j] Bi Agent (j, a) Bi Ij Done (a) RE: Done (a)
Przykład (1) zastosowanie request Agent x żąda od agenta y, aby ten zarezerwował mu bilet. (request :sender (agent-identifier :name x) :receiver (set (agent-identifier :name y)) :content "((action (agent-identifier :name y) (reserve-ticket LHR MUC 27-sept-97) ))" :protocol fipa-request :language fipa-sl :reply-with order567)
Przykład (1) ogólny model agree Jeśli agent i może wykonać polecenie, wysyła wiadomość typu agree do agenta j <i, agree (j, <i, request>, φ))> <i, inform (j, Ii Done (<i, act>, φ))> FP: Bi α Bi (Bifj α Uifj α) RE: Bj α gdzie: α = Ii Done(<i, act>, φ)
Przykład (1) - zastosowanie agree Agent y odpowiada agentowi x, że zgadza się, ale pod warunkiem, że na koncie agenta x znajduje się wystarczająca ilość pieniędzy. (agree :sender (agent-identifier :name y) :receiver (set (agent-identifier :name x)) :content "( (action (agent-identifier :name y) (reserve-ticket LHR MUC 27-sept-97)) (sufficient- funds ac12345))" :in-reply-to order567 :protocol fipa-request :language fipa-sl)
Przykład (1) - ogólny model refuse Jeśli agent i odmawia agentowi j wykonania polecenia wysłanego w wiadomości typu request, wysyła do niego wiadomość typu refuse <i, refuse (j,<i, act>,φ)> <i, disconfirm (j, Feasible(<i, act>))>; <i, inform (j, φ Done (<i, act>) Ii Done (<i, act>))> FP: Bi Feasible (<i, act>) Bi (Bj Feasible (<i, act>) Uj Feasible (<i, act>)) Bi α Bi (Bifj α Uifj α) RE: Bj Feasible (<i, act>) Bj α gdzie: α = φ Done (<i, act>) Ii Done (<i, act>)
Przykład (1) zastosowanie refuse Agent y odpowiada, że odmawia rezerwacji biletu agentowi y, ponieważ brakuje pieniędzy na koncie (refuse :sender (agent-identifier :name y) :receiver (set (agent-identifier :name x)) :content "((action (agent-identifier :name y) (reserve-ticket LHR MUC 27-sept-97)) (insufficient- funds ac12345))" :in-reply-to order567 :protocol fipa-request :language fipa-sl)
Przykład (2) call for proposal Agent j składa propozycję agentowi i sprzedania mu 50 skrzynek śliwek (cfp :sender (agent-identifier :name j) :receiver (set (agent-identifier :name i)) :content "((action (agent-identifier :name i) (sell plum 50)))" :ontology fruit-market :reply-with proposal2 )
Przykład (2) refuse Agent i odmawia agentowi j zakupu śliwek, gdy j nie ma wystarczającej kwoty na koncie: (refuse :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "((action (agent-identifier :name i) (sell plum 50)) (insufficient-funds ac12345))" :language fipa-sl)
Przykład (2) - propose Agent i informuje j, że sprzeda 50 skrzynek ze śliwkami w cenie $200: ( propose :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "((action i (sell plum 50))(cost 200))" :ontology fruit-market :language fipa-sl :in-reply-to proposal3)
Przykład (2) reject-proposal Agent i informuje j, że odrzuca ofertę kupna śliwek od j, ponieważ cena jest za wysoka (reject-proposal :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "((action (agent-identifier :name j) (sell plum 50)) (cost 200) (price-too-high 50))" :in-reply-to proposal3)
Przykład (2) - inform (inform :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "((action (agent-identifier :name j) (sell plum 50)) (cost 200))" :language sl)
Przykład (2) - failure (failure :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "((action (agent-identifier :name j) (sell plum 50)) (error-message "No plum")) :language sl)
6. Protokoły interakcji Używane wiadomości w różnych konwersacjach mogą tworzyć pewien szablon, co prowadzi do definicji nowego typu protokołu interakcji Wymaganie 8: Agent nie musi implementować standardowych protokołów, jednak jeśli przyjęto nazwę standardowego protokołu, musi ona odpowiadać podanej w specyfikacji FIPA. Agent może brać udział w kilku konwersacjach jednocześnie prowadząc dialog z wieloma agentami. Konwersacje te mogą należeć do różnych protokołów. Należy zapewnić rozróżnialność poszczególnych wiadomości należących do różnych protokołów i konwersacji.
Przykład Specyfikacja protokołu, jeśli jest operacją (request :sender i :receiver j :content some-act :protocol fipa-request )
Notacja standardowego opisu protokołu prostokaty z podwójnymi krawędziami reprezentują akt komunikacyjny Biały prostokąt reprezentuje akcje podejmowane przez nadawcę Szare prostokaty reprezentują akcje podejmowane przez pozostałych uczestników protokołu Tekst napisany italikiem reprezentuje komnetarz
Protokół FIPA-request
Protokół FIPA-request-when
FIPA-query Protocol
Protokół FIPA-contract-net
FIPA-Iterated-Contract-Net Protocol
7. Przykład aplikacji realizujacej standardowy protokół Contact- Net Projekt MASE
receive(inform) receive(failure) send(cfp) send(reject-proposal) receive(propose) Deadline for proposals send(accept -proposal)
send(failure) send(inform) receive(cfp) receive(reject -proposal) refuse send(propose) receive (acceptproposal)
8. Zastosowanie różnych mechanizmów JADE (2) zastosowanie szablonów protokołów
Zachowania Jade
Inicjator protokołu import jade.core.*; import jade.lang.acl.aclmessage; import jade.proto.contractnetinitiator; import jade.domain.fipanames; import java.awt.event.*; import java.util.*; import javax.swing.*; // deficja agenta typu inicjator protokołu typu FIPA-Contract-Net public class ContractNetInitiatorAgent1 extends Agent { int inicjowanierandom; //dane do realizacji losowych zadań int liczbaodbiorcow; //liczba agentów usługodawców String odbiorcy = ""; //łańcuch zawierający nazwy agentów usługodawców //wiadomość typu cfp protokolu ContarctNet ACLMessage wiadomosc = new ACLMessage(ACLMessage.CFP); //definicja komponentów interfejsu graficznego agenta typu inicjator //metoda Ramka tworząca interfejs graficzny użytkownika i przygotowująca wiadomość typu cfp void Ramka(Agent a) { final Agent ag = a; ramka = new JFrame("Agent inicjator"); ramka.setsize(300, 420); ramka.setdefaultcloseoperation(jframe.dispose_on_close);
//obsługa zdarzeń GUI agenta usługobiorcy zatwierdz.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent evt) { // kod źródłowy metody, która przygotowuje wiadomość typu cfp // i wstawia zachowanie typu NowyContractNetInitiator //które po uruchomieniu wysyła wiadomość typu cfp } }); //wstawianie komponentów GUI do obiektu ramka typu JFrame @Override // wywołanie metody setup agenta inicjujące działania agenta protected void setup() { Ramka(this); }} //definicja klasy typu Behaviour do obsługi protokołu typu FIPA-Contract-Net po stronie agenta inicjatora class NowyContractNetInitiator extends ContractNetInitiator { int liczbaodbiorcow; int inicjowanierandom; JTextArea komentarz; //kontakt z GUI agenta inicjatora NowyContractNetInitiator(Agent agent, ACLMessage wiadomosc, int liczbaodbiorcow_, int inicjowanierandom_, JTextArea kom) { // kod źródłowy konstruktora }
@Override //obsługa odbioru wiadomości typu refuse protected void handlerefuse(aclmessage refuse) { // kod źródłowy metody } @Override // obsługa odbioru wiadomości typu propose protected void handlepropose(aclmessage propozycja, Vector v) { // kod źródłowy metody } //obsługa odbioru wiadomości typu propose oraz przygotowanie się do wysłania wiadomości typu //reject-proposal lub accept-proposal @Override protected void handleallresponses(vector odbiorcy, Vector wybrani) { //reakcja na przekroczenie czasu oczekiwania na propozycje // kod źródłowy metody } @Override // obsługa odbioru wiadomości typu failure protected void handlefailure(aclmessage failure) { // kod źródłowy metody } @Override //obsługa wiadomości typu inform protected void handleinform(aclmessage inform) { // kod źródłowy metody } //pomocnicza metoda do obsługi zlecania zadań public byte[] wypelnij(int n, int m, int offset, int zakres) { // kod źródłowy metody return tablica1; } }
Odbiorca import jade.core.agent; import jade.lang.acl.*; import jade.domain.*; import jade.domain.fipaagentmanagement.*; import jade.proto.contractnetresponder; import javax.swing.*; // klasa agenta typu odbiorca public class ContractNetResponderAgent1 extends Agent { // definicja komponentów GUI agenta odbiorcy //metoda Ramka służy do budowy GUI agenta odbiorcy void Ramka() { // kod źródłowy metody tworzacej GUI } // metoda inicjująca agenta typu odbiorca - tworzy GUI użytkownika // i wstawia zachowanie agenta typu NowyContractNetResponder // do obsługi nadawania i odbioru wiadomości po stronie odbiorczej protokołu @Override protected void setup() { // kod źródłowy metody }
// definicja klasy NowyContractNetResponder do obsługi // nadawania i odbioru wiadomości po stronie odbiorczej // protokołu FIPA-Contract-Net class NowyContractNetResponder extends ContractNetResponder { JTextArea komentarz; // elementy łączące z GUI agenta //odbiorcy JFrame ramka; //definicja konstruktora klasy NowyContractNetResponder NowyContractNetResponder(Agent agent, MessageTemplate szablon, JTextArea komentarz_, JFrame ramka_) { //kod źródłowy konstruktora }
// metoda do obsługi wysłania wiadomości propose lub wysłania wiadomości refuse @Override protected ACLMessage prepareresponse( ACLMessage wezwanie_do_propozycji) throws NotUnderstoodException, RefuseException{ // kod źródłowy metody } // metody do obsługi odbioru wiadomości typu reject-proposal @Override protected void handlerejectproposal(aclmessage wezwanie_do_propozycji, ACLMessage propozycja, ACLMessage akceptacja) { // kod źródłowy metody } // metoda do obsługi wysłania wiadomości propose lub wysłania wiadomości refuse oraz // wysłania wiadomości typu inform w przypadku zaakceptowania propozycji zawartej // w wiadomości propose wykonania zadania lub failure w przypadku niepowodzenia // podczas realizacji zadania @Override protected ACLMessage prepareresultnotification( ACLMessage wezwanie_do_propozycji, ACLMessage propozycja, ACLMessage akceptacja) throws FailureException { // kod źródłowy metody } //koniec metody } //koniec definicji klasy NowyContractNetResponder
Start systemu agenta inicjator przygotowuje dane zlecanego zadania, agenci odbiorcy r1 i r2 oczekują na wiadomość typu cfp
Przygotowanie danych do wysłania wiadomości typu propose przez agentów typu odbiorcy
Reakcje agenta inicjatora na spóźnione nadesłanie wiadomości typu propose ze strony agentów usługodawców wysłanie wiadomości reject-proposal
Przypadek odebrania propozycji wysłanych przez agentów usługodawców agentowi wysłanie accept-proposal oraz reject-proposal
Przypadek akceptacji przez agenta usługobiorcę propozycji w wiadomości propose wysłanej przez agenta usługodawcę r1 i następnie wysłanie przez agenta r1 informacji o wykonanym zadaniu wysłanie inform