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?
engines
programming
Salvador Dali
sumber
sumber
Jawaban:
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:
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.
sumber
standard
nilai.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/
sumber
python-chess menyediakan API yang bermanfaat dan mendukung UCI, tampaknya:
http://python-chess.readthedocs.io/en/v0.15.3/uci.html?highlight=engine
Tautan di atas memberikan contoh 'stockfish'.
sumber
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.
sumber
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").
sumber