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.
źródło
Odpowiedzi:
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.
źródło
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:
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.
źródło
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.
źródło
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 .
Inne funkcje gry mogą być lub nie być tak oczywiste.
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.
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.
źródło