University OOP Project - 物件導向程式設計期末專案
使用多種強化學習演算法解決經典控制問題與自定義環境
本專案為物件導向程式設計課程的期末專案,包含三個部分,循序漸進地探索強化學習 (Reinforcement Learning) 的應用:
- Part 1: 使用 Q-Learning 解決經典的 Mountain Car 問題
- Part 2: 在 Frozen Lake 環境中實作多種進階 Q-Learning 策略
- Part 3: 從零打造自定義的倉儲機器人環境,並實作 Tabular RL 與 Deep RL (DDQN) 演算法
University_OOP_Project/
├── 📂 Gymnasium/ # Gymnasium 函式庫 (v1.2.2)
├── 📂 part1/ # Mountain Car 專案
│ ├── mountain_car.py # Q-Learning 實作
│ └── run.sh # 執行腳本
├── 📂 part2/ # Frozen Lake 專案
│ └── forzen_lake.py # 多種 Q-Learning 變體實作
├── 📂 part3/ # 倉儲機器人專案 (主要專案)
│ ├── env.py # 自定義 Gymnasium 環境
│ ├── objs.py # 遊戲物件定義
│ ├── Q_agent.py # Tabular RL Agents
│ ├── DDQN_agent.py # Deep RL Agent
│ ├── main.py # 主程式入口
│ └── 📂 sprites/ # 遊戲素材圖片
├── requirements.txt # Python 套件需求
├── install.sh # Mac/Linux 安裝腳本
├── OOP_Poroject_presentation.pdf # PPT 簡報
├── OOP_Poroject_reflection_report.pdf # Reflection Report
└── README.md # 本文件
- 經典強化學習入門問題
- 使用 Q-Learning 搭配狀態離散化
- 支援訓練模式與視覺化渲染
- 8×8 冰湖地圖導航問題
- 實作 7 種不同的 Agent 策略
- 動態超參數調整與 Ensemble 方法
- 自定義倉儲物流模擬環境
- 機器人需在電量限制下收集包裹並送達終點
- 包含動態障礙物(巡邏的狗)、機關(門與按鈕)、地形(泥地、充電站)
- 實作 6 種 RL 演算法:Q-Learning、Dyna-Q、N-Step、Q(λ)、DDQN
| 項目 | 版本 | 說明 |
|---|---|---|
| 作業系統 | macOS / Linux | 跨平台支援 |
| Python | 3.12+ | 建議使用最新穩定版 |
| Gymnasium | 1.2.2 | 強化學習環境框架 |
| PyGame | 2.6.1 | 遊戲渲染與視覺化 |
| NumPy | 2.3.5 | 數值運算 |
| Matplotlib | 3.10+ | 訓練結果繪圖 |
| PyTorch | 2.9+ | DDQN 深度學習 (Part 3) |
| Pillow | 12.0+ | 圖片處理 |
# 1. 複製專案
git clone git@github.com:NroyDev/University_OOP_Project.git
# 2. 安裝
cd University_OOP_Project
chmod +x install.sh
./install.sh# 1. 複製專案
git clone git@github.com:NroyDev/University_OOP_Project.git
cd University_OOP_Project
# 2. 建立虛擬環境
python3 -m venv .venv
# 3. 啟動虛擬環境
source .venv/bin/activate
# 4. 安裝依賴套件
pip install -r requirements.txt
# 或手動安裝:
cd Gymnasium
pip install -e .
pip install "gymnasium[classic_control]"
pip install matplotlib
pip install torchsource .venv/bin/activate
cd part1
# 訓練 Agent (預設 5000 回合)
python3 mountain_car.py --train --episodes 5000
# 測試並視覺化
python3 mountain_car.py --render --episodes 10source .venv/bin/activate
cd part2
# 執行互動式選單
python3 forzen_lake.py互動式選單:
Select Version:
1. Ver 1: 動態 LR/Gamma + 線性 Epsilon 衰減
2. Ver 2: 動態 LR/Gamma + 指數 Epsilon 衰減
3. Ver 3: 動態 Step Penalty
4. Ver 4: 動態 LR/Gamma + 指數 Epsilon 衰減
5. Ver 5: Watkins' Q(λ)
6. Ver 6: Uniform Ensemble
7. Ver 7: Evolutionary Ensemble
Enter choice (1-7):
Mode (train/test):
Render Mode (human/None):
source .venv/bin/activate
cd part3
# 執行主程式
python3 main.py互動式選單:
Select Agent Strategy:
1. Q-Learning (Static Alpha)
2. Q-Learning (Dynamic Alpha)
3. Dyna-Q
4. N-Step Q-Learning
5. Watkins' Q(lambda)
6. DDQN
Enter choice (1-6):
Mode (train/test):
Render Mode (human/None):
| 演算法 | 類型 | 說明 |
|---|---|---|
| Q-Learning | Tabular | 標準的 TD 學習方法,使用 Bellman Equation 更新 Q 值 |
| Dyna-Q | Model-Based | 結合環境模型與 Q-Learning,透過模擬經驗加速學習 |
| N-Step Learning | Tabular | 使用多步回報更新 Q 值,平衡 TD 與 Monte Carlo 方法 |
| Watkins' Q(λ) | Tabular + Trace | 結合 Eligibility Traces,當選擇非貪婪動作時截斷 trace |
| DDQN | Deep RL | 使用兩個神經網路解決 Q-Learning 的過高估計問題 |
BaseFrozenLakeAgent (抽象類別)
├── StandardQAgent # 標準 Q-Learning (Ver 1-4)
├── WatkinsQLambdaAgent # Q(λ) 演算法 (Ver 5)
└── EnsembleAgent # 集成式學習 (Ver 6-7)
環境架構:
DeliveryRobotEnv (gym.Env)
└── GridWorld
├── DeliveryRobot # 機器人 (pos, energy, payload)
├── Dog # 動態障礙物
├── Package # 包裹
├── Door # 門
├── PressurePlate # 按鈕
├── Charger # 充電站
└── Mud # 泥地
Agent 架構:
QLearningAgent (基底類別)
├── DynaQAgent # Model-Based
├── NStepAgent # N-Step 學習
├── QLambdaAgent # Q(λ)
└── DDQNAgent # Deep RL
| 姓名 | 學號 | 貢獻內容 |
|---|---|---|
| 李瑋宸 | B123245008 | Part 3: DDQN Agent、Environment Bug fix、README、PPT、Reflection Report、report |
| 高紹綸 | B123040012 | Part 2、Part 3: varient Q-Learning Agents、README、PPT、Reflection Report |
| 賴建愷 | B123040014 | Part 2、Part 3: Basic Q-learning agent、Environment implement、code merge、UML |