День 22: Как создать AI Game Bot с помощью OpenAI Gym и Universe

Посмотрим правде в глаза, ИИ везде. Между Илоном Маском и Марком Цукербергом разворачивается противостояние за будущее ИИ. Некоторые демонизируют это. И некоторые, чьи утопические взгляды утверждают, что ИИ может быть почти подобен Богу, помогая человечеству. В какую бы сторону ни крутились ваши взгляды, ИИ здесь, чтобы остаться.

«С помощью искусственного интеллекта мы вызываем демона». - Илон Маск «Опасаться появления роботов-убийц - все равно что беспокоиться о перенаселенности Марса». - Эндрю Нг

Если вы хотите сразу погрузиться в ИИ и поработать с ним, то игры - отличное место для начала. Они были испытательной площадкой для ИИ. Но прежде чем приступить к делу, расскажем немного об истории развития игрового программирования с течением времени.

История игрового программирования

Программисты игр использовали эвристические решения типа if-then-else, чтобы делать обоснованные предположения. Мы видели это в самых ранних аркадных видеоиграх, таких как Pong и PacMan. Эта тенденция долгое время была нормой. Но разработчики игр могут предсказать только такое количество сценариев и крайних случаев, чтобы ваш бот не работал по кругу!

Затем разработчики игр попытались имитировать, как люди будут играть в игру, и смоделировали человеческий интеллект в игровом боте.

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

Демократизация ИИ

Чтобы избежать концентрации невероятной силы ИИ в руках немногих, Илон Маск основал OpenAI. Он стремится демократизировать ИИ, делая его доступным для всех. Сегодня мы рассмотрим OpenAI Gym и недавно выпущенную Universe, которая построена на базе Gym.

OpenAI Gym предоставляет простой интерфейс для взаимодействия с любой произвольной динамической средой и управления ею. OpenAI Universe - это платформа, которая позволяет вам создать бота и протестировать его.

Есть тысячи сред. Они варьируются от классических игр Atari, Minecraft и Grand Theft Auto до симуляторов белков, которые могут вылечить рак. Вы можете создать бота и запускать его в любой среде, используя всего несколько строк кода Python. Это слишком круто, чтобы не попробовать!

Проект (1 час)

Мы собираемся создать AI Game Bot, который будет использовать технику «обучения с подкреплением». Я объясню это позже. Он будет автономно играть против Neon Race Car от Atari и побеждать его (вы можете выбрать любую игру). Мы создадим этого игрового бота, используя библиотеки OpenAI Gym и Universe.

Шаг 1: установка

Убедитесь, что у вас установлен Python, или установите его с помощью Homebrew. Вы можете загрузить специальную среду разработки Python, например PyCharm или iPython notebook. Мне нравится сохранять простоту и использовать Sublime. Наконец, установите Gym, Universe и другие необходимые библиотеки с помощью pip.

// Install python using brewbrew install python3// Install the required OpenAI librariespip3 install gympip3 install numpy incrementalbrew install golang libjpeg-turbo pip install universe

Все во Вселенной (среды) работает как контейнеры внутри Docker. Если у вас его еще нет, установите и запустите Docker отсюда.

Шаг 2. Создайте код для игрового бота

Game Bot написан на Python, поэтому мы начнем с импорта только двух необходимых зависимостей: Gym и Universe.

import gymimport universe

Давайте воспользуемся моей любимой детской игрой Neon Race Cars в качестве тестовой среды для этого игрового бота. Вы можете найти полный список других сред / игр, которые вы можете выбрать здесь.

Universe позволяет запускать столько сред, сколько захотите, параллельно. Но для этого проекта мы будем использовать только один.

env = gym.make(‘flashgames.NeonRace-v0’)env.configure(remotes=1) # creates a local docker container

Обучение с подкреплением

Теперь мы добавляем логику игрового бота, использующую технику обучения с подкреплением. Этот метод отслеживает предыдущее состояние игры и награду (например, пиксели на экране или счет игры). Затем он придумывает действие, которое нужно выполнить с окружающей средой.

Цель состоит в том, чтобы сделать его следующее наблюдение лучше (в нашем случае - максимизировать игровой счет). Это действие выбирается и выполняется агентом (игровым ботом) с намерением максимизировать счет. Затем он применяется к окружающей среде. Среда записывает результирующее состояние и награду в зависимости от того, было ли действие полезным или нет (выиграли ли оно игру?).

Теперь мы можем получить список наблюдений для каждой среды, инициализированной с помощью метода env.reset ().

observation_n = env.reset()

Наблюдение здесь является объектом, зависящим от среды. Он представляет то, что наблюдалось, например необработанные данные о пикселях на экране или статус / счет игры.

Следующим шагом является создание игрового агента с использованием бесконечного цикла, который непрерывно выполняет некоторые действия на основе наблюдения. В нашем боте давайте определим одно действие - многократное нажатие стрелки вверх (Глупый бот! Не стесняйтесь развивать его до сложного…). Действие здесь определяется типом события (KeyEvent), клавишей управления (стрелка вверх) и установкой для него значения true для всех наблюдений, которые видит агент.

while True:action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]

Затем мы используем env.step()метод, чтобы использовать действие для перемещения вперед на один временной шаг. Это очень простая реализация усиленного обучения.

 observation_n, reward_n, done_n, info = env.step(action_n)

Шаговый метод здесь возвращает четыре переменные:

  1. observation_n: Наблюдения за окружающей средой
  2. reward_n: Было ли ваше действие полезным или нет: + 1 / -1
  3. done_n: Указывает, окончена игра или нет: Да / Нет
  4. info: Дополнительная информация, такая как производительность и задержка, для отладки.

Вы можете запустить это действие одновременно для всех сред, в которых вы тренируете своего бота. Используйте метод env.render () для запуска бота.

env.render()

Теперь у вас есть Game Bot, готовый конкурировать с окружающей средой. Полный код этого базового бота, а также расширенная версия доступны в моем репозитории на Github здесь.

Шаг 3. Запустите игровой бот

Теперь самое интересное: убедитесь, что Docker запущен, и запустите бота. Посмотрите, как он в действии побеждает другие машины или не делает этого. Если это не удается, продолжайте настраивать своего бота, чтобы он побил интеллект!

python gamebot.py

Продолжайте возиться с ИИ, и в конце концов вы сможете разблокировать режим Бога! # 100DaysOfCode

Если вам понравилось, пожалуйста, хлопайте в ладоши ? так что другие тоже могут это увидеть! Подписывайтесь на меня в Twitter @H ariniLabs или M edium, чтобы получать последние новости о других историях или просто сказать Привет :)

PS: Подпишитесь на мою рассылку здесь , чтобы быть первым , чтобы получить свежее новое содержание , и он наполнен дозой вдохновения из мира # WomenInTech и да люди могут подписаться слишком!