본문으로 건너뛰기

🤖 AI 상대 (DL-AI)

이 대회는 게임×AI 해커톤이다. 우리는 AI를 두 축으로 넣었다:

  1. 개발 과정의 AI — TDA(Top-Down Agent) 오케스트레이션으로 설계·구현·배포까지 수행(개발 개요).
  2. 제품 안의 AI — 사람 없이도 붙을 수 있는 AI 상대(플레이어를 상대하는 뱀). 이 문서가 그 축이다.

AI 상대는 별도 트랙(track C)으로 분리·개발했고, 관련 소스는 전부 public이다 — 저장소 지도의 🤖 AI 상대 트랙 참고.


한 계약, 두 개의 브레인

AI 상대는 @mwd-tutorials/snake-ai 한 패키지에 담기지만, 브레인은 두 종류를 같은 Policy 계약으로 스왑한다.

브레인클래스방식용도
규칙기반HeuristicPolicy도메인 피처 평가(먹이 거리·안전 공간·부스트 스타일) 기반 휴리스틱easy / medium / hard 난이도 사다리 — 항상 동작, 학습 불필요
학습기반LearnedPolicy심층강화학습(DQN) Q-네트워크 추론'learned' — 학습된 tfjs 모델을 주입해 구동
// createPolicy: 난이도 사다리 또는 학습 브레인을 같은 계약으로 생성
createPolicy('easy' , opts) // HeuristicPolicy (규칙)
createPolicy('hard' , opts) // HeuristicPolicy (규칙, 공격적)
createPolicy('learned', { predict }) // LearnedPolicy (tfjs Q-예측기 주입)
  • 순수·isomorphic·엔진 독립: snake-ai는 렌더러/네트워크를 모른다. @mwd-tutorials/snake-core(순수 도메인)에만 의존하므로, 노드(학습·평가)에서도 브라우저(플레이)에서도 같은 정책 코드가 돈다.
  • 난이도는 서브클래스가 아니라 데이터: DifficultyConfig 노브(부스트 스타일 never/rare/smart/aggressive 등)로 튜닝 → 같은 평가기를 재사용해 학습 브레인과 규칙 브레인이 피처를 공유한다.

어떻게 학습했나 — DQN 학습 하니스

학습은 snake-ai-training(GitLab: snake-game-2p.snake-ai-training)에서 수행한다.

  • 알고리즘: DQN(Deep Q-Network) — 상태 피처 → Q값 → 행동.
  • 런타임: TensorFlow.js @tensorflow/tfjs-node, CPU-only(외부 GPU/유료 인프라 없이 로컬 재현 가능).
  • 환경: 1P(env.mjs) · 1P 부스트(env1p_boost.mjs) · 2P 대전(env2p.mjs) — 자기 대전(self-play)으로 상대 뱀을 상대하는 정책을 학습.
  • 평가: eval.mjs · eval2p.mjs · mideval.mjs 로 체크포인트별 성능 측정.
  • 산출물: checkpoints/의 tfjs 모델(model · model1pb · model2p · model2p_v4) — model.json + weights.bin.

재현: npm install && npm run smoke(빠른 점검) 또는 npm run train(정식 학습). 학습 코드·환경·보상·평가가 전부 public이라 누구나 모델 산출 과정을 그대로 재현할 수 있다. (체크포인트 바이너리는 snake-ai/웹 번들에 탑재되어 배포된다.)


브라우저에서 상대로 구동

웹 통합은 snake-web-expc(실험 트랙)에서 검증한다.

  • src/ai.ts — 규칙기반 상대 배선(난이도 선택).
  • src/dlai.ts — 브라우저에서 tfjs 모델을 로드LearnedPolicypredict로 주입 → 학습된 뱀이 실제 상대로 플레이.
  • 학습(노드)과 플레이(브라우저)가 동일한 snake-ai 정책 코드를 공유하므로, "학습한 그 브레인"이 그대로 게임에 들어간다.

왜 이 구조인가 (설계 관점)

  • AI가 개발 도구에 그치지 않고 제품 기능이 된다 — 개발 과정 AI(TDA) + 제품 내 AI(DL 상대)로 축이 둘.
  • 재현 가능성 — 규칙기반은 코드만으로, 학습기반은 학습 하니스+환경+평가까지 전부 public.
  • 레이어 격리 일관성 — AI도 MWD 규약대로 core에만 의존하는 독립 저장소로 분리되어, 레이어 격리 증거와 같은 방식으로 커밋 히스토리에 남는다.