chessrank.org
블로그

Opponent Prep 내부 들여다보기: 다음 상대의 유령을 만드는 방법

Opponent Prep를 열고 사용자 이름을 입력하면, 몇 초 후 체스판 건너편에서 뭔가 섬뜩한 것을 마주하게 된다. 상대가 여는 방식 그대로 오프닝을 펼치고, 상대가 늘 빠지는 그 불안정한 구조로 흘러가며, 상대가 언제 실수하기 쉬운지 정확히 아는 듯한 봇이다. 우리는 이것을 Ghost Bot이라고 부르며, 그 내부는 실제로 여러 층으로 쌓인 엔지니어링이다 — 서로 독립된 여러 시스템이 겹겹이 쌓여 있고, 각 시스템은 당신이 한 번도 대국해본 적 없는 낯선 사람에 대한 서로 다른 질문에 답하도록 설계되어 있다.

네 가지 시스템, 하나의 Ghost Bot
정확한 포지션 북
플레이어가 실제로 도달했던 모든 포지션과 그곳에서 둔 수
습관 북
한 번도 도달한 적 없는 포지션에서도 그 사람의 패턴을 인식한다
스타일 지문
비슷한 실력의 상대들과 비교해 측정한, 수를 선택하는 방식에 대한 통계적 해석
안전망
Ghost Bot이 습관을 반복하다가 기물을 그냥 걸어놓는 일이 없도록 막는 실시간 엔진 검증

먼저, 그의 전체 기록을 읽는다

이름을 검색하는 순간, 우리는 그 플레이어가 기록에 남긴 모든 가능한 대국을 가져와 한 번의 분석을 거친다 — 승률, 각 색으로 실제로 어떤 오프닝에 도달하는지, 대국의 여러 시점에서 대략 어느 정도의 실력으로 두는지, 그리고 결정적으로 과거에 정확히 어디에서 가장 많은 점수를 잃었는지. 추측이 아니다. 그가 두었던 수백 판의 대국에 걸쳐, 그 자신의 수로부터 직접 집계한 것이다.

정확한 포지션 북: 그의 수를 색인화하다

이 기록으로부터 우리는 조회 테이블을 만든다: 플레이어가 실제로 도달한 적 있는 모든 포지션에 대해, 무엇을 두었고 얼마나 자주 두었는가? Ghost Bot이 그의 발자취를 따를 때, 즉흥적으로 두는 것이 아니다 — 실제로 각 선택지를 얼마나 자주 골랐는지에 따라 가중치가 부여된 이 테이블에서 곧바로 답을 끌어온다. 그가 50번 방문한 포지션으로 이끌면, 봇의 응답은 정확히 그 동일한 50개의 데이터 포인트에서 나온다. 시뮬레이션이라기보다는, 숫자가 들려주는 재현에 가깝다.

섬뜩할 만큼 정확하게 느껴지게 만드는 비결: 습관 북

여기가 진짜 고민이 필요했던 부분이다. 정확한 포지션 테이블은 그가 이전에 있었던 포지션으로 다시 돌아왔을 때만 도움이 된다 — 그리고 조금이라도 이례적인 수를 두는 순간, 그 테이블은 텅 비게 된다. 실제 상대는 무한한 기억력을 가지고 있지 않지만, 습관은 가지고 있다: 항상 비숍을 피앙케토하는 플레이어, 항상 8수 안에 캐슬링을 하는 플레이어, 체스판 반대편에서 당신이 무엇을 하든 항상 같은 폰 삼각형을 쌓는 플레이어.

그래서 우리는 정보의 절반을 의도적으로 버리는 두 번째 인덱스를 만들었다: 플레이어 자신의 기물만으로 포지션을 기억하고, 당신이 무엇을 하고 있는지는 흐릿하게 지워버린다. 이 더 흐릿한 기억이야말로 Ghost Bot이 기술적으로는 그의 실제 대국에서 한 번도 나온 적 없는 포지션에서도 "이건 그의 런던 시스템 같다"고 인식할 수 있게 해준다. 이는 체스 두뇌를 대신하는 패턴 인식이며 — 불러온 습관 하나하나는 두기 전에 조용히 안전성을 재검증받는다. 그래서 익숙한 배치라 해도 포지션이 그렇게 생겼다는 이유만으로 9수째에 기물을 그냥 걸어놓는 일은 결코 없다.

두 북 위에는 그중에서도 가장 기이한 층이 놓여 있다: 일련의 다이얼로 축소된 성격이다. 우리는 플레이어의 실제 수 선택을 그와 비슷한 실력의 대조군 상대들과 비교하여 스타일 지문을 만든다. 이는 "조심스럽게 둔다", "날카로운 전술을 좋아한다", "균형 잡힌 포지션에서 조급해진다" 같은 특성을, 두 북을 넘어 즉흥적으로 두어야 할 때마다 Ghost Bot의 결정을 조용히 같은 방향으로 기울이는 수치적 힌트로 바꾼다. 결과물은 그의 오프닝만 기억하는 것이 아니라 — 그가 기우는 방향으로 함께 기운다.

그렇다면 Report와 Blunder Puzzle은 기다리게 하면서 이건 왜 즉시 나타날까?

여기 정직하고 약간은 김빠지는 답이 있다: Opponent Prep이 빠른 이유는 위의 어느 것도 체스 엔진에 아무것도 묻지 않기 때문이다. 전체 리포트를 만드는 것 — 레퍼토리, 두 개의 북, 스타일 지문, 약점 — 은 계산이 아니라 집계다. 이미 벌어진 대국 더미에 대한 산술일 뿐이다. 그 더미에 몇백 판이 있든, 현대 브라우저는 몇 초 만에 이를 처리한다.

Game AnalysisBlunder Puzzle은 지름길이 전혀 없는 완전히 다른 종류의 질문에 답한다: 이 특정 대국에서 이 특정 수는 실제로 좋았는가 — 얼마나 좋았는가? 이 질문은 5분 전에는 존재하지 않았다. 누구도 전에 이 질문을 던진 적이 없다. 지금 당신의 판 위 포지션은 방금 당신이 둔 그 대국에만 고유하기 때문이다. 그것을 찾아볼 수 있는 테이블은 존재하지 않는다. 이에 답하는 유일하게 정직한 방법은 그 포지션을 실제 체스 엔진에 넘겨, 대국 전체를 한 수 한 수 탐색하게 하는 것이다 — 그리고 어떤 희생이 정말로 성립하는지 확인할 때, 엔진은 첫 번째 질문 위에 두 번째 질문을 던져야 한다: 상대가 그것을 잡으면 어떻게 되는가? 이것은 테이블 조회가 아니다. 이것은 당신의 기기에서 실시간으로, 한 포지션씩 일어나는 진짜 순차적 사고이며, 아무도 둔 적 없는 대국에 대해 이를 건너뛸 수 있는 캐시는 세상 어디에도 없다.

간단히 말하면: Opponent Prep이 빠른 것은 기억하고 있기 때문이다. Report와 Blunder Puzzle이 시간이 걸리는 것은 실제로 생각하고 있기 때문이다.

당신만의 유령을 만들어 보라

Opponent Prep누구든 정찰하고 그 사람 자신의 기록으로 만들어진 봇과 대국해 보세요

시계가 시작되기도 전에 그의 습관을 파악하세요.