Ден 22: Как да изградим бот за AI игра, използвайки OpenAI Gym и Universe

Нека си признаем, AI е навсякъде. Между Илон Мъск и Марк Зукърбърг се разиграва битка за бъдещето на AI. Има някои, които го демонизират. А някои, чиито утопични възгледи твърдят, че ИИ би могъл да бъде почти богоподобен в помощ на човечеството. Която и страна да се наклони, AI е тук, за да остане.

„С изкуствен интелект призоваваме демона.“ - Илон Мъск „Да се ​​страхуваш от издигане на роботи-убийци е все едно да се тревожиш за пренаселеността на Марс.“ - Андрю Нг

Ако сте развълнувани да се потопите направо и да се забъркате с AI, тогава игрите са чудесно място за начало. Те са били изпитателното място за AI. Но преди да влезем, ето малко история за това как еволюира програмирането на играта във времето.

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

Програмистите на игри използваха евристични решения тип „ако-тогава“, за да правят образовани предположения. Видяхме това в най-ранните аркадни видеоигри като Pong и PacMan. Тази тенденция беше норма за много дълго време. Но разработчиците на игри могат да предвидят само толкова много сценарии и крайни случаи, така че ботът ви да не се движи в кръгове!

След това разработчиците на игри се опитаха да имитират как хората ще играят дадена игра и моделираха човешкия интелект в игрален бот.

Екипът от DeepMind направи това, като обобщи и моделира интелигентност, за да реши всяка игра Atari, хвърлена върху нея. Игровият бот използва дълбоки обучителни невронни мрежи, които няма да имат специфични за играта знания. Те побеждават играта въз основа на пикселите, които са видели на екрана, и знанията им за контрола на играта. Части от DeepMind обаче все още не са с отворен код, тъй като Google го използва, за да победи конкуренцията.

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

За да избегне концентрирането на невероятната сила на AI в ръцете на малцина, Илон Мъск основа OpenAI. Той се стреми да демократизира ИИ, като го направи достъпен за всички. Днес ще изследваме OpenAI Gym и наскоро пуснатата Вселена, която е изградена върху Gym.

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

Има хиляди среди. Те варират от класически игри Atari, Minecraft и Grand Theft Auto до симулации на протеинови гънки, които могат да лекуват рак. Можете да създадете бот и да го стартирате във всяка среда, като използвате само няколко реда Python код. Това е твърде страхотно, за да не опитате!

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

Ще изградим AI Game Bot, който използва техниката „Укрепващо обучение“. Ще го обясня по-късно. Той ще играе автономно срещу и ще победи играта Atari Neon Race Car (можете да изберете всяка игра, която искате). Ще изградим този бот за игра, използвайки библиотеките на Gym и Universe на OpenAI.

Стъпка 1: Инсталиране

Уверете се, че имате инсталиран Python или го инсталирайте с помощта на Homebrew. Можете да изтеглите специална IDE на Python като PyCharm или iPython тетрадка. Обичам да го опростявам и да използвам 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

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

import gymimport universe

За този Game Bot, нека използваме любимата си игра от детството Neon Race Cars като тестова среда. Можете да намерите пълен списък на друга среда / игри, които можете да изберете от тук.

Universe ви позволява да изпълнявате паралелно колкото искате среди. Но за този проект ще използваме само един.

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

Подсилващо обучение

Сега добавяме логиката на игралния бот, която използва техниката за засилване на обучението. Тази техника спазва предишното състояние и наградата на играта (като пикселите, които се виждат на екрана или резултата от играта). След това се предлага действие, което да се извърши върху околната среда.

Целта е да направите следващото си наблюдение по-добро (в нашия случай - да увеличите максимално резултата от играта). Това действие се избира и изпълнява от агент (Game Bot) с намерението да се увеличи резултата. След това се прилага върху околната среда. Околната среда записва полученото състояние и награда въз основа на това дали действието е било полезно или не (спечели ли играта?).

Сега можем да извлечем списъка с наблюдения за всяка среда, инициализирана с помощта на метода 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: Стартирайте Game Bot

Сега за забавната част: уверете се, че Docker работи и стартирайте бота. Вижте го в действие как бие други автомобили или не го прави. Ако не успее, продължете да променяте вашия бот, за да го накарате да победи интелигентността!

python gamebot.py

Продължавайте да се занимавате с AI и в крайна сметка можете да отключите режима на Бог! # 100DaysOfCode

Ако ви хареса това, моля пляскайте ? s o могат да го видят и други! Последвайте ме в Twitter @H ariniLabs или M edium, за да получавате последните актуализации на други истории или просто да кажете Здравейте :)

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