UPDATE 2018-07-26: To wszystko! Zbliżamy się teraz do punktu, w którym ten rodzaj gry będzie można rozwiązać! Korzystając z OpenAI i w oparciu o grę DotA 2, zespół może stworzyć sztuczną inteligencję, która może pokonać półprofesjonalnych graczy w grze 5 na 5 . Jeśli znasz DotA 2, wiesz, że ta gra jest dość podobna do gier podobnych do Diablo pod względem mechaniki, ale można by argumentować, że jest jeszcze bardziej skomplikowana ze względu na grę zespołową.
Zgodnie z oczekiwaniami, osiągnięto to dzięki najnowszym postępom w uczeniu się przez wzmacnianie z głębokim uczeniem się i korzystaniu z otwartych frameworków do gier, takich jak OpenAI, które ułatwiają rozwój AI, ponieważ otrzymujesz zgrabne API, a także dlatego, że możesz przyspieszyć grę (AI grała odpowiednik 180 lat codziennej rozgrywki przeciwko sobie!).
5 sierpnia 2018 r. (Za 10 dni!) Planowane jest zmierzenie się tej sztucznej inteligencji z najlepszymi graczami DotA 2. Jeśli to się uda, spodziewaj się wielkiej rewolucji, może nie tak zmediatyzowanej jak rozwiązanie gry w Go, ale mimo to będzie to ogromny kamień milowy dla gier AI!
AKTUALIZACJA 2017-01: Od czasu sukcesu AlphaGo dziedzina rozwija się bardzo szybko, a prawie co miesiąc pojawiają się nowe ramy ułatwiające opracowywanie algorytmów uczenia maszynowego w grach. Oto lista najnowszych, które znalazłem:
- Wszechświat OpenAI : platforma do grania w praktycznie każdą grę przy użyciu uczenia maszynowego . Interfejs API jest w języku Python i uruchamia gry za środowiskiem zdalnego pulpitu VNC, dzięki czemu może przechwytywać obrazy dowolnej gry! Prawdopodobnie możesz użyć Wszechświata do gry w Diablo II za pomocą algorytmu uczenia maszynowego!
- Siłownia OpenAI : Podobna do Universe, ale ukierunkowana konkretnie na algorytmy uczenia się ze wzmocnieniem (więc jest to rodzaj uogólnienia struktury używanej przez AlphaGo, ale do znacznie większej liczby gier). Na Udemy istnieje kurs obejmujący zastosowanie uczenia maszynowego w grach takich jak Breakout czy Doom z wykorzystaniem OpenAI Gym.
- TorchCraft : pomost między Torch (framework do uczenia maszynowego) a StarCraft: Brood War.
- pyGTA5 : projekt polegający na budowaniu autonomicznych samochodów w GTA5 przy użyciu samych zrzutów ekranu (z dużą ilością filmów online ).
Bardzo ekscytujące czasy!
WAŻNA AKTUALIZACJA (2016-06): Jak zauważył OP, ten problem szkolenia sztucznych sieci do grania w gry przy użyciu tylko wizualnych danych wejściowych jest obecnie rozwiązywany przez kilka poważnych instytucji, z całkiem obiecującymi wynikami, takimi jak DeepMind Deep-Qlearning-Network (DQN ) .
A teraz, jeśli chcesz podjąć wyzwanie następnego poziomu, możesz użyć jednej z różnych platform do tworzenia gier opartych na sztucznej inteligencji , takich jak ViZDoom , wysoce zoptymalizowana platforma (7000 fps), aby uczyć sieci do gry w Doom przy użyciu tylko wizualnych danych wejściowych :
ViZDoom pozwala na tworzenie botów AI, które grają w Dooma, używając tylko informacji wizualnych (bufor ekranu). Jest przeznaczony przede wszystkim do badań w zakresie uczenia maszynowego, w szczególności uczenia się przez głębokie wzmocnienie. ViZDoom jest oparty na ZDoom, aby zapewnić mechanikę gry.
Wyniki są niesamowite, obejrzyj filmy na ich stronie internetowej i fajny samouczek (w Pythonie) tutaj!
Istnieje również podobny projekt dla Quake 3 Arena, zwany Quagents , który zapewnia również łatwy dostęp API do podstawowych danych gry, ale możesz go wyrzucić i po prostu używać zrzutów ekranu i API tylko do kontrolowania swojego agenta.
Dlaczego taka platforma jest przydatna, jeśli używamy tylko zrzutów ekranu? Nawet jeśli nie masz dostępu do podstawowych danych gry, taka platforma zapewnia:
- wysoka wydajność implementacji gier (możesz wygenerować więcej danych / odtworzeń / pokoleń uczenia się w krótszym czasie, dzięki czemu algorytmy uczenia się mogą zbiegać się szybciej!).
- prosty i responsywny interfejs API do sterowania agentami (np. jeśli spróbujesz użyć danych wejściowych człowieka do sterowania grą, niektóre polecenia mogą zostać utracone, więc poradzisz sobie również z zawodnością wyników ...).
- łatwa konfiguracja niestandardowych scenariuszy .
- konfigurowalne renderowanie (może być przydatne do „uproszczenia” otrzymywanych obrazów w celu ułatwienia przetwarzania)
- zsynchronizowana („krok po kroku”) gra (więc nie potrzebujesz swojego algorytmu do pracy w czasie rzeczywistym na początku, to ogromna redukcja złożoności).
- dodatkowe udogodnienia, takie jak kompatybilność między platformami, retrokompatybilność (nie ryzykujesz, że twój bot przestanie działać z grą, gdy pojawi się nowa aktualizacja gry) itp.
Podsumowując, wspaniałą rzeczą w tych platformach jest to, że łagodzą one wiele wcześniejszych problemów technicznych, z którymi musiałeś się uporać (jak manipulować danymi wejściowymi gry, jak konfigurować scenariusze itp.), Dzięki czemu musisz poradzić sobie z algorytmem uczenia się. samo.
Więc teraz bierz się do pracy i uczyń z nas najlepszego wizualnego bota AI w historii;)
Stary post opisujący techniczne kwestie związane z tworzeniem sztucznej inteligencji opierającej się wyłącznie na danych wizualnych:
W przeciwieństwie do niektórych moich kolegów powyżej, nie sądzę, aby ten problem był nie do rozwiązania. Ale z pewnością jest to piekielnie trudne!
Pierwszym problemem, jak wskazano powyżej, jest reprezentacja stanu gry : nie możesz przedstawić pełnego stanu za pomocą jednego obrazu, musisz zachować pewne zapamiętywanie(zdrowie, ale także przedmioty wyposażone i dostępne do użycia, zadania i cele itp.). Aby uzyskać takie informacje, masz dwa sposoby: albo przez bezpośredni dostęp do danych gry, który jest najbardziej niezawodny i łatwy; albo możesz stworzyć abstrakcyjną reprezentację tych informacji, implementując kilka prostych procedur (otwórz spis, zrób zrzut ekranu, wyodrębnij dane). Oczywiście, wyodrębnienie danych ze zrzutu ekranu będzie wymagało wprowadzenia jakiejś nadzorowanej procedury (którą całkowicie zdefiniujesz) lub bez nadzoru (za pomocą algorytmu uczenia maszynowego, ale wtedy znacznie zwiększy złożoność ...). W przypadku uczenia maszynowego bez nadzoru konieczne będzie użycie całkiem nowego rodzaju algorytmów zwanych algorytmami uczenia strukturalnego (które uczą się struktury danych, a nie ich klasyfikowania lub przewidywania wartości).http://techtalks.tv/talks/54422/
Kolejnym problemem jest to, że nawet po pobraniu wszystkich potrzebnych danych grę można zaobserwować tylko częściowo . Musisz więc wstrzyknąć abstrakcyjny model świata i zasilić go przetworzonymi informacjami z gry, na przykład lokalizacją twojego awatara, ale także lokalizacją przedmiotów questowych, celów i wrogów poza ekranem. W tym celu możesz zajrzeć do Mixture Particle Filters firmy Vermaak 2003.
Musisz także mieć autonomicznego agenta z dynamicznie generowanymi celami . Dobrze znaną architekturą, którą możesz wypróbować, jest agent BDI, ale prawdopodobnie będziesz musiał go dostosować, aby ta architektura działała w twoim praktycznym przypadku. Alternatywą jest rekurencyjna sieć Petriego, którą prawdopodobnie możesz łączyć z różnymi rodzajami sieci Petriego, aby osiągnąć to, czego chcesz, ponieważ jest to bardzo dobrze zbadana i elastyczna struktura, z doskonałymi procedurami formalizacji i dowodami.
I w końcu, nawet jeśli zrobisz wszystko powyżej, będziesz musiał znaleźć sposób na emulację gry w przyspieszonej prędkości (użycie wideo może być przyjemne, ale problem polega na tym, że twój algorytm będzie obserwował tylko bez kontroli i będąc w stanie próba sama jest bardzo ważna dla nauki). Rzeczywiście, dobrze wiadomo, że obecny najnowocześniejszy algorytm potrzebuje dużo więcej czasu, aby nauczyć się tego samego, czego człowiek może się nauczyć (tym bardziej w przypadku uczenia się przez wzmocnienie), więc jeśli nie może przyspieszyć tego procesu ( tj. jeśli nie możesz przyspieszyć czasu gry), Twój algorytm nie zbiegnie się nawet w ciągu jednego życia ...
Podsumowując, to, co chcesz tutaj osiągnąć, znajduje się na granicy (a może nieco poza) aktualnych, najnowocześniejszych algorytmów . Myślę, że to możliwe, ale nawet jeśli tak jest, spędzisz cholernie dużo czasu , ponieważ nie jest to problem teoretyczny, ale problem praktyczny, do którego tu się zbliżasz, a więc trzeba dużo wdrażać i łączyć różnych podejść do sztucznej inteligencji , aby go rozwiązać.
Kilkadziesiąt lat badań z całym zespołem pracującym nad tym może nie wystarczyć, więc jeśli jesteś sam i pracujesz nad nimi w niepełnym wymiarze godzin (ponieważ prawdopodobnie masz pracę na życie), możesz spędzić całe życie, nie sięgając nigdzie w pobliżu działające rozwiązanie.
Więc moją najważniejszą radą jest to, abyś obniżył swoje oczekiwania i spróbował zmniejszyć złożonośćproblemu, wykorzystując wszystkie możliwe informacje i unikaj w miarę możliwości polegania na zrzutach ekranu (tj. spróbuj podłączyć się bezpośrednio do gry, poszukaj wstrzyknięcia DLL) i uprość niektóre problemy, wdrażając nadzorowane procedury, nie pozwól algorytm uczy się wszystkiego (tj. na razie porzuć przetwarzanie obrazu tak bardzo, jak to możliwe i polegaj na wewnętrznych informacjach z gry, później, jeśli twój algorytm działa dobrze, możesz zastąpić niektóre części programu AI przetwarzaniem obrazu, tym samym stopniowo osiągając swój pełny cel, na przykład, jeśli uda ci się sprawić, że coś będzie działało całkiem dobrze, możesz spróbować skomplikować swój problem i zastąpić nadzorowane procedury i dane gry pamięciowej przez nienadzorowane algorytmy uczenia maszynowego na zrzutach ekranu).
Powodzenia, a jeśli to zadziała, koniecznie opublikuj artykuł, z pewnością możesz zyskać sławę za rozwiązanie tak trudnego praktycznego problemu!