■ はじめに

前回は LunarLander(月面着陸)に挑戦して、PPO と報酬設計でなんとか“旗の枠内に着地”までこぎつけました。

そして今回、ChatGPT さんと相談して次のステップに選んだのが、MiniGrid(ドア無し) です。

「月面から、いよいよ迷路へ!」という感じでワクワクしながら挑戦開始!



■ まず最初の壁:環境トラブルとの戦い

MiniGrid の前に…まずは 環境構築でハマる!
これ、強化学習あるあるですね。

ここでは、私がガッツリつまずいたポイントをまとめます。

⚫ 1. 学習環境は壊れやすい(ほんまに)

ChatGPT さんはよく
「何回もインストールするの鬱陶しいやろ?」
と言って import だけで済ませようとするんですが…

MiniGrid はエラーが出ると簡単に環境が壊れます。

なので、面倒でも毎回これを実行リストに入れた方が安全。

!pip install gymnasium minigrid stable-baselines3 imageio

依存関係エラーが出ると MiniGrid が起動しなくなるので、“とにかく最新版セットを毎回入れ直す” が安心。

⚫ 2. MiniGrid のサイズは「決まったものだけ」

MiniGrid-Empty 系のマップは サイズの種類が決まってます。

MiniGrid-Empty-5x5-v0
MiniGrid-Empty-6x6-v0
MiniGrid-Empty-8x8-v0
MiniGrid-Empty-16x16-v1(←ここだけ v1)

7×7 とか 10×10 は存在しません。

……知らずに指定して、しっかりエラーをもらいました。(数字をいじると地味に爆発するタイプの罠)

⚫ 3. 学習が正しいかどうか判断するまで時間がかかる

MiniGrid(Empty-8x8)の PPO(CnnPolicy)で学習したとき、ChatGPT さんと何度も検証して、だいたいこんな感じの成長でした👇

20k   ほぼランダムで迷子
50k   迷いながらも時々ゴール
100k   ゴール率 50% 前後
200k   ほぼ確実にゴール
300k+   ゴールへ一直線(完全に理解)

※ステップ数はエピソード数とは関係なし
(例:150k ステップで 約 750エピソード ぐらい)

CNN は画像から特徴を学ぶので、
「安定して物を理解するまでの助走期間」が長い のが特徴やね。

■ CNNってなに?MiniGridではどう使うの?

MiniGrid は画像ベースの環境なので、モデルは CnnPolicy を使います。

私のコードだと、指定はこれだけ。

model = PPO("CnnPolicy", env, verbose=1)

強化学習フレームワーク Stable-Baselines3 では
“どのニューラルネットを使うか” を名前で選ぶ仕組みになってます。

Policy 役割の意味

MlpPolicy 普通の全結合ニューラルネット
CnnPolicy 画像処理(MiniGridはこれ)
MultiInputPolicy 辞書型観測スペース用

CnnPolicy の中身(畳み込み層など)は ライブラリ内部に実装されていて、ユーザーが直接変更できません。指定するだけで勝手に働いてくれます。

ありがたいけど、「痒いところに手が届かへん」感じもあるやつ。

■ 結果:バグとエラーの向こうにゴールがあった!

最終的に、MiniGrid(ドア無し)はちゃんとゴールできました!

完成したコード→Githubにリンク

・100k だとゴール直前で止まる“惜しい挙動”も発生
・150k 以上だと安定してゴールに突っ込む

動画も撮影(ゴールへ一直線に走り込む動画)


やったーーーー!!🎉

■ 今回の学び

MiniGrid は想像以上に “環境構築の沼” が深い

CNN を使うと学習が安定するまで時間がかかる

でも PPO はやっぱり強い!(設定ほぼデフォルトでも動く)

「わかったつもり」だったバージョン管理の大切さを思いっきり痛感しました……。

■ まとめ

今回は MiniGrid(ドア無し)× PPO(CnnPolicy) に挑戦しました。

・ハマりポイントが多い
・でも学習は安定して強くなる
・報酬はデフォルトのままでも攻略可能

次は キーとドアありバージョン に挑戦したいところですが、ちょっと準備が必要そう……。

もう少し勉強してから、また ChatGPT さんと挑戦します!