작성 일자 : 2026-01-26

기획

ML, DL을 사용하는 공부를 하고 싶었다. 예전에 봤던 Reinforcement Learning이 생각났다. 적합한 가중치를 주고 컴퓨터에게 반복적인 교육을 시켜서 알고리즘을 만드는 그런 과정이다. 내가 파이썬을 처음 배웠을 때 다빈치코드를 만들고 싶었다.

약 5년 전 replit 에 만들었던 내 프로젝트다. (지금은 replit이 코드 전체를 삭제해버렸다…) 반복문도 모르던 시기에 list로 모든 변수를 선언했던 시기였다. 랜덤으로 섞고 나눠주는 것까지는 진행했지만 컴퓨터가 나의 패를 골라주는 것은 구현하지 못했었다.

하지만 많은 시간이 지난 지금, 컴퓨터끼리 반복적인 학습도 시키고 나랑도 해보면서 우수한 성능의 다빈치코드 봇을 만들고싶다. 동시에 항상 하던 서비스가 아닌 조금 더 나아간 프로젝트를 진행하고 ML에 대한 이해를 하는 것이 본 프로젝트의 목표이다.

설계

구현 단계

먼저 봇을 반복적인 학습을 통해 모델을 만든다고 했을 때, 터무니없는 숫자를 무작위로 넣으면서 학습을 하면 시간도 오래걸리고 효율적이지 않을 것이다. 그래서 매 게임의 상태를 잘 정리하는 것이 필요하다고 생각한다. 아직 구체적인 방법론까지는 생각하지 못했다. 이런 프로젝트는 나 또한 처음이기 때문에 그런 실수하는 모든 과정들을 남기는 것이 목표이다.

  1. Class를 통한 게임의 순간 상태 설정
    1. 플레이어의 카드 상태
    2. 상대가 볼 때 내 카드 상태. (가능성)
    3. 현재 카드팩에 남은 카드
  2. 게임 규칙 설정
    1. 보드게임으로 알고 있는 게임의 기본 규칙 설정
      1. 내가 가지고 있는 패는 제외하기
      2. 추리에 틀릴 경우 나의 패 하나를 공개하기 (처음에는 랜덤 이후에는 가장 기댓값이 낮은거)
    2. 규칙 대로 진행 여부 확인. (서로 선택하는 것 제외하고 무제한 뽑기가 가능한지)
  3. 이후 고민 예정

필요 기술

핵심

구현 완료


시행착오

  • 추론

    • 썼던 카드 더 안쓰도록
    • 왼쪽 카드가 있다면 오른쪽은 드러난 것보다 큰거로

새로 알게된 것

python dataclass (추후 정리 예정)

isinstance

한계점

개선점