Шаховий двигун з API


11

Я шукаю шаховий двигун, який забезпечує нормальний API, який я можу використовувати з якоюсь програмою високого рівня, наприклад, C # або python. Я переглянув список лідерів (Худіні, Комодо, 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 полегшує вказівки від GUI чи іншого двигуна, щоб вказати конкретному двигуну робити все, що ви хочете зробити, включаючи аналіз конкретного PGN-файлу (завантаження його здійснюється через GUI або подібний фронт-інтерфейс, необроблені рухи потім подаються в двигун у розширеній алгебраїчній формі, наприклад, 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, готовими і кинутими.

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


Здається, UCI не надає API для встановлення вартості штук.
Сніговий удар

Таку річ потрібно запрограмувати в самому двигуні, а шахові двигуни будуть використовувати стандартні значення. Вам потрібно буде змінити його лише на якусь іншу гру (наприклад, феєричні шахи), і, швидше за все, вам потрібно буде внести набагато більше змін, ніж лише значення штук.
Бен

Я не погоджуюсь. Немає standardзначень.
Сніговий удар

Тоді вам, мабуть, потрібно роздвоєти базу коду двигуна, щоб замість цього змінити його зі змінними значеннями. Потім встановіть окрему конфігурацію для роздвоєного та перекомпільованого двигуна для використання нових значень. Потім продовжуйте взаємодію через UCI як зазвичай. Крім того, подивіться на інший мовний формат двигуна, який використовує GNU Chess, проте я забуду його деталі.
Бен

3

Я гуглився на "шаховому двигуні api", але не бачив реальних API. Як було запропоновано в коментарях вашого запитання, я б пішов з UCI. Це також спосіб спілкування GUI з шаховими двигунами.

Якщо ви дійсно хардкор-програміст, ви завжди можете перевірити двигун з відкритим кодом Stockfish. Цілком може бути, що в ньому вбудований якийсь API, або ви можете зробити клон і створити для нього власний API.

http://stockfishchess.org/


1
API для розмови з Stockfish також є UCI.
dfan

1
Справді так і є. Але використання UCI або занурення в код буде залежати від того, як двигун буде використовуватися, а не для чого. Питання з цього питання не було зрозумілим.
Rafiek

Думаю, я згадав, що саме мені потрібно робити з двигуном. Завантажте певний PNG і оцінюйте після кожного ходу.
Сальвадор Далі

Цілком зрозуміло, що ви хочете робити з двигуном. Як ви будете користуватися ним, залишається відкритим. В яких налаштуваннях ви будете використовувати двигун? Можливо, UCI може бути не оптимальним способом спілкування з двигуном. Я запропонував інший варіант, якщо UCI для вас недостатній.
Rafiek

Вибачте, але я не можу зрозуміти, що ви маєте на увазі під тим, як я збираюся використовувати двигун. Чи можете ви уточнити це?
Сальвадор Далі


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. Більшість шахових програм написані таким чином, розробник може забути про GUI і зосередитись на "мозку").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.