Длинные игровые рамки - PullRequest
0 голосов
/ 18 июня 2019

Я учусь изучению глубокого подкрепления, начиная с примеров из интернета по решению таких игр, как Snake, Cartpole и т.д.игра.С Snake и Cartpole каждое действие имеет последствия (например, удар по стене или падение маятника), поэтому я вижу код, работающий так, как должен.Но в моей игре, хотя это намного более простая игра (на данный момент), это игра с большим количеством игровых фреймов.Есть только 2 входа, target_number и target_can_been_shot.Последовательность игровых фреймов выглядит следующим образом:

0,0
0,0
... (after 5000 game frames)
0,0
2,0
2,1
2,1
2,1
2,1
2,0
2,0
0,0
0,0
... (after 2000 game frames)
0,0
5,0
5,1
5,1
5,1
5,0
5,0
5,0
5,0
0,0

В кадре 5002 видно, что цель (номер 2) появляется, а в кадре 5003 четкий выстрел в цель.

Цель этого упражнения - научить ИИ стрелять по цели, когда 2-й столбец ввода равен 1 (пожалуйста, потерпите меня, это упрощенная версия более сложной игры).Есть 2 выхода, ничего не делать или стрелять.

Проблема в том, что для того, чтобы сделать открытие в DQN, ему нужно сделать случайные ходы, чтобы увидеть, какие последствия имеет действие (т.е. получает награды или нет),Таким образом, для того, чтобы нанести удар по первой цели, ему нужно ничего не делать случайным образом в течение 5002 кадров, поэтому ИИ с треском проваливается с места.

Как мы решаем такую ​​проблему?Т.е. игра с долго бегущими фреймами и в большинстве случаев ничего не происходит.Код, который делает случайное движение (уровень случайности также выше в начале, когда эпсилон высокий):

move = to_categorical(randint(0, 1), num_classes=2)

Я знаю, что упускаю что-то фундаментальное, просто пытаюсь узнать больше об ИИ.Любое руководство будет оценено.

...