Skip to content

Repository files navigation

Reinforcement Learning Algorithm Comparison Framework

📄 보고서

Report Summary 전체 보고서 다운로드

📊 실험 결과 요약

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)로 빠르고 효율적인 학습을 달성했습니다.
  • REINFORCEVPG는 연속 제어 문제에서 baseline 부재로 인한 높은 분산으로 인해 낮은 성능을 보였습니다.

🎯 개요

MuJoCo 기반 로봇 환경(HalfCheetah-v4)에서 여러 강화학습 알고리즘을 학습하고 성능을 비교·시각화하는 프레임워크입니다.

  • 공통 인터페이스: BaseRLAlgorithm을 통해 알고리즘을 손쉽게 교체하거나 확장 가능
  • 재현성: 실험 결과를 동일한 형식으로 저장하여 보고서 작성 및 재현 용이
  • 시각화: 학습 곡선, 성능 비교 그래프, 비디오 렌더링 지원

🧠 강화학습 알고리즘 개요

본 프레임워크는 다음 알고리즘들을 지원합니다:

On-Policy 알고리즘

  • REINFORCE: Monte Carlo Policy Gradient - 에피소드 전체를 사용한 정책 그래디언트, baseline 없음
  • VPG (Vanilla Policy Gradient): Baseline을 사용한 정책 그래디언트로 분산 감소
  • A2C (Advantage Actor-Critic): Actor-Critic 구조에 병렬 환경을 활용한 샘플 효율 향상
  • PPO (Proximal Policy Optimization): 정책 클리핑을 통한 안정적인 on-policy 학습

Off-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=osmesa
  • visualize.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/                 # 보고서


⚙️ 설정 (config.yaml)

  • 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 공유 결과

전체 실험 결과(모델 파일, 비디오, 상세 데이터)는 Google Drive에서 다운로드할 수 있습니다.

포함 내용:

  • ✅ 학습된 모델 파일들 (각 알고리즘의 model.pth, config.json, training_stats.json)
  • ✅ 비디오 렌더링 파일들 (각 알고리즘의 .mp4 파일)
  • ✅ 성능 비교 그래프 및 상세 결과 데이터
  • ✅ 모델 사용 가이드 (README.md)

🎮 HalfCheetah 제약 옵션

  • environment.constraint_type"forward" 또는 "strict"로 설정하면 env_wrappers.py의 보상 보정이 적용됩니다.
  • forward_velocity_scale, max_tilt_angle, exploration_steps와 같은 세부값은 config.yaml에서 조정 가능합니다.

🔧 Troubleshooting

  • 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 사용.

🔌 알고리즘 확장

  1. algorithms/에 새 파일 추가하고 BaseRLAlgorithm을 상속합니다.
  2. 필수 메서드 구현: build_model, train, predict, _save_model, _load_model.
  3. algorithms/__init__.pyALGORITHMS 사전에 이름을 등록하세요.

📚 참고 자료


📄 라이선스

MIT License

About

Comparative Analysis of Reinforcement Learning Algorithms Using the HalfCheetah Benchmark

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages