HalfCheetah-v4 환경에서 200만 타임스텝 학습 후 평가한 최종 성능 비교 결과입니다.
| Algorithm | Mean Reward | Std Reward | Min~Max Reward | Training Time | Episode Length | 특징 |
|---|---|---|---|---|---|---|
| PPO | 2680.12 | 136.29 | 2264.86 ~ 2885.65 | 1749.44s | 1000.0 | 🏆 최고 성능, 안정적 |
| SAC | 2070.80 | 3.86 | 2065.42 ~ 2080.77 | 29790.83s | 225.45 | 매우 안정적, 학습 시간 길음 |
| DDPG | 1963.17 | 108.03 | 1555.87 ~ 2011.77 | 8535.78s | 250.15 | 안정적, 중간 성능 |
| A2C | 1659.32 | 18.39 | 1628.57 ~ 1698.37 | 724.66s | 821.80 | 빠른 학습, 효율적 |
| VPG | -223.79 | 52.94 | -403.80 ~ -180.68 | 1398.92s | 178.55 | 낮은 성능 |
| REINFORCE | -144830.79 | 22316.23 | -184965.82 ~ -97390.12 | 3343.24s | 50.60 | 매우 낮은 성능, 불안정 |
실험 설정: HalfCheetah-v4, Forward Constraint, 총 2,000,000 타임스텝
전체 실험 결과: 📦 Google Drive 링크 (모델 파일, 비디오, 상세 데이터 포함)Google Drive에는 다음 내용이 포함되어 있습니다:
- 학습된 모델 파일들 (
models/폴더: 각 알고리즘의model.pth,config.json,training_stats.json)- 비디오 렌더링 파일들 (
videos/폴더: 각 알고리즘의.mp4파일)- 성능 비교 그래프 (
comparison_plots.png)- 상세 결과 데이터 (
results.json,summary_table.csv)- 사용 가이드 (
README.md)
성능 순서대로 알고리즘별 학습된 정책의 동작을 비교할 수 있습니다.
|
PPO Mean Reward: 2680.12
|
SAC Mean Reward: 2070.80
|
|
DDPG Mean Reward: 1963.17
|
A2C Mean Reward: 1659.32
|
|
VPG Mean Reward: -223.79
|
REINFORCE Mean Reward: -144830.79
|
- PPO가 가장 높은 성능(2680.12)을 달성하며, 큰 rollout(
n_steps=4096)과 엔트로피 보너스(ent_coef=0.01) 조합이 효과적이었습니다. 그러나 시각적으로 결과 확인 시 action 형태가 불안정합니다. - SAC는 가장 안정적인 성능(표준편차 3.86)을 보였으나 학습 시간이 가장 깁니다.
- A2C는 병렬 환경(
n_envs=8)과 엔트로피 강화(ent_coef=0.025)로 빠르고 효율적인 학습을 달성했습니다. - REINFORCE와 VPG는 연속 제어 문제에서 baseline 부재로 인한 높은 분산으로 인해 낮은 성능을 보였습니다.
MuJoCo 기반 로봇 환경(HalfCheetah-v4)에서 여러 강화학습 알고리즘을 학습하고 성능을 비교·시각화하는 프레임워크입니다.
- 공통 인터페이스:
BaseRLAlgorithm을 통해 알고리즘을 손쉽게 교체하거나 확장 가능 - 재현성: 실험 결과를 동일한 형식으로 저장하여 보고서 작성 및 재현 용이
- 시각화: 학습 곡선, 성능 비교 그래프, 비디오 렌더링 지원
본 프레임워크는 다음 알고리즘들을 지원합니다:
- REINFORCE: Monte Carlo Policy Gradient - 에피소드 전체를 사용한 정책 그래디언트, baseline 없음
- VPG (Vanilla Policy Gradient): Baseline을 사용한 정책 그래디언트로 분산 감소
- A2C (Advantage Actor-Critic): Actor-Critic 구조에 병렬 환경을 활용한 샘플 효율 향상
- PPO (Proximal Policy Optimization): 정책 클리핑을 통한 안정적인 on-policy 학습
- DQN/DDQN: 이산 행동 공간용 Q-learning 기반 알고리즘
- DDPG (Deep Deterministic Policy Gradient): 연속 행동 공간용 Actor-Critic, 타깃 네트워크와 리플레이 버퍼 사용
- SAC (Soft Actor-Critic): Maximum Entropy RL로 탐색과 안정성 균형
| 특성 | On-Policy (PPO, A2C) | Off-Policy (SAC, DDPG) |
|---|---|---|
| 샘플 효율 | 낮음 (새로운 샘플만 사용) | 높음 (과거 경험 재사용) |
| 학습 안정성 | 높음 (최신 정책으로만 학습) | 중간 (오래된 경험 사용 가능) |
| 병렬화 | 용이 (병렬 환경 활용) | 어려움 (리플레이 버퍼 공유) |
| 연속 제어 | 적합 | 매우 적합 |
- On-Policy:
REINFORCE,VPG,A2C,PPO - Off-Policy:
DQN,DDQN - Actor-Critic (Continuous):
DDPG,SAC
- 다수 알고리즘을 동일 환경에서 학습/평가 (
train_compare.py) - 실험 결과 시각화 및 비디오 기록 (
visualize.py) - HalfCheetah 전용 제약 래퍼(
env_wrappers.py)를 통한 동작 제한 옵션 - TensorBoard 로깅 및 자동 결과 저장
- Python 3.9+
- MuJoCo 런타임 (Gymnasium MuJoCo 환경 사용 시 필수)
pip install "gymnasium[mujoco]"실행 시 자동 설치 - GPU가 있으면 자동으로 CUDA를 사용 (없으면 CPU로 fallback)
- Headless Linux에서 MuJoCo를 사용하려면 OpenGL 백엔드(osmesa/egl)가 필요합니다.
# Conda 환경 생성 (Python 3.9+)
conda create -n rl_env python=3.9
conda activate rl_env
# pip로 Python 패키지 설치
pip install -r requirements.txt
# GPU가 있고 EGL을 사용할 경우 (권장, visualize.py는 기본적으로 EGL을 먼저 시도)
# EGL은 자동으로 시도되므로 별도 설정 불필요
# 수동 설정이 필요한 경우:
# export MUJOCO_GL=egl
# export PYOPENGL_PLATFORM=egl
# GPU 없이 소프트웨어 렌더링만 사용하는 경우
conda install -c conda-forge osmesa
export MUJOCO_GL=osmesa
export PYOPENGL_PLATFORM=osmesavisualize.py는 headless 환경에서 자동으로 EGL을 먼저 시도합니다 (실패 시 rgb_array 모드로 전환).train_compare.py는 기본적으로 osmesa를 사용합니다.- 위 환경 변수는
python train_compare.py ...실행과 같은 터미널 세션에서 설정해야 합니다.
RL-REVIEW01/
├── algorithms/ # 알고리즘 구현
├── asserts/videos/ # 알고리즘 최종 결과 동영상
├── env_wrappers.py # HalfCheetah 제약 환경
├── config.yaml # 실험 설정
├── train_compare.py # 학습/비교 스크립트
├── visualize.py # 시각화 스크립트
├── results/ # 실험 결과 (자동 생성)
└── docs/ # 보고서
environment: Gymnasium 환경 ID, 제약 옵션, 병렬 환경 수 등training: 총 스텝 수, 평가 빈도, 시드, 디바이스algorithms: 알고리즘별 하이퍼파라미터 (Stable-Baselines3 및 PyTorch 구현 혼재)logging: 로그/결과/비디오 저장 경로, TensorBoard 옵션
필요 시 config.yaml을 복사해 커스텀 설정을 만들고 --config로 지정하세요.
# 기본 설정 + 모든 알고리즘 학습
python train_compare.py
# 특정 알고리즘만 학습
python train_compare.py --algorithms PPO SAC
# 커스텀 설정 사용
python train_compare.py --config custom_config.yaml- 학습 중 주기적으로 평가를 수행하고, 종료 후 요약본(
summary_table.csv)과 비교 그래프(comparison_plots.png)를 생성합니다.
python visualize.py --experiment-dir results/experiment_YYYYmmdd_HHMMSS
# 옵션: --algorithm PPO, --record-video, --learning-curves, --render-mode rgb_array- 디스플레이가 없는 Linux 서버에서는 자동으로
rgb_array모드로 전환되어 mp4가 저장됩니다.
results/<experiment>/results.json: 알고리즘별 최종 통계results/<experiment>/comparison_plots.png: 성능 비교 그래프(보상, 학습시간 등)results/<experiment>/summary_table.csv: 텍스트 요약results/<experiment>/videos/: 학습된 정책의 비디오 렌더링logs/,models/: TensorBoard 로그 및 저장된 모델(model.pth,config.json,training_stats.json)
전체 실험 결과(모델 파일, 비디오, 상세 데이터)는 Google Drive에서 다운로드할 수 있습니다.
포함 내용:
- ✅ 학습된 모델 파일들 (각 알고리즘의
model.pth,config.json,training_stats.json) - ✅ 비디오 렌더링 파일들 (각 알고리즘의
.mp4파일) - ✅ 성능 비교 그래프 및 상세 결과 데이터
- ✅ 모델 사용 가이드 (
README.md)
environment.constraint_type을"forward"또는"strict"로 설정하면env_wrappers.py의 보상 보정이 적용됩니다.forward_velocity_scale,max_tilt_angle,exploration_steps와 같은 세부값은config.yaml에서 조정 가능합니다.
- MuJoCo GL 오류:
visualize.py는 headless 환경에서 자동으로 EGL을 먼저 시도합니다 (실패 시 rgb_array 모드로 자동 전환).train_compare.py는 기본적으로 osmesa를 사용합니다.- 수동으로 백엔드를 지정하려면
export MUJOCO_GL=egl PYOPENGL_PLATFORM=egl또는export MUJOCO_GL=osmesa를 설정하세요.
- Module import 오류: 프로젝트 루트에서 실행(
cd /path/to/RL-REVIEW01). - CUDA 메모리 부족:
training.device: "cpu"로 변경. - 비디오 렌더 실패:
visualize.py --render-mode rgb_array --record-video사용.
algorithms/에 새 파일 추가하고BaseRLAlgorithm을 상속합니다.- 필수 메서드 구현:
build_model,train,predict,_save_model,_load_model. algorithms/__init__.py의ALGORITHMS사전에 이름을 등록하세요.
MIT License






