Q-Learningアルゴリズムを使用して迷路を解く強化学習エージェントのインタラクティブなデモアプリケーションです。Streamlitを使用してWeb上で学習過程を可視化できます。
- インタラクティブな学習: パラメータをリアルタイムで調整して学習プロセスを観察
- 可視化: 迷路環境、Q値ヒートマップ、学習統計グラフ
- アニメーション: 学習済みエージェントの最適経路をステップバイステップで表示
- Q-Learning: シンプルで理解しやすい強化学習アルゴリズム
アプリケーションでは以下の機能を提供します:
- 10×10のグリッド迷路環境
- 学習率、割引率、探索率などのパラメータ調整
- エピソードごとの累積報酬とステップ数の可視化
- Q値のヒートマップと最適方策の矢印表示
- 学習済みエージェントのデモ再生
- Python 3.11以上
- uv (高速Pythonパッケージマネージャー)
curl -LsSf https://astral.sh/uv/install.sh | shpowershell -c "irm https://astral.sh/uv/install.ps1 | iex"# プロジェクトディレクトリに移動
cd rl-maze-demo
# 依存関係をインストール
uv sync# srcディレクトリに移動してStreamlitアプリを起動
cd src
uv run streamlit run app.pyまたは、プロジェクトルートから実行する場合:
# Streamlitアプリを起動(srcディレクトリを指定)
cd src && uv run streamlit run app.pyブラウザが自動的に開き、アプリケーションが表示されます(通常は http://localhost:8501)。
-
パラメータ設定: サイドバーで学習パラメータを調整
- 学習率 (α): Q値の更新速度を制御
- 割引率 (γ): 将来の報酬の重要度を制御
- 探索率 (ε): ランダム探索の確率を制御
- エピソード数: 学習の反復回数
-
学習開始: 「学習開始」ボタンをクリック
- 進捗バーで学習の進行状況を確認
- 完了後、Q値ヒートマップと統計が表示されます
-
結果確認:
- 迷路ビューでスタート(S)とゴール(G)を確認
- Q値ヒートマップで学習された価値を確認
- 統計グラフで学習の収束を確認
-
デモ再生: 「最適経路を表示」ボタンで学習済みエージェントの動きを確認
- 速度スライダーでアニメーション速度を調整可能
rl-maze-demo/
├── .python-version # Python バージョン固定
├── pyproject.toml # uv 設定ファイル
├── README.md # このファイル
├── src/
│ ├── __init__.py
│ ├── app.py # Streamlit メインアプリ
│ ├── environment.py # 迷路環境クラス
│ ├── agent.py # Q-Learning エージェント
│ └── visualizer.py # 可視化ユーティリティ
└── .claude/
└── mcp.json # MCP サーバー設定
このプロジェクトでは、Claude Codeの開発効率を向上させるために以下のMCPサーバーを設定しています。
-
serena - IDE Assistant
- ソース:
git+https://github.com/oraios/serena - 機能: ファイル操作、ドキュメント検索、プロジェクト構造の把握
- コンテキスト: ide-assistant
- ソース:
-
filesystem - ファイルシステム操作
- パッケージ:
@modelcontextprotocol/server-filesystem - 機能: プロジェクトディレクトリのセキュアなファイル操作
- 対象:
/home/user/test-maze-claude-code
- パッケージ:
-
memory - ナレッジグラフ
- パッケージ:
@modelcontextprotocol/server-memory - 機能: 会話間での情報の永続化、コンテキストの記憶
- パッケージ:
設定は .claude/mcp.json で管理されています。Claude Codeを起動すると、これらのMCPサーバーが自動的に起動し、mcp__プレフィックスで始まるツールとして利用可能になります。
Q-Learningは、モデルフリーの強化学習アルゴリズムで、エージェントが環境との相互作用を通じて最適な行動方策を学習します。
Q(s,a) ← Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]
Q(s,a): 状態sで行動aを取った時の価値α: 学習率r: 即時報酬γ: 割引率s': 次の状態
- ゴール到達: +100
- 壁衝突: -10
- 通常移動: -1
この報酬設定により、エージェントは最短経路でゴールに到達することを学習します。
- Python: 3.11+
- Streamlit: Webアプリケーションフレームワーク
- NumPy: 数値計算
- Matplotlib: 静的可視化
- Plotly: インタラクティブグラフ
- Pandas: データ処理
- uv: パッケージ管理
src/app.pyの以下の行を変更してください:
st.session_state.env = MazeEnvironment(size=10, wall_ratio=0.2)size: グリッドサイズ (デフォルト: 10)wall_ratio: 壁の割合 (デフォルト: 0.2 = 20%)
src/environment.pyのstepメソッド内で報酬値を変更できます。
このプロジェクトはデモ目的で作成されています。
- Watkins, C.J.C.H. (1989). "Learning from Delayed Rewards"
- Sutton, R. S., & Barto, A. G. (2018). "Reinforcement Learning: An Introduction"