mi茅rcoles, 18 de mayo de 2016

Pruebas sobre Stockfish

Stockfish es uno de los motores mas poderosos de ajedrez, y tambi茅n es open source.
Me interesa la idea de ejecutar alg煤n c贸digo Android que interact煤e con el motor.

Una cosa importante para aclarar, es el GUI (Interfaz gr谩fica) y el UCI (Protocolo de comunicaci贸n con el motor) son dos cosas completamente separadas e intercambiables. O sea, con una GUI se puede dialogar con distintos engines a trav茅s del UCI y viceversa.

En este post vamos a registrar algunas pruebas sencillas para comprender como funciona el engine stockfish, a trav茅s de enviarle comandos que respetan al protocolo UCI

Comencemos

Bajamos y Compilamos el c贸digo fuente

Seguimos las instrucciones de:
http://support.stockfishchess.org/kb/advanced-topics/compiling-stockfish-on-mac-os-x

Y tenemos el c贸digo fuente descargado y compilado en:

/Users/pabloin/Stockfish/src

De los cuales sobresale el binario:

MacBook-Pro-de-Pablo:src pabloin$ ls -la st*
-rwxr-xr-x  1 pabloin  staff  262276 Apr 24  2015 stockfish





Este binario es 煤nicamente el ENGINE, o sea el m贸dulo que juega al ajedrez
Para utilizarlo, necesitar铆amos tener una interfaz gr谩fica, o bien utilizar la linea de comandos. 

veamos nuestro directorio de trabajo: movemos el binario stockfish y vamos a ejecutar algunos scripts:


La posici贸n FEN del diagrama que se ve en el script, la podemos ver en:

Que es la siguiente siciliana:



Probamos el m贸dulo stockfish, con la linea de comandos

Siguiendo las recomendaciones de 






Invocamos al binario stockfish con comandos del protocolo UCI (Universal chess Interface):
(Info oficial sobre el protocolo UCI:

Y genera la siguiente salida:
Observemos, que el resultado del stockfish es 
bestmove c5d4 ponder c2c3

O sea, que con el diagrama FEN precedente sugiere la jugada c5xd4 la cual es la mejor jugada de las negras en esa posici贸n de Siciliana. Adem谩s, pareciera que pondera para el blanco la jugada: c2-c3 que es similar al Gambito Morra y una linea f谩cil de jugar para el blanco por la ventaja que gana de desarrollo y espacio a cambio de un pe贸n...

Al momento, tenemos el primer objetivo cumplido, que es la interacci贸n con el m贸dulo.

Comentarios:
  • Se utiliza UCI para "hablar con el m贸dulo"
  • Posiciones en formato FEN
  • Notaci贸n algebraica extendida.

   

(
echo "setoption name Hash value 128" ;
echo "setoption name threads value 1" ;
echo "setoption name Contempt Factor value 50" ;
echo "position fen r1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3" ;
echo "go movetime 1000" ;
sleep 5
) | stockfish


Otras
 
(
echo "setoption name Hash value 128" ;
echo "setoption name threads value 1" ;
echo "setoption name Contempt Factor value 50" ;
echo "position startpos moves e2e4" ;
echo "go movetime 1000" ;
sleep 5
) | stockfish

Jugamos con el m贸dulo stockfish, con la linea de comandos

En el ejemplo anterior partimos de una posici贸n particular (FEN). Si quisi茅ramos jugar contra el motor, tendr铆amos:




 
(
echo "setoption name Hash value 128" ;
echo "setoption name threads value 1" ;
echo "setoption name Contempt Factor value 50" ;
echo "position startpos moves e2e4" ;
echo "go movetime 1000" ;
sleep 5
) | stockfish

A lo que el motor responde:

bestmove e7e5 ponder b1c3

O sea, estamos jugando 1. e4 e5 que es la apertura pe贸n rey, pe贸n rey. ¿Como sigue la partida? Demos agregar todas las jugadas.... tal como se muestra en el script a continuaci贸n (O sea, el motor no se "acuerda" la posici贸n.... en cada movimiento hay que darle toda la historia de la partida

O sea, si hacemos 2. Cf3 hay que indicar las jugadas anteriores


 
(
echo "setoption name Hash value 128" ;
echo "setoption name threads value 1" ;
echo "setoption name Contempt Factor value 50" ;
echo "position startpos moves e2e4 e7e5 g1f3" ;
echo "go movetime 1000" ;
sleep 5
) | stockfish 


La respuesta recibida es:bestmove b8c6 ponder f1b5
O sea el motor elige jugar 2... Cc6 y recomienda 3. Ab5 con lo cual

De esta manera, cumplimos un segundo objetivo del post que es jugar contra el stockfish por linea de comandos, para entender el protocolo UCI

por ahora interrumpimos el post en este punto




Links

Relacionado a la programaci贸n del stockfish y desarrollo sobre chess software

http://web.comhem.se/petero2home/javachess/index.html
http://web.comhem.se/petero2home/droidfish/index.html
http://talkchess.com/
http://chessprogramming.wikispaces.com/


2 comentarios:

  1. Necesito algun material que muestre la informacion que contiene stockfish que le hace tomar la decision de la mejor jugada

    ResponderEliminar