Naucz sieć neuronową, aby zagrać w grę karcianą

10

Obecnie piszę silnik do gry karcianej, ponieważ nie ma jeszcze silnika do tej konkretnej gry.

Mam nadzieję, że uda mi się później wprowadzić do gry sieć neuronową i nauczyć ją grać.

Piszę silnik w sposób pomocny dla gracza AI. Istnieją punkty wyboru, w których wyświetlana jest lista prawidłowych opcji. Losowa selekcja byłaby w stanie zagrać w grę (aczkolwiek niezbyt dobrze).

Nauczyłem się wiele o sieciach neuronowych (głównie NEAT i HyperNEAT), a nawet zbudowałem własną implementację. Nadal nie jestem pewien, jak najlepiej zbudować sztuczną inteligencję, która może uwzględniać wszystkie zmienne w jednej z tych gier. Czy istnieje wspólne podejście? Wiem, że Keldon napisał dobrą sztuczną inteligencję dla RftG, która ma przyzwoitą złożoność, nie jestem pewien, jak udało mu się zbudować taką sztuczną inteligencję.

Jakakolwiek rada? Czy to możliwe? Czy są na to jakieś dobre przykłady? Jak zmapowano dane wejściowe?

EDYCJA: Patrzyłem online i dowiedziałem się, jak działają sieci neuronowe i jak odnoszą się one do rozpoznawania obrazów lub sterowania prostym agentem. Nie jestem pewien, czy i jak zastosowałbym to do dokonywania wyborów przy użyciu kart o złożonej synergii. Doceniany byłby każdy kierunek w kierunku tego, na co powinienem patrzeć.

O grze: Gra jest podobna do Magic: The Gathering. Istnieje dowódca, który ma zdrowie i umiejętności. Gracze mają pulę energii, którą wykorzystują do umieszczania stworów i czarów na planszy. Stwory mają zdrowie, wartości ataku, koszty itp. Karty mają również zdolności, których nie można łatwo wyliczyć. Karty są odtwarzane z ręki, nowe karty są dobierane z talii. Są to wszystkie aspekty, które warto wziąć pod uwagę sieć neuronowa.

pcaston2
źródło
Cześć, witamy na AI.SE! W obecnej sytuacji wygląda to nieco za szeroko, abyśmy mogli na nie dobrze odpowiedzieć. Myślisz, że możesz go edytować , aby nieco zawęzić? Dzięki!
Mithical,
Chociaż pytanie jest ogólne, jest to oczywiste i powszechne pytanie dla kogoś nowego w tej dziedzinie. Również taki, w którym trudno jest znaleźć odpowiedzi za pomocą Google (ponieważ większość samouczków na temat NN wydaje się koncentrować na rozpoznawaniu obrazów i przykładach językowych). Myślę, że zasługuje na odpowiedź wskazującą na dobre zasoby dotyczące podejść i technik wykorzystywania NN do grania w gry, w tym przypadku w szczególności gry karciane.
user12889,
Dzięki za opinie. Trochę zredagowałem swoje pytanie. Pomocny byłby każdy kierunek w kierunku materiałów do nauki. Znajduję głównie rozpoznawanie obrazów, jak wspomniałeś. Jestem chętny do nauki i cieszę się, że mam duży zestaw zalecanych lektur, a nie tylko prostą odpowiedź.
pcaston2,

Odpowiedzi:

3

Myślę, że zadajesz dobre pytanie, zwłaszcza WRT, w jaki sposób wejścia i wyjścia NN są mapowane na mechanikę gry karcianej, takiej jak MtG, gdzie dostępne akcje różnią się znacznie w zależności od kontekstu.

Nie mam naprawdę satysfakcjonującej odpowiedzi do zaoferowania, ale grałem w wyścigu Keldon Race for AI opartym na Galaxy NN - zgadzam się, że jest doskonały - i sprawdziłem, jak poradził sobie z tym problemem.

Najnowszy kod sztucznej inteligencji Keldona można teraz wyszukiwać i przeglądać na github .

Kod AI znajduje się w jednym pliku . Wykorzystuje 2 różne NN, jedną do „oceny kart i kart aktywnych”, a drugą do „przewidywania wyboru roli”.

Zauważysz, że używa uczciwej kwoty w kodzie innym niż NN do modelowania mechaniki gry. Bardzo hybrydowe rozwiązanie.

Odwzorowanie stanu gry do oceny NN odbywa się tutaj . Różne istotne funkcje są zakodowane na gorąco, np. Liczba towarów, które można sprzedać w tej turze.


Innym doskonałym studium przypadku mapowania złożonej gry w NN jest środowisko edukacyjne Starcraft II stworzone przez Deepmind we współpracy z Blizzard Entertainment. W tym artykule omówiono, w jaki sposób gra Starcraft jest mapowana na zestaw funkcji, które NN może zinterpretować, oraz w jaki sposób działania mogą być wydawane przez agenta NN do symulacji gry.

Ben Hutchison
źródło
2

Jest to całkowicie wykonalne, ale sposób mapowania danych wejściowych zależy w dużym stopniu od rodzaju gry karcianej i sposobu jej grania.

Uwzględnię kilka możliwości:

  1. Czy czas ma znaczenie w tej grze? Czy przeszłe posunięcie wpłynęłoby na przyszłe? W takim przypadku lepiej byłoby użyć rekurencyjnych sieci neuronowych (LSTM, GRU itp.).
  2. Czy chcesz, aby sieć neuronowa uczyła się na podstawie gromadzonych danych, czy uczyła się samodzielnie? Jeśli sam, w jaki sposób? Jeśli zbierasz dane o sobie, grając dziesiątki lub setki razy, karmisz je siecią neuronową i uczysz się od ciebie, to robisz coś o nazwie „klonowanie behawioralne”. Jeśli jednak chcesz, aby NN uczył się samodzielnie, możesz to zrobić na 2 sposoby:

    a) Reinforcement Learning - RL pozwala sieci neuronowej uczyć się, grając przeciwko sobie wiele razy.

    b) NEAT / Algorytm genetyczny - NEAT pozwala sieci neuronowej uczyć się za pomocą algorytmu genetycznego.

Jednak ponownie, aby uzyskać bardziej szczegółowe informacje na temat sposobu kodowania wejść i wyjść sieci neuronowej, musiałbym wiedzieć więcej o samej grze karcianej.

TajyMany
źródło
Witam, dziękuję za odpowiedź! Zbadam te obszary, aby zobaczyć, co ma zastosowanie. Dodałem krótki opis gry, mając nadzieję, że zawęzi to dla Ciebie. Mój silnik obsługuje cofanie, co może być przydatne w połączeniu z NN. Ponieważ silnik jest niedokończony, nie mam zestawu próbek, ale planuję zachować wszystkie historie gier z serwera hostingowego między 2 graczami. Zastanawiałem się nad wykorzystaniem propagacji wstecznej w celu przyspieszenia procesu.
pcaston2
Jeśli stan gry ma znaczenie, ale nie sposób, w jaki do niego doszedłeś , to czy powiedziałbyś, że czas ma znaczenie? Czy możesz podać jakieś przykłady gier, w których czas ma znaczenie, a niektóre, w których czas nie ma znaczenia? W tej chwili mogę myśleć tylko o sytuacjach, w których liczy się obecny stan (kto tu jest, jakie są znane karty lub elementy gry), ale nie o tym, jak się tam dostałeś (jedyne, co się liczy, to gdzie są teraz , a nie gdzie były dwie tury temu)
Simon Forsberg
2

Na pewno chcesz, aby twoja sieć znała kluczowe informacje o grze, takie jak jakie karty ma agent AI (ich wartości i typy), pula many, ile kart na stole i ich wartości, liczba tur i tak dalej. Te rzeczy, które musisz sobie wyobrazić, pytanie, które powinieneś sobie zadać, brzmi: „Jeśli dodam tę wartość do wprowadzenia, jak i dlaczego poprawi to mój system”. Ale pierwszą rzeczą do zrozumienia jest to, że większość NN ma stałą wielkość wejściową i zakładam, że jest to kwestia w tej grze, ponieważ gracze mogą mieć różną liczbę kart w ręce lub na stole. Na przykład, chcesz poinformować NN, jakie ma karty, załóżmy, że gracz może mieć maksymalnie 5 kart na ręce, a każda karta może mieć 3 wartości (many, ataku i zdrowia), więc możesz zakodować to jako 5 * 3 wektor, gdzie pierwsze 3 wartości reprezentują numer karty 1 i tak dalej. Ale co, jeśli gracz ma obecnie 3 karty, prostym podejściem byłoby przypisanie zer do ostatnich 6 wejść, ale może to powodować problemy, ponieważ niektóre karty mogą mieć 0 kosztu many lub 0 ataku. Musisz więc dowiedzieć się, jak rozwiązać ten problem. Możesz poszukać modeli NN, które mogą obsługiwać zmienny rozmiar wejścia lub dowiedzieć się, jak zakodować dane wejściowe jako wektor o stałej wielkości.

Po drugie, dane wyjściowe są również wektorami o stałym rozmiarze. W przypadku tego rodzaju gry może to być wektor kodujący działania, które agent może podjąć. Powiedzmy, że mamy 3 akcje: włóż kartę, pomiń turę i przyznaj. Może to być jeden gorący koder, np. Jeśli masz wyjście 1 0 0, oznacza to, że agent powinien włożyć kartę. Aby wiedzieć, jaką kartę należy włożyć, możesz dodać kolejny element do wyjścia, który wygeneruje liczbę z zakresu od 1 do 5 (5 to maksymalna liczba kart w ręce).

Ale najważniejszą częścią szkolenia sieci neuronowej jest wymyślenie funkcji utraty odpowiedniej dla danego zadania. Może standardowe funkcje strat, takie jak utrata średniej kwadratowej lub L2, będą dobre, może trzeba będzie je zmienić, aby dopasować do swoich potrzeb. W tej części będziesz musiał przeprowadzić badania. Nigdy wcześniej nie pracowałem z NEAT, ale jak dobrze zrozumiałem, używa jakiegoś algorytmu genetycznego do tworzenia i trenowania NN, a GA używa funkcji fitness do wyboru osoby. Zasadniczo musisz więc wiedzieć, jakiej metryki będziesz używać, aby ocenić, jak dobry jest twój model, i na podstawie tej metryki zmienisz parametry modelu.

PS. Możliwe jest rozwiązanie tego problemu za pomocą sieci neuronowej, jednak sieci neuronowe nie są magią i nie są uniwersalnym rozwiązaniem wszystkich problemów. Jeśli Twoim celem jest rozwiązanie tego określonego problemu, poleciłbym ci również zagłębić się w teorię gry i jej zastosowanie w sztucznej inteligencji. Powiedziałbym, że rozwiązanie tego problemu wymagałoby złożonej wiedzy z różnych dziedzin AI.

Jeśli jednak Twoim celem jest poznanie sieci neuronowych, zaleciłbym podjęcie znacznie prostszych zadań. Na przykład możesz zaimplementować NN, który będzie działał na zbiorze danych porównawczych, na przykład NN, który będzie klasyfikował cyfry z zestawu danych MNIST. Powodem tego jest to, że napisano wiele artykułów o tym, jak przeprowadzić klasyfikację w tym zestawie danych, a wiele się nauczysz i szybciej nauczysz się, wdrażając proste rzeczy.

Andrzej
źródło
1

Tak. To jest wykonalne.

Omówienie pytania

Wydaje się, że celem projektu systemu jest uzyskanie zwycięskiej przewagi strategicznej poprzez zastosowanie jednej lub więcej sztucznych sieci w połączeniu z silnikiem gry w karty.

Pytanie pokazuje ogólną świadomość podstaw rozgrywki przedstawionych w Morgenstern i Teorii gier von Neumana .

  • W określonych punktach podczas gry gracz może być zobowiązany do wykonania ruchu.
  • Istnieje skończony zestaw opcji ruchu zgodnie z zasadami gry.
  • Niektóre strategie wyboru ruchu dają lepsze wyniki w wielu grach niż inne strategie.
  • Sztuczna sieć może być wykorzystana do tworzenia strategii gry, które są częściej zwycięskie niż losowy wybór ruchu.

Inne funkcje gry mogą być lub nie być tak oczywiste.

  • W każdym punkcie ruchu znajduje się stan gry, który jest wymagany przez każdy element zaangażowany w poprawę sukcesu w grze.
  • Oprócz niewiedzy, kiedy przeciwnik blefuje, w grach karcianych tajna kolejność tasowanych kart może wprowadzić odpowiednik wirtualnego gracza, którego ruchy przybliżają losowość.
  • W grach z trzema lub większą liczbą graczy sygnalizacja partnerów lub potencjalnych partnerów może w dowolnym momencie dodać element złożoności do określenia strategii zwycięskiej gry. Na podstawie wprowadzonych zmian nie wydaje się, aby ta gra była tak złożona.
  • Czynniki psychologiczne, takie jak zastraszanie, mogą również odgrywać rolę w wygrywaniu rozgrywki. Nie wiadomo, czy silnik przedstawia twarz przeciwnikowi, więc ta odpowiedź pominie tę kwestię.

Wspólne wskazówki dotyczące podejścia

Istnieje wspólne podejście do mapowania zarówno danych wejściowych, jak i wyjściowych, ale jest zbyt wiele do wyjaśnienia w odpowiedzi Stack Exchange. To tylko kilka podstawowych zasad.

  • Należy wykonać wszystkie modelowanie, które można wykonać jawnie. Na przykład, chociaż sztuczna sieć może teoretycznie nauczyć się liczyć karty (śledzenie możliwych lokalizacji każdej z kart), może to zrobić prosty algorytm liczenia, więc użyj znanego algorytmu i wprowadź te wyniki do sztucznej sieci jako Wejście.
  • Użyj jako danych wejściowych dowolnych informacji, które są skorelowane z optymalnym wyjściem, ale nie używaj jako danych wejściowych żadnych informacji, które nie mogą być skorelowane z optymalnym wyjściem.
  • Zakoduj dane, aby zmniejszyć nadmiarowość w wektorze wejściowym, zarówno podczas treningu, jak i podczas automatycznej gry. Abstrakcja i uogólnienie to dwa powszechne sposoby osiągnięcia tego celu. Wyodrębnianie funkcji może być używane jako narzędzie do abstrakcyjnego lub generalizowania. Można to zrobić na wejściach i wyjściach. Przykładem jest, jeśli w tej grze J> 10 w taki sam sposób, jak A> K, K> Q, Q> J i 10> 9, to koduj karty jako liczby całkowite od 2 do 14 lub od 0 do 12 przez odejmując jeden. Zakoduj kolory od 0 do 3 zamiast czterech ciągów tekstowych.

Rozpoznawanie obrazu jest tylko zdalnie powiązane, zbyt różni się od gry karcianej, aby można było z niego korzystać bezpośrednio, chyba że musisz rozpoznać karty z obrazu wizualnego, w którym to przypadku LSTM może być potrzebny, aby zobaczyć, co inni gracze wybrali do ruchów. Uczenie się zwycięskich strategii z dużym prawdopodobieństwem skorzystałoby z projektów MLP lub RNN lub jednego z ich pochodnych projektów sztucznej sieci.

Co zrobiłaby sztuczna sieć i przykłady szkoleń

Podstawową rolą sztucznych sieci tego typu jest nauka funkcji na podstawie przykładowych danych. Jeśli masz sekwencje ruchów prawdziwych gier, jest to świetny atut dla twojego projektu. Bardzo duża ich liczba będzie bardzo pomocna podczas szkolenia.

Warto zastanowić się nad tym, jak układasz przykłady i czy i jak je nazywasz, jednak bez zasad gry w karty trudno jest podać wiarygodny kierunek. Niezależnie od tego, czy są partnerzy, czy jest to oparte na punktach, czy liczba ruchów do zwycięstwa i tuzin innych czynników zapewniają parametry scenariusza potrzebnego do podjęcia tych decyzji.

Uczyć się

Główną radą, jaką mogę udzielić, jest przeczytanie nie tyle ogólnych artykułów w Internecie, ale przeczytanie kilku książek i artykułów, które możesz zrozumieć na powyższe tematy. Następnie znajdź kod, który możesz pobrać i wypróbuj po zrozumieniu terminologii na tyle dobrze, aby wiedzieć, co pobrać.

Oznacza to, że wyszukiwania książek i wyszukiwania akademickie są o wiele bardziej prawdopodobne, że skierują Cię we właściwym kierunku niż ogólne wyszukiwania w Internecie. W ogólnej przestrzeni internetowej znajdują się tysiące pozerów, wyjaśniających zasady sztucznej inteligencji z dużą liczbą błędów. Wydawcy książek i artykułów akademickich wymagają od swoich autorów należytej staranności.

Douglas Daseeco
źródło