SARL (język programowania)
Język programowania SARL to modułowy język programowania zorientowany na agenta . Ma na celu dostarczenie podstawowych abstrakcji dotyczących współbieżności, dystrybucji, interakcji, decentralizacji, reaktywności, autonomii i dynamicznej rekonfiguracji.
SARL jest niezależny od platformy i architektury agenta. Zapewnia zestaw pierwszorzędnych abstrakcji zorientowanych na agenta bezpośrednio na poziomie języka (zobacz sekcję dotyczącą pojęć ) . Niemniej jednak obsługuje integrację i mapowanie koncepcji dostarczanych przez inne metamodele zorientowane na agenty. Sam SARL wykorzystuje ten mechanizm rozszerzeń do definiowania własnych rozszerzeń (organizacyjnych, sterowanych zdarzeniami itp.).
Ważną cechą języka programowania SARL jest jego natywna obsługa „holonowych systemów wieloagentowych” i „agentów rekurencyjnych” (zwanych także „ holonami ”).
Przegląd
Metamodel SARL opiera się na czterech głównych koncepcjach: Agent, Pojemność, Przestrzeń i Umiejętności. Podstawowy metamodel SARL przedstawiono na rycinie 1, a główne koncepcje zaznaczono kolorem jasnoniebieskim. Każdy z nich jest szczegółowo opisany w poniższych sekcjach, a także odpowiedni fragment kodu SARL, aby zilustrować ich praktyczne zastosowanie.
W SARL system wieloagentowy (MAS) to zbiór agentów współpracujących ze sobą we współdzielonych przestrzeniach rozproszonych. Każdy agent ma zbiór Możliwości opisujących to, co jest w stanie wykonać, jego kompetencje osobiste. Każda Zdolność może być następnie realizowana/wdrożona przez różne Umiejętności. Aby zrozumieć związek między koncepcjami zdolności i umiejętności, można przeprowadzić paralelę z koncepcjami interfejsu i ich klas implementacji w językach obiektowych. Aby zaimplementować określone architektury (takie jak BDI , rozumowanie, reaktywne, hybrydowe itp.) programiści powinni rozwijać własne zdolności i umiejętności, zapewniając agentom nowe możliwości wykorzystania.
Pomimo swojej otwartej natury SARL narzuca pewne podstawowe zasady, których muszą przestrzegać różne maszyny wirtualne (VM), które chcą ją obsługiwać. Przede wszystkim implementacja Space musi być w pełni dystrybuowana, a warstwa wykonawcza musi być oderwana od agentów. SARL zachęca do masowo równoległego wykonywania agentów i zachowań. SARL jest w pełni kompatybilny z Javą, aby z łatwością ponownie wykorzystać cały wkład społeczności Java, ale także ułatwić integrację i ewolucję starszych systemów. Jedna z kluczowych zasad rządzących SARL polega na tym, aby nie narzucać agentom z góry określonego sposobu interakcji w przestrzeni. Podobnie sposób identyfikowania agentów zależy od rodzaju rozpatrywanej Przestrzeni. Pozwala to na zdefiniowanie różnych rodzajów mechanizmów i modeli interakcji na przestrzeniach.
Metamodel i składnia języka programowania SARL zostały zainspirowane językami takimi jak Scala , Clojure i Ruby . Narzędzia SARL zostały opracowane na podstawie Xtext , co umożliwia łatwe tworzenie języków specyficznych dla domeny, które są bezpośrednio zintegrowane ze strukturą Eclipse . Pełna definicja składni SARL jest dostępna na GitHub .
koncepcje
Język programowania SARL jest oparty na metamodelu zorientowanym na agenta, opartym na następujących koncepcjach.
Agenci oprogramowania emocjonalnego
Agent jest autonomiczną jednostką posiadającą zestaw umiejętności do realizacji zdolności, które wykazuje. Agent ma zestaw wbudowanych zdolności uważanych za niezbędne do poszanowania powszechnie akceptowanych kompetencji agentów, takich jak autonomia, reaktywność, proaktywność i zdolności społeczne. Wśród tych wbudowanych zdolności (BIC) znajduje się zdolność „zachowań”, która determinuje jej globalne zachowanie. Agent ma również domyślne zachowanie opisane bezpośrednio w jego definicji.
Zachowanie odwzorowuje zbiór spostrzeżeń reprezentowanych przez Zdarzenia na sekwencję Działań. Zdarzenie jest specyfikacją jakiegoś zdarzenia w Przestrzeni, które może potencjalnie wywołać efekty u słuchacza (np. agent, zachowanie itp.).
Język ten nie narzuca określonej pętli kontroli agenta. Programista może zaimplementować dowolny protokół kontroli lub autoryzacji dla własnego scenariusza aplikacji, z wyjątkiem zdarzeń inicjalizacji i zniszczenia. Rzeczywiście, podczas tworzenia agentów maszyna wirtualna, która wykonuje program emocjonalny, jest odpowiedzialna za tworzenie instancji agenta i instalowanie w agencie umiejętności związanych z wbudowanymi możliwościami. Następnie, gdy agent jest gotowy do rozpoczęcia wykonywania, uruchamia zdarzenie Initialize. Gdy agent zdecyduje się zatrzymać swoje własne wykonywanie, maszyna wirtualna uruchamia zdarzenie Destroy, aby umożliwić agentowi zwolnienie wszelkich zasobów, które może nadal posiadać.
Pojemność i umiejętności
Akcja to specyfikacja przekształcenia części projektowanego systemu lub jego otoczenia. Ta transformacja gwarantuje wynikowe właściwości, jeśli system przed transformacją spełnia zestaw ograniczeń. Akcja jest zdefiniowana w kategoriach warunków wstępnych i końcowych.
Pojemność to specyfikacja zbioru działań. Niniejsza specyfikacja nie zawiera żadnych założeń dotyczących jej implementacji. Można go użyć do określenia, co agent może zrobić, czego wymaga zachowanie do jego wykonania.
Umiejętność jest możliwą implementacją zdolności spełniającą wszystkie ograniczenia tej specyfikacji. Agent może dynamicznie ewoluować, ucząc się/nabywając nowe Zdolności, ale może też dynamicznie zmieniać Umiejętności powiązane z daną zdolnością. Zdobycie nowych zdolności umożliwia również agentowi uzyskanie dostępu do nowych zachowań wymagających tych zdolności. Zapewnia to agentom mechanizm samoadaptacji, który pozwala im dynamicznie zmieniać architekturę zgodnie z ich aktualnymi potrzebami i celami.
Kontekst i przestrzeń
Kontekst definiuje obwód/granicę podsystemu i gromadzi zbiór przestrzeni. W każdym kontekście istnieje co najmniej jedna konkretna Przestrzeń zwana Przestrzenią domyślną, do której należą wszyscy agenci w tym kontekście. Zapewnia to istnienie wspólnej przestrzeni dla wszystkich agentów w tym samym kontekście. Każdy agent może następnie tworzyć określone przestrzenie publiczne lub prywatne, aby osiągnąć swoje osobiste cele. Od momentu ich utworzenia agenci są włączani do kontekstu zwanego kontekstem domyślnym. Pojęcie kontekstu ma pełny sens, gdy agentów uważa się za opanowanych lub holonicznych (patrz poniżej).
Przestrzeń jest wsparciem interakcji między agentami z poszanowaniem zasad określonych w Specyfikacji Przestrzeni. Specyfikacja Przestrzeni definiuje zasady (w tym działanie i percepcję) interakcji w ramach danego zestawu Przestrzeni z poszanowaniem tej specyfikacji.
Agent rekurencyjny lub agent oprogramowania emocjonalnego
Agenci mogą składać się z innych agentów w celu zdefiniowania hierarchicznych systemów wieloagentowych. Każdy agent definiuje swój własny Kontekst, zwany Kontekstem Wewnętrznym, który jest częścią jednego lub większej liczby Kontekstów Zewnętrznych.
Przykłady
Witaj świecie!
pakiet helloworld import io.sarl.core.Initialize agent HelloWorldAgent { on Initialize { println ( „Witaj, świecie!” ) } }
Wymiana wiadomości między dwoma agentami
Aby zilustrować składnię języka SARL, schemat Ping-Pong jest zakodowany poniżej. Agent A wysyła wiadomość PING do agenta B w celu ustalenia, czy nadal żyje. Agent B odpowiada komunikatem PONG.
Najpierw te dwie wiadomości muszą zostać zdefiniowane jako zdarzenia (bez atrybutu):
wydarzenie PING wydarzenie PONG
Agent A jest zdefiniowany za pomocą
agent A { używa DefaultContextInteraction, logowanie przy inicjalizacji {emit(new Ping)} na Pong {println("Agent" + wystąpienie .source + "jest żywy.") } }
W poprzednim kodzie słowo kluczowe using umożliwia agentowi korzystanie z wcześniej zdefiniowanych możliwości: możliwości interakcji z innymi agentami w ramach domyślnego kontekstu (DefaultContextInteraction) oraz możliwości rejestrowania komunikatów (Logging). Słowo kluczowe on pozwala na zdefiniowanie działań, gdy agent A odbierze wystąpienie określonego zdarzenia. Gdy agent A odbierze zdarzenie Initialize, wyemituje zdarzenie Ping do wszystkich istniejących agentów. Kiedy agent A odbiera zdarzenie Pong, rejestruje komunikat z tożsamością emitera zdarzenia w środku.
Agent B jest zdefiniowany za pomocą
agent B { używa DefaultContextInteraction, Logowanie na Ping { println("Agent " + wystąpienie .source + " chce wiedzieć, czy żyję.) emit(new Pong, Scopes addresss(occurrence.source)) } }
Kiedy agent B otrzymuje wiadomość Ping, rejestruje wiadomość i odpowiada wiadomością Pong. Aby uniknąć rozgłaszania komunikatu Pong, odbiorca tego komunikatu jest ograniczony do zakresu odpowiadającego adresowi emitera Pinga.
Platforma Janus: środowisko wykonawcze SARL
Język SARL określa zestaw pojęć i ich relacje. Jednak język SARL nie narzuca określonej infrastruktury wykonawczej, aby był niezależny od platformy.
Niemniej jednak Projekt Janus zapewnia infrastrukturę do uruchamiania agentów SARL. Janus to wieloagentowa platforma typu open source, w pełni zaimplementowana w Javie 1.7. Implementuje całą wymaganą infrastrukturę do wykonania MAS zaprogramowanego w języku SARL. Główne założenia przyjęte na poziomie języka SARL są wspierane przez to środowisko wykonawcze: w pełni rozproszone, równoległe wykonywanie zachowań agenta. Ponadto platforma Janus zapewnia narzędzia pomagające programiście we wdrażaniu systemu MAS, na przykład z automatycznym wykrywaniem jądra Janus.
Technicznie rzecz biorąc, platforma Janus podąża za najlepszymi praktykami w obecnym rozwoju oprogramowania, takimi jak Inversion of Control , i czerpie korzyści z nowych technologii, takich jak Distributed Data Structures (In-Memory Data Grid, jak Hazelcast ).
- ^ a b Rodriguez, S., Gaud, N. i Galland, S. (2014). SARL: zorientowany na agenta język programowania ogólnego przeznaczenia. Podczas międzynarodowej konferencji IEEE/WIC/ACM 2014 poświęconej technologii inteligentnych agentów. Warszawa, Polska: IEEE Computer Society Press.
- ^ a b Rodriguez S., Gaud N., Hilaire V., Galland S. i Koukam K. (2006). Koncepcja analizy i projektowania samoorganizacji w holonicznych systemach wieloagentowych. W International Workshop on Engineering Self-Organizing Applications (ESOA'06), strony 62–75. Springer-Verlag.
- ^ a b Cossentino M., Gaud N., Hilaire V., Galland S. i Koukam K. 2010. ASPECS: zorientowany na agenta proces oprogramowania do inżynierii złożonych systemów - jak projektować społeczeństwa agentów z perspektywy holonicznej. w Int. Journal on Autonomous Agents and Multi-Agent Systems, 2(2):260–304, marzec 2010. doi: 10.1007/s10458-009-9099-4.