API가 포함 된 체스 엔진


11

C # 또는 python과 같은 고급 프로그래밍 언어와 함께 사용할 수있는 일반 API를 제공하는 체스 엔진을 찾고 있습니다. 나는 리더 목록 (Houdini, Komodo, Stockfish 및 Rybka)을 살펴 보았고이 엔진이 API를 제공한다는 징후를 찾을 수 없었습니다.

모호하지 않게하기 위해이 API에서 필요한 것은 다음과 같습니다.

  • 엔진에 특정 게임을로드 할 수 있습니다
  • 게임의 위치를 ​​평가할 수있다
  • 움직일 수있다

그렇다면 누구나 기능에 명확한 API를 제공하는 엔진을 알고 있습니까?


2
UCI는 명령 행 스위치 및 표준 입력을 통해 명령을 얻는 API입니다. 해당 명령 주위에 랩퍼를 작성하고 함수별로 명령을 호출 할 수 있습니다.
masoud

예, UCI는 바로 당신이 찾고있는 것입니다. 이러한 모든 프로그램은 UCI를 지원하므로 ChessBase와 같은 프로그램에 통합됩니다.
dfan

답변:


6

다른 사람들이 말했듯이 UCI는 원하는 API입니다. 프로토콜의 전체 사양은 다음과 같습니다 (zip 파일은 텍스트 파일로 추출) : http://download.shredderchess.com/div/uci.zip

실제로 매우 간단하고 간단합니다. UCI 엔진은 stdin, stdout 및 stderr를 통해 일반 텍스트로 응답하고 응답해야합니다. 실제로, 플랫폼에서 UCI 엔진의 실행 가능 바이너리를 시작하고 UCI 명령을 수동으로 발행 할 수 있어야합니다.

UCI는 GUI 또는 다른 엔진의 지시를 통해 특정 PGN 파일 분석을 포함하여 특정 엔진에 원하는 모든 작업을 수행하도록 지시합니다. 그런 다음 e4가 e2e4가되는 것과 같이 확장 된 대수 형태로 엔진에 공급됩니다. 요구 사항의 두 번째 및 세 번째 지점은 UCI에서 표준이지만 요구 사항을 지원하는 것은 각 엔진 개발자의 몫입니다.

다음은 명령 행에서 작동중인 UCI의 예입니다.

bash-3.2$ ./stockfish-5-64 
Stockfish 5 64 by Tord Romstad, Marco Costalba and Joona Kiiski
uci
id name Stockfish 5 64
id author Tord Romstad, Marco Costalba and Joona Kiiski

option name Write Debug Log type check default false
option name Write Search Log type check default false
option name Search Log Filename type string default SearchLog.txt
option name Book File type string default book.bin
option name Best Book Move type check default false
option name Contempt Factor type spin default 0 min -50 max 50
option name Mobility (Midgame) type spin default 100 min 0 max 200
option name Mobility (Endgame) type spin default 100 min 0 max 200
option name Pawn Structure (Midgame) type spin default 100 min 0 max 200
option name Pawn Structure (Endgame) type spin default 100 min 0 max 200
option name Passed Pawns (Midgame) type spin default 100 min 0 max 200
option name Passed Pawns (Endgame) type spin default 100 min 0 max 200
option name Space type spin default 100 min 0 max 200
option name Aggressiveness type spin default 100 min 0 max 200
option name Cowardice type spin default 100 min 0 max 200
option name Min Split Depth type spin default 0 min 0 max 12
option name Threads type spin default 1 min 1 max 128
option name Hash type spin default 32 min 1 max 16384
option name Clear Hash type button
option name Ponder type check default true
option name OwnBook type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Emergency Move Horizon type spin default 40 min 0 max 50
option name Emergency Base Time type spin default 60 min 0 max 30000
option name Emergency Move Time type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 80 min 10 max 1000
option name UCI_Chess960 type check default false
uciok
isready
readyok
quit
bash-3.2$ 

내가 발행 한 명령은 uci, isready 및 quit입니다.

UCI 명령을 사용하려면 기본적으로 두 가지 주요 선택 사항이 있습니다. 기존 인터페이스 (예 : ChessX, Arena 및 기타 호스트)를 사용하거나 고유 코드를 작성하여 엔진 또는 엔진 그룹에 명령을 실행할 수 있습니다. UCI 엔진에 액세스하기위한 Python 래퍼가 이미 있다고 생각하지만 다시 확인해야합니다. python-chess (import chess)와 pychess (import pychess)가 분명히 있습니다. 그들의 기능의 범위를 기억할 수는 없습니다. pyches가 숨어있는 곳 (아마도 github 또는 Google 코드)을 기억할 수는 없지만 python-chess는 pip로 설치할 수 있습니다.


UCI는 조각의 가치를 설정하기위한 API를 제공하지 않는 것 같습니다.
Snowcrash

이런 종류의 것은 엔진 자체에 프로그램되어야하며 체스 엔진은 표준 값을 사용합니다. 다른 게임 (예 : 요정 체스)의 경우에만 변경해야하며 조각 값보다 훨씬 더 많이 변경해야 할 가능성이 있습니다.
Ben

동의하지 않습니다. standard값 이 없습니다 .
Snowcrash

그런 다음 엔진 코드베이스를 포크하여 변수 값으로 다시 디자인해야 할 수도 있습니다. 그런 다음 분기 및 재 컴파일 된 엔진에 대해 새 값을 사용하도록 별도의 구성을 설정하십시오. 그런 다음 평소처럼 UCI를 통해 계속 상호 작용하십시오. 또는 GNU Chess가 사용하는 다른 엔진 언어 형식을 살펴보십시오. 자세한 내용은 잊어 버립니다.
Ben

3

"chess engine api"에서 봤지만 실제 API는 보지 못했습니다. 귀하의 질문에 대한 의견에서 제안했듯이 UCI와 함께 갈 것입니다. 이것은 GUI가 체스 엔진과 통신하는 방법이기도합니다.

실제로 하드 코어 프로그래머라면 오픈 소스 엔진 Stockfish를 항상 확인할 수 있습니다. 어떤 종류의 API가 내장되어 있거나 복제본을 만들고 자체 API를 빌드 할 수 있습니다.

http://stockfishchess.org/


1
Stockfish와 대화하기위한 API도 UCI입니다.
dfan

1
실제로 그렇습니다. 그러나 UCI를 사용하거나 코드를 살펴보면 엔진이 어떻게 사용되는지에 따라 달라집니다. 그 질문은 명확하지 않았다.
Rafiek

엔진과 정확히 관련이있는 부분을 언급 한 것 같습니다. 특정 PNG를로드하고 이동 후 평가합니다.
살바도르 달리

엔진으로 무엇을하고 싶은지 완벽하게 알 수 있습니다. 사용 방법은 공개되어 있습니다. 어떤 설정에서 엔진을 사용 하시겠습니까? UCI가 엔진과 통신하는 최적의 방법이 아닐 수도 있습니다. UCI가 충분하지 않은 경우 다른 옵션을 제안했습니다.
Rafiek

죄송합니다. 엔진 사용 방법에 대해 어떻게 생각하십니까? 이것을 명확히 해 주시겠습니까?
살바도르 달리


1

Batch First 는 Numba를 사용하여 컴파일 된 Python으로 작성된 JIT 컴파일 된 체스 엔진으로, C ++ 인터페이스와 더 쉬운 Python 인터페이스가 가능합니다.

Batch First 자체는 API가 아닌 엔진이지만 Python-Chess 패키지를 많이 사용하고 의존합니다 .

Batch First의 JIT 컴파일 및 보드를 표현하기 위해 NumPy 배열을 사용하면 체스 엔진에서 실제 사용하기에보다 실용적인 Python 인터페이스 (최소한 10 배 더 빠름)가 가능합니다.

엔진의 핵심은 ANN을 일괄 적으로 평가하는 데 사용되는 제로 창 k- 최고 우선 검색 알고리즘입니다.

전체 공개, 나는 Batch First 엔진의 저자입니다.


-1

.Net에는 Stockfish의 포트 버전이 있습니다. https://github.com/bpfliegel/Portfish

일단 컴파일되면이 엔진을 사용하려면 Arena http://wwww.playwitharena.com 또는 ScidVSPC http://scidvspc.sourceforge.net 과 같은 GUI가 필요 합니다. 이 응용 프로그램은 멋진 인터페이스를 제공하고 게임 / 포지션을로드하고 분석 할 수 있도록합니다 (Pgn에 게임을로드하고 "이동 당 n 초"또는 " n 이동 당 플라이 "), 엔진 간 일치 실행 등

(거의) 모든 체스 엔진에서이 통신 작업을 수행하는 uci.cs 또는 xboard.cs 파일과 같은 것을 찾을 수 있습니다.

"체스 엔진"은 체스는 가능하지만 그래픽 인터페이스는없는 프로그램입니다. Arena 또는 ScidVSPC와 같은 응용 프로그램과 통신하는 방식은 UCI 또는 xboard 프로토콜을 사용하는 것입니다. 대부분의 체스 프로그램은 이런 방식으로 작성되므로 개발자는 GUI에 대해 잊고 "두뇌"에 집중할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.