だいぶ前だが強化学習の勉強を始めた頃、簡易環境としてよく迷路を使っていた
方策勾配法とニューラルネットワークで迷路を学習 - MEMOcho-
当時私は気づいてなかったが、そのくらいの時期から同じ用途で使える便利なminigridという環境があったようなのでメモ
自前で定義したlayout(単純な迷路のみ)やpredefinedな環境上で手動で動かしてみるための簡単なスクリプト例
https://github.com/y-kamiya/machine-learning-samples/blob/2f2ae8eb7b864cea38d3d2acb2aaf5c52752c32b/python3/reinforcement/minigrid-samples/run_manual.py
できること
- 2d grid上をplayerが動き回る強化学習用の研究環境
- gymnasiumの形で使える
- 壁、ドア、鍵、ボールなどを自由に配置して環境のlayoutが可能
- predefinedの環境も多く用意されている
- 簡易なguiが存在して可視化が簡単
- 前方の範囲のみ観測として取得する形も可能
action space
とても単純でこれだけ
https://github.com/Farama-Foundation/Minigrid/blob/fc41b5e/minigrid/core/actions.py
- 移動系
- turn left/right, forward
- 実際の移動はforwardのみで後は向きを変えるのみ
- object interaction系
- pickup, drop, toggle
- toggleの典型例はドアの開閉、dropはobjectを置く
- 特殊系
- done
- agent側で完了を宣言する場合に利用(特定の環境でのみ)
reward
得られる条件としては
- goalに到達すると報酬を得られるというのが基本的な設定
- 環境によっては特定の状態に到達すると報酬が得られるものもある
- ex. 黄色のボールの横に黄色の鍵を置く
rewardの大きさは得られるまでにかけたstep数によって線形に減少していく
https://github.com/Farama-Foundation/Minigrid/blob/5165f40/minigrid/minigrid_env.py#L245
return 1 - 0.9 * (self.step_count / self.max_steps)
実装としては、こちらにある環境毎の定義に必要なら成功条件を入れている形
https://github.com/Farama-Foundation/Minigrid/tree/5165f40122c8ffc24cfd04e1333995c37a56a97e/minigrid/envs
例えば、能動的にdoneをactionとして使い成功条件を判定している環境例
https://github.com/Farama-Foundation/Minigrid/blob/5165f40122c8ffc24cfd04e1333995c37a56a97e/minigrid/envs/gotoobject.py#L155-L158
if action == self.actions.done:
if (ax == tx and abs(ay - ty) == 1) or (ay == ty and abs(ax - tx) == 1):
reward = self._reward()
mission
自然言語で記述されたタスク目的を表す文字列としてmissionというものが存在している https://github.com/Farama-Foundation/Minigrid/blob/5165f40122c8ffc24cfd04e1333995c37a56a97e/minigrid/envs/gotoobject.py#L20-L26
- 環境上で動作するagent向けの情報としてobservationの一部として含まれている
- 純粋にRLを行う場合はobsからimageのみを使ったりするためmissionは無視されることも多い
- 人間向けの情報としてGUI上で表示される
特にbabyaiだと、言語情報を正しく読み取る部分も主要な要素として研究されているため重要な要素だが、単純にminigrid環境を利用するという意味では必要ない。
新しく自前の環境を作りたい場合、missionの定義と具体的な成功条件判定をあわせるのは環境実装側の責任となる。
predefinedの環境
defaultで用意されているenvironments
https://minigrid.farama.org/environments/minigrid/
何もないempty環境から、鍵を拾ってドアを開ける、複数の部屋に分かれた広めのマップなど様々。それぞれの環境毎に成功条件が定義されている。
babyaiで使われた環境も現在はこの一部となっていて、minigridより複雑な環境も同様の形式で使える
https://github.com/Farama-Foundation/Minigrid?tab=readme-ov-file#babyai
自前での環境layoutの具体的な方法
https://minigrid.farama.org/content/create_env_tutorial/



