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
http://support.stockfishchess.org/kb/advanced-topics/compiling-stockfish-on-mac-os-x
Y tenemos el c贸digo fuente descargado y compilado en:
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
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
http://web.comhem.se/petero2home/javachess/index.html
http://web.comhem.se/petero2home/droidfish/index.html
http://talkchess.com/
http://chessprogramming.wikispaces.com/
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:
https://en.wikipedia.org/wiki/Universal_Chess_Interface
http://download.shredderchess.com/div/uci.zip)
http://download.shredderchess.com/div/uci.zip)
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 ) | stockfishOtras
( 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/droidfish/index.html
http://talkchess.com/
http://chessprogramming.wikispaces.com/








Gracias, me sirvio
ResponderEliminarNecesito algun material que muestre la informacion que contiene stockfish que le hace tomar la decision de la mejor jugada
ResponderEliminar