Skip to content

NroyDev/University_OOP_Project

Repository files navigation

倉儲機器人強化學習專案

University OOP Project - 物件導向程式設計期末專案
使用多種強化學習演算法解決經典控制問題與自定義環境

Python Version Gymnasium License


目錄


專案簡介

本專案為物件導向程式設計課程的期末專案,包含三個部分,循序漸進地探索強化學習 (Reinforcement Learning) 的應用:

  1. Part 1: 使用 Q-Learning 解決經典的 Mountain Car 問題
  2. Part 2: 在 Frozen Lake 環境中實作多種進階 Q-Learning 策略
  3. 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               # 本文件

功能特色

Part 1: Mountain Car

  • 經典強化學習入門問題
  • 使用 Q-Learning 搭配狀態離散化
  • 支援訓練模式與視覺化渲染

Part 2: Frozen Lake

  • 8×8 冰湖地圖導航問題
  • 實作 7 種不同的 Agent 策略
  • 動態超參數調整與 Ensemble 方法

Part 3: Warehouse Robot

  • 自定義倉儲物流模擬環境
  • 機器人需在電量限制下收集包裹並送達終點
  • 包含動態障礙物(巡邏的狗)、機關(門與按鈕)、地形(泥地、充電站)
  • 實作 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 torch

使用方式

Part 1: Mountain Car

source .venv/bin/activate
cd part1

# 訓練 Agent (預設 5000 回合)
python3 mountain_car.py --train --episodes 5000

# 測試並視覺化
python3 mountain_car.py --render --episodes 10

Part 2: Frozen Lake

source .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): 

Part 3: Warehouse Robot (倉儲機器人)

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 的過高估計問題

專案架構

Part 2: Frozen Lake

BaseFrozenLakeAgent (抽象類別)
├── StandardQAgent        # 標準 Q-Learning (Ver 1-4)
├── WatkinsQLambdaAgent   # Q(λ) 演算法 (Ver 5)
└── EnsembleAgent         # 集成式學習 (Ver 6-7)

Part 3: Warehouse Robot

環境架構:

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

About

It is the Group Project of Object Oriented Programming Class

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages