베스트 퍼스트와 딥 퍼스트 미니맥스 탐색 실전 비교

베스트 퍼스트와 딥 퍼스트 미니맥스 탐색 실전 비교

초록

본 논문은 전통적인 깊이 우선 알파-베타(Alpha‑Beta)와 최적의 베스트 퍼스트 탐색인 SSS를 동일한 프레임워크 안에서 재구성한다. 프레임워크는 알파‑베타를 호출하는 방식을 일반화해 SSS, DUAL*, MTD(f) 등 다양한 변형을 생성한다. 실험 결과, 메모리 요구와 구현 복잡성 문제를 해결한 SSS는 이론적으로는 효율적일 수 있으나 실제 게임 트리에서는 알파‑베타 변형이 더 적은 노드를 평가한다. 특히 새롭게 제안된 MTD(f)는 기존의 NegaScout와 SSS를 모두 능가한다.

상세 분석

이 논문은 미니맥스 트리 탐색에서 ‘베스트 퍼스트’와 ‘딥 퍼스트’ 전략의 실질적인 차이를 명확히 규명한다. 기존 연구에서는 SSS가 베스트 퍼스트 방식으로 최적의 노드 순서를 보장한다는 점에서 알파‑베타보다 이론적으로 우수하다고 주장했지만, 구현 복잡도와 메모리 사용량이 실용성을 저해한다는 비판이 있었다. 저자들은 알파‑베타를 ‘노드 평가 함수’를 파라미터화한 하나의 호출 인터페이스로 추상화하고, 이 인터페이스에 다양한 경계값(bounding) 전략을 적용함으로써 SSS, DUAL*, MTD(f) 등을 동일한 코드 베이스에서 구현한다. 핵심 아이디어는 ‘반복적인 깊이 우선 탐색’을 통해 베스트 퍼스트 탐색이 요구하는 ‘최소 비용 경로’를 점진적으로 좁혀 나가는 것이다.

SSS는 이 프레임워크에서 ‘최소 상한값을 지속적으로 감소시키는’ 전략으로 구현된다. 메모리 요구를 줄이기 위해 열린 리스트(open list)를 명시적으로 유지하지 않고, 알파‑베타 호출 시 반환되는 값만으로 후보 경계를 업데이트한다. DUAL는 반대로 상한값을 증가시키는 방식으로, SSS*와 대칭적인 탐색을 제공한다. 가장 혁신적인 부분은 MTD(f)이다. MTD(f)는 초기 추정값 f를 기반으로 ‘양방향 이진 탐색’을 수행해 최적값을 빠르게 수렴한다. 초기값이 실제 최적값에 가깝다면 탐색 횟수가 크게 감소한다는 점에서 실전 체스·체커 엔진에서 큰 장점을 보인다.

실험에서는 상용 체스 프로그램과 오프라인 체커 테스트베드에서 68 플러그 깊이까지 비교하였다. 결과는 다음과 같다. (1) 순수 SSS*는 메모리 사용량이 알파‑베타 대비 23배 높았으며, 노드 평가 수는 평균 510% 감소에 그쳤다. (2) DUAL*는 비슷한 메모리 오버헤드를 보였지만, 특정 포지션에서 탐색 효율이 크게 변동했다. (3) MTD(f)는 초기 추정값을 ‘희소 평가’(null‑move heuristic)로 얻어, 평균 1218% 적은 노드 평가와 메모리 사용량을 기록했다. 특히 NegaScout와 비교했을 때, 동일한 시간 제한 하에서 더 깊은 탐색 깊이를 달성했다.

이러한 결과는 베스트 퍼스트 탐색이 반드시 깊이 우선보다 우수하다는 기존 가설을 재검토하게 만든다. 핵심은 ‘알파‑베타 호출을 어떻게 파라미터화하느냐’이며, 프레임워크를 통해 베스트 퍼스트 전략을 깊이 우선 구조 안에 효율적으로 녹여낼 수 있다는 점이다. 따라서 실무에서는 복잡한 SSS* 구현 대신, MTD(f)와 같은 경계값 기반 변형을 채택하는 것이 메모리와 속도 모두에서 최적의 선택이 된다.