API ile satranç motoru


11

C # veya python gibi bazı üst düzey programlama dilleriyle kullanabileceğim normal bir API sağlayan bir satranç motoru arıyorum. Liderler listesini (Houdini, Komodo, Stokish ve Rybka) geçirdim ve bu motorların API'yi sağladığına dair herhangi bir işaret bulamadım (ki bu beni şaşırttı ve bir şey eksik olduğumu önerdi).

Daha az belirsiz olmak için, bu API'dan ihtiyacım olan şey:

  • motora belirli bir oyunu yükleyebilmeli
  • Oyunun konumunu değerlendirebilme
  • hareket edebilmek

Peki, kimse işlevlerine net bir API sağlayan bir motor biliyor mu?


2
UCI, komut satırı anahtarları ve standart giriş üzerinden komut alan bir API'dir. Bu komutların etrafına bir sarmalayıcı yazabilir ve komutlarla işlevlere çağrı yapabilirsiniz.
masoud

Evet, UCI tam olarak aradığınız şey. Tüm bu programlar UCI'yi destekler, bu da ChessBase gibi programlara nasıl entegre edilir.
dfan

Yanıtlar:


6

Diğerlerinin söylediği gibi, UCI istediğiniz API'dir. Protokolün tüm özellikleri burada (zip dosyası bir metin dosyasına çıkarılır ): http://download.shredderchess.com/div/uci.zip

Aslında çok basit ve basit, bir UCI motoru düz metinle stdin, stdout ve stderr aracılığıyla yanıt vermeli ve cevap vermelidir. Aslında, platformunuzdaki herhangi bir UCI motorunun çalıştırılabilir ikili dosyasını çalıştırabilmeli ve UCI komutlarını manuel olarak verebilmelisiniz.

UCI, bir GUI'den veya başka bir motordan gelen talimatları, belirli bir motora, belirli bir PGN dosyasını analiz etmek de dahil olmak üzere ne yapmak isterse yapmasını söyleme talimatını kolaylaştırır (yükleme GUI veya benzeri ön uçtan yapılır, ham hareketler daha sonra motora e4 e2e4 olmak gibi genişletilmiş cebirsel formda beslenir). İhtiyaçlarınızın ikinci ve üçüncü noktaları UCI'de standarttır, ancak bunları desteklemek her motor geliştiricisine bağlıdır (bu gereksinimlerin ne kadar zayıf olduğu göz önüne alındığında, çoğu olmalıdır).

Komut satırında çalışan bir UCI örneği:

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$ 

Verdiğim komutlar uci, isready ve quit idi.

UCI komutlarını kullanmak için esasen iki ana seçeneğiniz vardır; mevcut bir arabirimi (örneğin ChessX, Arena ve diğer bir dizi) kullanabilir veya bir motora veya motor grubuna talimatlar vermek için kendi kodunuzu yazabilirsiniz. UCI motorlarına erişmek için zaten Python sarmalayıcıları olabileceğine inanıyorum, ancak iki kez kontrol etmem gerekiyor. Kesinlikle python satranç (satranç ithal) ve pychess (ithalat pychess) var, işlevlerinin kapsamını hatırlayamıyorum. Pychess'in gizlendiğini hatırlayamıyorum (muhtemelen github veya google kodu), ancak python-satranç pip ile kurulabilir.


UCI, parçaların değerini ayarlamak için bir API sağlamıyor gibi görünüyor.
Snowcrash

Bu tür şeyler motorun kendisine programlanmalıdır ve satranç motorları standart değerler kullanır. Bunu sadece başka bir oyun için değiştirmeniz gerekir (örn. Peri satrancı) ve muhtemelen parça değerlerinden çok daha fazla değişiklik yapmanız gerekecek.
Ben

Katılmıyorum. Değer yok standard.
Snowcrash

Ardından, bunun yerine değişken değerlerle yeniden tasarlamak için bir motor kodu tabanını çatallamanız gerekir. Ardından çatallı ve yeniden derlenmiş motorun yeni değerleri kullanması için ayrı bir yapılandırma ayarlayın. Ardından normal olarak UCI ile etkileşime devam edin. Alternatif olarak, GNU Chess'in kullandığı diğer motor dili formatına bakın, yine de ayrıntılarını unutuyorum.
Ben

3

Ben "satranç motoru api" googled ama herhangi bir gerçek API görmedim. Sorunuzun yorumlarında önerildiği gibi UCI ile giderdim. GUI'lerin satranç motorlarıyla iletişim kurmasının yolu da budur.

Gerçekten hardcore bir programcı iseniz açık kaynak motoru Stockish her zaman kontrol edebilirsiniz. İçinde bir çeşit API var olabilir ya da bir klon yapabilir ve bunun için kendi API'nizi oluşturabilirsiniz.

http://stockfishchess.org/


1
Stockish ile konuşmak için API da UCI.
dfan

1
Gerçekten öyle. Ancak UCI kullanmak veya koda dalış yapmak, motorun ne için kullanılacağına bağlıdır. Bu konuda soru net değildi.
Rafiek

Motorla tam olarak ne yapmam gerektiğini söyledim. Belirli bir PNG'yi yükleyin ve her hareketten sonra değerlendirin.
Salvador Dali

Motorla ne yapmak istediğinizi gayet net. Nasıl kullanacağınız açıkta bırakılır. Motoru hangi ayarda kullanacaksınız? UCI, motorla iletişim kurmak için en uygun yol olmayabilir. UCI sizin için yeterli değilse başka bir seçenek önerdim.
Rafiek

Üzgünüm, ama motoru nasıl kullanacağımla ne demek istediğini anlayamıyorum. Lütfen bunu açıklığa kavuşturabilir misiniz?
Salvador Dali


1

Batch First , Python'da yazılmış, kolay C ++ arayüzüne ve hatta daha kolay Python arayüzüne izin verecek olan Numba kullanılarak derlenmiş bir JIT derlenmiş satranç motorudur.

Batch First'in kendisi API değil bir motor olsa da, harika bir API olan Python-Chess paketini büyük ölçüde kullanıyor ve kullanıyor .

Batch First'in BIT derlemesi ve panoları temsil etmek için NumPy dizilerinin kullanılması, bir satranç motorunda gerçek kullanım için daha pratik bir Python arabirimi (en azından daha hızlı bir büyüklük sırası) sağlar.

Motorun çekirdeği, yığınlardaki YSA'ları değerlendirmek için kullanılan sıfır-pencere k-en iyisi-ilk arama algoritmasıdır.

Tam açıklama, Ben Batch First motorunun yazarıyım.


-1

Burada Stockish'in bir bağlantı noktası sürümü var. Net: https://github.com/bpfliegel/Portfish

Bu motoru kullanmak için (derlendikten sonra) Arena gibi bir GUI http://wwww.playwitharena.com veya ScidVSPC http://scidvspc.sourceforge.net adresinden yararlanacaksınız . Bu uygulamalar hoş bir arayüz sağlamak ve oyunları / pozisyonları yüklemenizi, bunları analiz etmenizi sağlar (pgn üzerine bir oyun yükleyebileceğiniz ve "hareket başına n saniye" veya "gibi ölçütlere sahip bir motorla analiz edebileceğinizden eminim. hareket başına kat sayısı "), motorlar arasında eşleşme yapın vb.

(Hemen hemen her satranç motorunda), bu iletişim görevine bağlı bir uci.cs veya xboard.cs dosyası gibi bir şey bulmalısınız.

(Bir "satranç motoru" satranç oynayabilen ancak grafik arayüzü olmayan bir programdır.Arena veya ScidVSPC gibi uygulamalarla iletişim kurma şekli UCI veya xboard protokolleri ile ilgilidir. Satranç programlarının çoğu bu şekilde yazılmıştır. geliştirici GUI şeyleri unutabilir ve "beyin" odaklanmak).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.