Motore di scacchi con API


11

Sto cercando un motore di scacchi che fornisca un'API normale che posso usare con alcuni linguaggi di programmazione di alto livello come C # o Python. Ho esaminato l'elenco dei leader (Houdini, Komodo, Stockfish e Rybka) e non sono stato in grado di trovare alcun segno che questi motori forniscano l'API (che mi ha sorpreso e mi ha suggerito che mi manca qualcosa).

Per essere meno vago, ecco cosa mi serve da questa API:

  • essere in grado di caricare un gioco specifico nel motore
  • essere in grado di valutare la posizione del gioco
  • essere in grado di fare una mossa

Quindi, qualcuno conosce un motore che fornisce un'API chiara alle sue funzioni?


2
UCI è un'API che ottiene il comando tramite opzioni della riga di comando e input standard. È possibile scrivere un wrapper attorno a quei comandi e chiamare i comandi per funzione.
masoud,

Sì, l'UCI è esattamente quello che stai cercando. Tutti questi programmi supportano UCI, che è il modo in cui sono integrati in programmi come ChessBase.
dfan,

Risposte:


6

Come altri hanno già detto, UCI è l'API che desideri. Le specifiche complete del protocollo sono qui (il file zip viene estratto in un file di testo): http://download.shredderchess.com/div/uci.zip

In realtà è molto semplice e diretto, un motore UCI deve rispondere e rispondere in testo semplice tramite stdin, stdout e stderr. In effetti, dovresti essere in grado di avviare il binario eseguibile di qualsiasi motore UCI sulla tua piattaforma ed emettere manualmente i comandi UCI.

L'UCI facilita le istruzioni di una GUI o di un altro motore per dire al motore specifico di fare qualunque cosa tu voglia che faccia, incluso analizzare un file PGN specifico (il caricamento di esso avviene attraverso la GUI o un front-end simile, le mosse grezze vengono quindi alimentati al motore in forma algebrica estesa, come e4 che diventa e2e4). Il secondo e il terzo punto dei requisiti sono standard con l'UCI, ma spetta a ciascuno sviluppatore di motori supportarli (dato quanto sono magri quei requisiti, dovrebbe essere la maggior parte di essi).

Ecco un esempio di UCI in azione sulla riga di comando:

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$ 

I comandi che ho dato sono stati uci, isready ed esci.

Per utilizzare i comandi UCI hai essenzialmente due scelte principali; puoi utilizzare un'interfaccia esistente (ad es. ChessX, Arena e molti altri) oppure puoi scrivere il tuo codice per impartire istruzioni a un motore o a un gruppo di motori. Credo che potrebbero esserci già wrapper Python per accedere ai motori UCI, ma dovrei ricontrollare. Ci sono sicuramente python-chess (import chess) e pychess (import pychess), non riesco proprio a ricordare l'estensione delle loro funzioni. Non ricordo dove sia in agguato pychess (probabilmente github o google code), ma python-chess può essere installato con pip.


L'UCI non sembra fornire un'API per l'impostazione del valore dei pezzi.
Snowcrash,

Questo genere di cose dovrebbe essere programmato nel motore stesso e i motori di scacchi useranno valori standard. Avresti solo bisogno di cambiarlo per qualche altro gioco (ad es. Scacchi fatati) e probabilmente avrai bisogno di apportare molte più modifiche rispetto ai soli valori dei pezzi.
Ben

Non sono d'accordo. Non ci sono standardvalori
Snowcrash,

Quindi probabilmente avresti bisogno di fork una base di codice del motore per ridisegnarla con valori variabili. Quindi impostare una configurazione separata per il motore biforcato e ricompilato per utilizzare i nuovi valori. Quindi continua a interagire tramite UCI come di consueto. In alternativa, guarda l'altro formato di linguaggio del motore utilizzato da GNU Chess, ma ne dimentico i dettagli.
Ben

3

Ho cercato su google "api engine api" ma non ho visto nessuna vera API. Come suggerito nei commenti della tua domanda, andrei con l'UCI. Questo è anche il modo in cui la GUI comunica con i motori di scacchi.

Se sei davvero un programmatore hardcore puoi sempre dare un'occhiata al motore open source Stockfish. Potrebbe benissimo esserci una sorta di API incorporata, oppure potresti creare un clone e creare la tua API per esso.

http://stockfishchess.org/


1
L'API per parlare con Stoccafisso è anche UCI.
dfan,

1
Certo che lo è. Ma usare l'UCI o immergersi nel codice dipenderà da come verrà utilizzato il motore e non per cosa. La domanda non era chiara al riguardo.
Rafiek,

Penso di aver menzionato esattamente cosa devo fare con il motore. Carica un particolare PNG e valuta dopo ogni mossa.
Salvador Dali,

È perfettamente chiaro cosa vuoi fare con il motore. Come lo userai è lasciato allo scoperto. In quale ambiente utilizzerai il motore? È possibile che l'UCI non sia il modo ottimale di comunicare con il motore. Ho suggerito un'altra opzione se l'UCI non è sufficiente per te.
Rafiek,

Scusa, ma non riesco a capire cosa intendi per come userò il motore. Potete per favore chiarire questo?
Salvador Dali,


1

Batch First è un motore di scacchi compilato JIT scritto in Python, compilato usando Numba, che consentirebbe un'interfaccia C ++ semplice e un'interfaccia Python ancora più semplice.

Sebbene Batch First stesso sia un motore e non un'API, utilizza e fa molto affidamento sul pacchetto Python-Chess , che è una fantastica API.

La compilazione JIT di Batch First e l'uso di array NumPy per rappresentare le schede, consente un'interfaccia Python più pratica (almeno un ordine di grandezza più veloce) per l'uso effettivo in un motore di scacchi.

Il nucleo del motore è un algoritmo di ricerca k-best-first a zero finestre usato per valutare le RNA in lotti.

Divulgazione completa, sono l'autore del motore di Batch First.


-1

Ecco una versione port di Stockfish in .Net: https://github.com/bpfliegel/Portfish

Per utilizzare questo motore (una volta compilato), dovrai utilizzare una GUI come Arena http://wwww.playwitharena.com o ScidVSPC http://scidvspc.sourceforge.net . Queste applicazioni sono usate per fornire una bella interfaccia e permetterti di caricare giochi / posizioni, analizzarli (sono abbastanza sicuro che puoi caricare un gioco su pgn e analizzarlo da un motore con criteri come "n secondi per mossa" o " n mosse per mossa "), eseguire partite tra motori, ecc

In (quasi) tutti i motori di scacchi dovresti trovare qualcosa come un file uci.cs o un file xboard.cs che è stato assegnato a questo compito di comunicazione.

(Un "motore di scacchi" è un programma che è in grado di giocare a scacchi ma non ha un'interfaccia grafica. Il modo in cui comunica ad applicazioni come Arena o ScidVSPC è tramite i protocolli UCI o xboard. La maggior parte dei programmi di scacchi sono scritti in questo modo, quindi lo sviluppatore può dimenticare le cose della GUI e concentrarsi sul "cervello").

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.