Шахматный движок с API

11

Я ищу шахматный движок, который предоставляет нормальный API, который я могу использовать с каким-то высокоуровневым языком программирования, таким как C # или python. Я прошел список лидеров (Houdini, Komodo, Stockfish и Rybka) и не смог найти никаких признаков того, что эти движки предоставляют API (что удивило меня и предположило, что я что-то упустил).

Чтобы быть менее смутным, вот что мне нужно из этого API:

  • быть в состоянии загрузить определенную игру в движок
  • уметь оценивать положение игры
  • быть в состоянии сделать шаг

Итак, кто-нибудь знает механизм, который обеспечивает четкий API для своих функций?

Сальвадор Дали
источник
2
UCI - это API, который получает команды через ключи командной строки и стандартный ввод. Вы можете написать обертку вокруг этих команд и вызывать команды по функциям.
Масуд
Да, UCI это именно то, что вы ищете. Все эти программы поддерживают UCI, как они интегрированы в такие программы, как ChessBase.
dfan

Ответы:

6

Как уже говорили другие, UCI - это API, который вы хотите. Полные спецификации протокола приведены здесь (zip-файл извлекается в текстовый файл): http://download.shredderchess.com/div/uci.zip

На самом деле это очень просто и понятно, движок UCI должен отвечать и отвечать в виде простого текста через stdin, stdout и stderr. Фактически, вы должны иметь возможность запускать исполняемый двоичный файл любого движка UCI на вашей платформе и вводить команды UCI вручную.

UCI облегчает выполнение инструкций от графического интерфейса пользователя или другого движка, чтобы указывать конкретному движку делать то, что вы хотите, в том числе анализировать определенный файл 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 и выход.

Для использования команд UCI у вас есть два основных варианта; Вы можете использовать существующий интерфейс (например, ChessX, Arena и множество других) или вы можете написать свой собственный код для выдачи инструкций движку или группе движков. Я полагаю, что уже могут быть оболочки Python для доступа к движкам UCI, но мне нужно перепроверить. Там определенно есть python-chess (импортные шахматы) и pychess (импортные pychess), я просто не могу вспомнить степень их функций. Я не могу вспомнить, где скрывается pychess (возможно, github или google code), но python-chess можно установить с помощью pip.

Бен
источник
UCI, похоже, не предоставляет API для установки значения кусков.
Snowcrash
Подобные вещи должны быть запрограммированы в самом движке, и шахматные движки будут использовать стандартные значения. Вам нужно всего лишь изменить его для какой-нибудь другой игры (например, фейри-шахматы), и есть вероятность, что вам нужно будет сделать гораздо больше изменений, чем просто значения фигур.
Бен
Я не согласен. Там нет standardценностей.
Snowcrash
Тогда вам, вероятно, придется раскошелиться на кодовую базу движка, чтобы вместо этого перепроектировать ее со значениями переменных. Затем установите отдельную конфигурацию для разветвленного и перекомпилированного механизма для использования новых значений. Затем продолжайте взаимодействовать через UCI в обычном режиме. В качестве альтернативы взгляните на другой формат языка движка, который использует GNU Chess, но я забыл его подробности.
Бен
3

Я гуглил на "api шахматного движка", но не видел реальных API. Как предлагается в комментариях к вашему вопросу, я бы пошел с UCI. Это также способ взаимодействия графического интерфейса с шахматными движками.

Если вы действительно хардкорный программист, вы всегда можете проверить движок с открытым исходным кодом Stockfish. Вполне может быть, что в нем встроен какой-то API, или вы можете сделать клон и создать свой собственный API для него.

http://stockfishchess.org/

Rafiek
источник
1
API для общения с Stockfish также UCI.
августа
1
В самом деле. Но использование UCI или погружение в код будет зависеть от того, как будет использоваться движок, а не для чего. Вопрос был неясен по этому вопросу.
Рафиек
Я думаю, что упомянул, что именно мне нужно сделать с двигателем. Загрузите определенный PNG и оценивайте после каждого хода.
Сальвадор Дали
Совершенно ясно, что вы хотите сделать с двигателем. Как вы будете его использовать, остается открытым. В каких настройках вы будете использовать двигатель? Вполне возможно, что UCI не может быть оптимальным способом связи с двигателем. Я предложил другой вариант, если UCI не достаточно для вас.
Рафиек
Извините, но я не могу понять, что вы подразумеваете под тем, как я собираюсь использовать двигатель. Можете ли вы уточнить это?
Сальвадор Дали
1

Batch First - это JIT-скомпилированный шахматный движок, написанный на Python, скомпилированный с использованием Numba, который позволяет легко взаимодействовать с C ++ и еще проще - с Python.

Хотя Batch First сам по себе является механизмом, а не API, он активно использует и использует пакет Python-Chess , который является великолепным API.

JIT-компиляция Batch First и использование массивов NumPy для представления плат позволяют более практичный интерфейс Python (по крайней мере, на порядок быстрее) для фактического использования в шахматном движке.

Ядром механизма является алгоритм поиска k-best-first с нулевым окном, используемый для оценки ANN в пакетах.

Полное раскрытие, я автор двигателя Batch First.

Сэм Рагуза
источник
-1

Вот портовая версия Stockfish в .Net: https://github.com/bpfliegel/Portfish

Чтобы использовать этот движок (после его компиляции), вам понадобится графический интерфейс, такой как Arena http://wwww.playwitharena.com или ScidVSPC http://scidvspc.sourceforge.net . Эти приложения используются для обеспечения приятного интерфейса и позволяют загружать игры / позиции, анализировать их (я уверен, что вы можете загрузить игру на pgn и проанализировать ее с помощью движка с критериями, такими как «n секунд на ход» или « n слоев за ход "), запускать матчи между двигателями и т. д.

В (почти) каждом шахматном движке вы должны найти что-то вроде файла uci.cs или xboard.cs, который передается для этой задачи связи.

(«Шахматный движок» - это программа, которая способна играть в шахматы, но не имеет графического интерфейса. То, как она взаимодействует с такими приложениями, как Arena или ScidVSPC, осуществляется с помощью протоколов UCI или xboard. Большинство шахматных программ написаны таким образом, поэтому разработчик может забыть о графическом интерфейсе и сосредоточиться на «мозге»).

Эмилио Диас
источник