Silnik szachowy z API

11

Szukam silnika szachowego, który zapewnia normalne API, którego można używać z jakimś językiem programowania wysokiego poziomu, takim jak C # lub python. Przejrzałem listę liderów (Houdini, Komodo, Sztokfisz i Rybka) i nie byłem w stanie znaleźć żadnych oznak, że silniki te zapewniają API (co mnie zaskoczyło i zasugerowało, że czegoś mi brakuje).

Aby być mniej niejasnym, oto, czego potrzebuję od tego interfejsu API:

  • być w stanie załadować określoną grę do silnika
  • być w stanie ocenić pozycję gry
  • być w stanie wykonać ruch

Czy ktoś zna silnik, który zapewnia przejrzysty interfejs API dla jego funkcji?

Salvador Dali
źródło
2
UCI to interfejs API, który pobiera polecenia za pomocą przełączników wiersza polecenia i standardowych danych wejściowych. Możesz napisać opakowanie wokół tych poleceń i wywoływać polecenia według funkcji.
masoud
Tak, UCI jest dokładnie tym, czego szukasz. Wszystkie te programy obsługują UCI, czyli są one zintegrowane z programami takimi jak ChessBase.
dfan

Odpowiedzi:

6

Jak powiedzieli inni, UCI jest interfejsem API, którego potrzebujesz. Pełna specyfikacja protokołu znajduje się tutaj (plik zip wypakowuje do pliku tekstowego): http://download.shredderchess.com/div/uci.zip

Jest to bardzo proste i proste, silnik UCI musi odpowiadać i odpowiadać zwykłym tekstem poprzez stdin, stdout i stderr. W rzeczywistości powinieneś być w stanie uruchomić wykonywalny plik binarny dowolnego silnika UCI na swojej platformie i ręcznie wydawać polecenia UCI.

UCI ułatwia instrukcje z GUI lub innego silnika, aby powiedzieć konkretnemu silnikowi, aby zrobił wszystko, co chcesz, w tym analizować konkretny plik PGN (ładowanie odbywa się za pomocą GUI lub podobnego interfejsu, surowe ruchy są następnie podawane do silnika w rozszerzonej formie algebraicznej, np. e4 staje się e2e4). Drugi i trzeci punkt twoich wymagań są standardowe w UCI, ale każdy deweloper silnika musi je wspierać (biorąc pod uwagę, jak wąskie są te wymagania, powinno to być większość z nich).

Oto przykład działania UCI w wierszu poleceń:

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$ 

Polecenia, które wydałem, to uci, już gotowe i zakończ.

Aby użyć poleceń UCI, zasadniczo masz dwie główne opcje; możesz użyć istniejącego interfejsu (np. ChessX, Arena i wielu innych) lub możesz napisać własny kod do wydawania instrukcji do silnika lub grupy silników. Wierzę, że mogą już istnieć opakowania Pythona do uzyskiwania dostępu do silników UCI, ale musiałbym dwukrotnie sprawdzić. Zdecydowanie są szachy pytona (szachy importowe) i szachy (importowe szachy), po prostu nie pamiętam zakresu ich funkcji. Nie pamiętam, gdzie czai się pychess (prawdopodobnie github lub kod Google), ale szachy python można zainstalować za pomocą pip.

Ben
źródło
Wydaje się, że UCI nie zapewnia interfejsu API do ustawiania wartości elementów.
Snowcrash
Tego rodzaju rzeczy powinny być zaprogramowane w samym silniku, a silniki szachowe będą używać standardowych wartości. Musisz to zmienić tylko dla innej gry (np. Szachy faerie), a są szanse, że będziesz musiał wprowadzić o wiele więcej zmian niż tylko wartości sztuk.
Ben,
Nie zgadzam się. Nie ma standardwartości.
Snowcrash
Wtedy prawdopodobnie będziesz musiał rozwidlić bazę kodu silnika, aby zamiast tego przeprojektować ją za pomocą zmiennych wartości. Następnie ustaw osobną konfigurację dla rozwidlonego i ponownie skompilowanego silnika, aby użyć nowych wartości. Następnie kontynuuj interakcję za pośrednictwem UCI, jak zwykle. Alternatywnie spójrz na inny format języka silnika, którego używa GNU Chess, jednak nie pamiętam jego szczegółów.
Ben
3

Przeglądałem „API silnika szachowego”, ale nie widziałem żadnych prawdziwych API. Jak sugerowano w komentarzach do twojego pytania, wybrałbym UCI. W ten sposób GUI komunikują się z silnikami szachowymi.

Jeśli jesteś naprawdę hardcorowym programistą, zawsze możesz sprawdzić silnik open source Stockfish. Może się zdarzyć, że jest w nim wbudowany interfejs API lub możesz utworzyć klon i zbudować dla niego własny interfejs API.

http://stockfishchess.org/

Rafiek
źródło
1
Interfejs API do komunikacji ze Sztokfiszem to także UCI.
dfan
1
Rzeczywiście jest. Ale korzystanie z UCI lub nurkowanie w kodzie będzie zależeć od tego, w jaki sposób silnik będzie używany, a nie do czego. Pytanie nie było jasne.
Rafiek
Myślę, że wspomniałem, co dokładnie muszę zrobić z silnikiem. Załaduj określony PNG i oceń po każdym ruchu.
Salvador Dali
Jest całkowicie jasne, co chcesz zrobić z silnikiem. To, jak będziesz go używać, pozostaje otwarte. W jakim ustawieniu będziesz korzystać z silnika? Możliwe, że UCI może nie być optymalnym sposobem komunikacji z silnikiem. Zasugerowałem inną opcję, jeśli UCI nie jest dla Ciebie wystarczające.
Rafiek
Przepraszam, ale nie rozumiem, co masz na myśli mówiąc o tym, jak zamierzam korzystać z silnika. Czy możesz to wyjaśnić?
Salvador Dali,
1

Batch First to skompilowany przez JIT silnik szachowy napisany w Pythonie, skompilowany przy użyciu Numby, który umożliwiłby łatwe interfejsy C ++, a nawet jeszcze łatwiejsze interfejsy Python.

Chociaż sam pakiet Batch First jest silnikiem innym niż API, mocno wykorzystuje i opiera się na pakiecie Python-Chess , który jest niesamowitym interfejsem API.

Kompilacja JIT Batch First i użycie tablic NumPy do reprezentowania tablic, pozwala na bardziej praktyczny interfejs Pythona (przynajmniej o rząd wielkości szybszy) do faktycznego użycia w silniku szachowym.

Rdzeniem silnika jest algorytm wyszukiwania z zerowym oknem k-best-first używany do oceny ANN w partiach.

Pełne ujawnienie, jestem autorem silnika Batch First.

Sam Ragusa
źródło
-1

Oto portowa wersja Sztokfisza w .Net: https://github.com/bpfliegel/Portfish

Aby korzystać z tego silnika (po skompilowaniu), musisz mieć GUI, takie jak Arena http://wwww.playwitharena.com lub ScidVSPC http://scidvspc.sourceforge.net . Aplikacje te zapewniają przyjemny interfejs i pozwalają ładować gry / pozycje, analizować je (jestem prawie pewien, że możesz załadować grę na pgn i przeanalizować ją za pomocą silnika z kryteriami takimi jak „n sekund na ruch” lub „ n warstw na ruch ”), uruchamiaj mecze między silnikami itp

W (prawie) każdym silniku szachowym powinieneś znaleźć coś w rodzaju pliku uci.cs lub xboard.cs, który jest zaangażowany w to zadanie komunikacyjne.

(„Mechanizm szachowy” to program, który potrafi grać w szachy, ale nie ma interfejsu graficznego. Sposób, w jaki komunikuje się z aplikacjami takimi jak Arena lub ScidVSPC, odbywa się za pomocą protokołów UCI lub xboard. Większość programów szachowych jest pisanych w ten sposób, więc deweloper może zapomnieć o interfejsie GUI i skoncentrować się na „mózgu”).

Emilio Díaz
źródło