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