iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

UE4で強化学習環境を動かし、学習状況を可視化する(Part1)

前書き

お久しぶりです。iPXのabikoです。
最近急激に気温が上がり、真夏日を記録する所も出てきました。
近年春といえるような過ごしやすい日が少なくなっていることを寂しく感じます。
今後も気温の変動が激しそうです、皆さんお体に気をつけてお過ごしください。

今回の記事は

今回はUnrealEngeie4(以下UE4)と強化学習を組み合わせた記事にしたいと思います。
ずばり、UE4強化学習環境(CartPole)を動かし、学習状況を可視化する、です。

※といいながら、学習自体は行いません。可視化がメインです。
 強化学習環境にはOpenAI Gymを使用し、行動はランダムで与えます。

事の始まり

最近ではUE4機械学習に触れる機会が多くなりました。
そんな中、社内で「UE4ってPythonで書けないんですかね?」という話題が。

気になって調べてみると「UnrealEnginePython」というOSSプラグインを発見しました。
GitHub - 20tab/UnrealEnginePython: Embed Python in Unreal Engine 4
下記のページを見るに、Pythonコードにてアクターの座標移動まで実現できています!
UE4でPythonを使ってみる - Qiita

キューブが天に上っていく様子を見て、私の頭の中では下図が再生されました。

f:id:ipx-writer:20190506195722g:plain
CartPole

そう、かの有名なCartPoleです。機械学習の多くはPythonで書かれています。
Pythonで記述でき、ゲームプレイ時にキューブを動かすこともできるのであれば、UE4上で強化学習を実行するに止まらず、その学習状況の可視化もできてしまうのでは!と思い立ったのです。

それでは、さっそく試していきます。

準備の前に...

今回UE4および、Pythonのインストールについては割愛します。

参考

それぞれ下記のページからダウンロードすることができます。
UE4
www.unrealengine.com
Python
www.python.org

使用環境

OS WIndows 10
UE4 4.21.2
Python 3.6.6
UnrealEnginePython 20181128 Binary Releases

UnrealEnginePythonについて、当初はPythonが同梱(embedded)されているもので試してみたのですが、pipでエラーが出るなど苦戦したため、非同梱版を使用するようにしました。
→UnrealEnginePython_20181128_4_21_python36_win64.zip

そのため、Pythonを端末内に別途用意します。
今回は公式ページからダウンロード・インストールしたPythonを使用しています。

Pythonの下準備

UnrealEnginePythonのPython同梱版を使用しない場合、環境変数のPATHにインストールされているPythonのパスを設定する必要があります。
Pythonをデフォルトでインストールした場合には下記のパスを設定します。

C:\Users\****\AppData\Local\Programs\Python\Python36
C:\Users\****\AppData\Local\Programs\Python\Python36\Script

続いてコマンドプロンプトを起動してOpenAI Gymをインストールします。

$ pip install gym

UnrealEnginePythonをUE4プロジェクトに適用

UnrealEnginePythonプラグインをプロジェクトに適用する手順が下記になります。

1.空のブループリント(BluePrint=以下BP)プロジェクトを作成
f:id:ipx-writer:20190506200032p:plain
2.作成したプロジェクトルート直下にPluginsフォルダを作成
f:id:ipx-writer:20190506200051p:plain
3.UnrealEnginePythonプラグインをダウンロードして解凍
Releases · 20tab/UnrealEnginePython · GitHub
→「20181128 Binary Releases」の「 UnrealEnginePython_20181128_4_21_python36_win64.zip」をダウンロード

4.解凍結果のフォルダ配下にある「UnrealEnginePython」フォルダを「2. 」で作成したPluginsフォルダに配置
f:id:ipx-writer:20190506200111p:plain

5.プロジェクトを起動
Python環境変数が正しく設定されていない場合、起動時にエラーとなる

6.ウィンドウ>Python Editor のメニューが表示されていることを確認
f:id:ipx-writer:20190506200150p:plain

これでUnrealEnginePythonを使用する準備ができました。

UE4で可視化したいコード

今回UE4で実行&可視化したいコードはこちらになります。

import gym
env = gym.make('CartPole-v0')

for episode in range(50):
    observation = env.reset()
    done = False
    while not done:
        env.render()
        action = env.action_space.sample()
        observation, _, done, _ = env.step(action)

次の行動(右・左)をランダムに与え続けるコードになっています。

参考

CartPole環境の詳細についてはこちらを参照してください。
CartPole v0 · openai/gym Wiki · GitHub

Python Editorの動作確認

上記コードをPython Editorで実行してみます。

1.「ウィンドウ>Python Editor」を押下し、Python Editorを起動
2.上部メニューの「New」を押下してスクリプトファイルを作成
3.右下のエディタ部に上記コードをペースト
4.「Save」を押下して保存
f:id:ipx-writer:20190506201127p:plain
※Ctrl+S での保存が効きません。
 本格的に使用していく場合、VSCodeなど別のエディタを使ったほうがよさそうです。

※また、ソースコードに変更を加えたり、新たにファイルを追加した場合に下図のようなメッセージが出ます。「インポート」を押下し更新を反映しておきます。
f:id:ipx-writer:20190506201210p:plain

5. 「Execute」を押下し、コードを実行

f:id:ipx-writer:20190506203508g:plain
CartPole
無事実行できました!

次回

ここまでで一旦休憩です。
次回以降、ゲームプレイによって動作するコードに書き換え、状況を可視化できるように仕立てていきます。

それではまた、お会いしましょう。