Published using Google Docs
Raport strategiczny
Updated automatically every 5 minutes

Projektowanie zespołowe systemów informatycznych

Raport

Temat: Implementacja AI jednostek oraz badanie jak ilość jednostek myślących wpływa na płynność gry i w jaki sposób optymalizować AI w grze RTS

Dariusz Jędrzejczak, TGSI, 201208

W ramach badań powyższego tematu zaimplementowany został system AI za pomocą dostępnych w Unreal Engine mechanizmów:

Do implementacji użyty został system blueprintów (skryptów wizualnych Unreal Engine). Pozostałe cechy gry zaimplementowane w ramach tej części projektu:


Sztuczna inteligencja każdej jednostki opiera się głównie na poniższym prostym drzewie zachowań:

Najbardziej istotne elementy tego drzewa to:

Inicjująca je usługa AgroCheck, która jest wywoływana co 0.5 s i służy do wykrywania celu, który dana jednostka ma zaatakowaći i określania jej położenia.

Zadanie RapidMoveTo, które odpowiada za przemieszczenie jednostki w kierunku celu.

Zadanie AI_Attack, które powoduje zaatakowanie celu i zadanie mu obrażeń zgodnie z parametrami jednostek, jak również wyświetlenie zadanych obrażeń.

Wpływ liczby jednostek AI na płynność gry

Płynność została określona przez zmierzenie czasu generowania jednej klatki gry w milisekundach. Ten czas jest ograniczony przez czas wykonywania jednego z trzech wątków:

Game (CPU game thread -- wątek gry; na wykresach GT), Draw (CPU render thread -- wątek renderowania na CPU; RT) lub GPU (GPU -- wątek GPU; GPU). Żeby zmierzyć wpływ AI na czas generowania klatki, chcemy doprowadzić do sytuacji, w której ograniczającym wątkiem jest CPU game thread. Żeby zminimalizować wpływ wątku GPU, rendering jednostek został wyłączony do pomiarów. Na wykresach widać, że czas wykonywania wątku gry został praktycznie zrównany z czasem wątku renderingu.


Wyniki

Czas wykonywania poszczególnych wątków dla różnej liczby jednostek AI został przedstawiony na poniższych wykresach.

Czasy wykonania dla 2 jednostek AI; Frame średnio: 22 ms

Czasy wykonania dla 5 jednostek AI; Frame średnio: 23 ms


Czasy wykonania dla 10 jednostek AI; Frame średnio: 25 ms

Czasy wykonania dla 50 jednostek AI; Frame średnio: 35 ms


Czasy wykonania dla 100 jednostek AI; Frame średnio: 49 ms

Czasy wykonania dla 150 jednostek AI; Frame średnio: 49 ms


Czasy wykonania dla 190 jednostek AI; Frame średnio: 50 ms

Średnie czasy wykonania klatki dla poszczególnej liczby jednostek przedstawia poniższy wykres:


Obserwacje i wnioski

Zostało zebranych stosunkowo niewiele punktów danych, ze względu na limit instrukcji generowanych przez jeden blueprint, który ograniczył liczbę możliwych do stworzenia jednostek do 200. Widać jednak, że czas generowania klatki oraz rozbieżności pomiędzy najkrótszym i najdłuższym czasem rosną wraz ze wzrostem liczby jednostek. Wzrost na zbadanym zakresie jest nieliniowy. Rozbieżności są spowodowane tym, że AI każdej jednostki jest aktywowane w interwałach 0.5 s (w takich odstępach odbywa się przechodzenie po drzewie zachowań). Wówczas obserwujemy wzrost czasu generowania klatki.

Optymalizacja

W celu optymalizacji sztucznej inteligencji i zredukowaniu spadku płynności gry ze wzrostem jednostek można zastosować następujące techniki: