Skip to content

soominn/applegame

Repository files navigation

뚱이 게임 (Apple Game) with RL Agents

숫자 퍼즐 뚱이 게임과, 그 위에서 학습된 강화학습 에이전트를 함께 담은 프로젝트입니다.
사람 플레이, PPO/DQN/MC 에이전트 학습·실행, 사람 vs PPO 대결까지 지원합니다.


1. 요구 사항

  • Python 3.10 이상 (3.12 환경에서 확인)
  • 의존성: requirements.txt
pip install -r requirements.txt

2. 사람 플레이 (GUI)

python applegame.py
  • 마우스로 타일을 직사각형으로 드래그해 선택합니다.
  • 선택 영역 안 0이 아닌 타일들의 합이 10이면 제거되고, 제거한 타일 수만큼 점수가 올라갑니다.
  • 제한 시간 120초 동안 점수를 최대한 많이 획득하는 것이 목표입니다.
  • 시간이 끝나면 스페이스바로 다시 시작할 수 있습니다.

3. 강화학습 에이전트

동일한 Gymnasium 환경(DdungEnv)에서 PPO, DQN, Monte Carlo(REINFORCE) 세 가지 알고리즘을 사용할 수 있습니다.

3.1 환경 개요 (DdungEnv)

  • 관측: 숫자 그리드(정규화) + 남은 시간 비율 + 점수 스케일
  • 행동: 현재 그리드에서 가능한 직사각형 선택 중 하나 (액션 마스킹 지원)
  • 보상: 제거한 타일 수 + 9+1/8+2/7+3 조합 보너스 − 시간 패널티 − 남은 타일 패널티 + 클리어 보너스

자세한 보상 설계·실험 결과는 docs/experiment_summary.md 에 정리되어 있습니다.

3.2 PPO (MaskablePPO)

항목 내용
학습 python train_ppo.pymodels/ddung_ppo.zip (20만 스텝, tqdm, TensorBoard logs/ppo)
텍스트 실행 python run_agent.py [--model ...] [--episodes 5]
시각화 python run_agent_visual.py [--model ...] [--episodes 5]

3.3 DQN

  • DQN은 액션 마스킹을 지원하지 않으므로, DdungEnvDQNWrapper로 유효 액션만 실행하도록 클램핑합니다.
항목 내용
학습 python train_dqn.pymodels/ddung_dqn.zip (20만 스텝, tqdm, TensorBoard logs/dqn)
텍스트 실행 python run_agent_dqn.py [--model ...] [--episodes 5]
시각화 python run_agent_dqn_visual.py [--model ...] [--episodes 5]

3.4 Monte Carlo (REINFORCE)

항목 내용
학습 python train_mc.pymodels/ddung_mc_policy.pt (3,000 에피소드, tqdm)
텍스트 실행 python run_agent_mc.py [--model ...] [--episodes 5]
시각화 python run_agent_mc_visual.py [--model ...] [--episodes 5]

정책 네트워크·액션 선택 로직은 mc_policy.py 에서 공유합니다.


4. 사람 vs PPO 대결

같은 초기 보드(seed)로 사람이 먼저 1판 플레이한 뒤, PPO가 같은 seed로 1판 플레이하는 모습을 시각화하고, 두 점수를 비교합니다.

python human_vs_ppo.py [--model models/ddung_ppo.zip] [--seed 1234]
  • 사람 턴: 120초 제한. 시간 종료 시 점수 화면 + 3, 2, 1 카운트다운 후 창이 자동으로 닫힙니다.
  • PPO 턴: 같은 seed로 환경을 초기화한 뒤, PPO 에이전트 플레이를 pygame 창으로 보여줍니다.
  • 터미널에 사람 점수·PPO 점수·승패(사람 승 / PPO 승 / 무승부)를 출력합니다.

5. TensorBoard

PPO·DQN 학습 시 tensorboard_log 로 로그가 쌓입니다. 실시간으로 손실·보상을 보려면:

tensorboard --logdir logs

브라우저에서 http://localhost:6006/ 를 엽니다. 사용 방법은 docs/tensorboard.md 를 참고하세요.


6. 주요 파일

파일 설명
applegame.py 사람용 메인 게임 (pygame GUI). seed, auto_exit_on_timeup 옵션 지원.
game_logic.py 게임 규칙·그리드·유효 행동 (GUI/RL 공용)
ddung_env.py Gymnasium 환경 DdungEnv + DQN용 DdungEnvDQNWrapper
train_ppo.py PPO(MaskablePPO) 학습
run_agent.py PPO 텍스트 실행
run_agent_visual.py PPO 플레이 시각화
train_dqn.py DQN 학습
run_agent_dqn.py DQN 텍스트 실행
run_agent_dqn_visual.py DQN 플레이 시각화
mc_policy.py MC(REINFORCE) 정책 네트워크·액션 선택 (공유)
train_mc.py MC(REINFORCE) 학습
run_agent_mc.py MC 텍스트 실행
run_agent_mc_visual.py MC 플레이 시각화
human_vs_ppo.py 사람 vs PPO 대결 (동일 seed, 사람 → PPO 순서)
requirements.txt 게임·강화학습·TensorBoard 의존성

문서

파일 설명
docs/USAGE.md 사용 방법 요약 (PPO, DQN 등)
docs/tensorboard.md TensorBoard 사용 방법
docs/experiment_summary.md 보상 설계·실험 결과 정리

7. 기타

  • 랜덤성
    • 학습·대결 시 seed를 지정하면 같은 초기 보드를 재현할 수 있습니다.
    • run_agent_visual.py 등은 seed 없이 실행 시 매번 다른 초기 그리드가 나오도록 make_grid에서 독립 RNG를 사용합니다.
  • 윈도우 한글 폰트
    • 한글이 깨지면 시스템에 맑은 고딕(Malgun Gothic) 등 한글 폰트 설치 여부를 확인하세요.

About

숫자 퍼즐 ‘사과 게임’을 pygame으로 구현하고, Gymnasium 환경에서 PPO·DQN·Monte Carlo 에이전트를 학습·실행하며 사람 vs PPO 대결까지 지원합니다.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages