Pobierz artykuł

Transkrypt

Pobierz artykuł
Wojciech PIEPRZYCA
WyŜsza Szkoła Informatyki i Zarządzania w Bielsku-Białej
Studium Doktoranckie Informatyki
Wydział Automatyki, Elektroniki i Informatyki
Politechnika Śląska
email: [email protected]
ANALIZA PROCESÓW KOMUNIKACYJNYCH W SYSTEMACH
WIELOAGENTOWYCH Z WYKORZYSTANIEM JĘZYKA KQML
Streszczenie: Artykuł omawia zagadnienia związane z moŜliwością wymiany informacji
w systemach wieloagentowych. W tym celu przedstawiono model kolorowanej sieci Petriego
stworzony do zobrazowania i symulacji procesów komunikacji agentów oraz przykładowe
diagramy określające sekwencje wymiany informacji pomiędzy agentami za pomocą
odpowiednich performatywów języka KQML.
Słowa kluczowe: komunikacja agentów, systemy wieloagentowe, język KQML, sieci Petriego
Summary: The article includes discussion on information exchange within multiagent
systems. For this purpose Petri net model was created to represent and simulate agent
communication processes. Exemplary data exchange sequences between agents using KQML
performatives were illustrated with sequence diagrams.
Keywords: agent communication, multiagent systems, KQML, Petri nets
1. Wprowadzenie
Systemy wieloagentowe duŜą część swojej efektywności opierają na odpowiedniej
kooperacji i koordynacji wykonywanych zadań. W tym celu konieczne jest udostępnienie
odpowiednich metod komunikacji agentów m.in. zdefiniowanie języka za pomocą którego
agenci będą mogli się komunikować oraz wymieniać wiadomoś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 auspicjami DARPA (Defense Advanced Research Projects Agency) [1]. W systemach
agentowych język ten wykorzystywany jest do wymiany komunikatów oraz wiedzy pomiędzy
autonomicznymi agentami. Zapytania i polecenia zadawane w języku KQML operują na
bazie wiedzy związanej z danym agentem. W szczególności nie musi to być baza wiedzy
w tradycyjnym znaczeniu, ale równieŜ tzw. wirtualna baza wiedzy, która zdefiniowana jest
jako zwykła struktura programu agentowego lub traktowana jako informacje zawarte
w standardowej bazie danych. Zapytania mogą umoŜliwiać sprawdzanie zawartości bazy
wiedzy, jej aktualizację, itp.
Wiadomość (jednostka wymiany informacji) w języku KQML określana jest jako
performatyw. Pojęcie to wywodzi się z teorii aktu mowy i jest definiowane w naukach
związanych z lingwistyką. Ogólnie performatywy moŜemy podzielić na:
• komunikaty asertoryczne (stwierdzenia),
• komunikaty dyrektywne (polecenia, pytania, sugestie),
• komunikaty deklaratywne (informacje o umiejętnościach nadawcy).
Język KQML posiada pewien predefiniowany zbiór performatywów, których działanie
jest określone i nie moŜe być zmieniane. Zbiór ten jest jednak rozszerzalny tzn. w zaleŜności
od potrzeb moŜna definiować własne performatywy o działaniu określonym w ramach
specyfikowanego systemu agentowego.
Performatyw w języku KQML jest ciągiem znaków ASCII, zgodnie ze zdefiniowaną dla
tego języka gramatyką opartą na prefiksowej notacji polskiej. KaŜda wiadomość oprócz swej
nazwy identyfikującej rodzaj performatywu, posiada zbiór parametrów w postaci
:nazwa wartość np. :sender agent1 (parametr określający nazwę nadawcy wiadomości).
Kolejność występowania parametrów jest dowolna. Najczęściej występujące parametry
wiadomości w języku KQML przedstawia tabela 1.
Tabela 1. Podstawowe parametry performatywów w języku KQML [2].
Parametr
Znaczenie
:sender
Nadawca wiadomości
:receiver
Odbiorca wiadomości
:reply-with
Jeśli parametr ten nie występuje lub ma wartość nil oznacza to, Ŝe
nadawca nie oczekuje odpowiedzi na tę wiadomość. W przeciwnym
przypadku pole zawiera identyfikator na który powoła się odbiorca
odpowiadając na tę wiadomość (wpisując ten identyfikator w pole :inreply-with).
:in-reply-to
Identyfikator określający na jaką wiadomość odpowiada agent
:language
Język w którym reprezentowana jest zawartość wiadomości (:content)
:ontology
Nazwa ontologii do której odnosi się zawartość wiadomości (:content)
:content
Zawartość wiadomości
:force
Określa czy nadawca w przyszłości moŜe zmienić znaczenie tego
performatywu.
Sama zawartość wiadomości jest transparentna dla KQML i moŜe być reprezentowana
w róŜnych językach, zarówno stosujących format znaków ASCII jak i kod binarny, nie jest to
przedmiotem standardu języka KQML. Niemniej jednak najczęściej stosowanymi językami
dla pola zawartości :content są języki umoŜliwiające reprezentowanie zawartości bazy wiedzy
np. KIF (Knowledge Interchange Format), Prolog, itp.
Język KIF oparty jest na logice pierwszego rzędu. Został opracowany przez grupę KSE
(Knowledge Sharing Effort) zajmującą się językami reprezentacji wiedzy ze szczególnym
uwzględnieniem problemu wymiany wiedzy pomiędzy heterogenicznymi systemami
informatycznymi.
Niektóre z najwaŜniejszych cech języka KIF to [3]:
- implementacja niezaleŜna od semantyki,
- ekspresyjność, moŜliwość tłumaczenia i reprezentacji większości systemów reprezentacji
wiedzy,
- język jest czytelny dla ludzi.
Przykłady wyraŜeń w języku KIF:
Temperatura m1 = 83 stopnie C
(= (temperature m1) (scalar 83 Celsius))
X jest kawalerem jeŜeli jest męŜczyzną i nie jest Ŝonaty
(=> (and (man ?x) (not (married ?x))) (bachelor (?x))
2. Wiadomość w języku KQML
Wiadomość w języku KQML składa się z listy elementów otoczonych przez parę
nawiasów i rozdzielonych spacjami. Pierwszy element wiadomości to określenie rodzaju
performatywu, wszystkie kolejne elementy występujące na liście to parametry.
(ask-one
:sender A
:receiver B
:reply-with 101
:language KIF
:ontology book
:content (price ISBN1-58053-605-0 ?x))
W powyŜszej przykładowej wiadomości, performatyw to ask-one. Nadawcą wiadomości
jest agent A, wiadomość 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ść wiadomości
(:content). Pole content zawiera zapytanie sformułowane w języku KIF dotyczące ceny
ksiąŜki o podanym numerze ISBN.
3. Model systemu agentowego
A
MBOX
Message
AgentA
Agent B
Agent
Agent
Message
A
Sender
1
AgentA
Name
AOut
AIn
Message
BOut
Message
Message
B
MBOX
BIn
B
Sender
1
AgentB
Name
Communication
Channel
Communication Channel
Message
FOut
FIn
Facilitator
Facilitator
COut
Message
Message
Message
F
MBOX
Message
Rys. 1. System wieloagentowy
C
MBOX
Agent C
Agent
Message
C
Sender
1
AgentC
Name
CIn
Message
Przedstawiony model został stworzony za pomocą kolorowanej sieci Petriego. Głównymi
składowymi modelu są 3 hierarchiczne strony: Agent – przedstawia działanie agenta,
Communication Channel – obrazuje sposób przesyłania wiadomości pomiędzy agentami oraz
Facilitator – reprezentuje sposób realizacji zadań przez agenta wspomagającego.
Dla uproszczenia przyjęto, Ŝe w systemie istnieje trzech agentów zwykłych (A,B,C) oraz
jeden agent wspomagający (Facilitator), Przesyłane wiadomości trafiają do skrzynek
poszczególnych agentów (A MBOX, B MBOX, itd.).
Message
AOut
Message
Message
m
TransmitA
In
send(#receiver m,F,m)
send(#receiver m,F,m)
FIn
TransmitF
m
send(#receiver m,A,m)
AIn
Out
FOut
In
Out
send(#receiver m,F,m)
Message
send(#receiver m,A,m)
send(#receiver m,A,m)
Messagesend(#receiver m,B,m)
send(#receiver m,B,m) Out
BIn
send(#receiver m,B,m)
send(#receiver m,C,m)
Message
BOut
send(#receiver m,C,m)
m
TransmitB
In
Out
send(#receiver m,C,m)
Message
CIn
Message
TransmitC
m
COut
In
Rys. 2. Kanał komunikacyjny
W kanale komunikacyjnym (rys.2) następuje transport wiadomości pomiędzy agentami.
Tranzycje Transmit powodują pobranie znacznika (wiadomości) z miejsca Out agentanadawcy i dodanie znacznika (wiadomości) do miejsca In agenta-odbiorcy. Wiadomość
przekazywana jest tylko wówczas, gdy funkcja send określi, iŜ agent jest odbiorcą określonej
wiadomości.
4. Model agenta
KaŜdy agent zwykły modelowany jest jako instancja strony Agent (rys. 3). W czasie
symulacji uŜytkownik wybiera jeden z dziewięciu performatywów, który ma zostać
utworzony. W zaleŜności od wybranego rodzaju wiadomości jej utworzenie następuje
w jednej z podstron: prepare msgToA (performatywy kierowane do innych agentów
zwykłych), prepare msgToF (performatywy obsługiwane przez agenta wspomagającego) lub
prepare standby (performatyw standby). Tak utworzona wiadomość przekazywana jest do
miejsca Message Ready skąd moŜe zostać przesłana do kanału komunikacyjnego poprzez
odpalenie tranzycji Send Performative.
Wiadomość przychodząca moŜe być odebrana poprzez uruchomienie tranzycji Receive
Performative powodującej dodanie znacznika (wiadomości) do skrzynki agenta (MBOX).
W zaleŜności od rodzaju nadesłanego performatywu załączonego w wiadomości dalsza
obsługa następuje w podstronie answerAsk, answerRecommend, answerStreamall lub
answerStandby. W stanie początkowym aktywna jest jedynie tranzycja Choose performative.
Message
Message
m
Out
Out
m
msgToA
prepare
msgToA
msgToF
prepare
msgToF
i
1`askone++
1`askall++
1`advertise++
1`recruitone++
1`brokerone++
1`recommendone++
1`streamall++
1`broadcast++
1`standby
m
Send
Performative
m
standby
prepare
standby
Message
Ready
m
answerAsk
answer
ask
answerRecommend
answer
recommend
i
i
m
m
Init
m
answerStreamall
answer
streamall
answerStandby
answer
standby
m
MBOX
Out
Message
Init
{perf=p,sender=se}
Choose
performative
m
Receive
Performative
se
p
m
m
m
m
m
pstart()
Performatives
9
Performative
Agent 1
I/O
Name
In
In
Message
Rys. 3. Model agenta
5. Podstawowe performatywy
Podstawowe performatywy umoŜ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łanemu przez nadawcę w polu :content.
d) stream-all – jego działanie jest porównywalne do ask-all, jednak w tym przypadku
agent nie przesyła kolekcji odpowiadających twierdzeń w całości, ale w postaci serii
kolejnych performatywów. Ostatnią wiadomością przesyłaną w ramach serii jest
performatyw eos (end of stream).
Rys. 4. Sekwencja wymiany wiadomości z uŜyciem performatywu stream-all
W modelu sieci Petriego za tworzenie powyŜszych wiadomości odpowiedzialna jest
podstrona prepare msgToA (rys. 5). Na stronie tej, tranzycja create messege uruchamiana jest
tylko dla wyŜej wymienionych performatywów dzięki ustaleniu odpowiedniego warunku
wzbudzenia tranzycji (tzw. dozór, na rysunku warunek dozoru objęty jest w nawiasy
kwadratowe).
Message
Ready
Out
Message
create(#perf i,#sender i,re,id,0,"x")
1
id
create
message
i
Init
In
id+1
ID
Fusion 1
1
INT
re
[(#perf i=askone
orelse #perf i=askall
orelse #perf i=streamall)
andalso re<>(#sender i)]
Init
rstart()
Receivers 3
Name
Rys. 5. Tworzenie wiadomości wychodzącej (ask-one, ask-all, stream-all)
Przy tworzeniu wiadomości wykorzystywane jest dodatkowo miejsce ID, słuŜące do
generowania unikalnych wartości id dla kaŜdej z wysyłanych wiadomości. Odbywa się to na
zasadzie autoinkrementacji tzn. kolejne wiadomości otrzymują numer id o jeden większy od
poprzedniego. Miejsce to jest współdzielone przez wszystkie instancje agentów (tzw. fusion
place), co oznacza, Ŝe numer ostatnio wygenerowanego id jest globalny i dostępny we
wszystkich instancjach agentów. Z miejsce Receivers pobierana jest z kolei informacja na
temat odbiorcy wiadomości. Uruchomienie tranzycji create message skutkuje wywołaniem
funkcji create, która na podstawie otrzymanych parametrów, tworzy finalną wiadomość.
Odpowiedzi na performatywy answer-one, answer-all oraz stream-all generowane są na
podstronach answerAsk oraz answerStreamall. W przypadku performatywu answer-all
wszystkie odpowiedzi odpowiadające zapytaniu są łączone i przesyłane w postaci jednej
wiadomości. Inaczej dzieje się w przypadku performatywu stream-all, dla którego kaŜda
odpowiedź przesyłana jest jako osobna wiadomość.
Message
Message
Ready
Out
if (#perf m=askone)
then create(tell,#receiver m,#sender m,
0, #replywith m,"P")
else
create(tell,#receiver m,#sender m,
0, #replywith m,"P1 P2 ... PN")
create
answer
[#perf m=askone
orelse #perf m=askall]
m
MBOX
In
Message
Rys. 6. Generowanie odpowiedzi dla performatywów answer-one i answer-all
mList
answers
m1::mList
Create
answer
MessageList
1`create(tell,#receiver m,#sender
0, #replywith m,"P1")++
1`create(tell,#receiver m,#sender
0, #replywith m,"P2")++
1`create(tell,#receiver m,#sender
0, #replywith m,"P3")++
1`create(tell,#receiver m,#sender
0, #replywith m,"eos")
MBOX
In
Message
m
m1
Message
Ready
Out
Message
m,
m,
m,
m,
Get
[#perf m=streamall]
message
Rys. 7. Generowanie odpowiedzi dla performatywu stream-all
5.1. Warunkowe strumieniowe generowanie odpowiedzi na zapytania
W niektórych przypadkach nadawca zapytania chce otrzymywać odpowiedzi
strumieniowo (tak jak w przypadku performatywu stream-all) oraz dodatkowo mieć wpływ na
moment otrzymywania kolejnych odpowiedzi. Jest to moŜliwe dzięki poniŜej
przedstawionym performatywom [2]:
a) standby – nadawca zwraca się z prośbą o przygotowanie odpowiedzi na performatyw
zawarty w polu :content. Odpowiedź nie jest generowana natychmiastowo, ale dopiero
po tym jak odbiorca ogłosi gotowość do udzielenia odpowiedzi (za pomocą
performatywu ready)
b) ready – nadawca stwierdza gotowość do udzielenie odpowiedzi na performatyw
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 otrzymany performatyw ready)
Rys. 8. Sekwencja wymiany wiadomości z uŜyciem performatywu standby
d) rest – nadawca wskazuje, iŜ oczekuje na pozostałe odpowiedzi w postaci serii
performatywów zawartych w ramach jednej wiadomości.
e) discard – nadawca porzuca pozostałe odpowiedzi wygenerowane na wcześniejsze
polecenie standby.
Na diagramie z rysunku 8 agent B po przygotowaniu kolekcji odpowiedzi nie wysyła ich
natychmiast, ale pojedynczo w reakcji na kolejno nadchodzące performatywy next.
Zakończenie przesyłania serii wiadomości komunikowane jest performatywem eos. JeŜeli
agent A chciałby otrzymać w którymś momencie wszystkie pozostałe odpowiedzi z serii,
w postaci jednej wiadomości, moŜe to uzyskać poprzez wysłanie performatywu rest. Agent A
moŜe takŜe zrezygnować z otrzymywania kolejnych odpowiedzi z serii poprzez przesłanie
performatywu discard.
6. Performatywy wykorzystujące agenta wspomagającego
Agent wspomagający (Facilitator) jest specjalnym rodzajem agenta, który posiada
informacje o wszystkich istniejących agentach w danym systemie, ich adresach oraz
umiejętnościach. Dzięki temu ma on szerokie zastosowanie w wyszukiwaniu agentów
posiadających określone umiejętności i zasoby oraz udostępniających wyspecyfikowane
usługi. Z agentem wspomagającym w języku KQML związane są następujące performatywy
[2]:
a) broadcast – nadawca prosi odbiorcę, aby wysłał nadany performatyw do wszystkich
agentów z którymi ma połączenie. W przypadku modelowanego systemu performatyw
ten otrzymuje agent wspomagający, który przekazuje wiadomość do wszystkich
agentów w systemie.
b) advertise – nadawca ogłasza iŜ jest gotów udzielać odpowiedzi na określony rodzaj
performatywów (określony w polu :content).
c) broker-one – nadawca prosi odbiorcę, aby przekazał do wykonania załączony
performatyw jednemu agentowi, który posiada odpowiednie umiejętności i zasoby
(zazwyczaj agent posiadający takie atrybuty przesłał wcześniej performatytw advertise
z odpowiednimi parametrami). Na rysunku 9 agent wspomagający przekazuje
wykonanie performatywu ask-one(x) do agenta A poniewaŜ wcześniej zgłosił on za
pomocą performatywu advertise umiejętność obsługi takich zapytań. Następnie
odpowiedź kierowana jest do agenta wspomagającego, który przekazuje ją do
nadawcy zapytania tj. agenta B.
Rys. 9. Sekwencja wymiany wiadomości z uŜyciem performatywu broker-one
d) recommend-one – nadawca prosi odbiorcę o przekazanie nazwy jednego agenta,
który jest w stanie wykonać załączony performatyw.
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 umiejętności do nadawcy
performatywu recruit-one.
ShortMessage1
getMessage1(m)
Advertised
true
Empty
advertised 1
BOOL
(p1,c1,se1)
emp
Process
advertise
false
[#perf m=advertise]
(p1,c1,se1)
emp
(p1,c1,se1)
(p1,c1,se1)
create(sorry,F,se2,0,id1,c2)
Sorry
(p,p2,c2,se2,id1,id2)
m
[emp=true]
create(sorry,F,se2,0,id1,c2)
Sorry2
create(p2,se2,se1,
id2,0,c2)
Create
answer
recruit
[p=recruitone
andalso
p1=p2
andalso
c1=c2]
m
(p,p2,c2,se2,id1,id2)
getMessage2(m)
Processed
Message
MBOX
Out
Message
ShortMessage2
Create
answer
createf(tell,F,se2,0,id2,
recommend
p2,0,se1,c2)
[p=recommendone
andalso
p1=p2
andalso
c1=c2]
create(p2,F,se1,
id2,0,c2)
Proces
message
[#perf m=recruitone
orelse #perf m=recommendone
orelse #perf m=brokerone]
[p1<>p2
orelse
c1<>c2]
Message
FOut
Out
(p,p2,c2,se2,id1,id2)
(p,p2,c2,se2,id1,id2)
m
Receive
Performative
m
Create
(p,p2,c2,se2,id1,id2)
answer
broker
[p=brokerone
andalso
(id2,se2)
p1=p2
Wait
andalso
For
c1=c2]
Broker
INTxName
m
m
Message
(id2,re)
Foward
tell
FIn
In
[#perf m=tell
andalso
#inreplyto m=id2]
create(tell,F,re,0,#inreplyto m,#content m)
answer
broadcast
answerbroadcast
[#perf m=broadcast
andalso
#sender m<>re]
Rys. 10. Model agenta wspomagającego (Facilitator)
Model agenta wspomagającego znajduje się na podstronie Facilitator i zawiera
mechanizmy umoŜliwiające udzielanie odpowiedzi i przetwarzanie powyŜej omówionych
performatywów. JeŜeli agent wspomagający nie znajdzie agenta posiadającego odpowiednią
umiejętność to generowany jest w odpowiedzi performatyw sorry. Informacje
o umiejętnościach agentów przechowywane są w miejscu Advertised.
7. Podsumowanie
Idea języków opartych na performatywach określających ich funkcjonalność jest
wykorzystywana do wymiany informacji i wiedzy pomiędzy inteligentnymi jednostkami
programowymi, których przykładem są agenci. Na podstawie języka KQML międzynarodowa
organizacja standaryzacyjna FIPA (Foundation for Inteligent Physical Agents) opracowała
język FIPA ACL, będący obecnie standardem komunikacji agentów w systemach
wieloagentowych.
Stworzony model prezentuje moŜliwość zaprojektowania systemu wieloagentowego
z wykorzystaniem performatywów języka KQML. Przeprowadzono szereg symulacji
przesyłania wiadomości z uŜyciem wszystkich performatywów, a takŜe określono przestrzeń
dostępnych stanów systemu. PowyŜsza analiza nie doprowadziła do wykrycia Ŝadnych
tranzycji (zdarzeń) nieaktywnych, ani niepoŜądanych stanów systemu. Analiza przestrzeni
stanów wykazała moŜliwość osiągnięcia wszystkich stanów wynikających z funkcjonalności
systemu. PowyŜszy model moŜe być zaimplementowany w dowolnym języku programowania
wysokiego poziomu. Do tej pory język KQML został z powodzeniem uŜyty w środowiskach
projektowania i programowania agentów, takich jak Saci, JATLite, Jackal i innych. WaŜnym
elementem przedstawionego systemu, oprócz samego języka, jest wyróŜnienie specjalnego
rodzaju agenta wspomagającego (Facilitator), który dzięki posiadanej wiedzy na temat
moŜliwości i pracy innych agentów, moŜe koordynować współpracę agentów w ramach
całego systemu agentowego.
Przedstawiony model systemu wieloagentowego wykorzystujący wiadomości języka
KQML w pełnej wersji dostępny jest pod adresem http://wojtek.wsi.edu.pl/petri1. Do jego
uruchomienia wymagane jest narzędzie CPN Tools w wersji 2.2.0 lub wyŜszej.
Literatura
[1] Bradshaw J.: Software Agents. MIT Press, Cambridge 1995.
[2] DARPA Knowledge Sharing Initiative External Interfaces Working Group: DRAFT
Specification of the KQML Agent-Communication Language. 1995.
[3] Finin T., Labrou Y.: Agent Communication Language, First International Symposium
on Agent Systems and Applications and the Third International Symposium on Mobile
Agents, 1999.
[4] Finin T., Fritzson R., McKay D., McEntire R.: Proceedings of the third international
conference on Information and knowledge management - KQML as an agent
communication language, ACM Press, 1994, s. 456-463.
[5] Jensen K., Kristensen K., Lectures on Coloured Petri Nets – Modelling and
Validation of Concurrent Systems, University of Aarhus – Departament of Computer
Sciences, Aarhus 2006.
[6] Jensen K., Coloured Petri Nets, Springer-Verlag, Berlin 1997.
[7] Luck M.M., Ashri R., D'Inverno M.: Agent-Based Software Development. Artech
House, 2004.
Adres
Wojciech Pieprzyca, ul. Fredry 51, 43-346 Bielsko-Biała
[email protected]

Podobne dokumenty