[강화 학습] RL-Tycoon-Agent 프로젝트 정리

2026. 3. 22. 14:16·4. [팀] 프로젝트 및 공모전/4-3 RL-Tycoon-Agent

1. 소개

이번 프로젝트는 Pygame으로 만든 레스토랑 타이쿤 게임에 강화학습을 붙여서, 여러 알고리즘이 실제로 매장을 얼마나 잘 운영하는지 비교해 본 실험입니다.

단순히 캐릭터를 이동시키는 수준이 아니라, 에이전트가 다음과 같은 운영 의사결정을 직접 하도록 설계했습니다.

  • 어디로 이동할지
  • 언제 주문을 받을지
  • 언제 음식을 서빙할지
  • 어떤 업그레이드를 구매할지
  • 특성이 등장했을 때 어떤 특성을 선택할지

즉, 이 프로젝트는 "움직이는 AI"를 만드는 것보다 "운영 전략을 학습하는 AI"를 만드는 데 더 가까웠습니다.

프로젝트의 최종 목표는 여러 강화학습 알고리즘을 같은 환경에서 학습시키고, tournament 모드에서 직접 붙여 보며 어떤 모델이 가장 좋은 성능을 내는지 확인하는 것이었습니다.

프로젝트 핵심 정보

  • 장르: 레스토랑 운영 시뮬레이션
  • 엔진: Python, Pygame, Gymnasium
  • 행동 공간: 18개 이산 행동
  • 관측 공간: 150차원 벡터
  • 평가 기준: 최종 final_score


2. 강화학습 간단한 개념 정리

강화학습은 에이전트가 환경과 상호작용하면서 보상을 최대화하는 방향으로 행동을 학습하는 방법입니다.

구성 요소를 간단히 정리하면 다음과 같습니다.

상태(State)

에이전트가 현재 상황을 어떻게 보고 있는지에 해당합니다.

이 프로젝트에서는 상태에 다음과 같은 정보가 들어갑니다.

  • 플레이어 위치와 방향
  • 손님 상태
  • 테이블 상태
  • 주방 상태
  • 돈, 평점, 남은 시간
  • 업그레이드 상태
  • 특성 선택 상태

즉, "지금 매장이 어떤 상황인지"를 150차원 벡터로 표현한 것이 상태입니다.

행동(Action)

에이전트가 할 수 있는 선택입니다.

이 프로젝트에서는 총 18개 행동이 있습니다.

  • 상하좌우 이동
  • 상호작용
  • 대기
  • 업그레이드 구매 9종
  • 특성 선택 3종

이 부분이 중요한 이유는, 단순 이동뿐 아니라 경제적 선택까지 행동 공간에 들어가 있기 때문입니다.

보상(Reward)

에이전트가 좋은 행동을 했는지 알려주는 신호입니다.

예를 들면 다음과 같은 요소가 보상에 반영됩니다.

  • 주문 받기
  • 주방 전달
  • 음식 서빙
  • 손님 결제
  • 손님 이탈 패널티
  • 업그레이드 구매
  • 평점 변화
  • 최종 스코어 변화

보상 설계가 잘못되면 에이전트가 엉뚱한 행동을 반복할 수 있기 때문에, 강화학습 프로젝트에서 가장 중요한 부분 중 하나가 바로 reward shaping 입니다.

정책(Policy)

정책은 "현재 상태에서 어떤 행동을 선택할지"에 대한 기준입니다.

학습이 진행되면 에이전트는 상태를 보고 점점 더 좋은 행동을 선택하도록 정책을 업데이트합니다.

가치(Value)

어떤 상태나 행동이 장기적으로 얼마나 좋은지를 추정하는 값입니다.

당장의 작은 보상보다 미래의 큰 보상을 얻기 위한 판단에 중요합니다.

예를 들어, 지금 바로 서빙하러 가는 것보다 업그레이드를 먼저 사는 편이 장기적으로 더 많은 수익을 만들 수도 있습니다. 이런 판단을 돕는 것이 가치 추정입니다.


3. DiscreteSAC 정리

이번 프로젝트에서 가장 좋은 성능을 낸 알고리즘은 DiscreteSAC였습니다. 토너먼트 최종 결과는 다음과 같았습니다.

1위: discretesac  53,944
2위: crossplay    25,697
3위: ppo          18,132

즉, 최종 결과 기준으로는 DiscreteSAC > CrossPlay > PPO 였습니다.

SAC가 무엇인가

SAC는 Soft Actor-Critic의 줄임말입니다. 기본적으로는 다음 특징을 갖습니다.

  • Actor-Critic 구조를 사용함
  • 확률적 정책을 사용함
  • 엔트로피를 같이 최적화해서 탐험 성향을 유지함
  • 학습 안정성과 성능이 좋은 편임

다만 일반적인 SAC는 연속 행동 공간에 더 자주 쓰입니다.

왜 DiscreteSAC를 썼는가

이 프로젝트의 행동 공간은 이산적입니다.

  • 이동 4개
  • 상호작용
  • 대기
  • 업그레이드 구매 9개
  • 특성 선택 3개

즉, 행동이 연속값이 아니라 명확하게 분리된 선택지입니다. 그래서 이 문제에는 일반 SAC보다 DiscreteSAC가 더 잘 맞습니다.

이번 프로젝트에서 DiscreteSAC가 강했던 이유

프로젝트 기준으로 보면 DiscreteSAC가 강했던 이유는 크게 네 가지로 볼 수 있습니다.

  1. 이산 행동 문제와 잘 맞았다.

업그레이드 구매, 특성 선택, 상호작용은 연속 제어보다 명확한 선택 문제에 가깝습니다. DiscreteSAC는 이런 구조에 잘 맞았습니다.

  1. 확률적 정책이 실제 게임 플레이와 잘 맞았다.

이 프로젝트에서는 결정적 정책보다 확률적 정책이 더 자연스럽고 성능도 좋게 나오는 경우가 많았습니다. DiscreteSAC는 원래부터 확률적 정책을 잘 활용하는 구조입니다.

  1. 탐험과 안정성이 균형 있게 유지됐다.

단순 이동만 하는 게임이 아니라 업그레이드 타이밍, 특성 선택, 주문 처리 우선순위까지 학습해야 했기 때문에 탐험 성향이 매우 중요했습니다.

  1. 최종 목표와 reward shaping 정렬이 잘 맞았다.

이번 프로젝트 후반부에는 final_score_delta를 강화하고, 평가 기준도 최종 점수 중심으로 정리했습니다. 그 결과 DiscreteSAC가 실제 목표에 더 잘 맞는 방향으로 학습된 것으로 볼 수 있습니다.


4. 강화학습 개선 했던 방법

이번 프로젝트에서 가장 많은 시간을 쓴 부분은 "알고리즘을 바꾸는 것"보다 "환경과 보상을 제대로 정렬하는 것"이었습니다.

실제로 성능 개선에 영향을 준 포인트를 정리하면 다음과 같습니다.

4-1 보상 설계를 실제 목표와 맞추기

처음에는 중간 행동 보상만 따라가다 보니, 학습 보상은 높지만 실제 운영은 별로인 경우가 생길 수 있었습니다.

그래서 다음 방향으로 보상을 개선했습니다.

  • net_profit_delta 반영
  • rating_delta 반영
  • final_score_delta 반영

특히 후반에는 final_score_delta 가중치를 정렬해서 최종 목표와 보상 방향이 어긋나지 않도록 조정했습니다.

4-2 best model 저장 기준을 mean reward에서 final score 중심으로 보기

강화학습에서는 학습 보상이 높다고 해서 실제 게임 최종 성적이 좋은 것은 아닙니다.

이번 프로젝트에서도 이 차이를 확인했고, 이후에는 최종 점수 관점이 더 중요하다는 결론을 얻었습니다.

즉, "학습이 잘 되고 있느냐"보다 "실제로 토너먼트에서 이기느냐"를 더 중요한 기준으로 보게 된 것입니다.

4-3 확률적 평가 사용

이 프로젝트에서는 결정적 정책으로 보면 오히려 이상하게 행동하는 모델이 있었습니다.

반대로 확률적 정책으로 돌렸을 때 더 자연스럽고 실제 성능도 좋았습니다.

그래서 평가와 관전에서 확률적 정책을 더 중요한 기준으로 두고 정리했습니다.

4-4 업그레이드와 특성 선택을 정책에 포함

운영 게임에서는 단순 이동보다 "언제 투자하느냐"가 더 중요할 수 있습니다.

이번 프로젝트는 업그레이드 구매와 특성 선택을 별도 스크립트가 아니라 행동 공간에 직접 넣어서, 에이전트가 운영 전략 자체를 학습하게 만들었습니다.

이 부분이 프로젝트 난이도를 크게 높였지만, 동시에 결과적으로 더 의미 있는 강화학습 문제를 만들었다고 생각합니다.

4-5 토너먼트 모드로 실제 성능 비교

하나의 알고리즘만 따로 보면 성능을 과대평가하기 쉽습니다.

이번 프로젝트에서는 최대 4개 모델을 동시에 비교할 수 있는 토너먼트 모드를 만들었고, 이를 통해 다음 장점이 생겼습니다.

  • 결과를 직관적으로 확인 가능
  • 최고 성능 모델을 바로 판별 가능
  • 같은 환경에서 여러 알고리즘 비교 가능

결과적으로 이 모드가 최종 프로젝트 정리에서 가장 중요한 검증 도구가 되었습니다.

4-6 모델 로딩과 실험 관리 정리

실험이 많아질수록 모델 저장 형식과 로딩 규칙이 중요해집니다.

이번 프로젝트에서는 다음과 같은 점도 계속 정리했습니다.

  • .zip와 .pt 형식 구분
  • 알고리즘 자동 탐지
  • 버전 폴더 이름으로도 학습 재개 가능하도록 런처 보완
  • watch, versus, tournament에서 자동 모델 탐색 지원

이런 개선은 직접적인 성능 향상이라기보다, 프로젝트 완성도를 높이는 데 중요했습니다.


5. 마무리

이번 프로젝트를 통해 느낀 점은, 강화학습 성능은 단순히 알고리즘 하나를 바꾼다고 좋아지는 것이 아니라는 점이었습니다.

실제로 중요한 것은 다음 세 가지였습니다.

  • 문제를 어떤 상태와 행동으로 정의했는가
  • 보상을 최종 목표와 얼마나 잘 맞췄는가
  • 평가를 실제 사용 방식과 비슷하게 했는가

최종적으로는 DiscreteSAC가 가장 좋은 성능을 보였고, 프로젝트 차원에서는 운영형 시뮬레이션 문제에서 강화학습을 어떻게 적용하고 검증할 수 있는지 정리할 수 있었습니다.

앞으로 더 확장한다면 다음 방향도 가능할 것 같습니다.

  • 더 긴 기간 학습
  • 맵 구조 다양화
  • 손님 유형 다양화
  • 멀티에이전트 협업 강화
  • CrossPlay 자동 리그 시스템 고도화

6. GitHub 링크

  • GitHub: https://github.com/EPOCH-X/RL-Tycoon-Agent/tree/main
 

GitHub - EPOCH-X/RL-Tycoon-Agent: 타이쿤 게임의 운영 및 수익 최적화를 목표로 하는 강화학습 에이전트

타이쿤 게임의 운영 및 수익 최적화를 목표로 하는 강화학습 에이전트 실험 프로젝트. 상태(State)와 보상(Reward) 설계에 따른 에이전트의 행동 변화 분석. - EPOCH-X/RL-Tycoon-Agent

github.com

'4. [팀] 프로젝트 및 공모전 > 4-3 RL-Tycoon-Agent' 카테고리의 다른 글

[개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(2)  (0) 2026.03.08
[개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(1)  (0) 2026.03.06
'4. [팀] 프로젝트 및 공모전/4-3 RL-Tycoon-Agent' 카테고리의 다른 글
  • [개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(2)
  • [개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(1)
고니3000원
고니3000원
공부 내용 정리, 자기발전 블로그 입니다. 기존 네이버 블로그에서 티스토리로 이전했습니다. https://blog.naver.com/pak1010pak
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (178)
      • 1. AI 논문 + 모델 분석 (20)
        • AI 논문 분석 (13)
        • AI 모델 분석 (7)
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (25)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
      • 4. [팀] 프로젝트 및 공모전 (14)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
      • 5. [개인] 프로젝트 및 공모전 (0)
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (57)
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 곤이의 블로그(Naver->Tistory)
    • Github
  • 공지사항

  • 인기 글

  • 태그

    강화학습
    javascript
    transformer
    데이터분석
    논문 리뷰
    파인튜닝
    알고리즘
    OCR
    pandas
    구현
    OCR학습
    자료구조
    bottleneck
    자바스크립트
    Vision
    파이썬
    github
    학습
    paddleocr
    html
    강화 학습
    귀칼
    Attention Is All You Need
    Ai
    EfficientNet
    공모전
    프로젝트
    Python
    Grad-CAM
    ViT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[강화 학습] RL-Tycoon-Agent 프로젝트 정리
상단으로

티스토리툴바