체스 엔진

컴퓨터 체스에서 체스 엔진(chess engine)은 체스(chess) 또는 체스 변형 위치를 분석하고 가장 강력한 것으로 간주되는 동작 또는 동작 목록을 생성하는 컴퓨터 프로그램이다. 체스 엔진은 일반적으로 그래픽이나 GUI환경 윈도우가 없는 백엔드에서 서비스되는 프로세싱 구현이다. 명령 줄 인터페이스(CLI)가 지원되는 경우는 있다. 엔진은 일반적으로 사용자가  윈도우의 그패픽적인 요소에서 키보드, 마우스 또는 터치 스크린을 통해 상호 작용할 수 있는 체스 베이스(Chessbase) 또는 윈보드(WinBoard)와 같은 윈도우의 그래픽 사용자 인터페이스(GUI)환경인 프런트 엔드와 함께 사용된다. 이를 통해 사용자는 각각에 대한 새로운 사용자 인터페이스를 배우지 않고도 여러 엔진을 상대로 플레이 할 수 있으며 서로 다른 엔진이 서로 플레이 할 수도 있다. 지난 몇 년 동안 PC에서뿐만아니라 휴대폰과 태블릿에서 사용할 수 있는 체스 엔진이 개발되어 사용이 더 광범위해지고 접근이 쉬워졌다. 이 목록에는 스톡피쉬(Stockfish),  코모도(Komodo), 텍셀(Texel), 바가털(Bagatur), 프리츠(fritz), GNU 체스(GNU chess)  등과 같은 체스 엔진이 포함된다.

**역사**
"체스 엔진"이라는 용어의 의미는 시간이 지남에 따라 변화해 왔다. 1986년 Linda와 Tony Scherzer는 그들의 프로그램 Bebe를 제4회 세계 컴퓨터 체스 챔피언십에 출품하여 "Chess Engine"에서 실행했다. "Chess Engine"은 그들의 회사인 Sys-10, Inc.에서 제작 및 판매하는 체스 컴퓨터 하드웨어의 브랜드 이름이다. 1990년까지 딥 블루의 그들의 프로그램에 '검색 엔진'을 제공한다고 기술했는데, 이는 하드웨어가 아닌 소프트웨어를 의미하는 것으로 보인다.
1994년에 스티븐 J. 에드워즈는 PGN(Portable Game Notation) 사양을 발표했다. PGN 판독 프로그램에는 "전체 체스 엔진"이 필요하지 않다고 언급한다. 또한 XBoard, pgnRead 및 Slappy 데이터베이스의 세 가지 "그래픽 사용자 인터페이스"(GUI)도 언급한다.
2000년대 중반에는 엔진이 너무 강력해져서 최고의 인간 플레이어보다 더 나은 성과를 낼 수 있었다. 오락적 목적, 특히 힘이 제한된 엔진을 사용하는 경우를 제외하면 인간과 엔진이 경쟁하는 일은 이제 드물다. 엔진은 점차 상대라기보다는 분석을 위한 도구로 여겨지고 있다.
2000년에 슈테판 마이어-칼렌과 프란츠 후버는 더 광범위한 기능을 도입한 더욱 세부적인 프로토콜인 Universal Chess Interface를 출시했다. 체스베이스는 곧 Winboard 엔진에 대한 지원을 중단하고, 엔진 GUI와 체스베이스 프로그램에 UCI에 대한 지원을 추가했다. 요즘 최고 엔진은 대부분 UCI이다. 1998년부터 독일 회사인 Millenium 2000은 전용 체스 컴퓨터에서 소프트웨어 시장으로 잠시 진출하여 ChessGenius나 Shredder가 들어 있는 일련의 CD에 대한 Millennium Chess System(MCS) 프로토콜을 개발했지만 2001년 이후로는 새로운 소프트웨어 출시를 중단했다.

**증가하는 실력**
체스 엔진의 플레이 실력은 계속해서 증가하고 있다. 이는 일정 시간 안에 훨씬 더 깊은 계산을 할 수 있게 해주는 처리 능력의 향상에 부분적으로 기인한다. 또한, 프로그래밍 기술이 향상되어 엔진이 분석하는 노선을 더 선택적으로 선택할 수 있고 위치에 대한 이해도가 더 높아졌다. 체스 엔진은 종종 사전에 계산된 방대한 오프닝 "북"을 사용하여 처음 몇 수 동안 플레이 강도를 높이는데, 심층적으로 분석된 라인에서는 최대 20수 이상까지 가능하다.
일부 체스 엔진은 체스 포지션에 대한 데이터베이스와 함께 이전에 계산된 평가 및 가장 좋은 움직임을 유지 관리한다. 사실상, 반복되는 체스 포지션에 대한 일종의 "사전"이다. 이러한 위치는 미리 계산되어 있으므로 엔진은 데이터베이스에 표시된 움직임 중 하나만 플레이하여 컴퓨팅 시간을 절약하고 더 강력하고 빠른 플레이를 제공한다.
일부 체스 엔진은 엔드게임 동안 플레이 강도를 높이기 위해 엔드게임 테이블베이스를 사용한다. 엔드게임 테이블베이스에는 소량의 자료와 함께 가능한 모든 엔드게임 포지션이 포함되어 있다. 각 위치는 이동할 차례인 플레이어의 승리, 패배 또는 무승부로 확실하게 결정되며, 양쪽이 가장 잘 플레이할 수 있는 이동 횟수가 끝까지 표시된다. 테이블베이스는 각 포지션에 대해 최적의 수비에 대해 가장 빠르게 승리하는 움직임이나, 최적의 공격에 대해 가장 느리게 패배하는 움직임을 식별한다. 이러한 테이블베이스는 7개 이하의 말이 있는 모든 체스 엔드게임에 사용할 수 있다(6개의 흰색 말이 1개의 검은색 킹 과 맞붙는 경우와 같은 사소한 엔드게임 위치는 제외).
돌이킬 수 없는 개선을 이루기 위한 엔딩에서의 기동이 체스 엔진의 계산 범위보다 더 많은 이동을 필요로 하는 경우, 엔진은 엔드게임 테이블베이스를 사용하지 않고는 최상의 이동을 찾을 수 없다는 보장이 없으며, 많은 경우 50수 규칙에 위배될 수 있다. 분산 컴퓨팅은 체스 엔진의 소프트웨어 코드를 개선하는 데에도 사용된다. 2013년에 스톡피시 체스 플레이 프로그램 개발자들은 소프트웨어 코드를 개선하기 위해 분산 컴퓨팅을 사용하기 시작했다. 6 , 총 745년 이상의 CPU 시간이 4억 8,500만 개 이상의 체스 게임을 플레이하는 데 사용되었으며 그 결과는 체스 플레이 소프트웨어에 작고 점진적인 개선을 만드는 데 사용되었다. 엔드류 그랜트(Andrew Grant)는 스톡피시의 테스트 프레임워크를 기반으로 분산 컴퓨팅 테스트 프레임워크 OpenBench를 시작했으며 이는 현재 체스 엔진에서 가장 널리 사용되는 테스트 프레임워크이다.
1990년대 후반에는 상위 엔진들이 너무 강력해져서 그들을 상대로 경기에서 이길 수 있는 플레이어가 거의 없게 되었다. 플레이어에게 더 많은 기회를 주기 위해, 엔진에는 플레이어의 강점을 조정하거나 제한하는 설정이 포함되기 시작했다. 2000년에 슈테판 마이어-칼렌과 프란츠 후버가 Universal Chess Interface 프로토콜을 출시했을 때 uci_limitstrength와 uci_elo라는 매개변수를 포함시켰다. 이를 통해 엔진 작성자는 평가 목록 중 하나를 통해 보정된 Elo 평가에 따라 다양한 레벨을 제공할 수 있었다. 대부분의 UCI 엔진용 GUI는 사용자가 메뉴 내에서 Elo 등급을 설정할 수 있도록 허용한다. 이 매개변수를 채택하지 않은 엔진조차도 조정 가능한 강도 매개변수를 갖는 경우가 있다(예: Stockfish 11). uci_elo 매개변수가 있는 엔진으로는 Houdini, Fritz 15–16, Rybka, Shredder, Hiarcs, Junior, Zappa, Sjeng 등이 있다. Shredder, Chess Assistant, Convekta Aquarium,  Hiarcs Chess Explorer 및 Martin Blume's Arena  와 같은 GUI에는 엔진의 uci_elo 매개변수를 설정하기 위한 드롭다운 메뉴가 있다.
체스 엔진 평가 목록은 상대적인 엔진 강도에 대한 통계적으로 유의미한 측정값을 제공하는 것을 목표로 한다. 이러한 목록은 엔진 간에 여러 게임을 진행한다. 일부는 엔진의 강도 차이만을 측정하기 위해 오프닝 북, 시간 제어, 엔진에 사용하는 컴퓨터 하드웨어를 표준화하기도 한다. 이러한 목록은 순위를 제공할 뿐만 아니라, 해당 평가에 대한 오차 범위도 제공한다.

**같이 보기**
 보드게임- 솔리테어

**각주**

분류:컴퓨터 체스