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