Dag 22: Hvordan man bygger en AI Game Bot ved hjælp af OpenAI Gym og Universe

Lad os indse det, AI er overalt. En ansigt-ud kamp udspiller sig mellem Elon Musk og Mark Zuckerberg om fremtiden for AI. Der er nogle, der dæmoniserer det. Og nogle hvis utopiske synspunkter hævder, at AI næsten kunne være gudlignende til at hjælpe menneskeheden. Uanset hvilken side dine synspunkter vipper, er AI kommet for at blive.

"Med kunstig intelligens indkalder vi dæmonen." - Elon Musk "At frygte en stigning i morderrobotter er som at bekymre sig om overbefolkning på Mars." - Andrew Ng

Hvis du er begejstret for at dykke lige ind og rode med AI, er spil et godt sted at starte. De har været test-test for AI. Men inden du hopper ind, her er en lille smule historie om, hvordan spilprogrammering har udviklet sig gennem tiden.

Historien om spilprogrammering

Spilprogrammerere plejede at bruge heuristiske hvis-så-ellers-type beslutninger til at lave veluddannede gæt. Vi så dette i de tidligste arkade-videospil som Pong og PacMan. Denne tendens var normen i meget lang tid. Men spiludviklere kan kun forudsige så mange scenarier og edge cases, så din bot ikke kører i cirkler!

Spiludviklere forsøgte derefter at efterligne, hvordan mennesker ville spille et spil og modellerede menneskelig intelligens i en spilbot.

Teamet hos DeepMind gjorde dette ved at generalisere og modellere intelligens for at løse ethvert Atari-spil, der blev kastet på det. Spilbotten brugte dyblærende neurale netværk, der ikke havde nogen spilspecifik viden. De slog spillet baseret på de pixels, de så på skærmen, og deres viden om spilkontrollerne. Dele af DeepMind er dog stadig ikke open source, da Google bruger det til at slå konkurrence.

Demokratisering af AI

For at undgå at koncentrere den utrolige kraft af AI i nogle få hænder grundlagde Elon Musk OpenAI. Det søger at demokratisere AI ved at gøre det tilgængeligt for alle. I dag skal vi udforske OpenAI Gym og det nyligt udgivne Univers, som er bygget oven på Gym.

OpenAI Gym giver en enkel grænseflade til at interagere med og styre ethvert vilkårligt dynamisk miljø. OpenAI Universe er en platform, der giver dig mulighed for at oprette en bot og teste den.

Der er tusinder af miljøer. De spænder fra klassiske Atari-spil, Minecraft og Grand Theft Auto til proteinfoldsimuleringer, der kan helbrede kræft. Du kan oprette en bot og køre den i ethvert miljø ved kun at bruge et par linjer med Python-kode. Dette er for fantastisk til ikke at prøve!

Projekt (1 time)

Vi skal bygge en AI Game Bot, der bruger teknikken "Reinforcement Learning". Jeg forklarer det senere. Det vil autonomt spille mod og slå Atari-spillet Neon Race Car (du kan vælge et hvilket som helst spil du ønsker). Vi bygger denne spilbot ved hjælp af OpenAIs Gym and Universe-biblioteker.

Trin 1: Installation

Sørg for, at du har Python installeret, eller installer det ved hjælp af Homebrew. Du kan downloade en dedikeret Python IDE som PyCharm eller iPython notebook. Jeg kan godt lide at holde det simpelt og bruge Sublime. Endelig skal du installere Gym, Universe og andre nødvendige biblioteker ved hjælp af pip.

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

Alt i universet (miljøerne) kører som containere inde i Docker. Hvis du ikke allerede har det, skal du installere og køre Docker herfra.

Trin 2: Kod Game Bot

Game Bot er kodet i Python, så vi starter med at importere de eneste to afhængigheder, der er nødvendige: Gym og Univers.

import gymimport universe

Lad os bruge mit foretrukne barndomsspil, Neon Race Cars, som testmiljø til dette Game Bot. Du kan finde en komplet liste over andre miljøer / spil, du kan vælge her.

Univers lader dig køre så mange miljøer, som du vil, parallelt. Men til dette projekt bruger vi kun et.

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

Forstærkningslæring

Nu tilføjer vi spil bot-logikken, der bruger forstærkning læring teknik. Denne teknik overholder spillets tidligere tilstand og belønning (såsom pixel set på skærmen eller spil score). Det kommer derefter op med en handling, der skal udføres på miljøet.

Målet er at gøre sin næste observation bedre (i vores tilfælde - at maksimere spilresultatet). Denne handling vælges og udføres af en agent (Game Bot) med det formål at maksimere scoren. Det anvendes derefter på miljøet. Miljøet registrerer den resulterende tilstand og belønning baseret på om handlingen var gavnlig eller ej (vandt den spillet?).

Nu kan vi hente listen over observationer for hvert miljø, der er initialiseret ved hjælp af metoden env.reset ().

observation_n = env.reset()

Observation her er et miljøspecifikt objekt. Det repræsenterer det, der blev observeret, såsom rå pixeldata på skærmen eller spilstatus / score.

Det næste trin er at oprette en spilagent ved hjælp af en uendelig løkke, der løbende udfører nogle handlinger baseret på observationen. Lad os i vores bot definere en enkelt handling ved gentagne gange at trykke på pil op (Silly bot! Du er velkommen til at udvikle den til en kompleks ...). Handling her defineres af hændelsestypen (KeyEvent), kontroltasten (Pil op) og indstiller den til sand for al observation, som agenten ser.

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

Vi bruger derefter env.step()metoden til at bruge handlingen til at gå videre et gangstrin. Dette er en meget grundlæggende implementering af forstærket læring.

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

Trinmetoden returnerer her fire variabler:

  1. observation_n: Observationer af miljøet
  2. reward_n: Hvis din handling var gavnlig eller ej: + 1 / -1
  3. done_n: Angiver, om spillet er slut eller ikke: Ja / Nej
  4. info: Yderligere info såsom ydeevne og ventetid til fejlfindingsformål

Du kan køre denne handling samtidigt i alle de miljøer, hvor du træner din bot. Brug metoden env.render () til at starte bot.

env.render()

Nu har du Game Bot klar til at konkurrere med miljøet. Den komplette kode til denne grundlæggende bot samt en avanceret version er tilgængelig i min Github repo her.

Trin 3: Kør Game Bot

Nu til den sjove del: Sørg for, at Docker kører, og kør boten. Se det i aktion slå andre biler eller undlader at gøre det. Hvis det mislykkes, skal du fortsætte med at tilpasse din bot for at få det til at slå intelligens!

python gamebot.py

Bliv ved med at tinkere med AI, og til sidst kan du låse op for God Mode! # 100DaysOfCode

Hvis du nød dette, bedes du klappe ? s o andre kan også se det! Følg mig på Twitter @H ariniLabs eller M edium at få de seneste opdateringer på andre historier eller bare for at sige Hej :)

PS: Tilmeld dig mit nyhedsbrev her for at være den første til at få nyt nyt indhold, og det er fyldt med en dosis inspiration fra verdenen af ​​# WomenInTech, og ja mænd kan også tilmelde sig!