LoginSignup
15
18

More than 5 years have passed since last update.

【Unity強化学習】チュートリアルで遊んでみる

Posted at

Introducing: Unity Machine Learning Agents
Unity ML-Agentsを使えば、Unity環境で強化学習を行うことができます。
チュートリアルは簡単に試すことができるのでまずはやってみましょう。

TypicalRL.png

まず動かしてみる

Unityを起動して適当な名前でプロジェクトを作ります。

公式GitHubからML-Agents package with TensorflowSharpをダウンロード。実行して環境をインポートします。

SnapCrab_NoName_2018-2-28_9-54-47_No-00.png

Examples > Areaの中にあるWallSceneをやってみましょう。

SnapCrab_NoName_2018-2-28_10-6-22_No-00.png

HierarchyのAcademy > Brainを選択。BrainTypeがPlayerになっていることを確認して実行してみましょう。

SnapCrab_NoName_2018-2-28_10-8-1_No-00.png

Wall_Play.gif

キーボードのWASDで移動、スペースでジャンプ。
壁の向こうにある緑色のところに行けばゴールです。しかし、ただジャンプするだけでは壁は越えられないので、オレンジの箱を利用しなければいけません。

学習済みデータを利用する

このチュートリアルには学習済みのデータが付属しています。これを使ってみましょう。同じフォルダのTFModelsに入っているファイルがそれです。

SnapCrab_NoName_2018-2-28_10-16-11_No-00.png

まず、Edit > Project Settings > PlayerからOtherSettingsタブを開き、
Scripting Runtime Version を Experimental(.NET 4.6 Equivalent)
Scripting Define Symbols を ENABLE_TENSORFLOW
にします

SnapCrab_NoName_2018-2-25_22-17-39_No-00.png

今度は先ほどと違って、BrainTypeをInternalにします。

SnapCrab_NoName_2018-2-28_10-23-41_No-00.png

Graph Modelに強化学習のデータが入ります。デフォルトですでに入っていると思います。これがさっきのTFModelsに入っていたデータですね。

これで実行してみましょう。

Wall_Internal.gif

強化学習されたモデルによって自動で動くと思います。
同様の手順でほかのサンプルも動かすことができます。

サンプル紹介

3DBall

3DBall.gif

Reacher

Reacher.gif

Tennis

Tennis.gif

Unity ML-Agentsの仕組み

Learning Environment.png

移動したり、ジャンプしたりするAgentsはBrainとAcademyによって動作が制御されています。
BrainTypeがPlayerのときは人間が動かすことができ、Internalのときは学習済みモデルによって自動で動きました。
ExternalにするとPython APIを使用して、オープンソケットを介して通信することで、外部から行動を制御できます。
これを使って、強化学習を実際にやってみましょう。

ビルドして強化学習

WallSceneの隣にあるPushSceneを使います

SnapCrab_NoName_2018-2-28_11-31-7_No-00.png

Pushの場合はオレンジの箱を緑のところに持っていけばゴールです。

GitHubのリポジトリをダウンロード。その中のPythonフォルダをいまのプロジェクトにコピーします。(Assetsの外)

SnapCrab_NoName_2018-2-28_11-35-11_No-00.png

次にBrainTypeがExternalになっていることを確認

SnapCrab_NoName_2018-2-28_11-33-19_No-00.png

Edit > Project Settings > Player からResolution and Presentationタブを開く。
Run In BackGround にチェック
Display Resolution Dialog をDisabled
にする

SnapCrab_NoName_2018-2-28_11-38-10_No-00.png

その後、設定を確認してビルド。保存先は先ほどのPythonフォルダ。名前はAreaPushにしておきましょう。

PythonフォルダでAnacondaプロンプトを開きます。

python ppo.py AreaPush --train

これで学習が開始します。

SnapCrab_NoName_2018-2-28_11-54-18_No-00.png

オプションで--max-steps=1e5といった感じで学習回数を決められます。デフォルトでは1e6(100万回)
--loadなどで途中から学習を再開できます。
詳しくはppo.pyを見てみてください。

学習が完了するとmodelsというフォルダが作成され、その中のppo
フォルダにAreaPush.bytesファイルが生成されていると思います。

SnapCrab_NoName_2018-2-28_12-12-54_No-00.png

これをUnityのArea > TFModelsフォルダにコピーしましょう
前のときと同様BrainTypeをInternalにし、Graph ModelにAreaPushファイルをセット

SnapCrab_NoName_2018-2-28_12-15-54_No-00.png

結果

10万回学習

Push_Internal_100k.gif

緑のところがゴールということは理解してますが、オレンジの箱がどう関係しているかはわかっていない様子。

50万回学習

Push_Internal_500k.gif

オレンジの箱をゴールに持っていくのを理解した模様

Unityは無料で使え、誰でもクオリティの高いゲームを作ることができるソフトです。
チュートリアル以外にも自分でゲームを作ったり、ほかの人が作ったゲームで強化学習を行うこともできます。

【Unity強化学習】自作ゲームで強化学習

参考

Introducing: Unity Machine Learning Agents

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18