Unity ML-Agentsの学習シナリオ(2)

Unity ML-Agentsでは「Agemt」「Brain」「Reward」の組み合わせによっていろいろな学習シナリオを実現することができます。

  • Cooperative(協同) Multi-Agent
    「共有報酬」を受け取る複数のAgentに、1つまたは複数のBrainがリンクされている学習シナリオです。
    複数のAgentが協力して1つのタスクを解決します。
    (例)部分的な情報にしかアクセスできないAgentが共同でパズルを解く。
  • Competitive(競争) Multi-Agent
    「逆報酬」を受け取る複数チームの敵対した複数のAgentが1つまたは複数のBrainにリンクされている学習シナリオです。
    Agentが競争に勝つか、または限られた数のリソースを獲得するために互いに競争します。
    (例)サッカーのストライカーとゴールキーパー
  • Ecosystem(生態系)
    「独立報酬」を受け取る複数のAgentが1つまたは複数のBrainにリンクされている学習シナリオです。
    さまざまな目標を持つAgentが相互に作用する小さな世界を創造します。
    (例)サバンナの中の動物たちの自立シミュレーション

Unity ML-Agentsの学習シナリオ(1)

Unity ML-Agentsでは「Agemt」「Brain」「Reward」の組み合わせによっていろいろな学習シナリオを実現することができます。

  • Single-Agent
    1つのAgentに1つのBrainがリンクされている学習シナリオです。
    一番シンプルなシナリオで、シングルプレイヤーゲームがこれにあたります。
  • Simultaneous(同時) Sigle-Agent
    「独立報酬」をもらう複数のAgentが1つのBrainにリンクされている学習シナリオです。
    Single-Agentの並列化バージョンで、スピードアップと安定化ができるようになります。
    ナルトが多重影分身で修行しているような感じです。
  • Adversarial(敵対) Self-Play
    「逆報酬」をもらう敵対した2つのAgentが1つのBrainにリンクされている学習シナリオです。
    2人プレイのゲームでAgent同士を対戦させることで学習を行うようなケースがこれに適応します。
    (例)テニスのプレイヤー

Unity ML-AgentsのBrain

Agentが観測した状態に応じて、行動を決定するオブジェクトとなります。
1つのBrainで複数のAgentsの行動を決定することもできます。
Brainには下記の4種類があります。

1.External

外部の自作MLライブラリ(Tensorflowなど)を使用します。
学習時に設定されます。

2.Internal

プロジェクトに埋め込まれた推論モデルを使用します。
推論時に設定されます。

3.Player

プレイヤー(人間)の入力に従って行動します。
学習環境の動作確認時などに利用します。

4.Heuristic

ルールベース(プログラム)に従って行動します。

Unity ML-Agentsのプロセス

Unity ML-Agentsは、Unityで機械学習の学習環境を構築するためのフレームワークです。
Unity ML-Agentsでの2プロセスに関して説明します。

学習プロセス

学習用Pythonスクリプトが学習環境となるUnityで強化学習を行います。
学習結果は推論モデルとして保存されます。

推論プロセス

学習結果となる推論モデルをつかってUnityで動作します。
推論モデルは与えられたデータから推論結果を導き出すものです。

Unity ML-Agents V0.4.0bがなんとか動くようになった件

強化学習を実践していく上でシミュレータが必要なことがわかり、シミュレータとしてはUnityが便利だということがわかり、さらにUnity ML-Agentsを使うとPythonからUnityを動作させることが分かりました。
そして参考文献を探したところ目的にはまった下記の書籍を見つけましたがバージョンが古いせいでしょうか、まったく動作させることができずしばらく放置していました。

しかしなんとか動作させることができるようになったので備忘録としてまとめておきます。

Pythonで学ぶ強化学習 -入門から実践まで- サンプルコード

【手順1】Unityインストール

書籍(P.41)にしたがってUnityをインストールします。
私の環境ではUnityのバージョンは2017.3.1f1 (64-bit)を使用しました。

【手順2】Unity ML-Agents v0.4.0bダウンロード

サポートサイトに記載されていますが、下記のリンクからUnity ML-Agents v0.4.0bをダウンロードします。
https://github.com/Unity-Technologies/ml-agents/tree/0.4.0b

※2019/11/16現在の最新バージョンは0.11なのでかなり古いバージョンです。

【手順3】TensorFlowSharpプラグインダウンロード

書籍(P.42)にしたがってTensorFlowSharpプラグインをダウンロードをインストールします。


【手順4】Pythonインストール

書籍(P.43)にしたがってPythonをインストールし、仮想環境を構築します。
Pythonバージョンは3.6で問題ありません。

【手順5】Pythonパッケージインストール

書籍(P.44)に該当する箇所ですが、【手順2】でダウンロードしたファイルを使ってPythonパッケージをインストールします。
ダウンロードしたものの中にpythonフォルダがありますのでそのフォルダに移動してインストールコマンドを実行します。

1
2
cd (ダウンロードした中のpythonフォルダ)
pip install .

【手順6】Numpyバージョン変更

ここが一番はまったポイントでした。
Numpyのバージョンは1.17.4がインストールされていたのですがこれを1.14.5に落とします。

1
2
pip uninstall numpy
pip install numpy==1.14.5

(動作確認時に配列関連エラーでExceptionが発生していたのでnumpyのバージョンを疑い、結果動作させることができるようになりました。)


【手順7】プロジェクト設定

書籍(P.47~P.49)にしたがってプロジェクトの設定を行います。

【手順8】Unity Editorで動作確認

書籍(P.50~P.52)のexeを作っての実行はうまくいかないのであきらめました。
書籍(P.63)「Unity Editor上での学習」の方を実行したところ問題なく動作確認できました。

以上で一通り書籍に書かれているサンプルを実行させることができるようになります。

もしこれでもうまくいかない場合のため、動作確認ができた環境のライブラリバージョン一覧を書いておきますので、参考にして頂ければと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
> pip list
Package Version
------------------ -------------------
absl-py 0.8.1
astor 0.8.0
atomicwrites 1.3.0
attrs 19.3.0
backcall 0.1.0
bleach 1.5.0
certifi 2019.9.11
colorama 0.4.1
cycler 0.10.0
decorator 4.4.1
defusedxml 0.6.0
docopt 0.6.2
entrypoints 0.3
gast 0.3.2
grpcio 1.11.0
html5lib 0.9999999
importlib-metadata 0.23
ipykernel 5.1.3
ipython 7.9.0
ipython-genutils 0.2.0
ipywidgets 7.5.1
jedi 0.15.1
Jinja2 2.10.3
jsonschema 3.1.1
jupyter 1.0.0
jupyter-client 5.3.4
jupyter-console 6.0.0
jupyter-core 4.6.1
kiwisolver 1.1.0
Markdown 3.1.1
MarkupSafe 1.1.1
matplotlib 3.1.1
mistune 0.8.4
more-itertools 7.2.0
nbconvert 5.6.1
nbformat 4.4.0
notebook 6.0.2
numpy 1.14.5
packaging 19.2
pandocfilters 1.4.2
parso 0.5.1
pickleshare 0.7.5
Pillow 6.2.1
pip 19.3.1
pluggy 0.13.0
prometheus-client 0.7.1
prompt-toolkit 2.0.10
protobuf 3.5.2
py 1.8.0
Pygments 2.4.2
pyparsing 2.4.5
pyrsistent 0.15.5
pytest 5.2.3
python-dateutil 2.8.1
pywin32 227
pywinpty 0.5.5
PyYAML 5.1.2
pyzmq 18.1.1
qtconsole 4.5.5
Send2Trash 1.5.0
setuptools 41.6.0.post20191030
six 1.13.0
tensorboard 1.7.0
tensorflow 1.7.1
termcolor 1.1.0
terminado 0.8.3
testpath 0.4.4
tornado 6.0.3
traitlets 4.3.3
unityagents 0.4.0
wcwidth 0.1.7
Werkzeug 0.16.0
wheel 0.33.6
widgetsnbextension 3.5.1
wincertstore 0.2
zipp 0.6.0

私と同じように動作確認をあきらめてしまった方の一助になれば幸いです。


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×