gra na przetrwanie
Transkrypt
gra na przetrwanie
WYŻSZA SZKOŁA INFORMATYKI I ZARZĄDZANIA z siedzibą w Rzeszowie WYDZIAŁ INFORMATYKI STOSOWANEJ „Tytuł projektu” Wykonawca/y: Dmytro Matseyko (nr alb. 37967) Vitalii Kurylo (nr alb. 37965) Oleh Hulyk (nr alb. 37962) Yuriy Senych (nr alb. 37971) Igor Senych (nr alb. 35260 Prowadzący: dr hab. Janusz Starzyk Asystent: mgr Daniel Jachyra 1 Rzeszów 2010 Spis treści 1 Zawartość raportu ……………………………………………………………………………3 1.1 Koncept Ogólny ......................................................................................................................... 3 1.2 Zadania do Wykonania .............................................................................................................. 4 1.3 Rozwoju Projektu i jego znaczenie ............................................................................................ 4 1.4 Wymagania Softwareowe i Hardwarowe .................................................................................. 9 1.5 Software ................................................................................................................................... 10 1.6 Trudności występujące w trakcie realizacji projektu ............................................................... 11 1.7 Trudności materiałowe i techniczne ........................................................................................ 11 1.8 Posumowanie i zalecenia na przyszłość................................................................................... 12 2 Wymagania techniczne raportu ……………………………………………………………Błąd! Nie zdefiniowano zakładki. 2.1 Zasada formatowania tekstu i pracy.................................... Błąd! Nie zdefiniowano zakładki. 2.2 Marginesy............................................................................ Błąd! Nie zdefiniowano zakładki. 2.3 Wzory .................................................................................. Błąd! Nie zdefiniowano zakładki. 2.4 Rysunki, wykresy, zdjęcia, tabele ....................................... Błąd! Nie zdefiniowano zakładki. 2.5 Literatura (przypisy) ........................................................... Błąd! Nie zdefiniowano zakładki. 2 1 Zawartość raportu 1.1 Koncept Ogólny Dany projekt ma na celu realizacje środowiska do wizualizacji działania algorytmu uczenia ze wzmocnieniem. Bot, działający w środowisku ma na celu realizacje swoich potrzeb w postaci uzyskania określonych nagród w określonej kolejności. Fabula: w starej kopalni jeszcze zostało dość wiele złota, ale panuje tam teraz całkowita ciemność. Nasz bohater dostaję się tam w celu trochę zbogacić się. Środowisko jest rozbite na komórki, każda z nich ma swój numer (stan) i w każdej chwili bot znajduje się w określonym stanie. Do niektórych stanów są przypisane nagrody i bot postrzega czy jest nagroda w tym samym stanie, w którym jest, czy nie. Celem bota jest nauczenie się nachodzenia drogi do pewnej nagrody z każdego stanu środowiska, celem programu graficznego – wizualizować jego zachowanie po „nauczeniu się.” 3 1.2 Zadania do Wykonania 1.2.1 Projektowanie oraz implementacja logiki działania systemu Architektura systemu: 1. Środowisko 2. Interfejs pomiędzy środowiskiem a alorytmem AI 3. Obiekty wewnątrz środowiska Sterowanie zachowaniem agenta zostało realizowane dwuwarstwowo: 1. Warstwa zewnętrzna – algorytm uczenia 2. Warstwa wewnętrzna – system Radar - Receiver Rysunek 1 Opis systemu zachowania agenta (warstwa wewnętrzna) Bazuje na Blender Logic Bricks. Składa się z trzech grup elementów: Sensors, Controllers, Actuators. Tabela 1 Elementy funkcjonalne systemu Nazwa elementu Radar Uwagi Wszystkie obiekty, które radar ma zdetektować muszą mieć ustawioną opcje Actor Odbiorca (Górnik) Przy odnajdowaniu celu Radar wysyła do Odbiorcy wiadomość, a odbiorca, w zależności od treści wiadomości (lewo czy prawo) poprzez Actuators zmienia wektor przemieszczenia Odbiorcy. Odbiorca może być w dwóch stanach: sterowany przez użytkownika (pierwszy rysunek) lub przez AI (drugi) Przy wyłączonym systemie 4 Przy włączonym 1.2.2 Projektowanie oraz realizacja graficznych elementów systemu Projektowanie graficznej oraz fizycznej reprezentacji agenta i środowiska Zaprojektowany agent z elementami symulacji fizycznej: 1. Bounding box – detekcja kolizji 2. Armature – animacja głównej siatki Rysunek 2 Zaprojektowany agent z elementami symulacji fizycznej 5 Rysunek 3 Środowisko 1.2.3 Projektowanie GUI Elementy interfejsu użytkownika: 1. Menu – zaprojektowane jako tradycyjne menu dla gier. Została zrealizowana animacja jego elementów oraz obsługa zdarzeń myszki do sterowania grą Rysunek 4 Menu 6 2. Interfejs główny – wydzielono trzy części: a. widok główny środowiska oraz agenta b. licznik czasu (dla celów wyznaczania czasu pracy algorytmu) c. licznik zdobytych nagród d. minimapa (dla celów wyznaczania położenia agenta w środowisku) Przy czym dane elementy są odświeżane poprzez Python Scripts, czyli czas, ilość monet oraz położenie agenta są zliczane (zgromadzane) ze środowiska i po przekształceniu wyświetlanie użytkownikowi. Rysunek 5 Działający program Takie podejście do projektowania danego systemu pozwoliło podzielić prace graficzne na trzy elementy: 1. Scena Menu – wszystkie obiekty, dotyczące menu 2. Scena główna – wszystkie obiekty, dotyczące środowiska 3. Overlay scene (HUD) – scena ze wszystkimi elementami GUI, widocznymi podczas działania systemu 1.2.4 Testowanie systemu Testowanie systemu miało na celu: 1. Zredukować możliwe błędy przy opracowaniu logiki – poprawność działania agenta w środowisku 2. Zredukować możliwe błędy przy opracowaniu interfejsu użytkownika oraz graficznej reprezentacji – poprawność reakcji systemu na odpowiednie zdarzenia systemowe oraz poprawność interakcji graficznych elementów (kolizja, animacja i in.) 3. Zweryfikować poprawność symulacji fizycznej środowiska oraz odtwarzania dźwięku. 7 1.3 Rozwoju Projektu i jego znaczenie Pod czas realizacji podstawowych wymagań do projektu było wygenerowano wiele pomysłów co do jego rozwoju - jest sporo możliwości polepszenia prezentacji programu opierając na już zrealizowanej części graficznej. Z najbardziej ciekawych aspektów możliwości jego rozwoju warto wymienić: • Utworzenie interfejsu do szybkiego podłączenia/przełączania klas, realizujących różne algorytmu sztucznej inteligencji. • Zwiększenie liczby możliwych do uzyskania w środowisku nagród. • Nadanie użytkownikowi możliwości edytować środowisko. • Dodanie możliwości prowadzenia logów symulacji, ich zapisywania oraz generowania statystyki do porównywania algorytmów na ich podstawie. To tylko niektóre z funkcjonalności, którymi można rozszerzyć powstały w wyniku realizacji projektu program. Po wprowadzaniu odpowiednich polepszeń program ma sporą szansę stać dobrym narzędziem do wizualizacji oraz analizy różnych algorytmów uczenia maszynowego w bardzo atrakcyjny i przejrzysty sposób. Może być użyty na uczelniach na zajęciach poświeconych sztucznej inteligencji. 8 1.4 Wymagania Softwareowe i Hardwarowe Projekt został napisany w języku programowania Pyton z użyciem programu Blender 3D, który jest oprogramowaniem niezależnym od platformy oraz systemu operacyjnego. Dla tego wymagania sprzętowe dotyczą tylko ilości pamięci operacyjnej oraz karty graficznej. Od początku, jednym z założeń było to, że wynik projektu ma chodzić bez większych problemów na standardowych komputerach personalnych oraz laptopach, w tym celu część graficzna projektu została zoptymalizowana (lowpoly modelling). Ale z powodu wykorzystania przez nas OpenGL Shading Language dla polepszenia wizualizacji projektu, wymaganiem koniecznym dla uruchomienia jest karta graficzna, wspierająca tą technologię (Nvidia GeForce seria 8 lub nowsza; GeForce GTX 260, 280; Quadro FX 370, 570, 1700, 3700, 4600, 4700x2, 5600). Także zalecane jest posiadanie 2 Gb pamięci operacyjnej, chociaż nie jest to warunkiem koniecznym. 9 1.5 Software Do tworzenia aplikacja wykorzystaliśmy język programowania Python 2.6 oraz program Blender 3D wersji 2.49 beta. Blender 3D okazał się praktycznie idealnym programem do osiągnięcia celów stawionych przed nami w ramach danego projektu. Jest to narzędzie uniwersalne, pozwalające na modelowanie, animację, rendering oraz dodawanie efektów specjalnych do tworzonych scen graficznych. Także posiada swój własny silnik grafiki oraz fizyki wyspecjalizowany do tworzenia gier Blender Game Engine. To wszystko pozwoliło nie przełączać się między kilkoma różnymi narzędziami, a skupić się na opanowaniu jednego, chociaż nie było sprawą łatwą ze względu na jego ogromną funkcjonalność. Oprócz standardowych funkcjonalności Blender 3D dysponuje takim, bardzo przydatnym w naszym projekcie, narzędziem jak Blender Game Engine. Pozwala ono na symulowanie fizyki w ramach sceny, generowanie dynamicznego oświetlenia (GLSL), animowanie obiektów, współdziałających w scenie oraz pełna obsługa Pythona (API dla skryptów Pythona pozwalające na pełną kontrolę nad tworzoną sceną). W każdej chwili nadaje możliwość uruchomienia programu bez konieczności wcześniejszej jej kompilacji. Dla kontroli nad akcjami oraz ich wyświetlaniem w BGE wydzielane trzy podstawowe elementy logiki: Sensory (sensor) – odczytuje stan obiektu; Aktuatory (actuator) – zmienia stan obiektu; Kontrolery (controller) – steruje przepływem danych od sensora do aktuatora. Do tworzenia tekstur wykorzystaliśmy programy Adobe Photoshop CS3 oraz GIMP 2 dla tego że mieliśmy doświadczenia pracy w nich, chociaż Blender też ma w sobie wbudowany redaktor graficzny, ale praca w nim wymagała dodatkowego czasu na przyzwyczajenie się. Do rozmieszczenia wyników pracy na każdym z etapów realizacji projektu wykorzystywaliśmy repozytorium Tortoise SVN. 10 1.6 Trudności występujące w trakcie realizacji projektu Dla naszego zespołu realizacja tego projektu była prawdziwym wyzwaniem, ponieważ i samo zadanie utworzenia trójwymiarowego środowiska graficznego było dla nas nowe oraz musieliśmy uczyć się języka Python wraz z narzędziami od początku. Na tej podstawie napotkaliśmy dość dużo trudności – brak doświadczenia powodował spędzanie nadmiarowego czasu na rozwiązanie pewnych zadań, jako zapewnienie dostępu w skrypcie do obiektu znajdującego się w importowanej zewnątrz scenie używając klasy GameLogic, lub identyfikacja potrzeby ręcznego sprawdzania w kodzie stanu klawisza wywołującego zdarzenie, żeby uniknąć podwójnych akcji. Oprócz trudności czysto technicznych wystąpili też trudności komunikowania się z klientem i wypracowania wspólnej wizji codo tego, jak ma wyglądać logika środowiska oraz interfejs komunikowania z nim bota. Spowodowało to kilka zmian początkowego konceptu oraz przeprojektowanie oraz zmianę już istniejących części kodu. 1.7 Trudności materiałowe i techniczne Przy realizacji danego projektu wystąpiła głównie zależność sprzętowa. Praca przy edytorze grafiki komputerowej wymaga dość dużych zasobów technicznych. Dla tego początkowe założenia odnośnie sprzętu zostały troche zmienione: 1. pamięć operacyjana uległa zwiększeniu; 2. na wykorzystywane karty graficzne zostało narzucone ograniczenie (do wyświetlenia grafiki wymagana jest karta graficzna z implementowanym sprzętowo Open GL GLSL Shader); 11 1.8 Posumowanie i zalecenia na przyszłość Język Python jest bardzo prostym, efektywnym i przyjaznym narzędziem do programowania sztucznej inteligencji oraz szeregu innych systemów. Wraz z edytorem grafiki 3D Bender3D oraz silnikiem Blender Game Engine pozwala dość szybko i sprawnie tworzyć gry trójwymiarowe zawierające poważne elementy sztucznej inteligencji. Nasz program jest temu dobrym potwierdzeniem i uważamy że każda osoba interesująca się tematami 3D gier oraz AI powinna zapoznać się z tymi narzędziami. Uważamy że udało nam zrealizować większość postawionych przed sobą celów i jesteśmy naprawdę zadowoleni z przeprowadzonej pracy. 12