Skip to content

Repository files navigation

🍎 AlphaApple - RL for Perfect FruitBox Play

λͺ©ν‘œ: μ‚¬κ³Όκ²Œμž„(FruitBox) 170개 μ…€ μ „λΆ€ 제거 (100% 클리어)

κ°•ν™”ν•™μŠ΅μœΌλ‘œ 인간을 λ„˜μ–΄μ„œλŠ” μ„±λŠ₯ 달성을 λͺ©ν‘œλ‘œ ν•˜λŠ” ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

πŸš€ ν˜„μž¬ μ§„ν–‰ 상황 및 μ„±κ³Ό

  • DQN 베이슀라인 ꡬ좕 μ™„λ£Œ: CNN 기반의 DQN λͺ¨λΈκ³Ό 컀리큘럼 ν•™μŠ΅μ„ 톡해 μ•ˆμ •μ μΈ ν•™μŠ΅ κΈ°λ°˜μ„ λ§ˆλ ¨ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ„±λŠ₯ 기둝: μ•½ 10,000 μ—ν”Όμ†Œλ“œ ν•™μŠ΅ κ²°κ³Ό, 평균 **96% (163.4개)**의 사과λ₯Ό μ œκ±°ν•˜λŠ” μ„±κ³Όλ₯Ό λ‹¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ†”λ£¨μ…˜ 보μž₯ν˜• ν™˜κ²½: BackwardBoardGeneratorλ₯Ό λ„μž…ν•˜μ—¬ 항상 해닡이 μ‘΄μž¬ν•˜λŠ” λ³΄λ“œμ—μ„œ ν•™μŠ΅ν•  수 μžˆλ„λ‘ ν™˜κ²½μ„ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ§ͺ v2 μ•„ν‚€ν…μ²˜ (2024-12)

κΈ°μ‘΄ DQN의 Q-value 폭발 문제λ₯Ό ν•΄κ²°ν•œ μƒˆλ‘œμš΄ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€.

핡심 κ°œμ„ 

문제 기쑴 v2
Q-value λ²”μœ„ [-10μ–΅, +1μ–΅] [-10, 200]
μ•Œκ³ λ¦¬μ¦˜ Vanilla DQN Dueling Double DQN
Target μ—…λ°μ΄νŠΈ Hard (1000 steps) Soft (tau=0.005)
κ²½ν—˜ μž¬μƒ Uniform PER (Prioritized)
λ³΄λ“œ 생성 μž‘μ€ 숫자 편ν–₯ κ· λ“± 뢄포

v2 파일 ꡬ쑰

src/
β”œβ”€β”€ models_v2.py         # Dueling DQN + Residual + Q-value clipping
β”œβ”€β”€ agent_v2.py          # Double DQN + Soft Update + PER
β”œβ”€β”€ replay_buffer.py     # Prioritized Experience Replay
└── reward_normalizer.py # 보상 μ •κ·œν™”

envs/
└── board_generator_v2.py  # κ· λ“± 뢄포 + μœ νš¨μ„± 검증

experiments/
└── train_v2.py          # Colab용 톡합 ν•™μŠ΅ 슀크립트

ν•™μŠ΅ μ‹€ν–‰ (Colab)

# Colabμ—μ„œ 직접 μ‹€ν–‰ν•˜κ±°λ‚˜
uv run python experiments/train_v2.py

πŸ§ͺ 이전 λ³€κ²½ 사항

  • λͺ¨λΈ μ•ˆμ •ν™”: src/models.py에 BatchNorm을 μΆ”κ°€ν•˜μ—¬ activation 폭발과 λΉ„ν˜„μ‹€μ  Q-value μŠ€μΌ€μΌ 문제λ₯Ό μ™„ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
  • ν™˜κ²½ μΌλ°˜ν™”: λ³΄λ“œ 생성에 backward/random ν˜Όν•© λΉ„μœ¨(backward_generator_ratio)을 λ„μž…ν•΄ 뢄포 이동을 μ€„μ˜€μŠ΅λ‹ˆλ‹€.
  • 보상 섀계: 미래 κ°€λŠ₯μ„±(유효 μ•‘μ…˜ 수 λ³€ν™”), 큰 μ˜μ—­ 제거, μ™„μ „ 클리어 λ³΄λ„ˆμŠ€λ₯Ό μ˜΅μ…˜μœΌλ‘œ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • Colab + Drive ν•™μŠ΅: Google Drive에 체크포인트λ₯Ό μ €μž₯ν•˜λŠ” 슀크립트 experiments/train_colab_drive.pyλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • ν™˜κ²½ 단일 μ†ŒμŠ€: ν™˜κ²½ μ½”λ“œλŠ” envs/fruitbox_env_improved.pyκ°€ 기쀀이며, envs/fruitbox_env.pyλŠ” ν˜Έν™˜μš© λž˜νΌμž…λ‹ˆλ‹€.

πŸ›  μ£Όμš” κΈ°λŠ₯

  • κ³ μ„±λŠ₯ ν™˜κ²½ (envs/fruitbox_env_improved.py): Prefix Sum 및 Incremental Action Masking을 μ μš©ν•˜μ—¬ μ—°μ‚° 속도λ₯Ό κ·ΉλŒ€ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
  • DQN μ—μ΄μ „νŠΈ (src/agent.py, src/models.py): 10채널 One-hot 인코딩 μž…λ ₯κ³Ό μ•‘μ…˜ λ§ˆμŠ€ν‚Ήμ„ μ§€μ›ν•˜λŠ” CNN λͺ¨λΈμž…λ‹ˆλ‹€.
  • Colab μ΅œμ ν™”: GPU 및 TPU 가속을 μ§€μ›ν•˜λŠ” ν•™μŠ΅ 슀크립트/λ…ΈνŠΈλΆ(experiments/train_colab_drive.py, experiments/train_colab_integrated.ipynb)을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • μ‹œκ°ν™” 도ꡬ: μ—μ΄μ „νŠΈμ˜ ν”Œλ ˆμ΄λ₯Ό 단계별 ASCII κ·Έλž˜ν”½μœΌλ‘œ λ Œλ”λ§ν•˜κ³  μ „λž΅μ„ 뢄석할 수 μžˆλŠ” κΈ°λŠ₯을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

  • envs/: μ‚¬κ³Όκ²Œμž„ ν™˜κ²½ 및 λ³΄λ“œ 생성기
  • src/: DQN λͺ¨λΈ μ•„ν‚€ν…μ²˜ 및 μ—μ΄μ „νŠΈ 둜직
  • experiments/: 둜컬 및 Colab용 ν•™μŠ΅ 슀크립트/λ…ΈνŠΈλΆ
  • checkpoints/: ν•™μŠ΅λœ λͺ¨λΈ μ €μž₯ 폴더

πŸš€ λͺ¨λΈ 배포 및 μ‹€μ „ λ„μž…

1. ONNX λ³€ν™˜ 및 Hugging Face μ—…λ‘œλ“œ

  • ONNX λ³€ν™˜: λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ„λ‘ λͺ¨λΈμ„ λ³€ν™˜ν•©λ‹ˆλ‹€.
    uv run python src/export_onnx.py --model_path checkpoints/model.pth --output_path extension/model.onnx
  • Hugging Face μ—…λ‘œλ“œ: ν•™μŠ΅λœ κ°€μ€‘μΉ˜μ™€ ONNX λͺ¨λΈμ„ ν—ˆλΈŒμ— κ³΅μœ ν•©λ‹ˆλ‹€.
    uv run python src/upload_hf.py --repo_id "μ‚¬μš©μž/리포지토리" --model_path checkpoints/model.pth --onnx_path extension/model.onnx

2. Chrome Extension (FruitBox Solver)

μ‹€μ œ Gamesaien Fruit Box μ‚¬μ΄νŠΈμ—μ„œ λͺ¨λΈμ„ μ‹€ν–‰ν•˜μ—¬ 해닡을 μ°Ύμ•„μ£ΌλŠ” ν™•μž₯ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

μ„€μΉ˜ 방법:

  1. λΈŒλΌμš°μ € μ£Όμ†Œμ°½μ— chrome://extensions/ μž…λ ₯
  2. '개발자 λͺ¨λ“œ' ν™œμ„±ν™”
  3. 'μ••μΆ•ν•΄μ œλœ ν™•μž₯ ν”„λ‘œκ·Έλž¨μ„ λ‘œλ“œν•©λ‹ˆλ‹€' 클릭 ν›„ ν”„λ‘œμ νŠΈμ˜ extension/ 폴더 선택
  4. μ€‘μš”: ν™•μž₯ ν”„λ‘œκ·Έλž¨ 폴더 μ•ˆμ— model.onnx 파일과 onnxruntime-web λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ‚¬μš© 방법:

  • κ²Œμž„ μ‚¬μ΄νŠΈ 접속 ν›„ ν™•μž₯ ν”„λ‘œκ·Έλž¨ νŒμ—…μ—μ„œ "Find Best Move" λ²„νŠΌ 클릭
  • 화면에 졜적의 사과 λ°•μŠ€κ°€ λΉ¨κ°„μƒ‰μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

πŸ“ˆ μ•žμœΌλ‘œμ˜ κ³„νš

  • 100% 클리어 도전: ν˜„μž¬μ˜ 96% μ„±κ³Όλ₯Ό λ„˜μ–΄ 100% 클리어λ₯Ό μœ„ν•΄ 더 κΉŠμ€ 신경망(ResNet λ“±)κ³Ό PPO μ•Œκ³ λ¦¬μ¦˜ λ„μž…μ„ κ²€ν†  μ€‘οΏ½οΏ½οΏ½λ‹ˆλ‹€.
  • JAX/TPU 가속 ν™•λŒ€: 더 λΉ λ₯Έ μ‹€ν—˜μ„ μœ„ν•΄ JAX 기반의 λΆ„μ‚° ν•™μŠ΅ ν™˜κ²½μ„ 고도화할 μ˜ˆμ •μž…λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages