Obecnie próbuję zmusić ANN do grania w grę wideo i liczyłem na pomoc od wspaniałej społeczności tutaj.
Zdecydowałem się na Diablo 2. Gra toczy się więc w czasie rzeczywistym iz izometrycznego punktu widzenia, a gracz kontroluje jednego awatara, na którym skupiona jest kamera.
Aby było konkretnie, zadaniem twojej postaci jest zdobycie x punktów doświadczenia bez spadku jej zdrowia do 0, gdzie punkt doświadczenia zdobywa się poprzez zabijanie potworów. Oto przykład rozgrywki:
Teraz, ponieważ chcę, aby sieć działała wyłącznie w oparciu o informacje, które otrzymuje z pikseli na ekranie, musi nauczyć się bardzo bogatej reprezentacji, aby grać wydajnie, ponieważ prawdopodobnie wymagałoby to od niej (przynajmniej w sposób dorozumiany) wiedzy podzielić świat gry na obiekty i sposoby interakcji z nimi.
I wszystkie te informacje trzeba jakoś przekazać do sieci. Nie mogę przez całe życie myśleć o tym, jak to ćwiczyć. Moim jedynym pomysłem jest posiadanie oddzielnego programu, który wizualnie wyodrębnia z ekranu coś z natury dobrego / złego w grze (np. Zdrowie, złoto, doświadczenie), a następnie wykorzystuje tę statystykę w procedurze uczenia się wzmocnień. Myślę, że to będzie część odpowiedzi, ale nie sądzę, że to wystarczy; jest zbyt wiele poziomów abstrakcji od surowych danych wizualnych do zachowań zorientowanych na cel, aby tak ograniczone sprzężenie zwrotne mogło wytrenować sieć w ciągu mojego życia.
A więc moje pytanie: jakie inne sposoby możesz wymyślić, aby wyszkolić sieć do wykonania przynajmniej części tego zadania? najlepiej bez tworzenia tysięcy oznaczonych przykładów.
Jeszcze tylko trochę więcej wskazówek: szukam innych źródeł uczenia się przez wzmacnianie i / lub jakichkolwiek metod bez nadzoru do wydobywania przydatnych informacji w tym ustawieniu. Lub nadzorowany algorytm, jeśli możesz wymyślić sposób na wydobycie oznaczonych danych ze świata gry bez konieczności ręcznego oznaczania ich.
AKTUALIZACJA (27.04.12):
O dziwo, wciąż nad tym pracuję i wydaje się, że robię postępy. Największą tajemnicą związaną z uruchomieniem kontrolera ANN jest użycie najbardziej zaawansowanych architektur ANN odpowiednich do zadania. Dlatego używam sieci głębokich przekonań składającej się z uwarunkowanych warunkowo ograniczonych maszyn Boltzmanna , które trenowałem w sposób nienadzorowany (na wideo, na którym gram w tę grę) przed dostrojeniem za pomocą propagacji wstecznej różnicy czasowej (tj. Uczenie ze wzmocnieniem ze standardowym SSN z wyprzedzeniem).
Wciąż jednak szukam cenniejszych danych wejściowych, zwłaszcza dotyczących problemu wyboru akcji w czasie rzeczywistym i sposobu kodowania kolorowych obrazów do przetwarzania ANN :-)
AKTUALIZACJA (21.10.15):
Właśnie przypomniałem sobie, że zadałem to pytanie w ciągu dnia i pomyślałem, że powinienem wspomnieć, że nie jest to już szalony pomysł. Od czasu mojej ostatniej aktualizacji firma DeepMind opublikowała swój artykuł przyrodniczy na temat uruchamiania sieci neuronowych w grach Atari na podstawie danych wizualnych . Rzeczywiście, jedyną rzeczą, która uniemożliwia mi wykorzystanie ich architektury do grania w Diablo 2 w ograniczonym podzbiorze, jest brak dostępu do podstawowego silnika gry. Renderowanie na ekran, a następnie przekierowywanie go do sieci jest po prostu zbyt wolne, aby trenować w rozsądnym czasie. Dlatego prawdopodobnie nie zobaczymy tego rodzaju bota w Diablo 2 w najbliższym czasie, ale tylko dlatego, że będzie grał w coś otwartego lub z dostępem API do celu renderowania. (Może Quake?)
źródło
Odpowiedzi:
Widzę, że martwisz się, jak wyszkolić SSN, ale ten projekt kryje w sobie złożoność, której możesz nie być świadomy. Rozpoznawanie obiektów / postaci w grach komputerowych poprzez przetwarzanie obrazu to bardzo trudne zadanie (nie mówiąc o szaleństwie w grach FPS i RPG). Nie wątpię w twoje umiejętności i nie mówię też, że nie da się tego zrobić, ale z łatwością możesz poświęcić 10 razy więcej czasu na rozpoznawanie rzeczy niż wdrażanie samej sieci SSN (zakładając, że masz już doświadczenie z technikami cyfrowego przetwarzania obrazu ).
Myślę, że Twój pomysł jest bardzo ciekawy, a także bardzo ambitny . W tym momencie możesz rozważyć to ponownie. Czuję, że ten projekt jest czymś, co planujesz dla uniwersytetu, więc jeśli praca skupia się naprawdę na ANN, prawdopodobnie powinieneś wybrać inną grę, coś prostszego.
Pamiętam, że nie tak dawno przyszedł ktoś inny, szukając wskazówek na temat innego, ale jakoś podobnego projektu . Warto to sprawdzić.
Z drugiej strony mogą istnieć lepsze / łatwiejsze metody identyfikowania obiektów w grze, jeśli akceptujesz sugestie. Ale najpierw nazwijmy ten projekt tym, czym chcesz, żeby był: inteligentnym botem .
Jedna metoda implementacji botów polega na dostępie do pamięci klienta gry w celu znalezienia odpowiednich informacji, takich jak lokalizacja postaci na ekranie i jej stan zdrowia. Czytanie pamięci komputera jest trywialne, ale dokładne ustalenie, gdzie szukać w pamięci, nie jest. Bardzo pomocne mogą być w tym celu skanery pamięci, takie jak Cheat Engine .
Inna metoda , która działa w grze, polega na manipulowaniu informacjami o renderowaniu. Wszystkie obiekty gry muszą zostać wyrenderowane na ekranie. Oznacza to, że lokalizacje wszystkich obiektów 3D zostaną ostatecznie przesłane do karty graficznej w celu przetworzenia. Przygotuj się na poważne debugowanie.
W tej odpowiedzi krótko opisałem 2 metody osiągnięcia tego, co chcesz, poprzez przetwarzanie obrazu. Jeśli jesteś nimi zainteresowany, możesz dowiedzieć się więcej na ich temat w Exploiting Online Games (rozdział 6), doskonałej książce na ten temat.
źródło
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:
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 :
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:
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!
źródło
Problem, do którego dążysz, jest nie do rozwiązania w sposób, w jaki go zdefiniowałeś. Zwykle błędem jest myślenie, że sieć neuronowa „magicznie” nauczyłaby się bogatego powtórzenia problemu. Dobrym faktem, o którym należy pamiętać przy podejmowaniu decyzji, czy SSN jest odpowiednim narzędziem do zadania, jest to, że jest to metoda interpolacji. Pomyśl, czy możesz ująć swój problem jako znalezienie przybliżenia funkcji, gdzie masz wiele punktów z tej funkcji i mnóstwo czasu na zaprojektowanie sieci i jej szkolenie.
Problem, który proponujesz, nie przechodzi tego testu. Sterowanie grą nie jest funkcją obrazu na ekranie. Jest wiele informacji, które gracz musi zachować w pamięci. Dla prostego przykładu, często prawdą jest, że za każdym razem, gdy wchodzisz do sklepu w grze, ekran wygląda tak samo. Jednak to, co kupujesz, zależy od okoliczności. Bez względu na to, jak skomplikowana jest sieć, jeśli jej wejściem są piksele ekranu, zawsze wykonywałaby tę samą akcję po wejściu do sklepu.
Poza tym pojawia się problem skali. Zadanie, które proponujesz, jest po prostu zbyt skomplikowane, aby można je było nauczyć się w rozsądnym czasie. Powinieneś zobaczyć aigamedev.com, aby dowiedzieć się, jak działa sztuczna inteligencja w grze. Sztuczne sieci neuronowe były z powodzeniem używane w niektórych grach, ale w bardzo ograniczony sposób. Opracowanie sztucznej inteligencji w grach jest trudne i często drogie. Gdyby istniało ogólne podejście do konstruowania funkcjonalnych sieci neuronowych, przemysł najprawdopodobniej by to wykorzystał. Zalecam zacząć od dużo, dużo prostszych przykładów, takich jak kółko i krzyżyk.
źródło
Wygląda na to, że sercem tego projektu jest badanie, co jest możliwe z SSN, więc sugerowałbym wybranie gry, w której nie musisz zajmować się przetwarzaniem obrazu (co z odpowiedzi innych osób tutaj wydaje się naprawdę trudnym zadaniem w gra czasu rzeczywistego). Możesz użyć Starcraft API do zbudowania swojego bota, daje ci dostęp do wszystkich istotnych stanów gry.
http://code.google.com/p/bwapi/
źródło
Na początku możesz spojrzeć na różnicę między kolejnymi klatkami. Musisz rozróżniać między tłem a rzeczywistymi duszkami potworów. Myślę, że świat może również zawierać animacje. Aby je znaleźć, kazałbym postaci poruszać się i zbierać wszystko, co porusza się ze światem, w duży obraz / animację tła.
Możesz wykryć i zidentyfikować wrogów z korelacją (za pomocą FFT). Jeśli jednak animacje powtarzają się z dokładnością do jednego piksela, szybsze będzie spojrzenie na kilka wartości pikseli. Twoim głównym zadaniem będzie napisanie solidnego systemu, który będzie identyfikował, kiedy nowy obiekt pojawi się na ekranie i stopniowo wprowadzi wszystkie klatki sprite'a do bazy danych. Prawdopodobnie musisz też budować modele efektów broni. Można je odjąć, aby nie zaśmiecały bazy danych przeciwników.
źródło
Cóż, zakładając, że w dowolnym momencie możesz wygenerować zestaw „wyników” (może obejmować prawdopodobieństwa) z zestawu wszystkich możliwych „ruchów” i że w grze istnieje pewne pojęcie spójności (np. Możesz grać na poziomie X w kółko ponownie), możesz zacząć od N sieci neuronowych z losowymi wagami i kazać każdej z nich grać w grę w następujący sposób:
1) Dla każdego możliwego `` ruchu '' wygeneruj listę możliwych `` wyników '' (z powiązanymi prawdopodobieństwami) 2) Dla każdego wyniku użyj sieci neuronowej, aby określić powiązaną `` wartość '' (wynik) `` wyniku '' (np. liczba między -1 a 1, 1 to najlepszy możliwy wynik, -1 to najgorszy) 3) Wybierz `` posunięcie '' prowadzące do największego prawdopodobieństwa * wyniku 4) Jeśli posunięcie doprowadziło do `` wygranej '' lub `` przegranej '', zatrzymać, w przeciwnym razie wróć do kroku 1.
Po pewnym czasie (lub „wygranej” / „przegranej”) oceń, jak blisko „celu” znajdowała się sieć neuronowa (prawdopodobnie będzie to wymagało pewnej wiedzy dziedzinowej). Następnie wyrzuć 50% (lub jakiś inny procent) NN, które były najbardziej oddalone od bramki, przeprowadź crossover / mutację górnych 50% i ponownie uruchom nowy zestaw NN. Kontynuuj bieg do momentu uzyskania zadowalającego NN.
źródło
Myślę, że najlepszym rozwiązaniem byłaby złożona architektura obejmująca kilka / wiele sieci: tj. Jedna rozpoznająca i odpowiadająca na przedmioty, jedna dla sklepu, jedna do walki (może tutaj potrzebna byłaby jedna do rozpoznawania wroga, jedna do ataków) itp. .
Następnie spróbuj wymyślić najprostszą możliwą rozgrywkę w Diablo II, prawdopodobnie Barbarzyńcę. Więc na początku zachowaj prostotę, jak Akt I, tylko pierwszy obszar.
Wtedy myślę, że cennymi „celami” byłoby zniknięcie wrogich obiektów i zmniejszenie paska zdrowia (punktowany odwrotnie).
Gdy już załatwisz te oddzielne, „prostsze” zadania, możesz użyć „nadrzędnej” SSN, aby zdecydować, która pod-SSN ma zostać aktywowana.
Jeśli chodzi o szkolenie, widzę tylko trzy opcje: możesz użyć metody ewolucyjnej opisanej powyżej, ale wtedy musisz ręcznie wybrać „zwycięzców”, chyba że zakodujesz do tego cały oddzielny program. Możesz sprawić, by sieci „obserwowały”, jak ktoś gra. Tutaj nauczą się naśladować styl gracza lub grupy graczy. Sieć próbuje przewidzieć następne działanie gracza, zostaje wzmocniona w celu poprawnego odgadnięcia, itp. Jeśli faktycznie uzyskasz żądaną sieć ANN, można to zrobić za pomocą gry wideo, bez potrzeby prowadzenia rzeczywistej rozgrywki na żywo. Wreszcie możesz pozwolić sieci grać w grę, mając śmierć wroga, podniesienie poziomu, odzyskanie zdrowia itp. Jako pozytywne wzmocnienie i śmierć gracza, utracone zdrowie itp. Jako wzmocnienie negatywne. Ale widząc, że nawet prosta sieć wymaga tysięcy konkretnych kroków szkoleniowych, aby nauczyć się nawet prostych zadań,
W sumie Twój projekt jest bardzo ambitny. Ale na przykład uważam, że można to „teoretycznie zrobić”, mając wystarczająco dużo czasu.
Mam nadzieję, że to pomoże i powodzenia!
źródło