2016-11-04 31 views
5

Chcę trenować sieć neuronową, aby grać w grę 2048. Wiem, że NN nie są dobrym wyborem dla gier z państwem, takich jak 2048, ale chcę osiągnąć, że NN zagra w grę jak doświadczony człowiek, czyli przesuwając kafelki tylko w trzech kierunkach.Jak mogę trenować sieć neuronową, aby zagrać w grę 2048?

Ale nie mogę wymyślić, jak samodzielnie pociągnąć NN, ponieważ nie znamy prawidłowego wyniku. Zwykle np. w regresji, znasz poprawne wyniki i możesz obliczyć stratę (np. średni kwadrat błędu) i zaktualizować wagi. Ale w 2048 roku poprawna wydajność jest praktycznie nieznana (oczywiście możesz obliczyć wynik dla każdego kierunku, który możesz przenieść, np. Kierunek z najwyższą różnicą score_after_move - previous_score byłby naszym prawidłowym wynikiem, ale myślę, że to nie jest sposób na samouczenie się NN). Czy możliwe jest zdefiniowanie funkcji straty w grze 2048? Najlepszy byłby inny.

Kolejne pytanie brzmi, kiedy zaktualizować wagi: po każdym ruchu, a raczej po zakończeniu gry (koniec gry)?

Jeśli jest to ważne: moja topologia NN będzie teraz prosty:

2D matrix of gaming board -> 2D matrix of input neurons -> 2D fully-connected hidden layer -> 1D 4-neuron layer

Więc każda dachówka będzie wejście do odpowiednich neuron w pierwszej warstwy (jest jakaś specjalna nazwa dla 2D pełni połączony warstwa?). Oczekiwanym wynikiem z ostatniej warstwy jest wektor o długości 4, np. [1, 0, 0, 0] będzie kierunkiem ruchu "w górę".

Na razie mam realizowane klasę bez głowy (w Pythonie/NumPy) dla 2048 gry, bo za pomocą wejścia wizualny jest powolna, a także więcej pracy do wykonania.

P.S. Może źle myślę o uczeniu się NN w tej grze (lub ogólnie o grach). Zapraszam, aby pokazać mi lepszy sposób, doceniłbym to. Dzięki :)

EDYCJA: Nauka zbrojenia wydaje się być sposobem. Oto kilka przydatnych linków:

Demystifying Deep Reinforcement Learning

Action-Value Methods and n-armed bandit problems

Q-learning for Keras

Deep Reinforcement Learning for Keras

+0

można znaleźć ten interesujący: https://www.youtube.com/watch ? v = qv6UVOQ0F44 – Tim

+0

To miło :) Chcę też zaimplementować jakiś algorytm genetyczny. Niestety autor nie napisał żadnego wyjaśnienia, więc jedyną opcją jest odczytanie jego kodu źródłowego. – jirinovo

+0

Choć możliwe jest, aby przenieść to pytanie SO, jak zażądały, to nie wygląda to byłoby na temat tam, więc prawdopodobne, że migracja będzie po prostu odmówił. – whuber

Odpowiedz

3

https://github.com/matthiasplappert/keras-rl więc wydaje się być najlepszym sposobem. Możesz wdrożyć tylko kilka metod zdefiniowanych w API środowiska OpenAI Gym. Są step() i reset() metody: https://github.com/matthiasplappert/keras-rl/blob/master/rl/core.py#L330

o więcej informacji nie ma odpowiedzi od keras-rl autorów: https://github.com/matthiasplappert/keras-rl/issues/38

Kiedy mój 2048 gra projekt AI będzie gotowy, ja wysłać link do zaopatrywania się tutaj (gdybym wygrał” t zapomnij zrobić :))

EDIT: oto obiecany link do źródła, całkowicie zapomniałem o tym:/ https://github.com/gorgitko/MI-MVI_2016

+0

Czy zakończyłeś to: p? –

+1

@tt_Gantz yeah :) [link] (https://github.com/gorgitko/MI-MVI_2016) dodano – jirinovo

Powiązane problemy