Jak wytrenować sztuczną sieć neuronową do gry w Diablo 2 za pomocą wizualnych danych wejściowych?


139

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:

tutaj

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?)



Duża różnica między problemem jazdy w artykule a grą polega na tym, że w problemie z prowadzeniem pojazdu wizualne dane wejściowe są wystarczająco kompletną reprezentacją stanu: jeśli po prawej stronie znajduje się przeszkoda - skręć w lewo, jeśli po lewej stronie jest przeszkoda - skręć dobrze. Jednak w grze często musisz podejmować decyzje na podstawie rzeczy, które nie są wyświetlane na ekranie. Za każdym razem, gdy wchodzisz do sklepu, może wyglądać tak samo, ale musisz kupić inne przedmioty.
Don Reba

1
Aby być najlepszym z moich wspomnień, Diablo 2 używa łatwych do wyodrębnienia arkuszy duszków. Przywiązanie obiektów (gracza, wrogów itp.) Do listy powiązanych duszków powinno być dość proste. Nie rozwiązuje problemu zasłaniania się obiektów, ale to początek.
Ryan Jenkins,

@zergylord Dobrze by było, gdybyś mógł powiedzieć, jak stanowczo chcesz przestrzegać swoich kryteriów a) grania w Diablo 2 oraz b) używania pikseli rysowanych na ekranie jako jedynego źródła sygnału wejściowego. Jeśli chcesz sobie ułatwić sprawę, myślę, że będziesz musiał trochę odprężyć jedną (lub obie) z nich - czy jesteś gotów to zrobić?
Stompchicken,

1
Głosowanie za zamknięciem jako zbyt szerokie.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:


54

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.


43

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!


27

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.


Słusznie. Można by nazwać SSN prawie wszystko, co przypomina sieć, ale nie prowadziło to do merytorycznej dyskusji. :)
Don Reba

Heh yeah ... Powinienem był wyjaśnić swoją motywację bardziej szczegółowo. Wiem, że istnieją lepsze sposoby tworzenia sztucznej inteligencji w grach, ale robię to, aby przesuwać granice symulatora ANN, który aktualizowałem. Zobacz: stanford.edu/group/pdplab/pdphandbook
zergylord

1
W każdym razie Don Reba ma rację, ja też nie sądzę, aby możliwe było nauczenie się strategii dla czegoś takiego jak Diablo bez uwzględnienia dużej ilości wcześniejszej wiedzy i wyodrębnienia przydatnych funkcji, na których mogłoby opierać się podejście do uczenia się przez wzmocnienie. Samo uczenie się z wejścia wideo będzie niezwykle trudne, jeśli nie niemożliwe, przy użyciu dzisiejszych komputerów.
ahans

18

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/


2

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.


2
Znając grę Diablo II, mogę powiedzieć, że używa ona 256 kolorów (chyba że jakiś tryb używa high lub true color). W dużym stopniu wykorzystuje również sprite'y do wyświetlania różnych obiektów. Jeśli jesteś w stanie wyodrębnić jakieś duszki (nawet ze zrzutu ekranu), możesz nauczyć swoje narzędzie rozpoznawania obiektów na podstawie duszka (na przykład upuszczona „Mniejsza mikstura leczenia” będzie zawsze wyglądać tak samo). Jeśli jednak zagłębię się w szczegóły dotyczące Diablo II, pojawi się więcej pytań. Powodzenia
Ivaylo Slavov

1

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.


Ach, dodanie AH do miksu, interesujące. Niestety, ponieważ sieć faktycznie wysyła naciśnięcia klawiszy / ruchy myszy jako akcje, potrzebowałbym jednego fizycznego komputera na sieć>. <Innym problemem jest to, że przestrzeń stanów środowiska nie jest dyskretna (cóż, technicznie tak jest, ale w bardzo drobne ziarno). Na przykład wyobraź sobie możliwy wynik związany z kliknięciem myszy: postać znajdująca się pod kontrolą sieci może się poruszać lub atakować, ale wrogowie również mogliby się poruszać, a w otoczeniu wystąpiłyby różnice pikselowe, takie jak cienie i efekty pogodowe. .
zergylord

Cóż, z mojej perspektywy tylko tyle można zrobić z siecią neuronową. Wygląda na to, że w najlepszym przypadku można by ją wykorzystać jako dającą się nauczyć heurystyczną funkcję jakiegoś pojęcia dyskretnej przestrzeni stanów. Aby uwzględnić zmienność wroga, prawdopodobnie musiałbyś użyć innej heurystyki, a następnie możesz użyć jej do stworzenia zestawu możliwych stanów wyniku na ruch z powiązanymi prawdopodobieństwami. Ponadto, o ile istnieje statyczne pojęcie konfiguracji początkowej i końcowej, można po prostu uruchamiać każdą sieć neuronową pojedynczo.
tstramer

1

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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.