daruma3940の日記

理解や文章に間違い等あればどんなことでもご指摘お願いします

Unityのml-agents使ってみた

github.com
f:id:daruma3940:20160520223745p:plain

Unityのml-agents使ってみたので忘れる前に記録しておこうじぇ??


.......


......


...
f:id:daruma3940:20160520223745p:plain

もう忘れたwww





とりあえず記憶を呼び起こしながらでも今書いておかないとあとからまた思い出すのに手間取ってしまうのでがんばれ自分!!!

とりあえず上のリンクにあるwikiを見ながらやっていけば基本いける

Unityで作った環境(実行ファイルは ml-agents\pythonに置くのが安全(exeファイルだけじゃなくてDataフォルダも一緒に置かないと動かないので注意な)
env_name
には
env_name = "TestBall2"
みたいな感じで実行ファイルから.exeを除いた名前を置いておく。ちょっとわかりにかった(ソースコード読んで理解した。)
この指定の仕方が嫌ならソースコードを改変すればよろし

学習するときはBrain(Script)のType of BrainをExternalにしておく。
Type of brainのtypeにはPlayer, Hulistic, External, Internalの4タイプがある。
PlayerはPlayer Actionを決めることで人間が動かすモード
Hulisticは手で書いたコードを動かすモード
Externalは学習するときのモード
Internalは学習させたモデルを使って動かすときのモード
InternalモードはTensorFlow# AssetをUnity Projectに入れて PlayerSettingのScripting Define SymbolにENABLE_TENSORFLOWを追加して Scripting Runtime VersionをExperimental(.Net4.6)にしないといけないはず


自分の作った環境で
学習させたりするのは大変そうに見えるかもしれないけどそんなに難しくないはず
AcademyとAgentとDecisionを作成した環境に合わせて弄ってやるだけでいい。
ML-AgentをgithubからダウンロードしてきたところについてるTemplateフォルダに雛形があるのでそれを弄れば基本出来るはず


CollectState()関数でStateにおける特徴をリストにして返す{{Brain(Script) InspectorのStateSizeはここの特徴の数を入力する}}
AgentStep(float[] act),AcademyStep()はFixedUpdate()で毎回呼ばれる処理を記述する
Agent.done=trueで今回の試行が終わったフラグを立てる
AgentReset(),AcademyReset() はdone=trueになった後次の試行へ移るときに呼び出される
Agent.rewardは報酬
Decisionについてはよくわかってない

学習時にはml-agents\python内のppo.pyかPPO.ipynbを使えばいい
exeファイルのレスポンスがタイムアウトすることがよくあった。私の場合jupyter notebookを再起動したらタイムアウトしなくなったのでよくわからない。


wikiにはSplashImage(ゲームを開始したときに出てくるロゴ)の表示はOFFにしておけと書いているが、nonProUnityではオフにできないしONにしてても起動に時間がかかるようになるだけでちゃんと動くから大丈夫。

AndoridでInternalmodeを動かすことに成功したのでこれを利用したAndroidアプリも作れる

f:id:daruma3940:20160520223745p:plain
まあwikiに書いてないことで特記しておくことはこれぐらいかだじぇ...????