22 diena: Kaip sukurti „AI Game Bot“ naudojant „OpenAI“ sporto salę ir visatą

Pripažinkime, AI yra visur. Dėl AI ateities vyksta Elono Musko ir Marko Zuckerbergo atvira kova. Yra keletas, kurie tai demonizuoja. Kai kurie, kurių utopinė nuomonė teigia, kad dirbtinis intelektas gali būti beveik panašus į Dievą, padėdamas žmonijai. Kad ir kurioje pusėje jūsų požiūris pakryptų, AI yra čia, kad liktumėte.

"Su dirbtiniu intelektu mes sukviečiame demoną". - Elonas Muskas „Baimintis dėl robotų žudikų populiarėjimo yra tarsi nerimas dėl per didelio gyventojų skaičiaus Marse“. - Andrew Ng

Jei džiaugiatės nerdami tiesiai į priekį ir dirbdami su dirbtiniu intelektu, žaidimai yra puiki vieta pradėti. Jie buvo išbandyti PG. Bet prieš šokinėdami, pateikiame šiek tiek istorijos apie tai, kaip žaidimų programavimas vystėsi laikui bėgant.

Žaidimų programavimo istorija

Žaidimų programuotojai naudojo euristinius „jei-tada-kitaip“ tipo sprendimus, kad atliktų išsilavinusius spėjimus. Tai matėme ankstyviausiuose vaizdo žaidimų žaidimuose, tokiuose kaip „Pong“ ir „PacMan“. Ši tendencija buvo įprasta labai ilgai. Tačiau žaidimų kūrėjai gali numatyti tik tiek daug scenarijų ir pranašumų, kad jūsų robotas neveiktų ratu!

Tada žaidimų kūrėjai bandė imituoti, kaip žmonės žais žaidimą, ir modeliavo žmogaus intelektą žaidimo bote.

„DeepMind“ komanda tai padarė apibendrindama ir sumodeliuodama intelektą, kad išspręstų visus „Atari“ žaidimus. Žaidimo robotas naudojo giluminius mokymosi neuroninius tinklus, kurie neturėtų konkrečių žaidimų žinių. Jie mušė žaidimą, atsižvelgdami į ekrane matytus taškus ir žinias apie žaidimo valdiklius. Tačiau „DeepMind“ dalys vis dar nėra atviros, nes „Google“ ją naudoja konkurencijai įveikti.

Dirbtinio intelekto demokratizavimas

Kad išvengtų neįtikėtinos AI galios sutelkimo kelių rankose, Elonas Muskas įkūrė „OpenAI“. Ji siekia demokratizuoti dirbtinį intelektą, padarydama jį prieinamą visiems. Šiandien mes tyrinėsime „OpenAI“ sporto salę ir neseniai išleistą Visatą, pastatytą ant sporto salės.

„OpenAI Gym“ suteikia paprastą sąsają, leidžiančią bendrauti ir valdyti bet kokią savavališką dinaminę aplinką. „OpenAI Universe“ yra platforma, leidžianti sukurti robotą ir jį išbandyti.

Yra tūkstančiai aplinkų. Jie apima nuo klasikinių „Atari“ žaidimų, „Minecraft“ ir „Grand Theft Auto“ iki baltymų klostės simuliacijų, kurios gali išgydyti vėžį. Galite sukurti robotą ir paleisti jį bet kurioje aplinkoje naudodami tik kelias „Python“ kodo eilutes. Tai per nuostabu, kad nebūtų bandoma!

Projektas (1 valanda)

Ketiname sukurti „AI Game Bot“, kuriame naudojama „Reinforcement Learning“ technika. Aš tai paaiškinsiu vėliau. Jis savarankiškai žais ir įveiks „Atari“ žaidimą „Neon Race Car“ (galite pasirinkti bet kurį norimą žaidimą). Šį žaidimo robotą sukursime naudodami „OpenAI“ sporto salės ir visatos bibliotekas.

1 žingsnis: diegimas

Įsitikinkite, kad turite įdiegtą „Python“, arba įdiekite jį naudodami „Homebrew“. Galite atsisiųsti specialų „Python IDE“, pvz., „PyCharm“ ar „iPython“ nešiojamąjį kompiuterį. Man patinka tai padaryti paprastai ir naudoti „Sublime“. Galiausiai, naudodami „pip“, įdiekite „Gym“, „Universe“ ir kitas reikalingas bibliotekas.

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

Viskas Visatoje (aplinkoje) „Docker“ viduje veikia kaip konteineriai. Jei dar neturite, įdiekite ir paleiskite „Docker“ iš čia.

2 žingsnis: užkoduokite „Game Bot“

„Game Bot“ yra užkoduotas „Python“, todėl pirmiausia importuojame tik dvi reikalingas priklausomybes: „Gym“ ir „Visata“.

import gymimport universe

Šiam „Game Bot“ bandymo aplinkai naudokime mano mėgstamą vaikystės žaidimą „Neon Race Cars“. Čia galite rasti išsamų kitos aplinkos / žaidimų, kuriuos galite pasirinkti, sąrašą.

Visata leidžia lygiagrečiai paleisti tiek aplinkų, kiek norite. Tačiau šiam projektui naudosime tik vieną.

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

Mokymasis sustiprinti

Dabar pridedame žaidimo roboto logiką, kurioje naudojama sustiprinimo mokymosi technika. Ši technika stebi ankstesnę žaidimo būseną ir atlygį (pvz., Ekrane matomus taškus ar žaidimo rezultatą). Tada sugalvojamas veiksmas, kurį reikia atlikti aplinkai.

Tikslas - padaryti kitą stebėjimą geresnį (mūsų atveju - maksimaliai padidinti žaidimo rezultatą). Šį veiksmą parenka ir atlieka agentas („Game Bot“), siekdamas maksimaliai padidinti rezultatą. Tada jis taikomas aplinkai. Aplinka užfiksuoja gautą būseną ir atlygį pagal tai, ar veiksmas buvo naudingas, ar ne (ar jis laimėjo žaidimą?).

Dabar mes galime gauti kiekvienos aplinkos stebėjimų sąrašą, inicijuotą naudojant metodą env.reset ().

observation_n = env.reset()

Stebėjimas čia yra aplinkai būdingas objektas. Tai rodo tai, kas buvo pastebėta, pvz., Neapdorotus taškų duomenis ekrane arba žaidimo būseną / rezultatą.

Kitas žingsnis yra sukurti žaidimo agentą, naudojant begalinę kilpą, kuri, atlikdama stebėjimą, nuolat atlieka tam tikrą veiksmą. Apibrėžkime vieną veiksmą, kaip pakartotinai paspausti rodyklę aukštyn (Kvailas botas! Jauskitės laisvai, kad paverstumėte jį sudėtingu ...). Veiksmą čia apibrėžia įvykio tipas („KeyEvent“), valdymo raktas (rodyklė aukštyn) ir nustatant jo teisingumą visiems stebėjimams, kuriuos mato agentas.

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

Tada mes naudojame šį env.step()metodą, kad galėtume judėti vienu žingsniu į priekį. Tai labai paprastas sustiprinto mokymosi įgyvendinimas.

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

Žingsnio metodas pateikia keturis kintamuosius:

  1. observation_n: Aplinkos stebėjimai
  2. reward_n: Jei jūsų veiksmas buvo naudingas ar ne: + 1 / -1
  3. done_n: Nurodo, ar žaidimas baigtas, ar ne: Taip / Ne
  4. info: Papildoma informacija, pvz., Našumas ir vėlavimas derinimo tikslais

Šį veiksmą galite atlikti vienu metu visose aplinkose, kuriose treniruojate robotą. Norėdami paleisti robotą, naudokite metodą env.render ().

env.render()

Dabar jūs turite „Game Bot“, kuris yra pasirengęs konkuruoti su aplinka. Visą šio pagrindinio roboto kodą ir išplėstinę versiją galite rasti mano „Github“ repo čia.

3 žingsnis: paleiskite „Game Bot“

Dabar įdomioji dalis: įsitikinkite, kad „Docker“ veikia ir paleiskite robotą. Žiūrėkite, kaip jis muša kitus automobilius arba to nepadaro. Jei nepavyksta, tęskite robotą, kad jis įveiktų intelektą!

python gamebot.py

Tęskite dirbtinį intelektą ir galiausiai galėsite atrakinti Dievo režimą! # 100DaysOfCode

Jei jums tai patiko, prašau ploti ? ai O kiti gali matyti, kaip gerai! Sekite mane „Twitter“ @H ariniLabs ar „M edium“, kad gautumėte naujausius kitų istorijų naujienas arba tiesiog pasisveikintumėte :)

PS: Prisiregistruokite gauti savo naujienlaiškį čia, kad būtumėte pirmasis, kuris gautų naują naują turinį, ir jis užpildytas įkvėpimo doze iš # WomenInTech pasaulio, taip, vyrai taip pat gali užsiregistruoti!