22日目:OpenAIGymとUniverseを使用してAIゲームボットを構築する方法

それに直面しましょう、AIはいたるところにあります。AIの未来について、イーロン・マスクとマーク・ザッカーバーグの間で対決の戦いが繰り広げられています。それを悪魔化するものがいくつかあります。そして、そのユートピア的な見方の中には、AIが人類を助けるという点でほとんど神のようである可能性があると主張する人もいます。あなたの意見がどちらの側に傾いても、AIはここにとどまります。

「人工知能を使って、私たちは悪魔を召喚しています。」—イーロン・マスク「キラーロボットの台頭を恐れることは、火星の人口過多を心配するようなものです。」—アンドリュー・ン

AIに飛び込んでいじくり回すことに興奮しているなら、ゲームは始めるのに最適な場所です。彼らはAIの頼りになるテストベッドでした。しかし、飛び込む前に、ゲームプログラミングが時間の経過とともにどのように進化してきたかについての歴史を少し紹介します。

ゲームプログラミングの歴史

ゲームプログラマーは、経験に基づいた推測を行うために、ヒューリスティックなif-then-elseタイプの決定を使用していました。これは、PongやPacManなどの初期のアーケードビデオゲームで見られました。この傾向は非常に長い間標準でした。しかし、ゲーム開発者は非常に多くのシナリオとエッジケースしか予測できないため、ボットが輪になって実行されることはありません。

次に、ゲーム開発者は、人間がゲームをプレイする方法を模倣しようとし、ゲームボットで人間の知性をモデル化しました。

DeepMindのチームは、インテリジェンスを一般化およびモデル化して、スローされたAtariゲームを解決することでこれを実現しました。ゲームボットは、ゲーム固有の知識を持たない深層学習ニューラルネットワークを使用していました。彼らは、画面に表示されたピクセルとゲームコントロールに関する知識に基づいて、ゲームに勝ちました。ただし、DeepMindの一部は、Googleが競争に打ち勝つために使用しているため、まだオープンソースではありません。

AIの民主化

少数の人の手にAIの信じられないほどの力が集中するのを避けるために、ElonMuskはOpenAIを設立しました。AIをすべての人が利用できるようにすることで、AIの民主化を目指しています。今日は、OpenAIジムと、ジムの上に構築された最近リリースされたユニバースについて説明します。

OpenAI Gymは、任意の動的環境と対話して管理するためのシンプルなインターフェイスを提供します。OpenAI Universeは、ボットを構築してテストできるプラットフォームです。

何千もの環境があります。それらは、古典的なAtariゲーム、Minecraft、Grand Theft Autoから、癌を治療できるタンパク質フォールドシミュレーションまで多岐にわたります。ほんの数行のPythonコードを使用して、ボットを作成し、任意の環境で実行できます。これはすごすぎて試さないでください!

プロジェクト(1時間)

「強化学習」手法を使用したAIゲームボットを構築します。これについては後で説明します。アタリゲームのネオンレースカーと自律的に対戦し、打ち負かします(好きなゲームを選択できます)。このゲームボットは、OpenAIのジムライブラリとユニバースライブラリを使用して構築します。

ステップ1:インストール

Pythonがインストールされていることを確認するか、Homebrewを使用してインストールしてください。PyCharmやiPythonノートブックなどの専用のPythonIDEをダウンロードできます。私はそれをシンプルに保ち、Sublimeを使うのが好きです。最後に、pipを使用して、Gym、Universe、およびその他の必要なライブラリをインストールします。

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

Universe(環境)内のすべては、Docker内のコンテナーとして実行されます。まだお持ちでない場合は、ここからDockerをインストールして実行してください。

ステップ2:ゲームボットをコーディングする

Game BotはPythonでコーディングされているため、必要な2つの依存関係(GymとUniverse)のみをインポートすることから始めます。

import gymimport universe

このゲームボットでは、私のお気に入りの子供時代のゲームであるネオンレースカーをテスト環境として使用しましょう。ここから選択できる他の環境/ゲームの完全なリストを見つけることができます。

Universeを使用すると、必要な数の環境を並行して実行できます。ただし、このプロジェクトでは1つだけを使用します。

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

強化学習

次に、強化学習手法を使用するゲームボットロジックを追加します。この手法は、ゲームの以前の状態と報酬(画面に表示されるピクセルやゲームのスコアなど)を監視します。次に、環境に対して実行するアクションを考え出します。

目標は、次の観測を改善することです(この場合、ゲームのスコアを最大化するため)。このアクションは、スコアを最大化することを目的として、エージェント(Game Bot)によって選択および実行されます。その後、環境に適用されます。環境は、アクションが有益であったかどうかに基づいて、結果の状態と報酬を記録します(ゲームに勝ったかどうか)。

これで、env.reset()メソッドを使用して初期化された各環境の観測値のリストを取得できます。

observation_n = env.reset()

ここでの観察は、環境固有のオブジェクトです。画面上の生のピクセルデータやゲームのステータス/スコアなど、観察されたものを表します。

The next step is to create a game agent using an infinite loop, which continuously performs some action based on the observation. In our bot, let’s define a single action of repeatedly pressing the up arrow (Silly bot! Feel free to evolve it to a complex one…). Action here is defined by the event type (KeyEvent), the control key (Up Arrow), and setting it to true for all observation that the agent sees.

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

We then use the env.step() method to use the action to move forward one time step. This is a very basic implementation of reinforced learning.

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

The step method here returns four variables:

  1. observation_n: Observations of the environment
  2. reward_n: If your action was beneficial or not: +1/-1
  3. done_n: Indicates if the game is over or not: Yes/No
  4. info: Additional info such as performance and latency for debugging purposes

You can run this action simultaneously for all the environments in which you’re training your bot. Use the env.render() method to start the bot.

env.render()

Now you have the Game Bot ready to compete with the environment. The complete code for this basic bot as well as an advanced version is available in my Github repo here.

Step 3: Run the Game Bot

Now for the fun part: ensure Docker is running and run the bot. See it in action beating other cars or failing to do so. If it fails, keep tweaking your bot to make it beat intelligence!

python gamebot.py

Keep tinkering with AI and eventually you can unlock God Mode! #100DaysOfCode

If you enjoyed this, please clap ? so others can see it as well! Follow me on Twitter @HariniLabs or Medium to get the latest updates on other stories or just to say Hi :)

PS: Sign up for my newsletter here to be the first to get fresh new content and it’s filled with a dose of inspiration from the world of #WomenInTech and yes men can signup too!