Самой интересной задачей в геймдеве для меня всегда было создание ИИ для персонажей, будь то враги или дружественные NPC. Я решил поставить эксперимент и выяснить, хватит ли моих знаний на то, чтобы привнести в игровой ИИ немного ИИ настоящего, то есть нейросетевого.
Начал с задачи попроще. Я сделал в Unity лабиринт 20х20, который рандомно генерируется в начале игры. По нему разбросаны монетки, они же Энергосферы, которые нужно собирать в стиле Пэкмана. Есть бот, у которого ограничена зона видимости, он видит только по вертикали и горизонтали. Ему нужно исследовать лабиринт и собрать все монеты.
Сначала я сыграл 10 партий сам, стрелками на клавиатуре управляя ботом и сохраняя каждое движение в датасет. Потом написал скрипты для обучения на Pytorch и поэкспериментировал с гиперпараметрами, благо на обучение модели уходит всего восемь минут.
Получившаяся нейросеть принимает на вход 12 чисел — это информация о том, что бот видит в каждом из четырех направлений. У неё есть память последних ходов. На выход она выдает, в какую сторону нужно двигаться.
И да! Это работает! Теперь бот проходит лабиринт и собирает монеты. Сам. Причем он это делает не механистично, а иногда крутится на одном месте, иногда тупит, как настоящий человек. Бот исследует самые дальние уголки и почти всегда у него получается собрать все монеты на поле.
Модель работает очень быстро и весит всего 200 килобайт. Следующим шагом будет запустить её на Unity Sentis, потому что пока она крутится на самописном сервере.
Перспективы очень интересны. Представьте себе ботов в шутере. Можно их обучить на партиях игроков посильнее или послабее, безрассудных или аккуратных, кэмперов или рашеров. И в настройках можно будет выбрать их уникальный стиль игры. Что думаете?
#gamedev #ai #torch #unity
>>Click here to continue<<