🤖 AI 상대 (DL-AI)
이 대회는 게임×AI 해커톤이다. 우리는 AI를 두 축으로 넣었다:
- 개발 과정의 AI — TDA(Top-Down Agent) 오케스트레이션으로 설계·구현·배포까지 수행(개발 개요).
- 제품 안의 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 모델을 로드해LearnedPolicy의predict로 주입 → 학습된 뱀이 실제 상대로 플레이.- 학습(노드)과 플레이(브라우저)가 동일한
snake-ai정책 코드를 공유하므로, "학습한 그 브레인"이 그대로 게임에 들어간다.
왜 이 구조인가 (설계 관점)
- AI가 개발 도구에 그치지 않고 제품 기능이 된다 — 개발 과정 AI(TDA) + 제품 내 AI(DL 상대)로 축이 둘.
- 재현 가능성 — 규칙기반은 코드만으로, 학습기반은 학습 하니스+환경+평가까지 전부 public.
- 레이어 격리 일관성 — AI도 MWD 규약대로
core에만 의존하는 독립 저장소로 분리되어, 레이어 격리 증거와 같은 방식으로 커밋 히스토리에 남는다.