SZTUCZNA INTELIGENCJA I INŻYNIERIA WIEDZY
Transkrypt
SZTUCZNA INTELIGENCJA I INŻYNIERIA WIEDZY
SZTUCZNA INTELIGENCJA I INŻYNIERIA WIEDZY LABORATORIUM 3 – PLANOWANIE W GRACH Instrukcję przygotowali: Artur Janik i Paweł Kędzia. Aktualizacja: 14.04.2013 Ogólny cel zadania: Celem zadania jest zapoznanie się ze środowiskiem programistycznym FRAIL – w tym z zagadnieniem dotyczącym drzew behawioralnych (ang. Behavior Tree), podejściem opartym o planowanie HTN (ang. Hierarchical Task Network) oraz metodą opartą o automat skończony FSM (ang. Finite-state machine). Aktualnie środowisko FRAIL dostępne jest pod adresem https://github.com/frailpwr/frail_pwr a oficjalną stroną jest http://www.frail.ii.pwr.edu.pl/ . Wprowadzenie: Istnieje kilka powszechnie stosowanych metod sztucznej inteligencji wykorzystywanych do sterowania bohaterami niezależnymi w grach komputerowych. Ćwiczenie to oparte jest o trzy najpopularniejsze metody, czyli: hierarchiczna sieć zadań (ang. Hierarchical Task Network), drzewo zachowań (ang. Behavior Tree) oraz automat skończony (ang. Finite-state machine). Automat skończony (ang. Finite-state machine): Atomat skończony, nazywany dalej FSM, jest najprostszą metodą AI z metod uwzględnionych w ćwiczeniu. FSM jest metodą również wykorzystywaną w matematyce i logice, teorii sterowania, czy filozofii. Metoda ta korzysta ze stanów oraz przejść pomiędzy nimi. Każdy stan odpowiada pewnemu, wczesniej zdefiniowanemu przez eksperta zachowaniu. Przetwarzanie rozpoczynamy od określenia stanu początkowego. Co pewien interwał czasu system oczekuje zmian stanu świata i w przypadku napotkanej zmiany reaguje zmieniając stan. [źródło: http://smurf.mimuw.edu.pl/node/1698] W powyższym diagramie wyróżniamy cztery stany S0, S1, S2, S3 oraz przejścia między nimi oznaczone czerwonymi strzałkami. Logika tego modelu uzależniona jest od dwóch zmiennych a i b. Stanem początkowym jest stan S0. FRAIL oferuje trzy zdarzenia związane z każdym stanem: onEnter(State* prev_state), onUpdate(float dt), onLeave(State* next_state). Opis metody zawartej we FRAIL uwzględniony został w dokumencie FRAIL_devs_manual.pdf. Hierarchiczna sieć zadań (ang. Hierarchical Task Network): HTN jest systemem planowania, który uważany jest za rozwinięcie metody STRIPS. Przez wielu uznawany jest za metodę bardziej ekspresywną poprzez uzupełnienie modelu o akcje złożone (ang. compound tasks). System planowania jest to mechanizm, który pozwala rozwiązać problem przy zadanych warunkach, aksjomatach, akcjach i stanie świata. Przeszukując przestrzeń dopuszczalnych stanów generuje plan, który złożony jest z akcji. Metoda HTN rozwija klasyczny system planowania o hierarchię. Opisana jest metodami, operatorami i celami (zadaniami złożonymi). Zaczynając planowanie od pewnego celu wytyczonego przez eksperta, system szuka dopuszczalnej metody, która „rozbije” cel na podzadania, którymi mogą być inne cele bądź operatory. Cel, również nazywany zadaniem złożonym, opisany jest warunkami, które muszą zostać spełnione, aby zakończyć planowanie. Operator jest to niepodzielna akcja, która jest wykonywana przez realizator planu (np. bohatera niezależnego). Każdy operator tworzy pewien rezultat, który służy systemowi planowania do określenia jaki stan osiągnie i pozwoli kontynuować planowanie. Drzewa zachowań (ang. Behavior trees): Drzewa zachowań w odróżnieniu do drzew decyzyjnych, zarządzają zachowaniami, które przetwarzane są przez poddrzewa. W przypadku drzew decyzyjnych, jakakolwiek akcja musi zostać wyznaczona przez całą strukturę drzewa. Drzewa zachowań budowane są z węzłów złożonych i podstawowych (niepodzielnych). Węzeł złożony jest to węzeł drzewa, który zarządza swoimi dziećmi (węzłami będącymi poddrzewem węzła bieżącego) w pewien, określony przez programistę sposób. Podstawowymi węzłami złożonymi pozwalającymi zamodelować prostą logikę, są węzły sekwencyjne i selekcyjne. Węzeł sekwencyjny przetwarza swoje dzieci w pewnej ściśle określonej kolejności i w przypadku powodzenia wykonania akcji dzieci, kończy przetwarzanie zwracając status sukcesu. Drugim typem węzłów złożonych są węzły selekcyjne, które spośród swoich dzieci wybiera jedno, które swoje działanie zakończy powodzeniem. Węzeł sekwencyjny, przykład: [źródło: Understanding the Second-Generation of behavior trees, Alex J. Champandard, 21.03.2012, AIGameDev.com] Węzeł selekcyjny, przykład: [źródło: Understanding the Second-Generation of behavior trees, Alex J. Champandard, 21.03.2012, AIGameDev.com] Liśćmi drzewa zachowań, w podstawowym modelu drzewa zachowań, są akcje, które mogą zostać wykonane przez aktora AI. Poza akcjami można wyróżnić także inne możliwe do zaimplementowania węzły. Przykładowym węzłem, dostępnym we FRAIL, jest węzeł warunkowy, który zakończy się powodzeniem, gdy jego warunki zostaną spełnione. Przy współpracy węzła warunkowego z węzłami złożonymi i akcjami, projektant AI jest w stanie zamodelować złożoną logikę aktora AI. Kontekst zadania: Na zadanej arenie dwóch bohaterów niezależnych (ang. NPC) toczy pojedynek. Wygrywa ten, który pokona przeciwnika. Plan areny (ang. Tournament Arena) przedstawia się następująco: Gdzie: żółte koło – arena, czerwone koło – bohater niezależny, fioletowe koło – wybuchająca beczka, ciemnozielone koło – ulepszenie zwiększające obrażenia, zielone koło – apteczka, błekitne koło – leczące pole. Arena prezentuje się następująco: Naprzeciw siebie umieszczeni są przeciwnicy, nazywani dalej aktorami AI. Aktorzy próbują przyszykować na przeciwnika plan/zasadzkę i skutecznie ją zrealizować. Aktor AI posiadając wiedzę o otoczeniu/stanie świata (ang.world state) podejmuje zaprojektowane przez projektanta decyzje nazwanymi również akcjami. Pozycje elementów statycznych mapy (tj. apteczka, beczki, ulepszenie, leczące pole) oraz ich stan, są dostępne dla gracza w każdym momencie rozgrywki, natomiast elementy dynamiczne (tj. przeciwnik) jest dostępny jedynie w trakcie, gdy znajduje się on w polu widzenia naszego aktora AI. Aktorzy mogą wchodzić w interakcję z otoczeniem podnosząc apteczkę, która odnawia zadaną ilość życia, podnosząc ulepszenie, które zwiększa zadawane obrażenia zadawane mieczem, zniszczyć beczki rzucając w nie kulą ognia, czy uleczyć się w leczącym polu, które odnawia życie, co pewien okres czasu. Podstawowymi akcjami aktora AI jest atak mieczem, rzut kulą ognia w wyznaczone miejsce, przemieszczanie się i skakanie. Aktor posiada wiedzę o ilości życia przeciwnika znajdującego się w jego polu widzenia, kierunku, w którym przemieszcza się przeciwnik, z jaką prędkością przemieszcza się przeciwnik, itp. Pozostałe podstawowe akcje opisane są w dokumentacji FRAIL - FRAIL_devs_manual.pdf . Krótki przegląd możliwości FRAIL: FRAIL (FRamework for AI Laboratories) jest frameworkiem stworzonym w celu prototypowania, badania i eksperymentowania ze sztuczną inteligencją. Opracowany został przy użyciu Microsoft Visual C++ 2010, który jest wymagany w celu skompilowania źródeł frameworka. Architektura FRAIL wygląda następująco: FRAIL przede wszystkim pozwala na prototypowanie własnych aktorów AI w module „Character controllers employing AI methods”. Każdy aktor AI posiada swój kontroler, który może korzystać z metody drzew decyzyjnych, hierarchicznej sieci zadań lub automatu skończonego. FRAIL od strony technicznej: Instrukcja obsługi użytkownika opisana jest w dokumencie QuickStartGuide.pdf. Zawarte w dokumencie informacje pozwalają uruchomić środowisko, wchodzić w interakcję ze środowiskiem oraz zmieniać jego konfigurację. Dokument FRAIL_spec.pdf zawiera obszerną specyfikację środowiska dla użytkownika, która opisuje każdy poszczególny parametr aktorów AI oraz metod BT i HTN. W dokumencie FRAIL_devs_manual.pdf umieszczony został opis architektury środowiska FRAIL, opis klas, zależności między nimi oraz opis metod dostępnych dla aktorów AI. Wszelkie napotkane błędy w trakcie realizacji ćwiczenia dotyczące FRAIL należy zgłaszać poprzez serwis internetowy GitHub, na stronie: https://github.com/frailpwr/frail_pwr/issues . Realizacja ćwiczenia: W ramach ćwiczenia należy zapoznać się z frameworkiem FRAIL oraz z zaimplementowanymi metodami AI (drzewo zachowań, automat skończony, hierarchiczna sieć zadań), opracować własny kontroler oparty o automat skończony (FSM). Należy także opracować kontroler dla jednej, wybranej przez studenta metody AI (hierarchiczna sieć zadań lub drzewo zachowań). Każdy z kontrolerów powinien posiadać co najmniej 5 różnych akcji. Poprzez opracowanie kontrolera należy rozumieć implementację kontrolera w środowisku FRAIL, jako ActorController, zamodelowanie logiki w XML (w przypadku hierarchicznej sieci zadań oraz drzew zachowań) oraz przetestowanie jego działania na arenie turniejowej (tournament_arena). Przygotowane sprawozdanie powinno zawierać opis implementowanych kontrolerów, akcji oraz dokonanych modyfikacji. Uwaga! Pod koniec realizacji ćwiczenia możliwe jest przeprowadzenie konkursu pomiędzy studentami na najlepszego bohatera niezależnego, w starciu na arenie turniejowej! Punktacja: Opracowanie własnego kontrolera opartego o automat skończony Opracowanie własnego kontrolera opartego o drzewa zachowań lub hierarchiczną sieć zadań Opracowanie nowych zachowań dla aktora AI w środowisku FRAIL Zbadanie skuteczności FSM Zbadanie skuteczności wybranej metody AI 2 pkt 4 pkt 2 pkt 1 pkt 1 pkt Literatura 1. BT: http://en.wikipedia.org/wiki/Behavior_Trees 2. BT: http://aigamedev.com/open/article/bt-overview/ 3. BT: http://gamedev.stackexchange.com/questions/51693/decision-tree-vs-behavior-tree 4. HTN: http://en.wikipedia.org/wiki/Hierarchical_task_network 5. HTN: http://www.cs.umd.edu/projects/shop/description.html 6. HTN: http://www.cs.umd.edu/~nau/planning/slides/chapter11.pdf 7. FSM: http://en.wikipedia.org/wiki/Finite-state_machine 8. FSM: http://gamedevelopment.tutsplus.com/tutorials/finite-state-machines-theory-andimplementation--gamedev-11867