Mesin catur dengan API

11

Saya mencari mesin catur yang menyediakan API normal yang dapat saya gunakan dengan beberapa bahasa pemrograman tingkat tinggi seperti C # atau python. Saya membaca daftar pemimpin (Houdini, Komodo, Stockfish dan Rybka) dan tidak dapat menemukan tanda-tanda bahwa mesin ini menyediakan API (yang mengejutkan saya dan menyarankan saya kehilangan sesuatu).

Agar tidak terlalu kabur, inilah yang saya butuhkan dari API ini:

  • dapat memuat game tertentu ke dalam mesin
  • dapat mengevaluasi posisi permainan
  • bisa bergerak

Jadi, apakah ada yang tahu mesin yang menyediakan API yang jelas untuk fungsinya?

Salvador Dali
sumber
2
UCI adalah API yang mendapat perintah melalui sakelar baris perintah dan input standar. Anda dapat menulis pembungkus di sekitar perintah tersebut dan memanggil perintah dengan fungsi.
masoud
Ya, UCI tepat seperti yang Anda cari. Semua program tersebut mendukung UCI, yang terintegrasi dengan program seperti ChessBase.
dfan

Jawaban:

6

Seperti yang orang lain katakan, UCI adalah API yang Anda inginkan. Spesifikasi lengkap protokol ada di sini (file zip diekstraksi ke file teks): http://download.shredderchess.com/div/uci.zip

Ini sebenarnya sangat lurus ke depan dan sederhana, mesin UCI harus merespons dan membalas dalam teks biasa melalui stdin, stdout dan stderr. Bahkan, Anda harus dapat meluncurkan biner yang dapat dieksekusi dari mesin UCI di platform Anda dan mengeluarkan perintah UCI secara manual.

UCI memfasilitasi instruksi dari GUI atau mesin lain untuk memberi tahu mesin spesifik untuk melakukan apa pun yang Anda inginkan, termasuk menganalisis file PGN tertentu (pemuatannya melalui GUI atau front-end serupa, gerakan mentah kemudian diumpankan ke mesin dalam bentuk aljabar yang diperpanjang, seperti e4 menjadi e2e4). Poin kedua dan ketiga dari persyaratan Anda adalah standar dengan UCI, tetapi terserah masing-masing pengembang mesin untuk mendukungnya (mengingat seberapa ramping persyaratan tersebut, itulah yang seharusnya sebagian besar dari mereka).

Berikut adalah contoh tindakan UCI di baris perintah:

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$ 

Perintah yang saya keluarkan adalah uci, sudah dan berhenti.

Untuk memanfaatkan perintah UCI Anda pada dasarnya memiliki dua pilihan utama; Anda dapat menggunakan antarmuka yang ada (misalnya ChessX, Arena, dan sejumlah lainnya) atau Anda dapat menulis kode Anda sendiri untuk mengeluarkan instruksi ke mesin atau sekelompok mesin. Saya percaya mungkin sudah ada pembungkus Python untuk mengakses mesin UCI, tapi saya perlu memeriksa ulang. Pasti ada python-catur (impor catur) dan pychess (impor pychess), saya hanya tidak bisa mengingat sejauh mana fungsinya. Saya tidak ingat di mana pychess bersembunyi (mungkin kode github atau google), tetapi python-catur dapat diinstal dengan pip.

Ben
sumber
UCI tampaknya tidak menyediakan API untuk mengatur nilai karya.
Snowcrash
Hal semacam itu harus diprogram ke dalam mesin itu sendiri dan mesin catur akan menggunakan nilai standar. Anda hanya perlu mengubahnya untuk beberapa game lain (mis. Catur faerie) dan kemungkinan Anda harus membuat lebih banyak perubahan daripada hanya nilai bagiannya.
Ben
Saya tidak setuju. Tidak ada standardnilai.
Snowcrash
Maka Anda mungkin perlu garpu basis kode mesin untuk mendesain ulang dengan nilai variabel sebagai gantinya. Kemudian atur konfigurasi terpisah untuk mesin bercabang dan dikompilasi ulang untuk menggunakan nilai-nilai baru. Kemudian terus berinteraksi melalui UCI seperti biasa. Atau melihat format bahasa mesin lain yang digunakan Catur GNU, saya lupa detailnya.
Ben
3

Saya sudah googled di "mesin catur api" tetapi belum melihat API nyata. Seperti yang disarankan dalam komentar pertanyaan Anda, saya akan menggunakan UCI. Ini juga cara GUI berkomunikasi dengan mesin catur.

Jika Anda benar-benar seorang programmer hardcore, Anda selalu dapat memeriksa Stockfish engine open source. Bisa jadi ada semacam API yang dibangun di dalamnya, atau Anda bisa membuat klon dan membuat API sendiri untuk itu.

http://stockfishchess.org/

Rafiek
sumber
1
API untuk berbicara dengan Stockfish juga UCI.
dfan
1
Memang itu. Tetapi menggunakan UCI atau menyelam ke dalam kode akan tergantung pada bagaimana mesin akan digunakan dan bukan untuk apa. Pertanyaannya tidak jelas tentang itu.
Rafiek
Saya pikir saya menyebutkan apa yang sebenarnya perlu saya lakukan dengan mesin. Muat PNG tertentu dan evaluasi setelah setiap gerakan.
Salvador Dali
Sangat jelas apa yang ingin Anda lakukan dengan mesin. Bagaimana Anda akan menggunakannya dibiarkan terbuka. Dalam pengaturan apa Anda akan menggunakan mesin? Bisa jadi UCI mungkin bukan cara optimal untuk berkomunikasi dengan mesin. Saya menyarankan opsi lain jika UCI tidak cukup untuk Anda.
Rafiek
Maaf, tapi saya tidak bisa mengerti apa yang Anda maksud dengan bagaimana saya akan menggunakan mesin. Bisakah Anda menjelaskan ini?
Salvador Dali
1

Batch First adalah mesin catur JIT yang dikompilasi yang ditulis dengan Python, dikompilasi menggunakan Numba, yang akan memungkinkan antarmuka C ++ mudah dan antarmuka Python lebih mudah.

Sementara Batch First sendiri adalah mesin bukan API, ia sangat menggunakan dan bergantung pada paket Python-Chess , yang merupakan API luar biasa.

Kompilasi JIT dari Batch First, dan penggunaan array NumPy untuk mewakili papan, memungkinkan antarmuka Python yang lebih praktis (setidaknya urutan besarnya lebih cepat) untuk penggunaan aktual dalam mesin catur.

Inti dari mesin adalah algoritma pencarian nol-jendela k-best-first yang digunakan untuk mengevaluasi JST dalam batch.

Pengungkapan penuh, saya adalah penulis mesin Batch First.

Sam Ragusa
sumber
-1

Di sini ada versi port dari Stockfish di .Net: https://github.com/bpfliegel/Portfish

Untuk menggunakan mesin ini (setelah dikompilasi), Anda akan membutuhkan GUI seperti Arena http://wwww.playwitharena.com atau ScidVSPC http://scidvspc.sourceforge.net . Aplikasi ini digunakan untuk menyediakan antarmuka yang bagus dan memungkinkan Anda memuat game / posisi, menganalisisnya (Saya cukup yakin Anda dapat memuat game di pgn dan menganalisisnya dengan mesin dengan kriteria seperti "n detik per gerakan" atau " n lapisan per gerakan "), jalankan kecocokan antar mesin, dll

Di (hampir) setiap mesin catur Anda harus menemukan sesuatu seperti file uci.cs atau xboard.cs yang dikomit untuk tugas komunikasi ini.

("Mesin catur" adalah program yang mampu bermain catur tetapi tidak memiliki antarmuka grafis. Cara berkomunikasi dengan aplikasi seperti Arena atau ScidVSPC adalah dengan protokol UCI atau xboard. Sebagian besar program catur ditulis dengan cara ini, jadi pengembang dapat melupakan hal-hal GUI dan fokus pada "otak").

Emilio Díaz
sumber