AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

ML-Agentsで強化学習サンプル動かしてみる

qiita.com

この記事を参考にml-agentsのサンプルを動かしてみた

  1. Python(Anaconda3)をインストール

Release ML-Agents Release 3 · Unity-Technologies/ml-agents · GitHub
これをDLして、解凍し、

  1. Anaconda上で動くPowerShellを使って、以下をインストール
pip3 install -e ./ml-agents-envs
pip3 install -e ./ml-agents
  1. Unity用のML-agentsのプロジェクトをUnity2018.4に読み込んで、3dballサンプルを動かしてみる

これは学習結果で動いているので学習はしてない
3dballのPrefabsの3DBallをダブルクリックしてagentのmodelの学習結果をnoneにして無学習状態にする
PowerShell上で、

mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun

学習側を実行。学習の定義はyamlファイルらしい。
コンソールにUnityのPlayを押せと出るので、学習を開始する
Unity側の学習エージェントとLearn側はport5004を使って通信してる模様

f:id:yasu9780:20201014185723g:plain
Unity側の学習中のagentの挙動

ボールを落とさないように箱が必死に動く

f:id:yasu9780:20201014185815g:plain
ml-learn側の学習の様子

ステップが進むにつれて、強化学習の報酬が増えていく
unity側を止めるまで学習が続く。

492000ステップまで進んで学習の報酬が100に達したので、learn側からUnity側へ終了が働いた。
結果は、results/first3DBallRunの中に3DBall.nnとして出来ていた
nnはニューラルネットワークの略かな?


初めport5004と通信できなくて、Unity側がTImeOutErrorになってたんだけど、いつのまにかエラーにならなくなった
まずLearn側を動かして、次にUnity側を動かす。順番を逆にしてport接続エラーになってた気がする

cudaが使えるらしいがうちはRadeonなので無いです。・゚・(ノ∀`)・゚・。 
Radeon使って学習できるソースもあるらしいけど、試した人がCPUより遅くなったって書いてた

二人vs二人のサッカーの強化学習サンプル

f:id:yasu9780:20201014210511p:plain

見てる限りかなり学習が遅い。ボールすら触らずにうろうろしてるだけに見える
かなり時間がかかりそうだ
自己対戦学習なんで報酬が役立たず、ELOを指標に学習が進むらしい
ELOってチェスのレーティングと同じやつ?

学習開始はサッカー用の定義ファイルを指定して実行する

mlagents-learn config/ppo/SoccerTwos.yaml --run-id=firstSoccerRun

学習経過を確認できる
f:id:yasu9780:20201014213048p:plain
右側は一回のプレイ時間。長ければいいもんでもない。左は累積報酬で上がっていけばいいらしい
なかなか表示させられなかったが、Resultsの中のFirstSoccerRunの中のSoccerTwosフォルダー内にライブの情報があるので
そこを指定してTENSORBOARDを実行する