Technologia inteligentnych agentów
Transkrypt
Technologia inteligentnych agentów
Technologia inteligentnych agentów Autor: dr Jacek Jakieła Technologia inteligentnych agentów WYKŁAD ............................................................................................................. 3 Przykład realizacji systemu w środowisku Jason .................................................... 3 Czym jest Jason? .............................................................................................. 3 Praktyczna realizacja podstawowych elementów składowych agenta ......................... 3 Przekonania .................................................................................................. 3 Adnotacje (annotations) ................................................................................. 4 Silna negacja (Strong Negation) ...................................................................... 5 Reguły ......................................................................................................... 6 Cele ............................................................................................................. 7 Plany ........................................................................................................... 7 Przykład: Kompletny program agentowy ............................................................ 15 Charakterystyka dziedziny problemu .............................................................. 15 Uruchomienie systemu ................................................................................. 19 ĆWICZENIA ...................................................................................................... 21 Wskazówki techniczne ..................................................................................... 21 Zadanie 1 ...................................................................................................... 21 Zadanie 2 ...................................................................................................... 21 Zadanie 3 ...................................................................................................... 23 Zadanie 4 ...................................................................................................... 24 Zadanie 5 ...................................................................................................... 25 Zadanie 6 ...................................................................................................... 25 Zadanie 7 ...................................................................................................... 25 Zadanie 8 ...................................................................................................... 25 Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 2 Technologia inteligentnych agentów WYKŁAD Przykład realizacji systemu w środowisku Jason Czym jest Jason? System Jason jest szkieletem softwareowym, zawierającym interpreter w ramach którego uruchamiany jest program agenta. Jason implementuje założenia architektury BDI w formie Systemu Paktycznego Rozumowania (Practical Reasoning System). Agenci programowani w środowisku Jason są reaktywnymi systemami planującymi (Reactive Planning Systems), co oznacza, że w sposób ciągły monitorują środowisko i reagują na pojawiające się w nim zdarzenia. Reakcja agenta polega na wykonaniu planów, które pozwalają mu obsłużyć określone zdarzenie. Wykonywane przez agenta akcje zmieniają środowisko w sposób pozwalający agentowi osiągnąć cele. Zmianą środowiska zarządza komponent architektury, który wnosi do niego zmiany w zależności od wybranego przez agenta sposobu działania. Architektura zarządza również aktualizacją „obrazu” środowiska, który przechowuje agent. Interpretacja programu agentowego ustala faktyczny cykl rozumowania agenta (Agent’s Reasoning Cycle). Agent wykonuje kolejno następujące działania: monitoruje środowisko, podejmuje decyzje odnośnie tego, jakie akcje wykonać, aby zrealizować cel i w końcu realizuje akcje zmieniając w ten sposób środowisko. Część zachowania cyklicznego odpowiedzialna za rozumowanie praktyczne jest realizowana w oparciu o plany, które agent posiada w swojej bibliotece planów. Początkowo, biblioteka składa się z planów, które przygotowuje projektant z wykorzystaniem języka AgentSpeak, którego podstawowe konstrukcje zostały opisane w kolejnych sekcjach. Praktyczna agenta realizacja podstawowych elementów składowych Przekonania Jedną z pierwszych kwestii, jaką projektant korzystający ze środowiska Jason musi poznać jest to, jak są reprezentowane przekonania agenta. Każdy agent jest wyposażony w bazę przekonań, która w najprostszej postaci jest zbiorem formuł atomowych (patrz Reprezentacja wiedzy agenta), przy czym nazwy predykatów oraz stałych rozpoczynają się z małej litery a nazwy zmiennych z dużej. Przykładowo, przekonanie o tym, że pewien obiekt o imieniu Jan z uniwersum dyskursu agenta jest wysokim obiektem może być zapisane w formie wysoki(jan). Związek zachodzący pomiędzy dwoma obiektami jest zapisywany z wykorzystaniem odpowiedniego symbolu predykatu np. przekonanie, że Jan lubi muzykę może być zapisane jako lubi(jan,muzyka). Podstawową różnicą w porównaniu z reprezentacją wiedzy wykorzystaniem rachunku predykatów jest to, że przy reprezentacji wiedzy agenta w formie przekonań mamy do czynienia z tak zwanymi modalnościami prawdy (modalities of truth), w znaczeniu podobnym do logik modalnych, a nie ze stwierdzeniami bezwarunkowo prawdziwymi. Oznacza to, że gdy wyrażenie w postaci lubi(jan,muzyka)pojawia się w bazie przekonań, agent zaczyna być przekonany (wierzy), że Jan lubi muzykę, co nie koniecznie musi zgadzać się z rzeczywistością. Podstawowe termy języka AgentSpeak są przedstawione na rysunku. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 3 Technologia inteligentnych agentów Rysunek. Termy języka AgentSpeak. Adnotacje (annotations) Jedną z ważniejszych różnic pomiędzy notacją wykorzystywaną w programowaniu logicznym a w systemie Jason są tak zwane adnotacje. Adnotacja jest strukturą opisującą dodatkowe informacje związane z konkretnym przekonaniem. Adnotacje są zapisywane w nawiasach kwadratowych zaraz za przekonaniem, którego dotyczą. zajety(jan) [termin_do(jesien)] Przedstawiony przykład oznacza, że agent jest przekonany, że Jan jest zajęty, ale od pierwszego dnia jesieni to przekonanie zostanie porzucone przez agenta. Adnotacja daje nam dodatkową informację na temat przekonania, w tym przypadku zajety(Jan). Chociaż adnotacje nie zwiększają siły ekspresji języka, istnieją ważne powody ich wykorzystania. Po pierwsze dzięki adnotacjom baza przekonań jest bardziej czytelna a forma zapisu przekonań elegancka. Kolejną zaletą jest to, że taka forma reprezentacji ułatwia zarządzanie bazą przekonań. Przykładowo adnotacja termin_do może wpływać na okres przechowywania przekonania w bazie przekonań. Warto zaznaczyć, że chociaż ta adnotacja nie ma znaczenia dla interpretera, programista może w stosunkowo prosty sposób zmodyfikować działanie systemu tak, żeby usunięcie konkretnego przekonania miało miejsce zaraz po tym jak w bazie pojawi się przekonanie dotyczące rozpoczęcia się jesieni. Są również inne typy adnotacji, które mają szczególne znaczenie dla interpretera. Taką adnotacją jest adnotacja source, która jest wykorzystywana do zapisywania źródła informacji prowadzącej do określonego przekonania. Istnieją trzy rodzaje źródła informacji: • Informacja sensoryczna (perceptual information) – agent zdobywa określone przekonania, jako wynik ciągłej obserwacji środowiska, w którym działa (patrz cechy agentów). • Komunikacja (Communication) – część przekonań, które agent posiada jest wynikiem procesu komunikacji z innymi agentami (patrz Komunikacja w systemach agentowych). Agent przechowuje informacje otrzymane od innych agentów oraz informacje o tym, który agent ją przesłał. • Notatki mentalne (Mental notes) – czasami bardzo przydatne jest przechowywanie informacji o tym, co miało miejsce w przeszłości, w związku z zadaniami, które agent wykonał lub zobowiązaniami, które złożył. Agent sam dodaje przekonania tego typu do swojej bazy przekonań w trakcie wykonywania planu, i wykorzystuje je później w celu ułatwienia wykonywania planów które będą wybrane w przyszłości. Można Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 4 Technologia inteligentnych agentów myśleć o przekonaniach tego typu jako o „notatkach pamięciowych”, które mogą okazać się przydatne w przyszłości. W środowisku Jason każde z omówionych przekonań jest oznaczane odpowiednimi adnotacjami. Przekonania, których źródłem są sensory oznaczane są adnotacją source(percept), stany mentalne adnotacją source(self). Każda inna adnotacja będzie miała formę nazwy agenta, który dostarczył określoną informację. Na przykład przekonanie lubi(jan,muzyka) może być oznaczone adnotacją [source(jan)] ponieważ to agent o imieniu Jan dostarczył tę informację (co oznacza, że przynajmniej w momencie dodania przekonania do bazy w społeczności istniał agent o imieniu Jan, który lubił muzykę). Silna negacja (Strong Negation) Negacja jest źródłem wielu problemów w dziedzinie programowania logicznego. Popularnym sposobem radzenia sobie z nimi jest tak zwane założenie zamkniętego świata (Closed World Assumption). Założenie zamkniętego świata mówi, że jeżeli nie wiemy, że coś jest prawdziwe lub nie możemy tego dowieść w procesie logicznego wnioskowania na podstawie znanych faktów wówczas jest to traktowane, jako fałszywe. Istotę tego założenia pokazuje uproszczony przykład. Mamy skrócony rozkład jazdy pociągów. Szukamy rannego pociągu do Krakowa. Sprawa jest prosta, jeśli znajdziemy w rozkładzie taki pociąg. Gorzej, gdy rozkład takich pociągów nie zawiera. Logicznie rzecz ujmując nie wynika z tego, ze nie ma takiego pociągu. Być może nie został uwzględniony w skróconym rozkładzie. Tym niemniej może być rzeczą rozsądną przyjąć, że taki pociąg nie istnieje. Do wyciągnięcia takiego wniosku uprawnia nas właśnie założenie zamkniętego świata. Podobnie brak w książce telefonicznej danej osoby, nie pozwala, logicznie rzecz biorąc, wnioskować, że nie ma ona telefonu. Praktycznie jednak wniosek taki bywa użyteczny. Da sie go wyciągnąć zakładając regułę zamkniętego świata. Założenie zamkniętego świata jest realizowane z wykorzystaniem operatora not. Zastosowanie tego operatora oznacza, że negacja danej formuły jest prawdziwa tylko wtedy, gdy system nie jest w stanie dowieść jej prawdziwości z wykorzystaniem posiadanych faktów i reguł (reguły zostaną omówione w następnej sekcji). Kolejny typ negacji jest opisywany przez operator tak zwanej silnej negacji "~". Jest on wykorzystywany w sytuacji, gdy projektant chce jawnie zapisać, że agent jest przekonany, co do tego, że dane stwierdzenie jest fałszywe. Przykładowo zapis kolor(klocek1,bialy) oznacza, że agent jest przekonany, co tego, że obiekt kolocek1 jest koloru białego. Z kolei zapis ~kolor(klocek1,bialy)oznacza, że agent jest przekonany, że klocek1 nie jest biały. Poniżej przedstawiono część bazy przekonań agenta o nazwie Maria. (1) kolor(klocek1,niebieski)[source(robert)]. (2) ~colour(klocek1,bialy)[source(jan)]. (3) kolor(klocek1,czerwony)[source(percept)]. (4) daltonista(robert)[source(self),degOfCert(0.7)]. (5) klamca(robert)[source(self),degOfCert(0.2)]. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 5 Technologia inteligentnych agentów Z przedstawionej bazy przekonań możemy odczytać następujące informacje: Agent Maria był informowany przez agenta o nazwie Robert o tym, że konkretny obiekt o nazwie klocek1 jest koloru niebieskiego (1) oraz przez agenta o nazwie Jan o tym, że obiekt ten nie jest biały (2). Agent Maria dostrzegł później (np. za pomocą sensorów wyposażonych w kamery), że klocek1 jest w rzeczywistości koloru czerwonego (3). W normalnej sytuacji, gdy nie możemy założyć, że ktoś jest uczciwy wobec nas, to co widzimy traktujemy z większym zaufaniem od tego co ktoś nam powiedział. Agent Maria biorąc pod uwagę to, co „zobaczył” i to, o czym powiedział mu agent Robert, mógł dojść do wniosku, że jest on albo daltonistą albo celowo próbował go oszukać i jest kłamcą. Porównując stopnie pewności możemy się domyślić, że Maria wchodziła wcześniej w interakcję z agentem Robertem i jest przekonana o jego uczciwości, co jest widoczne w tym, że Maria jest bardziej pewna tego, że Robert jest daltonistą niż tego, że Robert ją świadomie okłamał. Przekonania (4) i (5) zostały dodane samodzielnie przez agenta Maria. Reguły Reguły pozwalają dochodzić do nowych konkluzji na podstawie znanych faktów. Wprowadzenie reguł do bazy przekonań agenta może uprościć wiele zadań, jak np. zapisywanie w zwięzły sposób warunków w planach agenta. Jednak pomimo szeregu korzyści ze stosowania reguł zalecane jest, aby zrezygnować z nich w prostych systemach. Przykładowe reguły zostały przedstawione poniżej. prawd_kolor(C,B):kolor(C,B)[source(S)] & (S == self | S == percept). prawd_kolor(C,B):kolor(C,B)[degOfCert(D1)] & not (kolor(_,B)[degOfCert(D2)] & D2 > D1)& not ~kolor(C,B). Pierwsza reguła mówi, że najbardziej prawdopodobny kolor to ten, do którego agent doszedł drogą wnioskowania lub ten, który pochodzi z sensorów. Jeżeli pierwsza reguła zawiedzie wówczas, rozważana jest druga reguła, zgodnie z którą prawdopodobnym kolorem jest ten, który ma przypisany najwyższy współczynnik pewności, pod warunkiem, że nie ma żadnych mocnych dowodów na to, że to nie ten kolor. Wnioskowanie realizowane z wykorzystaniem przedstawionych reguł jest tak zwanym wnioskowaniem teoretycznym (Theoretical reasoning). Jak wiadomo, w architekturze BDI agenci prowadzą wnioskowanie praktyczne (Practical Reasoning), które prowadzi do określonych działań. W środowisku AgentSpeak jest to realizowane za pomocą planów agenta, które zostały omówione w dalszej części. Przy tworzeniu agenta w środowisku AgentSpeak wszystko, co musi być zdefiniowane to początkowe przekonania i reguły (jeżeli takie są potrzebne). Przekonania, które są zapisane w kodzie źródłowym agenta są traktowane jako notatki pamięciowe. Tak więc jeżeli w kodzie źródłowym znajduje się przekonanie lubi(Jan,muzyka), to w bazie przekonań zostanie ono zapisane jako lubi(Jan,muzyka)[source(self)]. W sytuacji, gdy projektantowi zależy, aby w bazie znalazło się przekonanie, które będzie traktowane, jako pochodzące z sensorów wówczas należy to wyraźnie zdefiniować z wykorzystaniem odpowiedniej adnotacji np. wysoki(jan)[source(percept)]. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 6 Technologia inteligentnych agentów Cele Pojęcie celu ma fundamentalne znaczenie dla projektowania systemów agentowych. Podczas, gdy przekonania, w szczególności te pochodzące z sensorów opisują własności środowiska, co do prawdziwości których agent jest przekonany, cele wyrażają stany środowiska, które agent chce przez swoje działania uzyskać. Zapisanie w programie agenta celu g oznacza, że agent jest zobowiązany do działania w taki sposób, aby zmienić stan środowiska tak, że agent postrzegając to środowisko może stwierdzić, że jest ono w stanie opisanym przez cel g. Cele definiowane przez projektanta są tak zwanymi celami deklaratywnymi. W środowisku Jason są zdefiniowane dwa rodzaje celów: cele do osiągnięcia (Achievement Goals) oraz cele testowe (Test Goals). Cele do osiągnięcia są oznaczane operatorem ”!”. Przykładowo zapis !posiada(dom)oznacza, że agent posiada cel do osiągnięcia, którego realizacja związana jest z doprowadzeniem do stanu, w którym agent będzie posiadał przekonanie posiada(dom) co pozwala przypuszczać, że obecnie (przed realizacją celu) agent nie posiada takiego przekonania. Podjęcie przez agenta realizacji nowego celu prowadzi do wykonania planów, które opisują sposób działania pozwalający go osiągnąć. Cele testowe są oznaczane operatorem ”?” i pozwalają sprawdzić, czy w bazie przekonań są zawarte określone przekonania lub wydobyć informację z bazy przekonań. Przykładowo cel zapisany w formie ?stan_konta_bankowego(BB) oznacza, że system powinien podstawić pod zmienną logiczną BB wartość stanu konta, co do której agent jest przekonany. Samo podstawienie może się odbywać z wykorzystaniem przekonania, którego wartość zostanie podstawiona pod zmienną (BB→100). Podobnie jak ma to miejsce z początkowymi przekonaniami, projektant może definiować cele wstępne, których realizacją agent powinien zająć się zaraz po uruchomieniu. Przykładowo agent może mieć zdefiniowany długoterminowy cel wstępny polegający na całkowitym wysprzątaniu domu !posprzataj(dom). Kolejną bardzo ważną w kontekście architektury BDI strukturą są plany. Plany Plan zdefiniowany w środowisku Jason ma trzy części: zdarzenie uruchamiające, kontekst oraz ciało. Połączenie zdarzenia wywołującego i kontekstu jest nazywane głową planu. Poszczególne elementy składowe planu są rozdzielone z wykorzystaniem symboli ”:” oraz ”<-” w sposób przedstawiony poniżej. zdarzenie: kontekst <- ciało. W kolejnych akapitach zostanie opisana istota każdego z elementów składowych planu, a w kolejnej sekcji zostanie przedstawiony sposób ich wykorzystania w programie agentowym. Zdarzenie wywołujące (Triggering Event) – jak wiadomo z sekcji opisującej cechy agenta istnieją dwie istotne kwestie związane z zachowaniem agenta. Są to reaktywność i pro-aktywność. Posiadanie celów, które agent chce osiągnąć w dłuższym okresie czasu związane jest z pro-aktywnością. Jednak podczas działania zmierzającego do realizacji celów agent powinien bacznie obserwować zmiany w środowisku. Jest to bardzo istotne, ponieważ zmiany te mogą wpływać na sprawność osiągania celów i w rezultacie na skuteczność tego procesu. Zmiany w środowisku mogą oznaczać, że są nowe możliwości realizacji pewnych działań oraz możliwości przyjęcia nowych celów lub porzucenia obecnie przyjętych do realizacji. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 7 Technologia inteligentnych agentów Są dwa istotne typy zmian: zmiana przekonań oraz zmiana celów. Zmiany te są źródłem zdarzeń, na które agent powinien odpowiednio zareagować. Każda z tych zmian może polegać na dodaniu nowej wartości, lub usunięciu istniejącej. W wyniku pojawienia się określonego zdarzenia agent realizuje odpowiedni plan. Część planu oznaczona jako zdarzenie jest wykorzystywana do zdefiniowania dla każdego planu wzorca zdarzenia, na które agent powinien zareagować wykonaniem danego planu. Jeżeli pojawiające się zdarzenie może być dopasowane do wzorca wówczas rozpoczyna się realizacja planu, przy założeniu, że spełnione są pewne dodatkowe warunki. Jeżeli część zdarzenie określonego planu może być dopasowana do określonego zdarzenia wówczas plan jest istotny (Relevant) dla danego zdarzenia. Kontekst (Context) – podobnie jak pojęcie zdarzenia, kontekst również jest związany z kwestią reaktywności agenta. To, co wiadomo do tej pory z przedstawionego opisu może zostać podsumowane następująco: agenci mają cele a plany są wykorzystywane do ich realizacji; w trakcie realizacji celu agenci powinni obserwować zmiany pojawiające się w środowisku. Interakcja z dynamicznym środowiskiem jest często bardzo skomplikowana, ponieważ zmiany, które w nim następują mogą oznaczać, że agent powinien nadal działać bez zmian. Może się jednak zdarzyć, że zmiany spowodują zmiany w planach, które wydawały się odpowiednie przy realizacji określonego celu. Dlatego też w systemach reaktywnych zobowiązanie się do wykonania określonego planu jest odkładane tak długo jak to tylko możliwe. Bardzo często agent posiada kilka planów przeznaczonych do realizacji określonego celu. Kontekst jest wykorzystywany, aby sprawdzić, czy w aktualnej sytuacji określony plan ma szansę się powieść (może obsłużyć dane zdarzenie i zrealizować cel) biorąc pod uwagę aktualną informację na temat środowiska. Dlatego też określony plan jest wybierany do wykonania tylko w sytuacji, gdy jego kontekst jest logiczną konsekwencją przekonań agenta. Plan posiadający kontekst, który jest oceniony, jako prawdziwy w kontekście aktualnych przekonań jest planem stosowalnym w danym momencie i staje się kandydatem do wykonania. Ciało planu (Plan Body) – istotę ciała planu zrozumieć jest najłatwiej. Jest to sekwencja formuł określająca sposób działania agenta. Sekwencja powinna obsłużyć zdarzenie, które uruchomiło plan i doprowadzić do realizacji celu. Zdarzenia wywołujące Jak wiadomo z poprzedniej sekcji każdy agent posiada przekonania i cele. Istnieją dwa typy celu: cele do osiągnięcia oraz cele testowe. Zdarzenia reprezentują zmianę w przekonaniach lub celach i mogą być związane z dodaniem lub usunięciem określonego obiektu. W związku z tym można zdefiniować 6 różnych typów zdarzeń wywołujących dla danego literału L. Notacja Nazwa +l Dodanie przekonania. -l Usunięcie przekonania. +!l Dodanie celu do osiągnięcia. -!l Usunięcie celu do osiągnięcia. +?l Dodanie celu testowego. -?l Usunięcie celu testowego. Zdarzenia związane z dodaniem lub usunięciem przekonania występują w momencie, gdy agent uaktualnia swoją bazę przekonań w związku z monitorowaniem środowiska, co ma miejsce w każdym cyklu wnioskowania. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 8 Technologia inteligentnych agentów Zdarzenia związane z dodaniem nowych celów występują głównie, jako konsekwencja wykonania innych planów, ale również, jako konsekwencja komunikacji. Wykonanie planu może wymagać od agenta nowych celów/podcelów do osiągnięcia. Zdarzenie usunięcia celu jest związane z obsługą niepowodzenia realizacji planów. Schemat na rysunku pokazuje jak prosta formuła może być wykorzystana do tworzenia bardziej skomplikowanych struktur. W celu lepszego zrozumienia zdarzeń warto rozważyć następujący przykład. Należy zaprojektować agenta, którego celem jest serwowanie obiadu. Cel może zostać uznany za osiągnięty, gdy agent jest przekonany, że obiad został podany, co może być zapisane, jako podany(obiad). Potrzebny jest plan, który agent zacznie wykonywać zaraz po tym jak przyjmie cel prowadzący do stanu rzeczy, który jest opisany w formie przekonania. Zdarzenie wywołujące, może być zapisane w postaci +!podany(obiad), lub w bardziej ogólnej postaci, +!podany(Posilek). W takim układzie w sytuacji, gdy agent będzie miał zrealizować cel !podaj(obiad) wówczas pod zmienną logiczną Posilek zostanie podstawiona wartość obiad. Z kolei cele testowe są potrzebne do uzyskania prostej informacji z bazy przekonań. Przykładowo, załóżmy że agent zwykle wie ile paczek makaronu posiada w spiżarce, tak więc jeżeli potrzebuje takiej informacji wówczas po prostu przywołuje ją z pamięci. Może się jednak zdarzyć, że nie pamięta i wtedy musi podjąć działanie polegające na zapytaniu innego agenta lub musi sam udać się do spiżarki. Dlatego też istnieją plany ze zdarzeniem wywołującym polegającym na dodaniu celu testowego, chociaż określony problem mógłby być rozwiązany z wykorzystaniem celów do osiągnięcia. Rysunek. Typy formuł w środowisku AgentSpeak. Kontekst Jak wiadomo z poprzednich sekcji kontekst jest wykorzystywany w celu zdefiniowania, kiedy określony plan powinien być uważany za stosowalny. Dodatkową kwestią wartą przypomnienia jest to, że przy pisaniu systemu funkcjonującego w dynamicznym środowisku, zobowiązanie do działania w określony sposób powinno być odkładane tak długo jak to tylko możliwe. Tak, więc jeśli dochodzi do wybrania określonego planu, aby osiągnąć cel, kontekst jest wykorzystywany do tego aby upewnić się, że wybierany plan ma szansę na powodzenie. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 9 Technologia inteligentnych agentów Kontekst jest zapisywany z wykorzystaniem domyślnych literałów oraz wyrażeń opisujących relacje. Literał jest predykatem opisującym określony stan świata agenta, który może być zapisany z wykorzystaniem silnej negacji. Domyślny literał jest literałem, który może być zapisany opcjonalnie z wykorzystaniem operatora not (operator negacji domyślnej). Wyrażenia logiczne mogą pojawić się w definicji kontekstu jako formuły złożone, które są połączeniem literałów z wykorzystaniem operatorów koniunkcji, dysjunkcji oznaczanych odpowiednio z wykorzystaniem symboli ”&” (and), ”|” (or) oraz not. Taka sama notacja może być wykorzystana przy definicji ciała reguł. Typy literałów, które mogą się pojawić w definicji kontekstu przedstawia tabela. Tabela. Typy literałów wykorzystywanych w definicji kontekstu planu. Notacja Nazwa l Agent jest przekonany, że l jest prawdą ~l Agent jest przekonany, że l jest fałszem. not l Agent nie jest przekonany, że l jest prawdą. not ~l Agent nie jest przekonany, że l jest fałszem. Kontekst planu jest zwykle zapisany, jako połączenie literałów tego typu. Przykłady kontekstów planów zostały przedstawione poniżej. +!przygotuj(Cos) : liczba_osob(L) & stan_magazynowy(Cos,S) & S > L <-.... ... +!kup(Cos) : not ~legalne(Cos) & cena(Cos,C)& stan_konta(S) & S > C <- .... W pierwszym przypadku mamy do czynienia z sytuacją, gdzie agent podejmie realizację celu przygotowania czegoś (do jedzenia) pod warunkiem, że ma na stanie wystarczającą ilość tego czegoś biorąc pod uwagę liczbę osób, które będą jadły. Pierwszy plan może być wykorzystany do realizacji celu. W drugim przypadku jest opisana sytuacja, w której gdy przychodzi do podjęcia przez agenta celu kupienia czegoś, plan będzie uznany za wykonalny, gdy agent nie ma informacji, że kupno czegoś jest nielegalne i ma wystarczającą kwotę na koncie, aby zrealizować zakup tego czegoś. Istotną kwestią, którą należy zapamiętać jest to, że każdy literał, który pojawia się w definicji kontekstu jest sprawdzany w bazie przekonań agenta. Przykładowo, jeżeli w bazie przekonań znajduje się stan_magazynowy(makaron,5)ocena literału stan_magazynowy(Cos,S)zwróci wartość true przy założeniu, że zmienna Cos jest związana z wartością makaron a następnie zmienna S zostanie związana z wartością 5. W ten sposób system sprawdza, czy cały kontekst jest logiczną konsekwencją bazy przekonań. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 10 Technologia inteligentnych agentów Ciało planu Ciało planu definiuje działania, które agent zacznie realizować w momencie, gdy wystąpiło zdarzenie, które może być dopasowane do zdarzenia wywołującego planu i kontekst jest prawdziwy w odniesieniu do aktualnej zawartości bazy przekonań agenta. Przepis na działanie jest definiowany w formie sekwencji formuł rozdzielonych symbolem ”;”. Istnieje pięć rodzajów formuł, które mogą pojawić się w ciele planu. Pierwszym rodzajem formuł, które pojawiają się w planach są akcje. Jak wiadomo agent musi być zdolny do działania w swoim środowisku. Akcje opisują umiejętności agenta. Jeżeli programowany jest robot wówczas jasno określa się działania, które powinien móc wykonać za pośrednictwem określonego sprzętu. Każda z akcji musi mieć symboliczną reprezentację, która pozwoli odwoływać się do nich w programie agenta, a cała architektura agenta zostanie połączona z nimi poprzez odpowiednie interfejsy efektorów agenta. Akcje są opisywane z wykorzystaniem symboli predykatów. Przed wykonaniem akcji wszystkie zmienne występujące w predykacie muszą zostać związane z konkretnymi wartościami. Interpreter odróżnia predykaty opisujące akcje od innych predykatów (opisujących np. kontekst) analizując położenie symbolu predykatu. Jeżeli symbol predykatu jest umiejscowiony w ciele planu wówczas jest traktowany, jako akcja. Inne typy formuł też wykorzystują symbole predykatów, ale stosowana jest specjalna notacja pozwalająca stwierdzić, czy dany element planu jest, czy nie jest akcją zmieniającą środowisko. Jest również szczególny przypadek akcji, tak zwana akcja wewnętrzna (internal action), która jest wykonywana wewnątrz agenta i nie wpływa na zmianę środowiska. Jako prosty przykład rozważmy sytuację, w której pisany jest program dla robota, który ma dwie ręce, lewą i prawą. Jedyną akcją, którą robot potrafi wykonać jest obrót rąk, gdzie kąt obrotu musi być podany. W planach mogą być zapisane akcje w formie obroc(lewa_reka,45) lub obroc_lewa_reke(90). To, która reprezentacja zostanie wybrana jest kwestią gustu. Akcje są wykonywane przez efektory agenta, które nie są częścią interpretera. W związku z tym rozsądnym rozwiązaniem jest wymaganie jakiegoś sprzężenia zwrotnego, mówiącego czy akcja została wykonana, czy nie. Dopóki takie logiczne sprzężenie zwrotne nie zostanie odebrane, plan który wymaga wykonania określonej akcji musi być zawieszony aż do momentu, gdy będzie pewne, że akcja została wykonana. Wykonanie akcji nie oznacza, że spodziewane zmiany zostały wprowadzone – musi to zostać potwierdzone przez analizę środowiska i sprawdzenie przekonań. Jeżeli akcja nie została wykonana wówczas plan zawodzi. Cele do osiągnięcia Posiadanie celów do osiągnięcia jest kolejną istotną charakterystyką agenta. Złożone zachowanie to coś więcej niż proste sekwencje akcji do wykonania. Często, przed podjęciem kolejnych akcji, muszą zostać osiągnięte określone cele. W związku z tym w ramach ciała planu mogą być definiowane cele do osiągnięcia, które są zapisywane w postaci literału oraz symbolu ”!”. Na przykład w ramach planu może być zdefiniowany cel polegający na osiągnięciu stanu rzeczy, w którym klient jest zadowolony !klient(zadowolony). Jeżeli w ciało planu zostanie włączony cel do osiągnięcia wówczas dla tego celu musi być wykonany plan i dopiero, gdy plan dla tego celu zostanie wykonany do końca może być wykonana reszta akcji. Przykładowo jeżeli ciało planu zawiera takie akcje jak ”a1; !g2; a3” agent wykona najpierw akcję a1, następnie będzie musiał osiągnąć cel !g2, co może wymagać wykonania planu dla tego celu i dopiero po tym jak !g2 zostanie osiągnięty zostanie wykonana akcja a3. Czasami zachodzi potrzeba takiego zdefiniowania ciała planu, że agent napotykając cel do osiągnięcia nie czeka aż zostanie on osiągnięty zanim wykona resztę czynności w planie. W takiej sytuacji może być wykorzystany operator ”!!”, który Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 11 Technologia inteligentnych agentów mówi interpreterowi, że nie powinien odkładać planu tylko przyjąć cel i zanim zostanie on wykonany uruchomić pozostałe akcje z planu. Notatki pamięciowe Przygotowując program agenta należy być świadomym rzeczy, które agent potrafi dostrzegać w swoim środowisku. Niektóre przekonania są nabywane na podstawie danych sensorycznych i są automatycznie uaktualniane i w związku z tym projektant nie musi tego robić programowo. Istnieją jednak sytuacje, w których przydatną funkcją jest tworzenie przekonań podczas wykonywania planu. Przekonania tego typu noszą nazwę notatek pamięciowych i są oznaczane adnotacją source(self). Agent może potrzebować tego typu notatek, aby przypomnieć sobie o czymś, co zrobił w przeszłości, lub o czymś, co zostało przerwane i powinno być wznowione, lub o obietnicy/zobowiązaniu. Np. określony agent odpowiedzialny za opiekę nad trawnikiem powinien pamiętać kiedy ostatnio trawnik był skoszony, co może być reprezentowane w ciele planu za pomocą formuły +skoszony(trawnik,Dzisiaj); gdzie zmienna Dzisiaj została wcześniej ukonkretniona określoną wartością. Jeżeli taka formuła pojawi się w ciele wykonywanego planu wówczas formuła postaci skoszony(trawnik,data(2008,01,30)) zostanie automatycznie dodana do bazy przekonań. Minusem takiego podejścia jest to, że projektant musi zadbać o to, aby przekonanie, które nie jest dłużej potrzebne zostało usunięte z bazy przekonań np. do_zrobienia(skosic(trawnik)). Do utrzymania porządku w bazie przekonań służy operator ”-+”, który pozwala aktualizować na bieżąco instancje przekonań. Operator najpierw wyszukuje w bazie określone przekonanie, usuwa je, a następnie wprowadza nową instancję z aktualnymi wartościami. Próba usunięcia przekonania, które nie istnieje nie prowadzi do niepowodzenia planu. Jeżeli istnieje taka potrzeba można również zmienić przekonania pochodzące z innych źródeł, ale należy to robić bardzo ostrożnie, ponieważ może to prowadzić do nieoczekiwanych sytuacji. Przykładowo projektant może zapisać -godny_zaufania(ag2)[source(ag1)] aby usunąć przekonanie, którego źródłem jest ag1 mówiące o tym, że agent ag2 jest godny zaufania lub +wlaczony(tv)[source(percept)] jeżeli projektant eksperymentuje z tym jak agent postrzega środowisko. Akcje wewnętrzne Istotną cechą akcji jest to, że zmieniają one stan środowiska. Można o nich myśleć, jako o akcjach wykonywanych poza „umysłem” agenta. Czasem przydatne okazują się akcje wykonywane wewnątrz agenta. Takie akcje, określane terminem akcji wewnętrznych mogą być wykorzystane przez projektanta do rozszerzenia języka o polecenia, które nie są dostępne jak również do realizacji w języku Java (lub innym poprzez mechanizm JNI) dostępu do systemów typu „legacy”. Akcje wewnętrzne są oznaczane symbolem ”.”. Symbol ”.” jest również wykorzystywany do oddzielenia nazwy biblioteki od nazwy akcji wewnętrznej zawartej w tej bibliotece. Załóżmy, że projektant realizuje w środowisku Jason kontroler dla robota i korzysta z biblioteki zawierającej akcje potrzebne do przetwarzania obrazów cyfrowych, które robot pobiera za pomocą sensorów wizyjnych. Biblioteka nazywa się dip a w niej znajduje się akcja wewnętrzna o nazwie ustal_sciezke pozwalająca określić ścieżkę przejazdu do nowego położenia biorąc pod uwagę obecne położenie robota ustalone na podstawie obrazu pochodzącego z kamery. Aby to zrealizować projektant umieści w ciele planu akcję zapisaną w formie dip.ustal_sciezke(X,Y,P) zmienna P zostanie ukonkretniona przez akcję wewnętrzną i związana ze ścieżką prowadzącą do położenie określonego przez współrzędne (X,Y). Istnieje zbiór predefiniowanych standardowych akcji wewnętrznych, z których projektant może korzystać. Akcje te implementują kluczowe mechanizmy wymagane przez architekturę BDI. Korzystając ze standardowej akcji wewnętrznej należy wpisać jej nazwę poprzedzoną symbolem ”.”. Przykładowo literał Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 12 Technologia inteligentnych agentów .send uruchamia standardową akcję pozwalającą na komunikację międzyagentową. Korzystanie z tej akcji wymaga dodatkowej wiedzy na temat języka komunikacji międzyagentowej. Na razie można założyć, że uruchomienie tej akcji wymaga podania trzech parametrów: nazwy agenta, który jest adresatem wiadomości, informacja na temat intencji zapisana w formie performatywu (np. inform, request) oraz właściwa zawartość wiadomości. Przykład przedstawiony poniżej zawiera elementy planu poznane do tej pory. +!opuscic(dom) : not pada_deszcz & not ~pada_deszcz <!polozenie(okno); ?typ_zaslon(Zaslony); odsun(Zaslony); … +!opuscic(dom) : not pada_deszcz & not ~pada_deszcz <.send(mama,askif,pada_deszcz); … Pierwszy plan mówi, że jeżeli agent podejmuje nowy cel opuszczenia domu w warunkach, w których nie jest pewien czy pada deszcz, czy nie pada – warto zauważyć, że kontekst jest tak zdefiniowany, że plan może zostać użyty tylko w sytuacji, gdy agent nie jest przekonany, że pada ale nie jest również przekonany, że nie pada - wówczas jedynym możliwym działaniem jest podjęcie celu znalezienia się przy oknie (plan prowadzący do realizacji celu może wymagać od agenta, aby ten się przemieszczał w środowisku, jeżeli obecnie nie jest przy oknie), następnie agent pobierze z bazy przekonanie i ustali typ zasłon, które agent teraz jest w stanie dostrzec a następnie je odsunie (można się domyślać, że dla różnych typów zasłon istnieją różne akcje pozwalające je odsunąć). Plan może być dalej realizowany poprzez przyjęcie celu sprawdzenia, czy agent powinien zabrać ze sobą parasol. Ze względu na prostotę reszta planu została pominięta. Przed dalszą realizacją planu, zaraz po akcji odsunięcia zasłon agent w cyklu wnioskowania pobiera dane z sensorów i uaktualnia bazę przekonaniem związanym z sytuacją na zewnątrz. Drugi plan zawiera alternatywną ścieżkę działań dla tej samej sytuacji: agent posiada cel opuszczenia domu nie będąc przekonanym, co do tego, czy pada, czy nie. Zamiast podchodzić do okna i odsłaniać zasłony agent pyta agenta o nazwie mama, który zwykle wie, jaka pogoda jest na zewnątrz. To, który plan zostanie wykonany zależy od agenta (agent „nastolatek” będzie miał zdefiniowane oba plany, ale jest bardzo prawdopodobne, że wybierze drugi głośno krzycząc matki z pytaniem). W praktyce wybór planu jest realizowany przez tak zwaną funkcję wyboru. Wyrażenia Każda formuła w kontekście oraz ciele planu musi mieć wartość logiczną (włączając akcje wewnętrzne). Przy specyfikacji kontekstu oraz ciała planu mogą być stosowane operatory relacyjne, jak np. X >= Y*2, co oznacza, że jeżeli zostało to zapisane w kontekście plan jest stosowalny, jeżeli ten warunek jest spełniony. W przypadku gdy taki warunek został zapisany w ciele planu, plan się nie powiedzie, jeżeli warunek nie jest spełniony. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 13 Technologia inteligentnych agentów Etykiety planu Każdy plan może zostać oznaczony etykietą, o której można myśleć, jako o nazwie planu. W zasadzie wszystkie plany mają nazwy automatycznie generowane przez interpreter, jeżeli tylko taka nazwa nie została przypisana przez projektanta. Jest to ważny mechanizm, ponieważ czasem istnieje potrzeba odwoływania się do określonego planu w trakcie działania agenta. Notacja dla etykiety dla planu jest przedstawiona poniżej. @etykieta zdarzenie: kontekst <- ciało. Etykieta nie musi być prostym termem takim jak ”etykieta”. Etykieta może być również zapisana w formie predykatu, co oznacza, że również może mieć przypisane adnotacje zawierające meta-informacje, które pozwalają interpreterowi wybrać określony plan ze zbioru planów. Przykład bardziej złożonej etykiety przedstawiono poniżej. @zakupy(1) [szansa_powodzenia(0.7), wazne_do(jesien)] +potrzebuje(Cos) : moze_sobie_pozwolic_na(Cos) <- !kup(Cos). zaplata(0.9), Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie source(ag1), 14 Technologia inteligentnych agentów Przykład: Kompletny program agentowy Charakterystyka dziedziny problemu Celem domowego robota jest serwowanie piwa swojemu właścicielowi. Jego misja jest prosta. Robot odbiera żądanie od użytkownika idź do lodówki, wyjmij piwo i je przynieś. Oprócz przynoszenia piwa robot powinien również dbać o stan piwa w lodówce i jeżeli stan spada poniżej pewnego minimalnego poziomu, powinien zamówić dodatkowe piwo za pośrednictwem serwisu supermarketu o nazwie dowieź do domu. Dodatkowo, robot ma reguły zakodowane przez departament zdrowia, które ustalają maksymalne dzienne spożycie piwa. Na rysunku przedstawiono dodatkowe informacje na temat scenariusza z wykorzystaniem notacji metodyki Prometheus. stock(beer,N) has(owner,beer) sip(beer) at(robot,Place) open(fridge) robot owner achieve: has(owner,beer) get(beer) tell: toomuch(beer) close(fridge) achieve: order(beer,N) hand_in(beer) tell: delivered(beer,N, OrderID) move_towards(Place) supermarket deliver(beer,N) Rysunek. Struktura systemu zapisana w notacji metodyki Prometheus. System składa się z trzech agentów o nazwach robot, supermarket i owner (właściciel). Możliwe spostrzeżenia agentów są następujące: at(robot,Place) – dla uproszczenia przykładu tylko dwa miejsca są dostrzegane: fridge (lodówka), gdy robot jest naprzeciwko lodówki i owner (właściciel) gdy robot jest obok właściciela. W zależności od swojego położenia w domu, robot będzie odbierał dwa spostrzeżenia at(robot,fridge), lub at(robot,owner), lub żadnego spostrzeżenia gdy robot nie jest w żadnym z miejsc. stock(beer,N) – gdy lodówka jest otwarta agent będzie w stanie określić ile jest piw w lodówce (ilość piw jest reprezentowana przez zmienną N). has(owner,beer) – jest to spostrzeżenie, które robot odbiera, gdy właściciel ma niepustą butelkę z piwem. Większość z akcji ma bardzo intuicyjne znaczenie. Akcja, którą należy szerzej wyjaśnić to move_towards. Aby uprościć przykład droga, którą robot porusza się po domu jest mocno uproszczona. Zakłada się, że gdy robot wykonuje akcję move_towards(fridge), jego sprzęt lub jego symulator wykonuje jeden krok w stronę lodówki, tak że nie musi „martwić się” o ścieżkę do lodówki. Oprócz monitorowania środowiska i wykonywania akcji agenci przesyłają między sobą komunikaty (są oznaczane przez koperty). Za każdym razem gdy agent owner chce nowe piwo, przesyła komunikat do agenta robot. Performatyw wiadomości to achieve co Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 15 Techno ologia inte eligentnyc ch agentów w oznacza a, że gdy robot odbierze wiadomość ć podejmiie realizac cję noweg go celu has(own ner,beer). Podobny komunikat jest przesy yłany do ag genta supermarket gd dy agent robot ch hce zamów wić więcej piwa. Agentt supermark ket przesyła a komunika at o perform matywie tell do o agenta ro obota, gdy zrealizuje zamówienie. Wiadom mości o perrformatywie e tell są (w tym prz wykorzy ystywane do d zmiany przekonań p zypadku delivered(b beer,N,Ord derID)). Rysunek przedsta awia przyk kładowe środowisko a w dalsze ej części znajduje się kod ególnych ag gentów. poszcze Rysu unek. Przyk kładowe śro odowisko dz ziałania „ro obota piwne ego” zaimplementowa ane w j języku Java a. Agent Owner !get(be eer). // początkowy p y cel /* Plan ny */ @g +!get(b beer) : tr rue < .send(r <robot,achi ieve,has(o owner,beer r)). @h1 +has(ow wner,beer) ) : true < !drink( <(beer). @h2 -has(ow wner,beer) ) : true < !get(be <eer). , piję je małymi łyczkami // Gdy mam piwo, @d1 +!drink k(beer) : has(owner r,beer) < sip(bee <er); ! !drink(bee er). @d2 +!drink k(beer) : not has(o owner,beer) < true. <+msg(M) )[source(A Ag)] : tru ue < .print( <("Message from ",Ag g,": ",M); ; -msg(M). kowym cele em agenta owner jes st get(Beer r). Dlatego o też, gdy owner rozpoczyna Początk działaniie generow wane jest zdarzenie +!get(bee er), które uruchamia plan oznaczony etykietą ą @g. Plan po prostu wysyła wiadomość do d agenta robot z pro ośbą o osią ągnięcie celu ha as(owner,b beer). Gdy robot osią ąga cel age ent owner dostrzega to i do jego bazy dodawa ane jest prrzekonanie has(owner r,beer)[source(per rcept)]. Ta a zmiana w bazie Materiały Distance Learning © Wyższa a Szkoła Inforrmatyki i Zarz ządzania z sied dzibą w Rzesz zowie 16 Technologia inteligentnych agentów przekonań generuje zdarzenie, które uruchamia plan @h1. Podczas realizacji planu @h1 tworzony jest podcel !drink(beer) i wówczas agent właściciel rozpoczyna picie piwa rekursywnie wykonując plan @d1. Zdarzenie +!drink(beer) ma dwa istotne plany (@d1 i @d2) i każdy z nich jest wybierany w oparciu o swój kontekst: @d1 jest wybierany kiedykolwiek agent owner ma trochę piwa w butelce a @d2 w przeciwnym razie. Po tym jak piwo ulegnie wypiciu przekonanie has(owner,Beer) zostaje usunięte a zamiar picia piwa również znika (rekursywne wykonywanie planu !drink(beer) zostaje zatrzymane). Zdarzenie –has(owner,Beer) uruchamia plan @h2. Ten plan tworzy nowy podcel (!get(beer)), który uruchamia od nowa określone zachowanie agenta owner. Ostatni plan po prostu drukuje wiadomość odebraną od agenta oznaczonego jako Ag. Wiadomość zostaje usunięta z bazy przekonań zaraz po wykonaniu wewnętrznej akcji .print. Jest to konieczne ponieważ gdy taki komunikat jest odbierany zdarzenie jest generowane tylko w przypadku gdy komunikatu niw ma już w bazie przekonań. Agent Supermarket last_order_id(1). // początkowe przekonanie // Plan pozwalający osiągnąć cel "order" od agenta Ag +!order(Product,Qtd)[source(Ag)] : true <- ?last_order_id(N); OrderId = N + 1; -+last_order_id(OrderId); deliver(Product,Qtd); .send(Ag, tell, delivered(Product,Qtd,OrderId)). Kod agenta supermarket jest prosty. Agent posiada początkowe przekonanie zawierające informację na temat ostatniego numeru zamówienia i plan osiągnięcia celu przetwarzania zamówienia dla pewnego agenta. Zdarzenie wywołujące ma trzy zmienne: nazwa produktu, ilość i źródło celu do osiągnięcia (w tym przypadku nadawcę komunikatu z performatywem achieve). Gdy plan jest wybrany do wykonania najpierw konsultowana jest baza przekonań w celu sprawdzenia numeru ostatniego zamówienia (?last_order_id(N)); numer zamówień jest zwiększany (OrderID = N+1); uaktualniana jest baza przekonań (-+last_order_id(OrderID)); dostarczany produkt z wykorzystaniem zewnętrznej akcji i w końcu przesyłany komunikat do klienta (agenta robota w tym przypadku) przekazujący informację, że produkt został dostarczony. Robot Agent /* Początkowe przekonania */ // początkowo agent jest przekonany, że jest piwo w lodówce available(beer,fridge). // mój właściciel nie powinien pić więcej niż 10 piw dziennie :-) limit(beer,10). /* Reguły */ too_much(B) :.date(YY,MM,DD) & .count(consumed(YY,MM,DD,_,_,_,B),QtdB) & limit(B,Limit) & QtdB > Limit. /* Plany */ @h1 +!has(owner,beer) : available(beer,fridge) & not too_much(beer) <- !at(robot,fridge); open(fridge); get(beer); close(fridge); !at(robot,owner); hand_in(beer); // zapamiętaj, że kolejne piwo zostało wypite Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 17 Technologia inteligentnych agentów .date(YY,MM,DD); .time(HH,NN,SS); +consumed(YY,MM,DD,HH,NN,SS,beer). @h2 +!has(owner,beer) : not available(beer,fridge) <- .send(supermarket, achieve, order(beer,5)); !at(robot,fridge). // podejdź do lodówki i zaczekaj. @h3 +!has(owner,beer) : too_much(beer) & limit(beer,L) <- .concat("The Department of Health does not allow me ", "to give you more than ", L, " beers a day! I am very sorry about that!",M); .send(owner,tell,msg(M)). @m1 +!at(robot,P) : at(robot,P) <- true. @m2 +!at(robot,P) : not at(robot,P) <- move_towards(P); !at(robot,P). // gdy supermarket zrealizuje dostawę ponów realizację celu ’has’ @a1 +delivered(beer,Qtd,OrderId)[source(supermarket)] : true <- +available(beer,fridge); !has(owner,beer). // when the fridge is openned, the beer stock is perceived // and thus the available belief is updated @a2 +stock(beer,0) : available(beer,fridge) <- -available(beer,fridge). @a3 +stock(beer,N) : N > 0 & not available(beer,fridge) <- +available(beer,fridge). Robot jest głównym agentem w przykładzie i w związku z tym jego kod jest trochę bardziej złożony. Robot utrzymuje przekonanie dotyczące dostępności piwa w lodówce. Początkowo posiada przekonanie available(beer,fridge). Dla robota istotne jest, aby pamiętać czy w lodówce jest dostępne piwo niezależnie od położenia, w jakim się znajduje w środowisku. Robot może dostrzec stan piwa tylko w sytuacji, gdy jest przed lodówką i jest ona otwarta. W momencie, gdy robot zamknie lodówkę, spostrzeżenie dotyczące zapasu piwa jest natychmiast usuwane. W związku z tym robot musi zapamiętać, co „widział” w lodówce. Plany @a2 i @3 uaktualniają przekonanie dotyczące dostępności piwa w stosownie do spostrzeżeń agenta. Baza przekonań posiada również regułę określającą, czy właściciel wypił już dopuszczalną dzienną liczbę butelek piwa. Weryfikacje ta bazuje na liczbie przekonań o nazwie consumed. Za każdym razem, gdy robot przynosi piwo właścicielowi dodaje przekonanie, aby to zapamiętać. Przekonanie ma następującą strukturę +consumed(Year,Month,Day,Hour,Minute,Second,beer). Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 18 Technologia inteligentnych agentów Bieżąca data jest pobierana za pomocą wewnętrznej akcji .date (koniec planu @h1). Agent korzysta również z wewnętrznej akcji .count w celu obliczenia liczby przekonań consumed znajdujących się w bazie (zmienna QtdB zostaje ukonkretniona ustaloną wartością). Przekonanie too_much jest wykorzystywane w celu ograniczenia spożycia piwa zgodnie z regułami ustalonymi przez departament zdrowia. Głównym zadaniem agenta o nazwie robot jest osiągnięcie celu !has(owner,beer), który został utworzony po odebraniu komunikatu z performatywem achieve przesłanego przez agenta owner. Robot ma trzy plany pozwalające osiągnąć cel (@h1, @h2 i @h3). Pierwszy plan jest wybierany w sytuacji, gdy dostępne jest piwo a właściciel nie wypił zbyt dużo piwa (jest to zdefiniowane w kontekście planu). Plan @h1 jest 1. Robot 2. Robot 3. Robot 4. Robot 5. Robot 6. Robot realizowany następująco: podchodzi do lodówki (podcel). otwiera lodówkę (akcja zewnętrzna). bierze piwo (akcja zewnętrzna). zamyka lodówkę (akcja zewnętrzna). wraca do właściciela (podcel). daje piwo właścicielowi (akcja zewnętrzna). Plan pozwalający zrealizować podcel !at wykorzystuje akcję zewnętrzną move_towards dopóki agent nie zdobędzie przekonania, że znajduje się w miejscu przeznaczenia P. Drugi plan jest wybierany, gdy nie ma więcej piwa w lodówce. W takim przypadku robot zamawia 5 butelek piwa u agenta o nazwie supermarket, podchodzi do lodówki i czeka na dostawę. Plan kończy się, gdy robot znajduje się przy lodówce. W momencie gdy piwo jest ponownie dostępne w lodówce cel !has(owner,beer)powinien zostać wznowiony. Jest za to odpowiedzialny plan @a1. Trzeci plan jest wykonywany, gdy robot nie powinien (niestety) już przynosić właścicielowi piwa. W takiej sytuacji wysyła on do właściciele odpowiedni komunikat z wyjaśnieniem powodów swojego zachowania. Uruchomienie systemu Każdy system stworzony w środowisku Jason powinien mieć zdefiniowany plik opisujący system wieloagentowy. W pliku tym definiowani są agenci, współdzielone środowisko oraz dodatkowe parametry uruchomieniowe. Zawartość pliku przedstawiona poniżej definiuje agentów oraz klasę Javy symulującą środowisko. MAS domestic_robot { environment: HouseEnv(gui) agents: robot; owner; supermarket agentArchClass SupermarketArch; } Poniżej przedstawiony jest wycinek komunikatów pojawiających się w trakcie działania systemu. [robot] doing: move_towards(fridge) [robot] doing: move_towards(fridge) [robot] doing: move_towards(fridge) [robot] doing: open(fridge) [robot] doing: get(beer) [robot] doing: close(fridge) [robot] doing: move_towards(owner) [robot] doing: move_towards(owner) Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 19 Technologia inteligentnych agentów ... [robot] doing: hand_in(beer) [owner] doing: sip(beer) [owner] doing: sip(beer) ... [supermarket] doing: deliver(beer,5) ... [owner] saying: Message from robot: The Department of Health does not allow me to give you more than 10 beers a day! I am very sorry about that! Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 20 Technologia inteligentnych agentów ĆWICZENIA Wskazówki techniczne 1. Przed rozpoczęciem realizacji zadań utwórz na dysku twardym folder Jason, skopiuj do niego archiwum jason.zip, a następnie rozpakuj je i uruchom środowisko (plik jason.exe). Okno środowiska jest przedstawione na rysunku. Do uruchomienia środowiska potrzebny jest JDK 5.0. Rysunek. Okno środowiska Jason. 2. W niektórych sytuacjach potrzebna będzie konfiguracja środowiska polegająca na wskazaniu ścieżki do katalogu gdzie zainstalowany jest JDK. Jest to realizowane za pomocą opcji Plugins -> Plugins Options -> Jason. Zadanie 1 Narysuj diagram czynności dla opisania cyklu realizowanego przez architekturę Jason. Zadanie 2 Zadanie polega na uruchomieniu prostego systemu wieloagentowego. Jest to klasyczny przykład o nazwie sprzątające roboty. Środowisko jest reprezentowane przez siatkę (rysunek). Jeden z robotów przeszukuje każdą z komórek środowiska (siatki) w celu odnalezienia śmieci. Jeżeli znajdzie, bierze je i przynosi do robota znajdującego się na środku, który zarządza piecem do spalania. Następnie wraca do miejsca gdzie znalazł śmieci i kontynuuje dalsze poszukiwania z tego miejsca. W celu uruchomienia przykładu należy przejść do folderu dysk:\Jason\examples\cleaning-robots, gdzie dysk to nazwa dysku, na którym został utworzony katalog środowiska Jason. Wszystkie projekty w systemie Jason mają plik konfiguracyjny o rozszerzeniu *.mas2j. W związku z tym, aby uruchomić przykład trzeba otworzyć plik mars.mas2j. Plik konfiguracyjny zawiera opis infrastruktury, która została wybrana dla projektu (Centralised, Jade, Saci,…), nazwę klasy Javy, która implementuje środowisko (MarsEnv), oraz agentów, którzy przynależą do aplikacji. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 21 Techno ologia inte eligentnyc ch agentów w Rysunek. Środow wisko sprząttających ro obotów. Aby roz zpocząć prracę system mu należy wybrać przycisk p s . Po uruchomieniu systemu pojawia ają się dwa a okna. Jed dno to GUI aplikacji,, natomiastt drugie to o konsola systemu s wieloag gentowego, która wyśw wietla druk kowane kom munikaty. Rysunek. Konsola K sys stemu MAS. Aby zak kończyć pra acę systemu należy wybrać przyc cisk Materiały Distance Learning © Wyższa a Szkoła Inforrmatyki i Zarz ządzania z sied dzibą w Rzesz zowie . 22 Techno ologia inte eligentnyc ch agentów w Zadan nie 3 Zadanie e polega na n stworzen niu od pod dstaw bardzo prosteg go systemu u wieloagen ntowego (w zasa adzie dwu-a agentowego o). System składa się z 2 agentó ów o nazwa ach robert i tomek. Ich kole ektywne dz ziałanie pole ega na prze esyłaniu ko omunikatu powitalnego p o. i 1. W pierwszym p k kroku należ ży utworzyć ć nowy projjekt klikają ąc w ikonę wprrowadzając nazwę greeting. Okno o tworzenia a nowego projektu p prz zedstawiono na rysu unku. nek. Okno tworzenia t nowego n pro ojektu. Rysun 2. Następnie nale eży dodać do d projektu u dwóch agentów o od dpowiednich nazwach. W tym celu i wprowa u należy klikając w przycisk adzić nazw wy. Nazwa agenta musi m być term mem języka a, co oznacza, że mus si się zaczyn nać od małłej litery. Rys sunek. Okno o dodawania nowego agenta. 3. Po dodaniu agenta systtem autom matycznie generuje g jego szkiele et. Agent nie ma żadn nych przek konań, ale ma począttkowy cel o nazwie start s i pla an pozwala ający go osią ągnąć. Plan n zawiera akcję wew wnętrzną .print, . kttóra druku uje łańcuch h „Hello Worrd”. Kod agenta tomek musi zostać zmiieniony tak k, aby plan wysyłał on n do agenta a robert witanie o trreści hello. Wysyłanie e komunikatu jest re ealizowane za pomoc cą akcji pow wew wnętrznej send. s !sta art. +!st tart : tru ue <- .sen nd(bob,tell,hello). k agen nta robert należy n usun nąć całą wygenerowan ną zawartoś ść. W kodzie Materiały Distance Learning © Wyższa a Szkoła Inforrmatyki i Zarz ządzania z sied dzibą w Rzesz zowie 23 Techno ologia inte eligentnyc ch agentów w 4. Po zdefiniowan z niu systemu i agentów można uruchomić u projekt. Ab by zobaczy yć wynik proc cesu komu unikacji nalleży przejś ść w tryb debugowania i w pojawiając cym się oknie wybrać agenta a robe ert. W oknie o nazwie e Mind Inspector możn na podglądn nąć stan men ntalny agenta. Jak widać w na rysunku agent robert ma jedno przekonanie z adnotacją wskazującą na nadawcę komunikatu k u. unek. Okno inspektora a stanu men ntalnego. Rysu óżmy teraz z, że agentt robert chce jakoś za areagować na tę wiadomość. Ponieważ 5. Załó odebranie wiad domości zw wiązane jestt z dodanie em przekonania g generowane e jest zdarrzenie +he ello [source e(tomek)], które może e uruchamia ać plan prz zedstawiony y poniżej. +hel llo[source e(A)] <- .print(“I . received d a 'hello o' from ",A). ą, która zaw wiera nazwę ę nadawcy.. Po ponow wnym uruchomieniu W ww. planie A jest zmienną oli pojawi się komunika at. systemu na konso unikatem. Rysunek. Konsola z wydrukowanym komu ecznym age entem, pow winien odpo owiedzieć po ozdrowienie em. W 6. Ponieważ robert jest grze m celu należ ży zmodyfik kować jego plan do po ostaci przed dstawionej poniżej. tym +hel llo[source e(A)] <- .pr rint("I re eceived a 'hello' from f ",A); ; .se end(A,tell l,hello). W planie p agentta tomek ró ównież wym magane są następując ce modyfika acje. !sta art. +!st tart : tru ue <- .sen nd(bob,tell,hello). +hel llo[source e(A)] <- .print(" "I receive e an hello from ",A); .send(A, ,tell,hell lo). y zaobserwo ować wprow wadzone zm miany należ ży ponownie uruchomić system. 7. Aby Zadan nie 4 Wprowa adź do systtemu kod przykładu p „rrobot piwny y” i uruchom m go. Materiały Distance Learning © Wyższa a Szkoła Inforrmatyki i Zarz ządzania z sied dzibą w Rzesz zowie 24 Technologia inteligentnych agentów Zadanie 5 Agent o nazwie robot (Z przykładu „robot piwny”) ma plany @h1-@h3, które są uruchamiane, gdy agent podejmuje realizację celu has(owner,beer), niezależnie od źródła tego celu (cel osobisty, cel delegowany). Jak należałoby zmienić plany aby były uruchamiane tylko w sytuacji, gdy źródłem celu jest agent owner. Zadanie 6 (Z przykładu „robot piwny”) Zmień kod agenta o nazwie supermarket tak, żeby mógł on zarządzać poziomem zapasów. Załóżmy, że początkowo na stanie jest 100 butelek piwa i wartość ta będzie stopniowo zmniejszana, w miarę jak będzie on dostarczał piwo agentowi o nazwie robot. Piwo może być dostarczone w sytuacji, gdy jest wystarczająco piwa w magazynie, w przeciwnym razie agent robot powinien być poinformowany, że nie ma więcej piwa w magazynie. Zadanie 7 (Z przykładu „robot piwny”) Agent robot zamawia piwo u agenta supermarket tylko wtedy, gdy lodówka jest pusta (plany +stock). Zmodyfikuj kod robota tak, żeby był on bardziej proaktywny i żeby zamawiał nowe piwo zanim się skończy. Wskazówki: (1) zauważ, że zmiana nie będzie polegała tylko na zastąpieniu watości 0 wartością 1 w planie @a2 ponieważ nawet z 1 piwem w lodówce piwo jest nadal dostępne i w związku z tym przekonanie dotyczące dostępności piwa nie powinno być usuwane; (2) plan @h2 może być usunięty ponieważ robot jest teraz pro aktywny i piwo zawsze będzie dostępne (co jest szczególnie istotne w gorące letnie dni); (3) gdy określone piwo zostaje dostarczone (plan @a1) robot nie musi więcej osiągać celu has(owner,beer). Zadanie 8 (Z przykładu „robot piwny”) W kodzie agenta o nazwie robot są dwa plany dla celu !at. Co się stanie, jeśli zmieniona zostanie ich kolejność (m2 przed m1)? Co się stanie, jeśli drugi plan nie będzie miał kontekstu tak jak w kodzie poniżej. @m1 +!at(robot,P) : at(robot,P) <- true. @m2 +!at(robot,P) : true <- move_towards(P); !at(robot,P). Czy zachowanie robota będzie takie samo jak w oryginalnym rozwiązaniu? Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 25