Wojciech PIEPRZYCA WyŜsza Szkoła foratyki i Zarządzania w Bielsku-Białej Studiu Doktoranckie foratyki Wydział Autoatyki, Elektroniki i foratyki Politechnika Śląska eail: wojtek@wsi.edu.pl ANALIZA PROCESÓW KOMUNIKACYJNYCH W SYSTEMACH WIELOAGENTOWYCH Z WYKORZYSTANIEM JĘZYKA KQML Streszczenie: Artykuł oawia zagadnienia związane z oŝliwością wyiany inforacji w systeach wieloagentowych. W ty celu przedstawiono odel kolorowanej sieci Petriego stworzony do zobrazowania i syulacji procesów kounikacji agentów oraz przykładowe diagray określające sekwencje wyiany inforacji poiędzy agentai za poocą odpowiednich perforatywów języka KQML. Słowa kluczowe: kounikacja agentów, systey wieloagentowe, język KQML, sieci Petriego Suary: The article includes discussion on inforation exchange within ultiagent systes. For this purpose Petri net odel was created to represent and siulate agent counication processes. Exeplary data exchange sequences between agents using KQML perforatives were illustrated with sequence diagras. Keywords: agent counication, ultiagent systes, KQML, Petri nets. Wprowadzenie Systey wieloagentowe duŝą część swojej efektywności opierają na odpowiedniej kooperacji i koordynacji wykonywanych zadań. W ty celu konieczne jest udostępnienie odpowiednich etod kounikacji agentów.in. zdefiniowanie języka za poocą którego agenci będą ogli się kounikować oraz wyieniać wiadoości, a takŝe wiedzę. Jedną z propozycji takiego języka jest KQML (Knowledge Query Manipulation Language). Język KQML zaprojektowany został przez grupę Knowledge Sharing Effort działającą pod auspicjai DARPA (Defense Advanced Research Projects Agency) []. W systeach agentowych język ten wykorzystywany jest do wyiany kounikatów oraz wiedzy poiędzy autonoicznyi agentai. Zapytania i polecenia zadawane w języku KQML operują na bazie wiedzy związanej z dany agente. W szczególności nie usi to być baza wiedzy w tradycyjny znaczeniu, ale równieŝ tzw. wirtualna baza wiedzy, która zdefiniowana jest jako zwykła struktura prograu agentowego lub traktowana jako inforacje zawarte w standardowej bazie danych. Zapytania ogą uoŝliwiać sprawdzanie zawartości bazy wiedzy, jej aktualizację, itp.
Wiadoość (jednostka wyiany inforacji) w języku KQML określana jest jako perforatyw. Pojęcie to wywodzi się z teorii aktu owy i jest definiowane w naukach związanych z lingwistyką. Ogólnie perforatywy oŝey podzielić na: kounikaty asertoryczne (stwierdzenia), kounikaty dyrektywne (polecenia, pytania, sugestie), kounikaty deklaratywne (inforacje o uiejętnościach nadawcy). Język KQML posiada pewien predefiniowany zbiór perforatywów, których działanie jest określone i nie oŝe być zieniane. Zbiór ten jest jednak rozszerzalny tzn. w zaleŝności od potrzeb oŝna definiować własne perforatywy o działaniu określony w raach specyfikowanego systeu agentowego. Perforatyw w języku KQML jest ciągie znaków ASCII, zgodnie ze zdefiniowaną dla tego języka graatyką opartą na prefiksowej notacji polskiej. KaŜda wiadoość oprócz swej nazwy identyfikującej rodzaj perforatywu, posiada zbiór paraetrów w postaci :nazwa wartość np. :sender agent (paraetr określający nazwę nadawcy wiadoości). Kolejność występowania paraetrów jest dowolna. Najczęściej występujące paraetry wiadoości w języku KQML przedstawia tabela. Tabela. Podstawowe paraetry perforatywów w języku KQML [2]. Paraetr Znaczenie :sender Nadawca wiadoości :receiver Odbiorca wiadoości :reply-with Jeśli paraetr ten nie występuje lub a wartość nil oznacza to, Ŝe nadawca nie oczekuje odpowiedzi na tę wiadoość. W przeciwny przypadku pole zawiera identyfikator na który powoła się odbiorca odpowiadając na tę wiadoość (wpisując ten identyfikator w pole :inreply-with). :in-reply-to Identyfikator określający na jaką wiadoość odpowiada agent :language Język w który reprezentowana jest zawartość wiadoości (:content) :ontology Nazwa ontologii do której odnosi się zawartość wiadoości (:content) :content Zawartość wiadoości :force Określa czy nadawca w przyszłości oŝe zienić znaczenie tego perforatywu. Saa zawartość wiadoości jest transparentna dla KQML i oŝe być reprezentowana w róŝnych językach, zarówno stosujących forat znaków ASCII jak i kod binarny, nie jest to przediote standardu języka KQML. Nieniej jednak najczęściej stosowanyi językai dla pola zawartości :content są języki uoŝliwiające reprezentowanie zawartości bazy wiedzy np. KIF (Knowledge terchange Forat), Prolog, itp. Język KIF oparty jest na logice pierwszego rzędu. Został opracowany przez grupę KSE (Knowledge Sharing Effort) zajującą się językai reprezentacji wiedzy ze szczególny uwzględnienie probleu wyiany wiedzy poiędzy heterogenicznyi systeai inforatycznyi. Niektóre z najwaŝniejszych cech języka KIF to [3]: - ipleentacja niezaleŝna od seantyki, - ekspresyjność, oŝliwość tłuaczenia i reprezentacji większości systeów reprezentacji wiedzy, - język jest czytelny dla ludzi.
Przykłady wyraŝeń w języku KIF: Teperatura = 83 stopnie C (= (teperature ) (scalar 83 Celsius)) X jest kawalere jeŝeli jest ęŝczyzną i nie jest Ŝonaty (=> (and (an?x) (not (arried?x))) (bachelor (?x)) 2. Wiadoość w języku KQML Wiadoość w języku KQML składa się z listy eleentów otoczonych przez parę nawiasów i rozdzielonych spacjai. Pierwszy eleent wiadoości to określenie rodzaju perforatywu, wszystkie kolejne eleenty występujące na liście to paraetry. (ask-one :sender A :receiver B :reply-with 0 :language KIF :ontology book :content (price ISBN-58053-605-0?x)) W powyŝszej przykładowej wiadoości, perforatyw to ask-one. Nadawcą wiadoości jest agent A, wiadoość przesyłana jest do odbiorcy o nazwie B. Dodatkowo określono nazwę języka (KIF) i ontologii (book), w których wyraŝona jest zawartość wiadoości (:content). Pole content zawiera zapytanie sforułowane w języku KIF dotyczące ceny ksiąŝki o podany nuerze ISBN. 3. Model systeu agentowego A Agent AgentA Agent Agent B B Agent Agent C C Sender AgentA Nae A A A B B B Sender AgentB Nae C C C Sender AgentC Nae Counication Channel Counication Channel F F Facilitator Facilitator F Rys.. Syste wieloagentowy
Przedstawiony odel został stworzony za poocą kolorowanej sieci Petriego. Głównyi składowyi odelu są 3 hierarchiczne strony: Agent przedstawia działanie agenta, Counication Channel obrazuje sposób przesyłania wiadoości poiędzy agentai oraz Facilitator reprezentuje sposób realizacji zadań przez agenta wspoagającego. Dla uproszczenia przyjęto, Ŝe w systeie istnieje trzech agentów zwykłych (A,B,C) oraz jeden agent wspoagający (Facilitator), Przesyłane wiadoości trafiają do skrzynek poszczególnych agentów (A, B, itd.). A TransitA send(#receiver,f,) F send(#receiver,f,) send(#receiver,a,) A send(#receiver,f,) send(#receiver,a,) send(#receiver,a,) TransitF F send(#receiver,b,) send(#receiver,b,) B send(#receiver,b,) B TransitB send(#receiver,c,) send(#receiver,c,) send(#receiver,c,) C Rys. 2. Kanał kounikacyjny TransitC C W kanale kounikacyjny (rys.2) następuje transport wiadoości poiędzy agentai. Tranzycje Transit powodują pobranie znacznika (wiadoości) z iejsca agentanadawcy i dodanie znacznika (wiadoości) do iejsca agenta-odbiorcy. Wiadoość przekazywana jest tylko wówczas, gdy funkcja send określi, iŝ agent jest odbiorcą określonej wiadoości. 4. Model agenta KaŜdy agent zwykły odelowany jest jako instancja strony Agent (rys. 3). W czasie syulacji uŝytkownik wybiera jeden z dziewięciu perforatywów, który a zostać utworzony. W zaleŝności od wybranego rodzaju wiadoości jej utworzenie następuje w jednej z podstron: prepare sgtoa (perforatywy kierowane do innych agentów zwykłych), prepare sgtof (perforatywy obsługiwane przez agenta wspoagającego) lub prepare standby (perforatyw standby). Tak utworzona wiadoość przekazywana jest do iejsca Ready skąd oŝe zostać przesłana do kanału kounikacyjnego poprzez odpalenie tranzycji Send Perforative. Wiadoość przychodząca oŝe być odebrana poprzez uruchoienie tranzycji Receive Perforative powodującej dodanie znacznika (wiadoości) do skrzynki agenta (). W zaleŝności od rodzaju nadesłanego perforatywu załączonego w wiadoości dalsza obsługa następuje w podstronie Ask, Recoend, Streaall lub Standby. W stanie początkowy aktywna jest jedynie tranzycja Choose perforative.
Send Perforative Ready sgtoa prepare sgtoa sgtoa sgtof Ask Recoend Streaall sgtof prepare sgtof standby prepare standby Ask ask Recoend recoend Streaall streaall Standby standby i i i `askone++ `askall++ `advertise++ `recruitone++ `brokerone++ `recoendone++ `streaall++ `broadcast++ `standby p Perforatives it it Choose perforative pstart() 9 Perforative {perf=p,sender=se} se Agent I/O Nae Receive Perforative Rys. 3. Model agenta 5. Podstawowe perforatywy Podstawowe perforatywy uoŝliwiają tworzenie prostych zapytań do bazy wiedzy agenta [2]. a) ask-one nadawca prosi odbiorcę o odpowiedź na zapytanie zawarte w polu :content. Odpowiedź tworzona jest na podstawie bazy wiedzy odbiorcy. b) tell wskazuje iŝ w bazie wiedzy agenta nadawcy zapisana jest treść określona w polu :content. c) ask-all działa podobnie jak ask-one, jednak w odpowiedzi przesyłana jest kolekcja wszystkich twierdzeń znajdujących się w bazie wiedzy odbiorcy, które odpowiadają zapytaniu przesłaneu przez nadawcę w polu :content. d) strea-all jego działanie jest porównywalne do ask-all, jednak w ty przypadku agent nie przesyła kolekcji odpowiadających twierdzeń w całości, ale w postaci serii kolejnych perforatywów. Ostatnią wiadoością przesyłaną w raach serii jest perforatyw eos (end of strea). Rys. 4. Sekwencja wyiany wiadoości z uŝycie perforatywu strea-all
W odelu sieci Petriego za tworzenie powyŝszych wiadoości odpowiedzialna jest podstrona prepare sgtoa (rys. 5). Na stronie tej, tranzycja create essege uruchaiana jest tylko dla wyŝej wyienionych perforatywów dzięki ustaleniu odpowiedniego warunku wzbudzenia tranzycji (tzw. dozór, na rysunku warunek dozoru objęty jest w nawiasy kwadratowe). it it create(#perf i,#sender i,re,id,0,"x") i Ready create essage re [(#perf i=askone orelse #perf i=askall orelse #perf i=streaall) re<>(#sender i)] id id+ ID Fusion Receivers3 rstart() Nae Rys. 5. Tworzenie wiadoości wychodzącej (ask-one, ask-all, strea-all) Przy tworzeniu wiadoości wykorzystywane jest dodatkowo iejsce ID, słuŝące do generowania unikalnych wartości id dla kaŝdej z wysyłanych wiadoości. Odbywa się to na zasadzie autoinkreentacji tzn. kolejne wiadoości otrzyują nuer id o jeden większy od poprzedniego. Miejsce to jest współdzielone przez wszystkie instancje agentów (tzw. fusion place), co oznacza, Ŝe nuer ostatnio wygenerowanego id jest globalny i dostępny we wszystkich instancjach agentów. Z iejsce Receivers pobierana jest z kolei inforacja na teat odbiorcy wiadoości. Uruchoienie tranzycji create essage skutkuje wywołanie funkcji create, która na podstawie otrzyanych paraetrów, tworzy finalną wiadoość. Odpowiedzi na perforatywy -one, -all oraz strea-all generowane są na podstronach Ask oraz Streaall. W przypadku perforatywu -all wszystkie odpowiedzi odpowiadające zapytaniu są łączone i przesyłane w postaci jednej wiadoości. aczej dzieje się w przypadku perforatywu strea-all, dla którego kaŝda odpowiedź przesyłana jest jako osobna wiadoość. INT Ready if (#perf =askone) then create(tell,#receiver,#sender, 0, #replywith,"p") else create(tell,#receiver,#sender, 0, #replywith,"p P2... PN") create [#perf =askone orelse #perf =askall] Rys. 6. Generowanie odpowiedzi dla perforatywów -one i -all
s List List ::List Create Ready `create(tell,#receiver,#sender, 0, #replywith,"p")++ `create(tell,#receiver,#sender, 0, #replywith,"p2")++ `create(tell,#receiver,#sender, 0, #replywith,"p3")++ `create(tell,#receiver,#sender, 0, #replywith,"eos") Get essage [#perf =streaall] Rys. 7. Generowanie odpowiedzi dla perforatywu strea-all 5.. Warunkowe struieniowe generowanie odpowiedzi na zapytania W niektórych przypadkach nadawca zapytania chce otrzyywać odpowiedzi struieniowo (tak jak w przypadku perforatywu strea-all) oraz dodatkowo ieć wpływ na oent otrzyywania kolejnych odpowiedzi. Jest to oŝliwe dzięki poniŝej przedstawiony perforatywo [2]: a) standby nadawca zwraca się z prośbą o przygotowanie odpowiedzi na perforatyw zawarty w polu :content. Odpowiedź nie jest generowana natychiastowo, ale dopiero po ty jak odbiorca ogłosi gotowość do udzielenia odpowiedzi (za poocą perforatywu ready) b) ready nadawca stwierdza gotowość do udzielenie odpowiedzi na perforatyw identyfikowany przez zawartość pola :in-reply-to c) next nadawca wskazuje, iŝ oczekuje na kolejną odpowiedź, która została przygotowana (na co wskazuje wcześniej otrzyany perforatyw ready) Rys. 8. Sekwencja wyiany wiadoości z uŝycie perforatywu standby
d) rest nadawca wskazuje, iŝ oczekuje na pozostałe odpowiedzi w postaci serii perforatywów zawartych w raach jednej wiadoości. e) discard nadawca porzuca pozostałe odpowiedzi wygenerowane na wcześniejsze polecenie standby. Na diagraie z rysunku 8 agent B po przygotowaniu kolekcji odpowiedzi nie wysyła ich natychiast, ale pojedynczo w reakcji na kolejno nadchodzące perforatywy next. Zakończenie przesyłania serii wiadoości kounikowane jest perforatywe eos. JeŜeli agent A chciałby otrzyać w któryś oencie wszystkie pozostałe odpowiedzi z serii, w postaci jednej wiadoości, oŝe to uzyskać poprzez wysłanie perforatywu rest. Agent A oŝe takŝe zrezygnować z otrzyywania kolejnych odpowiedzi z serii poprzez przesłanie perforatywu discard. 6. Perforatywy wykorzystujące agenta wspoagającego Agent wspoagający (Facilitator) jest specjalny rodzaje agenta, który posiada inforacje o wszystkich istniejących agentach w dany systeie, ich adresach oraz uiejętnościach. Dzięki teu a on szerokie zastosowanie w wyszukiwaniu agentów posiadających określone uiejętności i zasoby oraz udostępniających wyspecyfikowane usługi. Z agente wspoagający w języku KQML związane są następujące perforatywy [2]: a) broadcast nadawca prosi odbiorcę, aby wysłał nadany perforatyw do wszystkich agentów z któryi a połączenie. W przypadku odelowanego systeu perforatyw ten otrzyuje agent wspoagający, który przekazuje wiadoość do wszystkich agentów w systeie. b) advertise nadawca ogłasza iŝ jest gotów udzielać odpowiedzi na określony rodzaj perforatywów (określony w polu :content). c) broker-one nadawca prosi odbiorcę, aby przekazał do wykonania załączony perforatyw jedneu agentowi, który posiada odpowiednie uiejętności i zasoby (zazwyczaj agent posiadający takie atrybuty przesłał wcześniej perforatytw advertise z odpowiednii paraetrai). Na rysunku 9 agent wspoagający przekazuje wykonanie perforatywu ask-one(x) do agenta A poniewaŝ wcześniej zgłosił on za poocą perforatywu advertise uiejętność obsługi takich zapytań. Następnie odpowiedź kierowana jest do agenta wspoagającego, który przekazuje ją do nadawcy zapytania tj. agenta B. Rys. 9. Sekwencja wyiany wiadoości z uŝycie perforatywu broker-one
d) recoend-one nadawca prosi odbiorcę o przekazanie nazwy jednego agenta, który jest w stanie wykonać załączony perforatyw. e) recruit-one działa identycznie jak broker-one, z tą róŝnicą iŝ odpowiedź przesyłana jest bezpośrednio od agenta posiadającego odpowiednie uiejętności do nadawcy perforatywu recruit-one. Short Advertised true Epty advertised BOOL (p,c,se) (p,c,se) ep (p,c,se) (p,c,se) get() ep false Process advertise [#perf =advertise] create(sorry,f,se2,0,id,c2) Sorry (p,p2,c2,se2,id,id2) F create(sorry,f,se2,0,id,c2) create(p2,se2,se, id2,0,c2) Create recruit [p=recruitone p=p2 c=c2] createf(tell,f,se2,0,id2, p2,0,se,c2) create(p2,f,se, id2,0,c2) Create recoend [p=recoendone p=p2 c=c2] (p,p2,c2,se2,id,id2) Sorry2 [p<>p2 orelse c<>c2] (p,p2,c2,se2,id,id2) Create broker [p=brokerone p=p2 (id2,se2) c=c2] [ep=true] (p,p2,c2,se2,id,id2) (p,p2,c2,se2,id,id2) Wait For Broker INTxNae create(tell,f,re,0,#inreplyto,#content ) Proces essage [#perf =recruitone orelse #perf =recoendone orelse #perf =brokerone] get2() Processed Short2 (id2,re) Foward tell [#perf =tell #inreplyto =id2] Receive Perforative F Rys. 0. Model agenta wspoagającego (Facilitator) broadcast broadcast [#perf =broadcast #sender <>re] Model agenta wspoagającego znajduje się na podstronie Facilitator i zawiera echanizy uoŝliwiające udzielanie odpowiedzi i przetwarzanie powyŝej oówionych perforatywów. JeŜeli agent wspoagający nie znajdzie agenta posiadającego odpowiednią uiejętność to generowany jest w odpowiedzi perforatyw sorry. foracje o uiejętnościach agentów przechowywane są w iejscu Advertised.
7. Podsuowanie Idea języków opartych na perforatywach określających ich funkcjonalność jest wykorzystywana do wyiany inforacji i wiedzy poiędzy inteligentnyi jednostkai prograowyi, których przykłade są agenci. Na podstawie języka KQML iędzynarodowa organizacja standaryzacyjna FIPA (Foundation for teligent Physical Agents) opracowała język FIPA ACL, będący obecnie standarde kounikacji agentów w systeach wieloagentowych. Stworzony odel prezentuje oŝliwość zaprojektowania systeu wieloagentowego z wykorzystanie perforatywów języka KQML. Przeprowadzono szereg syulacji przesyłania wiadoości z uŝycie wszystkich perforatywów, a takŝe określono przestrzeń dostępnych stanów systeu. PowyŜsza analiza nie doprowadziła do wykrycia Ŝadnych tranzycji (zdarzeń) nieaktywnych, ani niepoŝądanych stanów systeu. Analiza przestrzeni stanów wykazała oŝliwość osiągnięcia wszystkich stanów wynikających z funkcjonalności systeu. PowyŜszy odel oŝe być zaipleentowany w dowolny języku prograowania wysokiego poziou. Do tej pory język KQML został z powodzenie uŝyty w środowiskach projektowania i prograowania agentów, takich jak Saci, JATLite, Jackal i innych. WaŜny eleente przedstawionego systeu, oprócz saego języka, jest wyróŝnienie specjalnego rodzaju agenta wspoagającego (Facilitator), który dzięki posiadanej wiedzy na teat oŝliwości i pracy innych agentów, oŝe koordynować współpracę agentów w raach całego systeu agentowego. Przedstawiony odel systeu wieloagentowego wykorzystujący wiadoości języka KQML w pełnej wersji dostępny jest pod adrese http://wojtek.wsi.edu.pl/petri. Do jego uruchoienia wyagane jest narzędzie CPN Tools w wersji 2.2.0 lub wyŝszej. Literatura Adres [] Bradshaw J.: Software Agents. MIT Press, Cabridge 995. [2] DARPA Knowledge Sharing itiative External terfaces Working Group: DRAFT Specification of the KQML Agent-Counication Language. 995. [3] Finin T., Labrou Y.: Agent Counication Language, First ternational Syposiu on Agent Systes and Applications and the Third ternational Syposiu on Mobile Agents, 999. [4] Finin T., Fritzson R., McKay D., McEntire R.: Proceedings of the third international conference on foration and knowledge anageent - KQML as an agent counication language, ACM Press, 994, s. 456-463. [5] Jensen K., Kristensen K., Lectures on Coloured Petri Nets Modelling and Validation of Concurrent Systes, University of Aarhus Departaent of Coputer Sciences, Aarhus 2006. [6] Jensen K., Coloured Petri Nets, Springer-Verlag, Berlin 997. [7] Luck M.M., Ashri R., D'verno M.: Agent-Based Software Developent. Artech House, 2004. Wojciech Pieprzyca, ul. Fredry 5, 43-346 Bielsko-Biała beheot@alpha.pl