LoginSignup
1
0

More than 1 year has passed since last update.

ML-Agents Python Low Level API入門:Pythonによる環境操作その1

Posted at

はじめに

Pythonによる環境操作編では、ML-AgentsのPython APIを使用して、前回までで作成した環境を操作していきます。その1の記事では、Unity環境を含むアプリケーションのビルドと環境の起動を行います。

環境のビルド

UnityのBuild Settings画面のScenes in Buildに現在作成中の環境を表すシーン、JumpEnvironmentをいれてください。次に、PlatformをWindows, Mac, LinuxからDedicated Serverに変更してください。(Dedicated Serverが選択できない場合、Unity Hubから対応するモジュールをインストールしてください)
image.png
Dedicated Server Buildを行うと、レンダリング画像を用いた学習ができなくなり、また学習の途中経過をUnityの画面を通じて確認することもできなくなりますが、その分オーバヘッドが小さくなります。
Buildを行い、その出力フォルダへ移動します。

注意:ヒューリスティックモードの解除

ここまでこの記事に沿って環境を作成してきた人は、Behavior ParametersBehavior TypeHeuristicになっています。このままではUnityとPythonが通信できませんので、Defaultに戻しておきましょう

成果物の確認

MLAgentsLowLevelAPI.exeが生成されていることが確認できます。これがPythonと通信してくれる環境そのものを表すexeです。
image.png
そして、この出力フォルダがPythonプロジェクトのルートディレクトリになります。この配下にPythonスクリプトを配置して開発を進めていきます。

learn.pyの配置

ここからはPythonを利用した通常のAI開発になります。まず、ルートディレクトリにlearn.pyという空のPythonスクリプトを作成します。ここに学習用コードを書いていきます。それでは、mlagents-envsの最初のコードを以下のように記述します。

learn.py
from mlagents_envs.environment import UnityEnvironment
# 起動したいexeファイルの名前を指定する
env = UnityEnvironment(file_name="MLAgentsLowLevelAPI", seed=1, side_channels=[])
# 環境と通信できることを確認する。具体的な意味は後述する
env.reset()

詳しくは後述しますが、mlagents_envs.environmentは環境操作用のクラスがまとめられてるモジュールです。また、UnityEnvironmentクラスはUnityで作成した強化学習環境を読み込むためのクラスです。
なお、mlagents-envsパッケージの全コードはこのサイトで見ることができます。

スクリプトの実行

先ほど作成したスクリプトを動かすため、Anaconda Promptを起動して以下の操作を行います。

(base) $ conda activate ml-agents
(ml-agents) $ cd Unityのビルドフォルダ兼Pythonプロジェクトのルートフォルダのパス
(ml-agents) $ python learn.py

メモリ状態などを表す大量のログとともに、コマンドが正常終了すれば成功です。

番外編:ウィンドウ付きビルド

ここまででDedicated Server Buildを用いた環境との通信を行いましたが、ウィンドウが出ないことから正しく動いているのか不安になる人もいるかもしれません。そこで、通常のWindows, Mac, Linux用のビルドを使っても正常に環境が起動できることを確認しておきましょう。まずは、Build SettingsからPlatformを切り替えます。
image.png
次に、Player SetingsからPlayer > Resolution and Presentation > Run In Background*とすすみ、チェックを付けます。
image.png
これで準備が完了するので、ビルドしましょう。ビルドしたフォルダにlearn.pyを持っていき、Dedicated Server Buildのときと同じようにpythonコマンドを実行します。

$ python learn.py

Unityのウィンドウが一瞬出現して、learn.pyが終了すると同時にウィンドウも閉じることが確認出来たら成功です。

おわりに

いよいよPython側の実装に入りました。ここから先のコードの書き心地については、ほとんど完全にUnityというゲームエンジンの要素は抽象化されていて、Pythonによる開発といった感じになります。これは、積み重ねられたPythonの資産を利用できるということであり、非常に便利です。

1
0
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
1
0