Lobsters

kicking the tires on jev (TypeSafe's System One model) with 2048

jev(TypeSafe의 System One 모델)로 2048을 플레이해 보기

jev-1.13.0에 2048 보드와 이동 선택지를 입력해 네 가지 프롬프트 구성을 비교했습니다. 보드만 제공하면 무작위 이동과 비슷했으며, 각 이동 후 보드와 점수까지 제공했을 때 중앙값 2,494점으로 가장 나은 결과를 보였습니다. 다만 게임 수가 적고 결과 편차가 커 추가 검증이 필요합니다.

AI 요약

이 글은 TypeSafe의 System One 모델을 기반으로 한 jev-1.13.0이 2048과 같은 상태 기반 게임에서 얼마나 적절한 선택을 하는지 직접 시험한 기록입니다. 작성자는 현재 2048 보드 상태를 모델에 전달하고 up, down, left, right 중 다음 이동을 고르게 했습니다. 같은 게임을 네 가지 입력 방식으로 구성했으며, 모든 게임은 종료될 때까지 진행했습니다.

■ 실험 방식

가장 단순한 방식에서는 보드의 현재 상태만 제공했습니다. 예시 보드는 위에서부터 빈 행 두 개, 세 번째 행의 왼쪽에 2 하나, 마지막 행에 4, 빈 칸, 2, 2가 놓인 형태입니다. 모델에는 다음과 같은 선택형 질문을 전달했습니다. “Which move should the 2048 player make on `board`?” 선택지는 up, down, left, right였으며, 각 선택지에 대한 추가 설명이나 평가 기준은 넣지 않았습니다.

두 번째 방식에서는 보드 표현을 더 구조화하고 2048의 규칙을 함께 설명했습니다. 보드는 위에서 아래 순서로 나열되고 각 행은 왼쪽에서 오른쪽으로 네 칸을 나타낸다고 명시했습니다. 타일은 선택한 방향으로 최대한 이동하며, 같은 숫자의 타일이 충돌하면 합쳐진다는 규칙도 전달했습니다. 또한 보드를 바꾸지 못하는 이동은 허용하지 않는다고 지정하고, “계속해서 타일을 합치고 더 큰 타일에 도달하기에 가장 유리한 상태를 남기는 이동”을 고르도록 했습니다.

세 번째 방식에서는 보드와 함께 전략 힌트를 제공했습니다. 핵심 지침은 가장 큰 타일을 왼쪽 아래 모서리에 유지하고, 가장 큰 숫자가 왼쪽에 오도록 아래쪽 행을 가득 채워 정렬하는 것입니다. 타일을 합칠 수 있는 이동을 우선하며, 작은 타일이 가장 큰 타일 아래로 들어가는 이동은 피하라고 설명했습니다.

네 번째 방식에서는 모델이 현재 보드에서 각 이동을 실제로 수행한 뒤의 결과 보드까지 볼 수 있도록 했습니다. 각 후보에는 이동 후 보드와 해당 이동으로 얻은 점수인 `gained` 값이 함께 포함됐습니다. 예시 상태에서 up은 위쪽에 2, 2, 2를 배치하고 두 번째 행에 4를 남기며 `gained: 0`이었습니다. left는 세 번째 행에 2를 남기고 마지막 행의 4와 2, 2를 4, 4로 합쳐 `gained: 4`가 됐습니다. right는 세 번째 행의 2를 오른쪽으로 보내고 마지막 행의 두 2를 오른쪽에서 4로 합쳐 역시 `gained: 4`가 됐습니다. 이 상태에서 down은 보드를 바꾸지 않기 때문에 후보에서 제외했습니다. 모델에는 앞선 전략 힌트도 계속 제공했습니다.

■ 측정 결과

무작위 이동은 48게임에서 최소 512점, 중앙값 1,102점, 최대 2,672점을 기록했으며 가장 큰 타일은 256이었습니다. 고정 규칙 중 “움직이면 down, 그렇지 않으면 left, 그다음 right, 마지막으로 up” 순서는 48게임에서 최소 720점, 중앙값 1,964점, 최대 7,196점, 최고 타일 512를 기록했습니다. “움직이면 left, 그렇지 않으면 down, 그다음 right, 마지막으로 up” 순서는 최소 296점, 중앙값 2,740점, 최대 5,944점, 최고 타일 512를 기록했습니다.

jev에 보드만 제공한 구성은 20게임에서 최소 404점, 중앙값 706점, 최대 2,340점이었고 최고 타일은 128이었습니다. 모델이 처음 고른 이동이 아무 변화도 일으키지 않은 비율은 24%였습니다. 규칙과 각 이동의 의미를 설명한 구성은 20게임에서 최소 180점, 중앙값 1,656점, 최대 3,520점, 최고 타일 256을 기록했습니다. 이때 첫 선택이 무효 이동인 비율은 19%였습니다.

보드와 함께 “가장 큰 타일을 왼쪽 아래 모서리에 유지하라”는 힌트만 제공한 구성은 18게임에서 최소 432점, 중앙값 1,454점, 최대 4,120점, 최고 타일 256을 기록했습니다. 첫 선택이 보드를 바꾸지 않은 비율은 27%였습니다. 반면 각 이동 후 보드와 획득 점수, 같은 전략 힌트를 모두 제공한 구성은 18게임에서 최소 596점, 중앙값 2,494점, 최대 5,532점, 최고 타일 512를 기록했습니다. 이 마지막 구성에서는 애초에 보드를 바꾸는 이동만 선택지로 제공했기 때문에 무효 이동 비율은 해당하지 않습니다.

‘first choice did nothing’은 모델의 최고 추천이 보드를 전혀 바꾸지 않는 이동이었던 경우를 의미합니다. 예를 들어 모든 타일이 이미 왼쪽 벽에 붙어 있고 합쳐질 타일도 없다면 left는 아무 효과가 없습니다. 이런 경우 작성자는 모델의 두 번째 선택을 대신 실행했습니다. 무작위 이동과 고정 규칙은 처음부터 보드를 바꾸는 이동만 고르도록 구현했으며, 마지막 jev 구성도 유효한 이동만 입력으로 제공했기 때문에 이 항목은 n/a로 표시했습니다.

■ 결과 해석과 비교 기준

작성자의 실험에서는 jev가 현재 보드만 보고 선택하게 했을 때 무작위 이동과 비슷한 수준에 머물렀습니다. 모델이 2048의 규칙과 목표를 이해하도록 설명하면 중앙값과 최고 타일이 개선됐고, 전략 힌트를 추가했을 때도 보드만 제공한 경우보다 중앙값이 높아졌습니다. 네 가지 jev 구성 중에서는 각 이동의 결과 보드와 획득 점수를 미리 계산해 제공한 방식이 중앙값 2,494점과 최고 타일 512로 가장 높은 수치를 보였습니다. 다만 고정 규칙도 48게임에서 중앙값 1,964점 또는 2,740점, 최대 7,196점과 5,944점을 기록했으므로, 단순 규칙과 비교할 때 게임 수와 분포를 함께 봐야 합니다.

커뮤니티에서는 이 결과를 해석하기 전에 실험 설계를 더 점검해야 한다는 지적이 나왔습니다. 특히 `gained`가 한 번의 슬라이드에서 얻은 모든 점수를 합산한 값인지, 아니면 하나의 새 타일에 대한 값인지가 명확하지 않다는 문제가 제기됐습니다. 또한 18~20게임 또는 48게임만으로는 2048 점수의 큰 변동성을 안정적으로 측정하기 어렵고, 평균이나 중앙값 하나만으로는 전략 간 차이를 판단하기 어렵다는 의견이 있었습니다. 따라서 이 기록은 jev에 어떤 맥락과 후보 상태를 제공했을 때 선택 결과가 어떻게 달라지는지 보여주는 초기 실험으로 볼 수 있으며, 전략의 우열을 확정하려면 더 많은 게임과 전체 점수 분포가 필요하다는 논의가 함께 제시됐습니다.

■ Lobsters 반응

• @viraptor — 마지막 버전에는 버그가 있을 가능성이 얼마나 달라지는지는 모르겠지만, `gained`가 단일 숫자라는 점이 문제일 가능성이 큽니다. 한 번의 슬라이드에서 여러 개의 새 타일을 얻을 수 있습니다. 더 복잡한 전략의 결과도 있나요? 단순한 전략과 정교한 전략 사이의 차이를 모르면 얼마나 잘하고 있는지 판단하기 어렵습니다. 또한 분산이나 신뢰구간도 알 수 없습니다. 편집: 직접 살펴보기 시작했는데, 시계 방향 전략과 아마 다른 전략들도 분포가 거의 이봉형이라 평균만으로 비교하기에는 좋지 않다는 내용을 찾았습니다: https://project2048.readthedocs.io/en/latest/versus/versus.html#random-vs-clockwise 기본 전략은 수백 번 실행하기 전까지 결과의 변동이 매우 큽니다: https://project2048.readthedocs.io/en/latest/simulation/clockwise.html 요컨대 jev가 어떻게 수행하는지 알고 싶다면 18번이 아니라 분포를 그래프로 그리고 1,000게임을 실행해야 합니다. 지금은 대부분 잡음에 해당합니다.

• @ndyg — jev에 현재 2048 보드를 전달하고 up, down, left, right 중에서 고르게 했습니다. 그것만 제공하면 무작위로 움직이는 것과 비슷한 수준입니다. 오래 시간을 들여 보지는 못했기 때문에 제가 무언가를 놓쳤을 가능성이 큽니다.

원문: Gist / 번역·요약: Trawling