Я ищу шахматный движок, который предоставляет нормальный API, который я могу использовать с каким-то высокоуровневым языком программирования, таким как C # или python. Я прошел список лидеров (Houdini, Komodo, Stockfish и Rybka) и не смог найти никаких признаков того, что эти движки предоставляют API (что удивило меня и предположило, что я что-то упустил).
Чтобы быть менее смутным, вот что мне нужно из этого API:
- быть в состоянии загрузить определенную игру в движок
- уметь оценивать положение игры
- быть в состоянии сделать шаг
Итак, кто-нибудь знает механизм, который обеспечивает четкий API для своих функций?
engines
programming
Сальвадор Дали
источник
источник
Ответы:
Как уже говорили другие, UCI - это API, который вы хотите. Полные спецификации протокола приведены здесь (zip-файл извлекается в текстовый файл): http://download.shredderchess.com/div/uci.zip
На самом деле это очень просто и понятно, движок UCI должен отвечать и отвечать в виде простого текста через stdin, stdout и stderr. Фактически, вы должны иметь возможность запускать исполняемый двоичный файл любого движка UCI на вашей платформе и вводить команды UCI вручную.
UCI облегчает выполнение инструкций от графического интерфейса пользователя или другого движка, чтобы указывать конкретному движку делать то, что вы хотите, в том числе анализировать определенный файл PGN (его загрузка осуществляется через графический интерфейс или аналогичный интерфейс, необработанные шаги затем подаются на двигатель в расширенной алгебраической форме, например, e4 становится e2e4). Второй и третий пункты ваших требований являются стандартными для UCI, но каждый разработчик движка должен их поддерживать (учитывая, насколько эти требования просты, их должно быть большинство).
Вот пример UCI в действии в командной строке:
Команды, которые я дал, были uci, isready и выход.
Для использования команд UCI у вас есть два основных варианта; Вы можете использовать существующий интерфейс (например, ChessX, Arena и множество других) или вы можете написать свой собственный код для выдачи инструкций движку или группе движков. Я полагаю, что уже могут быть оболочки Python для доступа к движкам UCI, но мне нужно перепроверить. Там определенно есть python-chess (импортные шахматы) и pychess (импортные pychess), я просто не могу вспомнить степень их функций. Я не могу вспомнить, где скрывается pychess (возможно, github или google code), но python-chess можно установить с помощью pip.
источник
standard
ценностей.Я гуглил на "api шахматного движка", но не видел реальных API. Как предлагается в комментариях к вашему вопросу, я бы пошел с UCI. Это также способ взаимодействия графического интерфейса с шахматными движками.
Если вы действительно хардкорный программист, вы всегда можете проверить движок с открытым исходным кодом Stockfish. Вполне может быть, что в нем встроен какой-то API, или вы можете сделать клон и создать свой собственный API для него.
http://stockfishchess.org/
источник
python-chess предоставляет полезный API и поддерживает UCI, по-видимому:
http://python-chess.readthedocs.io/en/v0.15.3/uci.html?highlight=engine
Приведенная выше ссылка дает пример «stockfish».
источник
Batch First - это JIT-скомпилированный шахматный движок, написанный на Python, скомпилированный с использованием Numba, который позволяет легко взаимодействовать с C ++ и еще проще - с Python.
Хотя Batch First сам по себе является механизмом, а не API, он активно использует и использует пакет Python-Chess , который является великолепным API.
JIT-компиляция Batch First и использование массивов NumPy для представления плат позволяют более практичный интерфейс Python (по крайней мере, на порядок быстрее) для фактического использования в шахматном движке.
Ядром механизма является алгоритм поиска k-best-first с нулевым окном, используемый для оценки ANN в пакетах.
Полное раскрытие, я автор двигателя Batch First.
источник
Вот портовая версия 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. Большинство шахматных программ написаны таким образом, поэтому разработчик может забыть о графическом интерфейсе и сосредоточиться на «мозге»).
источник