Prawdopodobieństwo jako podstawa sztucznej inteligencji w grze z elementami RNG

Podejmowanie decyzji to niekiedy bardzo ciężki i złożony proces. Jako że nam ludziom często zdarza się stawać w sytuacjach w których musimy wybierać, opanowaliśmy tę umiejętność naprawdę porządnie. Komputer jednak wykonuje tylko nasze polecenia, więc jego poziom samodzielnego podejmowania decyzji jest zerowy. To my musimy poinstruować naszą sztuczną inteligencje jakie kroki będzie miała podjąć, by osiągnąć oczekiwany rezultat. Pomijamy tu oczywiście algorytmy samouczące, które korzystając z wcześniej przygotowanych materiałów szkoleniowych, opracowują odpowiedni schemat działań. My skupimy się na prostym algorytmie opartym na drzewie zachowań, w którym to my będziemy musieli krok po kroku określić zachowania sztucznej inteligencji.

Za przykład tak samo jak w poprzednim artykule posłuży nam wyścigowa gra turowa mojego autorstwa, ponieważ zawiera ona zawarte w tytule elementy RNG. Skrót ten pochodzi od generatora liczb losowych, który odpowiada za zapewnienie dozy niepewności w rozgrywce, uniemożliwiając tym samym stwierdzenie ze stu procentową pewnością najlepszego możliwego rozwiązania. W naszej przykładowej grze przekraczając prędkość bezpieczną zarówno zwiększamy nasz wynik, ale również narażamy się na straty. Dlatego omawiane w poprzednim akapicie podejmowanie decyzji jest takie ważne. Gdzie jest granica której nie należy przekraczać? Jaka jest najbardziej optymalna ścieżka zachowań?

I tu wkracza trzeci, ostatni element układanki tworzący nasz temat – probabilistyka. Jak lepiej moglibyśmy sprawdzić optymalność rozwiązań dotyczących pewnej losowości niż właśnie tą jakże przydatną w naszym przypadku dziedzinie matematyki. Zawiera ona odpowiedzi na pytania które wcześniej zadaliśmy. Wystarczy tylko po nie sięgnąć i zagłębić się w ten świat wypełniony procentami. Oczywiście chodzi mi o procenty związane z szansą na powodzenie, a nie tymi zalegającymi na półkach w sklepie monopolowym.

Myślę, że pokazanie tego na konkretnym elemencie gry rozjaśni Ci nieco bardziej, dlaczego właśnie probabilistyka służy jako potężny silnik decyzyjności sztucznej inteligencji.

Wybór opon na wyścig – sprawa w dużej mierze trywialna, ale tylko z pozoru. Przyjrzyjmy się jak wygląda struktura przechowująca ich atrybuty w grze:

Vektor jest pojemnikiem podobnym strukturą do tablicy. W nawiasach ostrokątnych pokazany jest przechowywany typ. W tym przypadku jest to string czyli zmienna tekstowa. Enum TireModifiers pokazuje w formie tekstu relacje między numerem przegródki, a typem terenu. Elementy w nim umieszczone są ponumerowane od zera. Oznacza to, że używając słowa kluczowego „asfalt” odniesiemy się do zerowego elementu vektora.

To tyle jeżeli chodzi o użyte typy danych. Teraz czas na omówienie sposobu w jaki jest przechowywana efektywność opon. Tak wygląda struktura pliku tekstowego z którego informacje są zapisywane wprost do vektora.

Co oznaczają te enigmatyczne napisy? Spokojnie, już wyjaśniam – pierwsza liczba znajdująca się przed x’em mówi nam ile testów musi zdać rajdowiec, druga natomiast określa ile tych testów będzie.
W pierwszym przypadku widocznym na obrazku (1×3) gracz byłby poddany trzem testom, ale zdać musiałby jedynie jeden, jeżeli chciałby przejechać dany odcinek trasy bez szwanku. Każda linijka w pliku odpowiada kolejnym wyrazom naszego enum’a. Oznacza to, że pierwszy element odpowiada za teren asfaltowy.
W artykule o mechanice gier komputerowych wspomniałem właśnie o tym elemencie – ach ta matematyka, przeplata się przez cały proces tworzenia.

Zapewne jeżeli nam przyszłoby wybierać opony to pomimo pewnych początkowych trudności szybko bylibyśmy w stanie wskazać te optymalne. Natomiast żeby przekazać te wiedzę komputerowi musimy ubrać to w żelazne ramy zrozumienia tematu, dokładnie analizując proces działania.

Z pomocą do tego problemu, przychodzi nam schemat Bernoulliego, który zawiera informacje o prawdopodobieństwie sukcesu przy n’tej ilości prób. Jest to dokładnie to czego nam potrzeba. Implementacja jest przedstawiona na grafice poniżej:

Funkcja zwraca punkty które uzyskały opony w rozumieniu komputera. Filtrując wszystkie dostępne opcje przez ten algorytm, komputer będzie w stanie wskazać najlepszy możliwy wybór.

To jest tylko jeden z wielu przykładów. Rola probabilistyki jest
nie oceniona w tego typu strukturach. Jeżeli zamierzasz tworzyć
tego typu „sztuczną inteligencje” to gorąco zachęcam Cię do
zaznajomienia się z tą piękną dziedziną. Mam nadzieję, że nauka
płynąca z tego artykułu pomoże Ci w przyszłości, a ja zapraszam
Cię do dalszej lektury. Jak zawsze cały kod możesz znaleźć na
moim Github’ie.

https://github.com/Meridor6919
MB