Domanda:
Lavorare con il protocollo UCI (codifica)
SyntaxError
2015-10-12 04:26:07 UTC
view on stackexchange narkive permalink

Attualmente sto scrivendo una piccola domanda per un amico interessato agli scacchi. L'applicazione dovrebbe annotare automaticamente le sue partite di scacchi. Quando assegno al motore una posizione da analizzare e una profondità (o tempo) per farlo, cerco di ottenere in cambio le seguenti informazioni: 1. Le tre migliori mosse (o qualsiasi altro numero dato) e il loro punteggio in centopropri 2. Una valutazione di una data mossa (cioè la sua mossa). Apprezzerei davvero se qualcuno potesse dirmi come ottenere questo risultato. Immagino che la mia mancanza di conoscenza degli scacchi e dei motori di scacchi mi renda più difficile di quanto non sia in realtà.

/ Tom

Una risposta:
SmallChess
2015-10-12 05:12:07 UTC
view on stackexchange narkive permalink

Usiamo Stockfish per scoprire le mosse per questa posizione

  [fen "N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / 1R6 w - - 0 34"]  

La stringa FEN è: "N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / 1R6 w - - 0 34". Dovresti copiare e incollare i miei comandi per provare te stesso.

Carica la posizione con "position fen ..." e poi usa "d" per stampare la posizione. Nota che "d" è un comando solo per lo stoccafisso.

  tedwong @: ~ $ stockfishStockfish 6 64 di Tord Romstad, Marco Costalba e Joona Kiiskiposition fen N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / 1R6 w - - 0 34 giorni + --- + --- + --- + --- + --- + --- + --- + --- + | N | | | | | | | | + --- + --- + --- + --- + --- + --- + --- + --- + | P | | | | p | k | | p | + --- + --- + --- + --- + --- + --- + --- + --- + | | | | p | | | p | | + --- + --- + --- + --- + --- + --- + --- + --- + | r | | | | | p | | | + --- + --- + --- + --- + --- + --- + --- + --- + | | | | | | | | | + --- + --- + --- + --- + --- + --- + --- + --- + | | | | | b | | | B | + --- + --- + --- + --- + --- + --- + --- + --- + | | | | | P | | K | P | + --- + --- + --- + --- + --- + --- + --- + --- + | | R | | | | | | | + --- + --- + --- + --- + --- + --- + --- + --- + Fen: N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / 1R6 w - - 0 34Key: 4E025494EA4A7523Checkers: 

Chiedi al motore di pensare per 30 secondi e impostare il numero di variazioni principali su 3.

  setoption name Valore multiplo 3go movetime 30000  

Vedrai una serie di output del motore. In particolare, dovresti qualcosa del tipo:

  info profondità 5 seldepth 5 multipv 1 punteggio cp -5 nodi 1540 nps 54 TBhits 0 tempo 28098 pv a8b6 e3b6 b1b6 a5a7 e2e3info profondità 5 seldepth 5 multipv 2 punteggio cp -8 nodi 1540 nps 54 tbhits 0 volta 28098 pv a8c7 e3a7 c7b5 h7h6 b5a7info profondità 4 seldepth 5 multipv 3 punteggio cp -10 nodi 1540 nps 54 tbhits 0 tempo 28098 pv g2f3 a5a7 a8b6 a7a3info info profondità 3 currmove numero 16 gven a8b6 medita su e3b6  

Qui Stockfish fornisce tre possibili linee: Nb6, Nc7 e Kf3. Le linee sono ordinate in base al vantaggio per la parte di muoversi.

Controlliamo cosa succede se il tuo amico sbagli una torre di Ra1 ... Ci aspettiamo che Stockfish riporti ... Rxa1 con un vantaggio vincente per Nero. Uso http://analysis.cpuchess.com per fare la mossa e ottenere un nuovo FEN.

  [fen "N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / R7 b - - 1 34 "]  

Il nuovo FEN è:" N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / R7 b - - 1 34 "

  position fen" N7 / P3pk1p / 3p2p1 / r4p2 / 8 / 4b2B / 4P1KP / R7 b - - 1 34 "go move time 30000  

Dovresti vedere qualcosa del tipo:

  info profondità 25 seldepth 38 multipv 1 punteggio cp 692 nodi 34732679 nps 1391812 tbhits 0 volta 24955 pv a5a1 a8c7 e3a7 g2g3 a1a3 g3g2 a3a5 e2e4 a7b8 c7d5c3 b3e5 c3d1 a5a2 g2f1 e5h2 c8b7 e7e6 d1e3 A2B2 b7a8 b2b5 f1f2 h2f4 e3d1 b5c5 a8b7 c5c2 f2e1 f7f6info profondità 25 seldepth 38 multipv 2 punteggio cp 62 nodi 34732679 NPS 1391812 tbhits 0 temporali 24955 pv a5a7 a1a7 e3a7 g2f1 d6d5 h3g2 e7e6 h2h3 f7e7 a8c7 a7b6 c7a6 e7d6 a6b4 b6d4 b4c2 d4c5 f1e1 g6g5 g2f3 d6e5 e2e3 f5f4 e1e2 f4e3 c2e3info profondità 24 seldepth 38 multipv 3 punteggio cp -480 nodi 34732679 nps 1391812 tbhits 0 volte 24955 pv e3ad a4 a3 a5 8c7 e3b6 c7d5 b6c5 E2E4 e7e6 d5c7 f7f6 a4a6 f6e5 e4f5 e6f5 G2G3 c5d4 h3f1 h7h6 c7e8 d4c5 a6a5 e5e6 e8c7 e6d7 c7d5 c5d4 g3f3 d4e5 f1b5 d7e6 d5f4 e6f7 a5a8bestmove a5a1 riflettere a8c7  

Come si può si può vedere la valutazione scende a "cp 692". Era "cp -5" prima del nostro trasferimento. Pertanto la mossa Ra1 deve essere stata un grossolano errore.

Per favore leggi le specifiche UCI per maggiori dettagli.

Il tuo lavoro sarà:

  1. Collega un motore al tuo linguaggio di programmazione preferito. Puoi farlo tramite la comunicazione tra processi. Ci sono molti esempi su Google.

  2. Emetti i comandi UCI come ho fatto io.

  3. Analizza i comandi. Potresti usarlo come un tokenizzatore di stringhe.

  4. Fai una mossa (come ho fatto con Ra1) per ottenere una valutazione della mossa.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...