Как использовать Recurrent Neural Network, чтобы играть в простую 2D-игру Java? - PullRequest
0 голосов
/ 21 апреля 2019

Я сделал простую игру с LWJGL, где вы выживаете, уклоняясь от дорожных препятствий.Единственным входом в игру являются клавиши со стрелками вверх и вниз.У меня есть двумерный массив «датчиков», которые содержат состояние безопасности областей, окружающих игрока.Какие хорошие библиотеки Java RNN доступны, и как мне поступить с применением моего сенсорного массива в качестве входных данных для глубокого обучения, чтобы обучить его вживую и получать обратную связь, идти ли вверх или вниз по дороге.Я приложил изображения ниже, чтобы помочь этой концепции.

Я еще не пробовал никаких библиотек машинного обучения, потому что я не совсем понимаю, как использовать их в этой ситуации, поэтому могут появиться ваши предложения фрагментов кодаудобный.

//My "sensors"; status of player surroundings int[][] stuff = {{top1, top2, top3, top4},{mid1, mid2, mid3, mid4},{bottom1, bottom2, bottom3, bottom4}};

1 Ответ

0 голосов
/ 23 апреля 2019

В GitHub можно найти несколько хороших библиотек, но это не то, что вы должны искать.Для запуска вам нужна методика обучения для вашего RNN, я бы лично порекомендовал NEAT (Neuroevolution of увеличивающие топологии), который использует RNN в генетическом алгоритме, есть много видео, объясняющих, как это работает и реализации в играх, таких как Snake (как здесь: https://www.youtube.com/watch?v=BBLJFYr7zB8). Если вы зайдете на GitHub и просто справа «Neural Network Neat», вы найдете несколько репозиториев, все, что от них требуется - это реализовать!

Вы также можете использовать обратное распространение или qlearning, но ялично я считаю, что bp бесполезен в этом конкретном сценарии, и ql немного продвинулся, если это ваш первый проект ml.

Я рекомендую этот репо не потому, что он хорош, а потому, что он прост и позволяет реализовать идею (https://github.com/fabiorino/NeuralNetwork-plays-Pong)

Вот что вам нужно сделать, чтобы реализовать его!

  • Перейти к основному классу, в нашем случае это Pong
  • Создать входной массив, которыйна самом деле это просто массив double
  • Измените входы в learn () в этой строке "output = nn.getOutputs (input); "
  • Изменить счет физической подготовки в gameOver ()
  • изменить то, что происходит в gameover ()

И я думаю, вот и все!

Надеюсь, я помог и удачи!

...