www.caissadigital1921.cubava.cu

Volver a Otras

Motor de ajedrez

 

Wikipedia

Motor de ajedrez

Saltar a: navegación, búsqueda

Un motor de ajedrez es un programa que sabe jugar ajedrez y que implementa un lenguaje de comunicación que le permite hablar con otros programas.

Índice

Interfaz

El lenguaje de comunicación o protocolo manejado por un motor le permite ser usado por un programa gráfico (interfaz gráfica de usuario) que maneje el mismo lenguaje y que despliega un tablero de ajedrez con bellas piezas.

Las interfáz o GUI permiten a una persona jugar contra un motor en un ambiente gráfico agradable pero además permiten otras cosas como el enfrentamiento entre motores para medir su fuerza, juegos en red de área local y en internet (Free Internet Chess Server). Las GUIs o interfaces más famosas son XBoard en Linux y Arena (ajedrez)[1], WinBoard y ChessBase en Windows.

Protocolos

La interfaz de línea de comandos de GNU Chess se convirtió en el primer estándar de facto, llamado Protocolo de Comunicación de Motores de Ajedrez y fue soportado primero por XBoard. A partir de Noviembre de 2000 hay un protocolo más nuevo, UCI de sus siglas en inglés Universal Chess Interface. Algunos motores soportan los dos protocolos. El Protocolo de Comunicación de Motores de Ajedrez es el más popular pero muchos desarrolladores piensan que el UCI es más expresivo. Algunas interfaces como Arena, soportan varios protocolos mientras que hay otras, como WinBoard, que soportan sólo una y dependen de intérpretes, como Polyglot.

Fuerza creciente

Artículo principal: Ajedrez por computadora.

Los motores de ajedrez incrementan su fuerza de juego cada año. Esto es en parte por el incremento en la capacidad de procesamiento que permite hacer cálculos más profundos en un tiempo dado. Adicionalmente, las técnicas de programación han mejorado permitiendo a los módulos ser más selectivos en las líneas que analizan y tener más “entendimiento posicional”.

Algunos motores usan bases de datos de finales para incrementar su fuerza durante el final. Una base de datos de finales es una base de datos de todas las posibles posiciones con pequeños grupos de material. Cada posición es de manera concluyente determinada como ganadora, perdedora, o tablas para el jugador que mueve, y el número de jugadas para el final con el mejor juego de cada lado. Las bases de datos de finales en todos los casos identifican la mejor jugada en cada posición incluida (identificando la jugada que más rápido contra una defensa perfecta, o la jugada que pierde más lentamente contra un ataque óptimo). Hay bases de datos disponibles para finales de 3 a 6 piezas (contando los reyes) y para algunos de 7 piezas. Cuando la maniobra en un final para lograr un mejoramiento irreversible se va más allá del horizonte de cálculo del motor, no se garantiza que éste encuentre la mejor jugada sin el uso de una base de datos de finales, y en muchos casos puede incurrir en la regla de las 50 jugadas. Algunos expertos han señalado el potencial mal uso de las bases de datos de finales por los programadores, llevando a un mal juego.

Comparación entre motores

Torneos

Los resultados de los torneos de motores, como el Torneo Mundial de Ajedrez por Computadora, dan una idea de la fuerzas relativas entre los motores de ajedrez. Sin embargo, en los torneos no se juega un número de partidas estadísticamente significativo para determinar de manera precisa la fuerza de los motores. De hecho, el número de partidas necesario para alcanzar la precisión, es de miles y es impracticable bajo el esquema de un torneo [2]. Muchos torneos permiten además cualquier tipo de harware, en estos se comparan las combinaciones motor/harware.

Históricamente, los programas comerciales han sido los motores más fuertes. Rybka ganó el WCCC de 2007. Algo que se ha visto, es que si un motor gana un torneo o tiene un buen desempeño en uno (por ejemplo Zappa en 2005), entonces es rápidamente comercializado.

Listas de clasificación de motores

Las listas de calificación de los motores de ajedrez ayudan a proveer medidas estadísticas sobre la fuerza de los distintos motores. Estas listas juegan muchas partidas entre motores en plataformas estándar de hardware, quitando así el factor de diferencias de procesador que puede ser una ventaja. Estas listas no solo establecen una clasificación, sino también márgenes de error para las calificaciones dadas. Además las listas típicamente juegan partidas continuamente, publicando muchos datos por año, comparando con los torneos que solo se hacen una vez al año.

Suites de prueba

Los motores se pueden probar midiendo su desempeño en posiciones específicas. El uso de Suites de prueba es típico, en donde para una posición dada hay una mejor jugada por encontrar.Estas posiciones pueden ser orientados hacia lo posicional, táctico o juego de finales. La suite de prueba Nolot, por ejemplo, se enfoca en sacrificios profundos.[9] Hay otras suites como la BT2450 y BT2630 desarrolladas por Hubert Bednorz y Fred Toennissen. Estas suites miden la capacidad táctica de un módulo [10] y han sido utilizadas por lo menos por REBEL.[11] Hay además una suite de uso general llamada Brilliancy por Dana Turnmire. La suite ha sido compilada en su mayoría desde How to Reassess Your Chess Workbook.[12]

Categorías de motores

Motores gratuitos

Hay cientos de motores de ajedrez disponibles de manera gratuita y que cumplan con alguno de los protocolos de comunicación mencionados anteriormente. Muchos corren en Windows o son open source. Unos cuantos de los más fuertes se listan. Otros pueden encontrarse mirando las listas de calificación o los enlaces externos.

Puntajes Elo tomados de CCRL 40/40, accedido en Julio de 2011.

  • Alaric (v707 Elo 2752) por Peter Fendrich (SE)
  • Alfil (v811 Elo 2706) por Enrique Sánchez (SP)
  • Aristarch (v4.50 Elo 2698) por Stefan Zipproth (DE)
  • Baron (v1.8.1 Elo 2625) por Richard Pijl (NL)
  • Crafty (v21.5 Elo 2631 – 21.6 disponible) por Bob Hyatt (US)
  • Delfi (v5.2 Elo 2756) por Philippe Fabiani (FR)
  • Fruit (v2.3.1 Elo 2863) por Fabien Letouzey (FR)
  • Gambit Fruit (derivado de Fruit) por Fabien Letouzey/Bryan Hofmann (FR/US)
  • Houdini (v1.5a Elo 3309)
  • Glaurung (v1.2.1 Elo 2726) por Tord Romstad (NO)
  • Ktulu (v4.2) por Rahman Paidar (IR)
  • List (v5.12 Elo 2720) por Fritz Reul (DE)
  • Movei (v0.08.438 Elo 2748) por Uri Blass (IL)
  • Naum (v1.91 Elo 2704) por Aleksandar Naumov (RS/CA)
  • Pharaon (3.5.1 Elo 2708) por Franck Zibi (FR)
  • ProDeo (v1.2 Elo 2689) por Ed Schröder (NL)
  • Ruffian (v1.0.5 Elo 2711) por Per-Ola Valfridsson (SE)
  • Rybka (v.10 (versión gratuita) Elo 2920) por Vasik Rajlich (CZ/US)
  • Scorpio (v1.9 Elo 2754) por Daniel Shawul (ET)
  • Sjeng (es el módulo de Mac OS X Chess) por Gian-Carlo Pascutto (BE)
  • Slow Chess (vBlitz WV2.1 Elo 2740) por Jonathan Kreuzer (US)
  • Spike (v1.2 Turin Elo 2855) por Volker Böhm y Ralf Schäfer (DE)
  • Strelka (v1.8 Elo 2867) por Yuri Osipov (RU)
  • Toga II (v1.3.4 Elo 2868) derivado de Fruit por Fabien Letouzey/Thomas Gaksch (FR/DE)
  • Wildcat (v7 Elo 2730) por Igor Korshunov (RU)
  • Zappa (v1.1 (versión gratuita)) Elo 2687 por Anthony Cozzie (US)

Ikarus y Ferret, fueron los ganadores del World Computer Speed Chess Championship.

Motores pedagógicos

Estos programas open source fueron expresamente escritos para enseñar el arte de la programación de ajedrez.

Programas comerciales

Estos programas se distribuyen comercialmente. Muchos incluyen su propia interfaz de usuario.

Hardware dedicado

Estos sistemas de juego incluyen hardware modificado o corren en supercomputadoras.

Computadores comerciales dedicados

En los 1980s y principios de los 1990s, había un mercado competitivo para computadoras dedicadas al ajedrez. A mitad de los 90s el mercado de los computadoras dedicadas al ajedrez no pudo competir con los rápidos procesadores en las computadoras personal. Hoy en día, la mayoría de unidades dedicadas que se venden son de nivel principiante o intermedio.

  • Chess Challenger, una línea de computadoras de ajedrez que fue vendida por Fidelity Electronics de 1980 a 1992. Estos modelos ganaron los cuatro primeros World Microcomputer Chess Championships.
  • Chessmachine, una computadora dedicada basada en ARM, que podía ejecutar 2 módulos:
  • Mephisto, una línea de computadoras de ajedrez vendida por Hegner & Glaser. Las unidades programadas por Richard Lang ganaron 6 World Microcomputer Chess Championships consecutivos.
  • Novag vendió una línea de computadoras tácticamente fuertes, incluyendo las marcas Constellation y Sapphire.
  • Saitek venció unidades de nivel intermedio.
  • Excalibur vende una línea de unidades de nivel intermedio.

Programas históricos

Estos programas corren en hardware obsoleto.

Véase también

Enlaces externos

 

 

Un test objetivo de ‘humanidad’ para motores de ajedrez.

por Kaxte el Miér Nov 09, 2011 9:32 pm

Este tema lo posteó el forero istolacio en el antiguo foro, lo reposteo aquí con su permiso.

En qué consiste el test.

Se ha afirmado en buen número de ocasiones que ciertos motores de ajedrez se comportan de manera ‘humana’ por su elección de jugadas en ciertas posiciones. Entre otras cosas, es interesante encontrar el motor más ‘humano’ para usarlo en el análisis de partidas entre jugadores de alto nivel. Aquí presento un método para medir esa ‘humanidad’ objetivamente, sin depender de las apreciaciones personales.

El húngaro Emil Gelenczei escribió el libro “Juegue con/contra los grandes maestros” (“Spiel mit-gegen Grossmeister“, Sportverlag Berlin-1977) para orientar al aficionado sobre su fuerza ajedrecística. Este libro se publicó antes de que se popularizaran las computadoras personales y los programas de ajedrez, de forma que sus valoraciones no están influenciados por la tecnología. Es humano al 100%.

Basado en 64 partidas reales de alto nivel (con jugadores como Capablanca, Alekhine, Botvinnik, Tal, Petrosian, Spassky, Fischer, Nimzowitsch, Keres, Larsen, etc.) el lector debe, una vez superada la apertura, intentar encontrar la mejor jugada para uno de los dos bandos (el vencedor, salvo en casos de tablas). Por cada jugada que coincide con la que se jugó en realidad se le dan puntos, en función de la dificultad de cada movimiento (dificultad que Gelenczei calcula en base a los análisis humanos de su época). Tras ver la contestación del rival se le vuelve a pedir la mejor jugada, hasta terminar la partida. La suma total de los puntos obtenidos da una estimación de su categoría ajedrecística.

Puede utilizarse este test para valorar la ‘humanidad’ de un motor de ajedrez, es decir, para evaluar qué motor elige sus jugadas de una forma más ajustada a cómo lo hicieron los maestros humanos. Así lo hizo el miembro de la SSDF Gunnar Blomstrand (véase http://biphome.spray.se/gunnar.blomstrand/topplista_64.htm y http://hem.bredband.net/b221753/topplista_64.htm, ambas con el texto en sueco) pero no actualiza los resultados desde 2009.

Un motor no puede en modo alguno jugar al ajedrez de igual forma a como lo hace un ser humano. Por citar algunos factores, los seres humanos juegan con un plan, se fatigan, les afectan los factores psicológicos, adaptan su juego al rival o a la clasificación del torneo, cometen errores de cálculo y de vista, usan de forma ineficiente el tiempo de que disponen, no siguen una norma fija para valorar una posición y aprenden de sus fallos. Los motores no hacen nada de esto, ni siquiera piensan en el sentido humano del término, pero con sus algoritmos de cálculo simulan el pensamiento humano (los programadores solo crean modelos que mejoran paulatinamente). Hay motores que juegan (es decir, han sido programados) de una forma más posicional, otros más combinativa, unos juegan más sólido otros son más especulativos.

Pero, ¿qué motor produce mayor cantidad de movimientos idénticos a los jugados por humanos de alto nivel? Si llamamos a esto ‘humanidad’, este test da una medida objetiva de esa ‘humanidad’. El test NO mide la calidad del juego de los motores (los humanos, aunque sean maestros, no siempre hacen la mejor jugada) ni el ELO de los motores (que solo se puede conocer estadísticamente, haciendo que los motores jueguen un gran número de partidas entre sí) ni su estilo (algo difícil de definir y de medir de manera objetiva).

Cómo se ha hecho el test.

(El método seguido por Blomstrand me es desconocido en algunos detalles clave de los que se enumeran a continuación).

 

  1. Como no he podido disponer de ninguna edición del libro de Gelenczei, he tenido que basarme en las partidas y puntuaciones tal y como aparecen en las páginas de Blomstrand. Se han revisado, corrigiendo pequeños errores que contenían. Ha servido de ayuda la versión de Ivan Ivanov de las partidas del libro (en formatos pgn y cbv) que puede encontrarse en http://www.gambitchess.com/semi/db5.htm pero no están exentas de error y carecen de puntuación (el archivo cbv permite, al pasarlo a cbh, entrenar en los GUI de Chessbase a un humano, pero no correr una batería de test a un motor).
  2. Convertí las posiciones (en total 1049, Blomstrand da erróneamente 1047) de las partidas a formato epd poniendo como mejor movimiento (bm) el que debe encontrarse (en algunos casos, se aceptan dos y hasta tres) y que se jugó en la partida real. Las posiciones epd se han obtenido a partir de las partidas en PGN con pgn2epd.exe (http://remi.coulom.free.fr). Se añadió como ‘id’ el número de la partida y de movimiento en que aparece, y como ‘c0’ la puntuación o puntuaciones. La puntuación máxima es 3221 (que se obtendría realizando en las 1049 posiciones el movimiento que proporciona mayor puntuación, aunque en el libro de Gelenczei la puntuación máxima es 3200. ¿Añadió Blomstrand posibles respuestas y puntuaciones?).
  3. Cada posición se evalúa durante el tiempo equivalente a 30 segundos CCRL. (En mi computadora, Pentium IV 3GHz 1GB de RAM, eso equivale a 47 segundos. Se puede ver en qué consiste esa medida de tiempo en http://kirill-kryukov.com/chess/discussion-board/viewtopic.php?f=7&t=1486&sid=0a0aaf42d42a0b798ce98f52d10cba84 o en http://www.husvankempen.de/nunn/testers/conditions.htm). Ese tiempo se consume por entero: Es indiferente si el motor encuentra la jugada buscada antes de ese tiempo, el tiempo se usa hasta el final para asegurar que el motor no cambia de opinión. (En mi computadora eso supone casi 14 horas de cálculo por cada motor). Usando este tiempo se pueden tomar las puntuaciones ELO de la lista CGT 40/20. Blomstrand usaba 3 minutos por movimiento (o bien 40/120) con un procesador Celeron a 450 MHz; el equivalente en un Pentium IV 3GHZ es, razonablemente, 47 segundos por jugada.
  4. Los motores se han elegido con dos criterios: 1. Su fuerza ELO (Houdini 1.5a, Critter 1.2, Rybka 4.1, Stockfish 2.1.1 PA GTB Gran2c, Komodo 2.03, Shredder 12, Hiarcs 13.2, Junior 12.5) y 2. Su consideración habitual como ‘más humanos’ (Rybka 3, Rybka 3 Human, Hiarcs 10, Junior 11.1, Shredder 10.1, Shredder 9.1, ProDeo 1.6). En total, 15 motores. De estos, Blomstrand probó Rybka 3, Hiarcs 10, Shredder 10, Shredder 9 y ProDeo 1.6 (en su versión comercial Rebel).
  5. Cada motor dispondrá de una memoria Hash de 128 MB y, si pueden usarlas, tablas de finales de 3, 4 y 5 piezas (Nalimov, Gaviota y Shredderbases).
  6. Puesto que habrá que valorar cada jugada hecha por los motores se usa un GUI que guarde la jugada (o la PV) encontrada por el motor. Mi preferido es ShredderClassic 4, pero si un motor no es capaz de analizar posiciones automáticamente con él uso Polyglot 1.4.67b (que permite correr tests epd) y si con éste el motor tampoco puede utilizarse (es el caso de ProDeo 1.6), Arena 3.0.La estadística de resultados y la gráfica resumen se ha realizado mediante una hoja de cálculo en Microsoft Excel. Se han hecho comprobaciones extra para asegurar que la cuenta, tanto de posiciones acertadas como de puntos obtenidos, es correcta. Se ha añadido información de cómo los motores han resuelto cada una de las 64 partidas y otras estadísticas que comentaré después.

    El cálculo del ELO resultante del test se ha hecho siguiendo la fórmula de Blomstrand (véase en http://biphome.spray.se/gunnar.blomstrand/forklaring_64.htm), pero tomando el ELO base de la lista CGT 40/20 (por el tiempo elegido, Blomstrand usa la lista SSDF 40/120) y haciendo el promedio sobre los mejores 5 motores en lugar de solo 3 (que son los que toma Blomstrand).

El índice de partidas, el archivo pgn con las partidas, el archivo epd con las posiciones y un archivo cbv equivalente a este último (con los análisis de dos motores que se citan después) se pueden descargar en: http://www.mediafire.com/?ho3mfroap9k6yj6 (101 KB).
En las partidas pgn se ha añadido como un comentario el número de la partida en el test de Gelenczei (el mismo que se usa en las posiciones epd o en el archivo Chessbase) y el título que Gelenczei pone a cada partida. Espero haber captado bien el significado correcto del original alemán.

Los logs de los análisis de cada motor están disponibles para su revisión. Basta con solicitarlo. Pongo todo el material a disposición del interesado, no puedo entender que alguien que realice cualquier tipo de test no haga lo mismo, pues eso anula la fiabilidad del trabajo presentado.

El documento de Microsoft Excel con las estadísticas se puede descargar en: http://www.mediafire.com/?f71do8g2h54ddha (624 KB). Este archivo funcionará en versiones de Office 2000 y posteriores, y en versiones de OpenOffice y LibreOffice.

Los resultados del test.

El primer número indica posiciones resueltas, el segundo los puntos obtenidos, el tercero el ELO deducido del test:

N Motor Corr. Puntos ELO_test
1. Houdini 1.5a 739 2214 3055
2. Critter 1.2 736 2239 3089
3. Hiarcs 10 728 2194 3027
4. Rybka 4.1 727 2197 3031
5. Komodo 2.03 724 2187 3018
6. Junior 12.5 724 2160 2980
7. Rybka 3 723 2195 3029
8. Shredder 9.1 723 2168 2991
9. Rybka 3 Human 719 2190 3022
10. Junior 11.1a 719 2152 2969
11. StockFish 2.1.1 713 2163 2984
12. Shredder 12 713 2140 2953
13. Hiarcs 13.2 708 2130 2939
14. Shredder 10.1 706 2095 2891
15. ProDeo 1.6 690 2022 2790

Por lo tanto, el motor que encuentra más jugadas idénticas a los humanos es Houdini 1.5a (un 70.4% del total) y el que obtiene más puntos es Critter 1.2 (un 69.5% del total). Los datos obtenidos son consistentes con los obtenidos por Blomstrand, aunque ligeramente inferiores -a falta de conocer la mecánica exacta de sus pruebas-. (En la clasificación de Blomstrand parece que todos los motores analizaron durante tres minutos cada posición, independientemente del procesador en que se efectuaron las pruebas. Pero no hay información al respecto).

En forma gráfica se ve así:

Valoración de los resultados.

Lo más llamativo de los resultados es que los motores no superan el 71% de acuerdo con los jugadores humanos. En mi opinión, y vistas las jugadas realizadas por humanos y motores, esto se debe a cuatro causas:

a) Cuando una posición está igualada, el criterio posicional de los motores es menos fiable que el de los humanos,

b) los humanos planean ataques y defensas que no darían resultado contra un motor pero que sí funcionan contra otro humano por su ineficiencia en el cálculo,

c) la falta de precisión de los humanos, que en muchos casos prefieren una jugada ‘clara’ a la ‘mejor’ jugada o que no ven una jugada ganadora que para los motores es evidente, y

d) en algunos casos (que posiblemente sean aquellos movimientos en los que los motores con mayor ELO CGT disienten) los motores podrían necesitar más tiempo del usado en este test para encontrar la mejor jugada (y que tal vez sea la que eligió el jugador humano, puesto que algunos de los jugadores implicados en el test son genios reconocidos).

También es llamativo que hay poca dispersión entre los resultados de los distintos motores, pese a que su ELO CGT cubre un espectro bastante amplio. Tal parece que, al compararlos con jugadores humanos, los motores demuestran ser bastante similares entre sí y por tanto bien diferentes a los ajedrecistas humanos, sin importar mucho que hablemos de un motor u otro. Como comprobación adicional de ello se ha sometido al mismo test al programa Delfi 5.4 ajustado a su menor potencia (ELO 1000) con un tiempo máximo de 5 segundos por movimiento y ha resuelto correctamente 655 posiciones. Esto es tan sorprendente que he decidido añadir estadísticas sobre las posiciones.

Debido a esta similitud de resultados entre motores, en mi opinión el ELO resultante de este test solo tiene valor anecdótico. Y por la misma razón no he establecido la clasificación por los puntos obtenidos (que dependen, además, de la decisión personal de Gelenczei) sino por el número de posiciones resueltas correctamente.

Sobre las posiciones del test.

Llamaré ‘posición unánime’ a aquella en la que TODOS los motores responden con la misma jugada. Dado que los motores elegidos son de fuerza y estilo diverso, en principio no era esperable que hubiese muchas ‘posiciones unánimes’. Pues entre las 1049 hay nada menos que 510. Esto muestra lo similares que son los motores entre sí.

Vamos a llamar ‘posición fácil’ a aquella que es resuelta por el jugador humano, por TODOS los motores y además por Delfi 5.4 con ELO 1000, el número de posiciones fáciles es: 434 (del total de 1049). Estas posiciones serían adecuadas para ser resueltas por jugadores de club y no deberían considerarse en un test con motores de ELO elevado como los usados aquí.

Para bajar el listón de habilidad, también se ha sometido al test al motor König Schwarz (motor exclusivo para los GUI de Chessbase que responde de manera instantánea y tiene una fuerza muy baja, tal vez 1100 ELO, se usa como entrenador de principiantes). König Schwarz resuelve 301 posiciones. Las posiciones que además de estar en la categoría ‘posición fácil’ también son resueltas por König Schwarz las llamo ‘posiciones triviales’.

El número de ‘posiciones triviales’ es 193 del total de 1049, y supuestamente tienen una dificultad mínima.

Por último llamaré ‘posición dudosa’ a aquella que es ‘unánime’, coinciden en la respuesta TODOS los motores, pero en discrepancia con la jugada o jugadas que dan puntos. El número de posiciones dudosas es 48 (un 4.6% del total). Estas posiciones merecerían un estudio con más tiempo en MultiPV, lo más probable es que indiquen un error por el bando ‘humano’ (pero alguna podría ser una genialidad). Es razonable pensar que, aparte de estas, haya más errores en las puntuaciones de Gelenczei, pero al menos estas posiciones son errores casi con certeza. Es seguro que Gelenczei habría cambiado más de una de las puntuaciones de haber dispuesto de computadoras y motores de ajedrez como los actuales.

Ya podemos ajustar el resultado de nuestro test mirando solo las posiciones ‘interesantes’ es decir las que no son ‘fáciles’ ni ‘dudosas’. Estas posiciones ‘interesantes’ son 567. Houdini 1.5a resuelve 305 posiciones ‘interesantes’, el 53.8% de ellas. (Como las posiciones fáciles las resuelven todos y las dudosas no las resuelve ninguno, todos los motores descienden por igual en el número de posiciones resueltas).

Conclusiones.

La conclusión no es una novedad (véase por ejemplo http://blog.chess.com/gwhuebner/wccc-2003-van-oosterom-games-analyzed-with-chessanalyse-26): A 30 segundos CCRL por jugada, no parece existir un motor de ajedrez que se comporte como los humanos de alto nivel en más de un 71% de las jugadas una vez superada la apertura (descartando, por supuesto, el caso de las tablas rápidas entre maestros). Pese a eso, si hubiera que elegir el motor más cercano a los humanos de alto nivel, por el número de posiciones correctamente resueltas sería Houdini 1.5a.

El motor de mayor ELO (Houdini 1.5a) encabeza la clasificación de posiciones resueltas. Eso mismo es lo que obtuvo Blomstrand (en su caso, Rybka 3). Tal vez la puntuación sería mejor dandoles a los motores más tiempo y/o usando MultiPV. Sin embargo, no hay concordancia entre ELO y puntos obtenidos.

Un corolario interesante: Si un humano juega de tal manera que un 80% (concediendo un poco de margen) o más de sus jugadas son idénticas a las que elige uno de los motores punteros, es muy probablemente un tramposo (o bien, cosa poco probable, ha nacido un genio superior a los campeones de antaño).

Espero que esta aportación al tema de la ‘humanidad’ de los motores de ajedrez les parezca útil. Pido disculpas por la longitud del texto, por alguna afirmación demasiado categórica o por los posibles errores cometidos, en ese caso agradecería que me lo hicieran saber. A quienes hayan soportado la lectura hasta aquí, muchas gracias por su atención y su paciencia.

Un saludo.
Kaxte

Mensajes: 36
Fecha de inscripción: 08/11/2011

Re: Un test objetivo de ‘humanidad’ para motores de ajedrez.

por Kaxte el Miér Nov 09, 2011 9:40 pm

Otro mensaje en este mismo hilo del forero istolacio:

El resultado del test para Deep Junior 10.1 ha sido: 684 posiciones resueltas. El resultado es inferior en comparación con los motores que lo hacen mejor (55 menos que Houdini), al nivel de ProDeo 1.6 (que resuelve 690).

No ha sido posible hacer el test con ShredderClassic ni con Polyglot. Una parte del problema parece deberse a que Junior 10.1 no entiende el comando ucinewgame que ambos GUI envían al principio de cada análisis de posición. La respuesta del motor es info string Error (Unknown command): ucinewgame
ShredderClassic da cuenta del mensaje de error pero continúa con el análisis. Sin embargo, después de unas cuantas posiciones (entre 20 y 40) el análisis no se corta al llegar al tiempo estipulado, por falta de respuesta del motor.

Por ello el análisis lo he realizado con el GUI Fritz 12. Con Fritz no ha habido problema (o bien filtra el error o bien trabaja de otra forma). Pero no registra la jugada elegida por el motor, tan solo si es la correcta o no. La batería de test se ha ejecutado a 47 segundos por movimiento (equivalentes a 30 segundos CCRL en mi computadora) y con extra_Ply de 99 (para que use todo el tiempo).

El archivo cbv correspondiente se puede descargar en: http://www.mediafire.com/?n79wu7y4og3fuwy

En las posiciones que he estado viendo mientras se resolvían Junior 10 y ProDeo parecen más prácticos, menos sutiles que -por ejemplo- Houdini. En situaciones de ventaja suelen responder igual, pero en posiciones igualadas prefieren jugadas distintas.

En estas posiciones igualadas las jugadas de los humanos de alto nivel son -la mayoría de las veces- un misterio para mí (mi nivel ajedrecístico dista muchísimo del que tienen los humanos representados en el test) y me asombra que haya motores que prefieran la misma jugada. Tengo que revisar las jugadas propuestas por Junior 10.1, que su puntuación sea baja en este test puede que lo haga preferible como contrincante (cosa que es inimaginable con Houdini)

Poda alfa-beta

Saltar a: navegación, búsqueda

Ejemplo de poda alfa-beta.

La poda alfa beta es una técnica de búsqueda que reduce el número de nodos evaluados en un árbol de juego por el algoritmo Minimax. Se trata de una técnica muy utilizada en programas de juegos entre adversarios como el ajedrez, el tres en raya o el Go.

Entre los pioneros en el uso de esta técnica encontramos a Arthur Samuel, D.J Edwards y T.P. Hart,1 Alan Kotok,2 Alexander Brudno3 , Donald Knuth y Ronald W. Moore4

El problema de la búsqueda Minimax es que el número de estados a explorar es exponencial al número de movimientos. Partiendo de este hecho, la técnica de poda alfa-beta trata de eliminar partes grandes del árbol, aplicándolo a un árbol Minimax estándar, de forma que se devuelva el mismo movimiento que devolvería este, gracias a que la poda de dichas ramas no influye en la decisión final.

Índice

Desarrollo del algoritmo

La búsqueda minimax es primero en profundidad, por ello en cualquier momento sólo se deben considerar los nodos a lo largo de un camino en el árbol.

La poda alfa-beta toma dicho nombre de la utilización de dos parámetros que describen los límites sobre los valores hacia atrás que aparecen a lo largo de cada camino.

  • α es el valor de la mejor opción hasta el momento a lo largo del camino para MAX, esto implicará por lo tanto la elección del valor más alto
  • β es el valor de la mejor opción hasta el momento a lo largo del camino para MIN, esto implicará por lo tanto la elección del valor más bajo.

Esta búsqueda alfa-beta va actualizando el valor de los parámetros según se recorre el árbol. El método realizará la poda de las ramas restantes cuando el valor actual que se está examinando sea peor que el valor actual de α o β para MAX o MIN, respectivamente.

El desarrollo del algoritmo en pseudocódigo será el siguiente:

función alfabeta(nodo, profundidad, α, β)
    si nodo es un nodo terminal o profundidad = 0
        devolver el valor heurístico del nodo
    para cada hijo de nodo
        α := max(α, -alfabeta(hijo, profundidad-1, -β, -α))
        si β≤α
            break
    devolver α

(* Llamada inicial *)
alfabeta(origen, profundidad, -infinito, +infinito)

Ejemplo de poda alfa-beta

La figura muestra un ejemplo de la poda alfa-beta. Cada nivel representa la jugada de los jugadores MAX y MIN, que tendrán que definir un valor α o β respectivamente.

A continuación se presenta un ejemplo de aplicación del algoritmo para el árbol de la figura. En ella los nodos podados al aplicar el algoritmo se presentan sombreados en gris.

Comenzamos con la búsqueda de primero en profundidad. El padre de los nodos hoja más a la izquierda, etiquetados con 5 y 6 respectivamente, deberá escoger un valor β al tratarse de un nivel MIN, esto implica que deberá escoger el valor mínimo entre dichos nodos, es decir 5.

Siguiendo el desarrollo, se expandirán el resto de sucesores del padre. En este caso se expande el camino que conduce a los nodos hoja 7 y, buscando un valor β menor, el nodo etiquetado con 4. En este momento el valor momentáneo de β en ese nivel es 4 (el mínimo entre 7 y 4). Esto implica que en este momento en el nivel superior, el padre del nodo que etiquetamos anteriormente con β igual a 5, y de este β igual a 4 momentáneo, debe decidir el mejor valor, el más alto al encontrarse en un nivel MAX), si siguiéramos expandiendo hijos del nodo MIN padre de 7 y 4, sólo podríamos conseguir valores menores a 4, lo que seguiría implicando una elección de la jugada izquierda en el nivel MAX, por lo tanto, podemos podar el resto de hijos, tal y como se muestra en la Figura.

El resto del desarrollo del árbol se seguiría utilizando los criterios mencionados con anterioridad.

Eficacia de la poda alfa-beta

La eficacia de la poda alfabeta depende del orden en el que se examinan los sucesores, es decir, el algoritmo se comportará de forma más eficiente si examinamos primero los sucesores que probablemente serán los mejores.

Si esto pudiera hacerse, implicaría que alfa-beta sólo tendría que examinar en lugar de los de Minimax. Esto implica que el factor de ramificación eficaz será de en lugar de . En otras palabras, alfa-beta podría mirar hacia delante aproximadamente dos veces más que Minimax en la misma cantidad de tiempo.

Si se recurre a una ordenación aleatoria en lugar de primero el mejor en los sucesores, el número aproximado de nodos examinados sería de para un valor moderado de . En ajedrez se puede realizar una función de ordenación sencilla teniendo en cuenta primero capturas de fichas, después amenazas, movimientos hacia delante y por último movimientos hacia detrás, esto conseguiría aproximadamente un factor de dos del resultado del mejor caso. La inclusión de esquemas dinámicos para ordenar movimientos, basados en experiencia podrían acercarse al límite teórico.5

La función de evaluación, también conocida como función de evaluación heurística, es un algoritmo usado generalmente por programas que saben jugar juegos de estrategia como el Ajedrez (denominados motores de ajedrez), Go entre otros para estimar el valor numérico a las posiciones analizadas por el programa por medio de un algoritmo de búsqueda como la poda alfa-beta, que deberá tomar la decisión de por cual continuación seguir en el árbol de variantes del juego.1 La función de evaluación generalmente solo da información muy básica sobre la instancia del juego para no usar mucho recurso de la CPU, de esta manera, la función de búsqueda puede explorar el árbol de variantes mas velozmente (mas nodos/por segundo) y por lo tanto mejorando el rendimiento del programa en el juego.

Una función de evaluación debe dar datos importantes de la instancia del juego, por ejemplo en el ajedrez es fundamental la suma del valor de las piezas y su movilidad. Otras implementaciones de funciones de evaluación pueden ser más complejas, por ejemplo dan información de la seguridad del rey. 2

TOP20 Motores de Ajedrez

Houdini 2.0 es numero uno en la Round Robin Rating List of the TOP20 Engines Chess:

       Engines Chess                   ELO 

  1  Houdini 2.0 STD                  3019
  2  Critter 1.4a                         2979
  3  Komodo 4                            2976
  4  Stockfish 2.2.2 JA               2955
  5  Deep Rybka 4.1                   2950
  6  Naum 4.2                             2837
  7  Chiron 1.1a                          2832
  8  Fritz 13 32b                         2819
  9  Deep Shredder 12                2800
  10 Deep Sjeng c't 2010            2797
  11 Gull 1.2                               2796
  12 Spike 1.4 32b                      2788
  13 Protector 1.4.0                   2767
  14 spark-1.0                             2765
  15 Hannibal 1.1                        2755
  16 Deep Junior 13                    2754
  17 HIARCS 13.2 MP 32b            2753
  18 Quazar 0.4                           2749
  19 Zappa Mexico II                    2722
  20 Deep Onno 1-2-70              2688
He traducido una entrevista en inglés a Robert Houdart, el creador del motor de ajedrez
actualmente más fuerte de el mundo: Houdini 2.0 , espero que os guste:

Quien es Robert Houdart creador del motor de Chess Houdini ?
Este increible hombre, ademas es el creador de un magnifico telescopio  de altas prestaciones, podeis construiros uno si sabeis de astronomia, bricomania y teneis pasta, jejeje.

Q: Robert Houdart, por favor preséntate a nuestros lectores. Hombre de 43 años de edad, vive en la parte de habla neerlandesa de Bélgica, cerca de la ciudad de Lovaina (conocido sobre todo por su Universidad con 600 años de edad y su cerveza Stella Artois), felizmente casado, con 3 maravillosas hijas entre 10 y 16 años. Como ingeniero de la universidad especializada en el análisis mecánico (Análisis estructural, análisis de vibraciones y transferencia de calor) durante la década de 1990 he trabajado en el diseño y análisis de las armas nucleares.
He trabajado en las plantas de energía nucleares y más concretamente en el comportamiento de las tuberías, en el plan nacional de eliminación durante terremotos y accidentes aéreos. Desde el año 2000 mi actividad profesional ha sido arquitecto de softwaree (I + D) Manager para el software de CRM (Customer Relationship Gestión).
Q: ¿juegas al ajedrez ? ¿ tiene usted algun ídolo de ajedrez? Me enteré del ajedrez a la edad de 14 años y jugué durante casi 20 años en el equipo de mi ciudad natal Lovaina en Bélgica. Mi mejor calificación durante la década de 1990 estaba a punto de 2250, y mi estilo siempre ha sido bastante posicional. Con Blancas  siempre abría con d4, y con Negras he jugado principalmente la Francesa y la india de Rey. Crecer (en términos de ajedrez) durante la década de 1980 significó que mis héroes de ajedrez eran Anatoly Karpov por su magnífico estilo posicional y Gary Kasparov por su energía, superior completa con la obra. Considero que este último, es el mejor jugador de ajedrez. De la actual generación de jugadores de mi favorito es el campeón del mundo Viswanathan Anand, como un jugador extraordinario, caballero y gran embajador del mundo del ajedrez.
Q: ¿Cómo te involucraste en la programación de ajedrez del motor? La programación de ordenadores ha sido mi afición y pasión desde hace casi 30 años. Durante los 30  años he tocado muchos lenguajes de programación y sistemas informáticos. Mi interés en la programación de ajedrez comenzó con Chess de Psion escrito por Richard Lang en torno a 1985. He estudiado este programa bastante extensa, y se sorprendió por su puesta en práctica y elegante. Tomé los fundamentos teóricos de la programación de ajedrez del libro “Schaken voor Computadoras “(” El ajedrez para computadoras “, van Diepen & van den Herik, 1987). Desde finales de 1980 he escrito varios programas de ajedrez privadas en diferentes idiomas (Assembler, Pascal, C), para la diversión y la educación. En principio, cada par de años, los dedico en escribir algunos de los nuevos elementos de un programa de ajedrez o un motor completamente nuevo.
Q: Cuéntanos algo sobre la historia de Houdini. El proyecto Houdini comenzó a mediados de 2009. Esta vez fue diferente, sin embargo, después de mis otros motores privados anteriores, sentí que era hora de crear un motor muy fuerte. En comparación con la década de 1980 o 1990, en los últimos años, los “theres” tienen una gran cantidad de información disponible en el Internet – en cuestión de segundos cualquiera tiene acceso a la información que de otro modo tendrías años para recoger o simplemente nunca habria aparecido. Houdini se ha beneficiado en gran medida de esta cultura de Internet y contiene ideas y técnicas procedentes de, por ejemplo, la excelente Ajedrez wiki de programación y de varios motores de código abierto. La adición de mi propio algoritmo y las mejoras sobre la base de más de 20 años de la programación de ajedrez y mi fuerza, como un jugador de ajedrez, el resultado fue un motor que ha sido indiscutiblemente en la cima de las listas de rating de más de un año. Es interesante observar que los motores de ajedrez en general, y Houdini 2 en particular, son mucho más fuerte que los de  10 a 15 años para atras. Probablemente la mayoría de los lectores recordarán el partido de 1997 entre Kasparov y de Deep Blue, en el que por primera vez el campeón del mundo de los humanos perdió un partido contra un programa informático de ajedrez. Deep Blue era una enorme variedad de hardware sofisticado y software capaz de evaluar unos 200 millones de posiciones de ajedrez por segundo. Si se ejecuta en la actualidad Houdini 2.0 en una CPU corriente de Intel o AMD disponible por menos de  300$, se producen aproximadamente 10 millones de posiciones por segundo, pero el software se ha mejorado significativamente y Houdini 2.0 fácilmente vencería a Deep Blue. La fuerza increíble la muestra claramente cuando kibitz juega como un GM con Houdini en un ordenador portátil en casa, siempre estoy sorprendido de la gran cantidad de errores de las partidas históricas de GMs y que de otra manera pasarían desapercibidas.
Q: ¿Qué es tan especial acerca de Houdini? Houdini las características principales son la evaluación excelente de la posición, combinada con la más sofisticada algoritmo de búsqueda. La clave para el algoritmo de búsqueda eficaz Houdini es su selectividad. Al igual que un jugador humano, un juego de ajedrez motor que investiga (malas jugadas) se mueve muy superficialmente y algunas (buenas jugadas) se mueve muy profundamente. El arte de crear un motor de ajedrez es encontrar un equilibrio entre el riesgo de perder una buena jugada y la pérdida de tiempo dedicado a malas jugadas. Con Houdini he encontrado un excelente equilibrio entre los dos. Prueba de ello es que incluso en los controles de tiempo cortos Houdini encuentra a menudo la mejor jugada en una posición.Houdini tiene una evaluación postural excelente en todas las fases del juego debido a sus muchos correspondientes términos de evaluación de posición que han sido ajustados con varios millones de partidas de ajedrez.Fuerte y creativa en la apertura, luchando sin descanso para la iniciativa en el medio juego, precisa en el final del juego. En particular, he tratado de hacer las evaluaciones de Houdini lo más útil posible para la estimación del resultado del juego – por lo tanto, Houdini es ligeramente más pesimistas que otros motores en sus evaluaciones. Desde un punto de vista humano el estilo Houdini es suntuoso, tanto en el ataque como en la defensa. Yo no puede encontrar ninguna mejor modo de expresar lo que han citado en el Club de Ajedrez en vivo Página de Facebook: ” Si hay alguna computadora descendiente de los jugadores románticos como Morphy, Anderssen, Spielmann, Marshall, Bogojulbow, Tal, Nezhmetdinov, Shirov, Morozevich, esta sería Houdini. Houdini es el actual número 1 motor del ajedrez y los juegos en un estilo muy romántico. Cuando después de algunos de los juegos de Houdini (por ejemplo, en su partido contra Rybka en los campeonatos TCEC a partir de 2011), a veces se tiene la impresión de una comprensión del ajedrez super-humano que permite a Houdini a sacrificar un peón, dos peones, tres peones y aplastar al adversario.Otra característica principal de Houdini es su simplicidad en uso. He procurado ajustar los parámetros por defecto así como sea posible para que se Houdini ofrecer un gran rendimiento a la derecha de la caja. A diferencia de muchos otros motores, ninguna configuración difícil de hacer, y yo deliberadamente he tratado de limitar el número de parámetros configurables para mantener todo lo más simple posible. Para los jugadores de ajedrez por correspondencia Houdini 2.0 ofrece funciones avanzadas, incluyendo el aprendizaje y Hash persistente, análisis multi-PV, la búsqueda Mate y el acceso a los diferentes tipos de Juego de Mesa Final Bases, pero todas estas características son opcionales y no te interfiere con las funciones del motor de base. La versión Pro de Houdini ofrece el motor de ajedrez más potente del planeta. Con un máximo de 32 núcleos y 32 GB de memoria hash, Houdini 2 Pro está muy bien optimizado y hace una completa utilizacion del hardware – hasta el punto de que los fabricantes de hardware y probadores están empezando a utilizar Houdini para evaluar su CPU.
Q: ¿Cómo podemos saber más acerca de Houdini? Puedes visitar mi sitio web http://www.cruxis.com/ajedrez/houdini.htm o los sitios web de mis dos exclusivos socios de empresas que integran Houdini en sus productos www.chessok.com de Chess Assistant & Acuario, y www.chessking.com.Q: ¿Qué top jugadores de ajedrez  sabes que han hecho uso de Houdini? Estoy seguro que muchos de los mejores jugadores del mundo utilizan Houdini. GMs que han dicho públicamente que están usando y / o prefiriendo Houdini son Anand, Svidler, Giri y Finegold.
Q: ¿Cuáles son las calificaciones actuales de los motores de ajedrez?La lista de motores de calificación de mayor autoridad es iPON (http://www.inwoba.de) que lleva a cabo los torneos de computadoras.

Gracias por responder a nuestras preguntas

Programación

DENTRO DE UN MOTOR DE AJEDREZ

El objetivo de estas lecciones es comprender profundamente como está hecho un motor de ajedrez e iniciarse en el conocimiento del lenguaje de programación C necesario para ello (la mayoría de motores están construidos en este lenguaje). El curso va dirigido a todas aquellas personas aficionadas al ajedrez y a la informática que seguro que tienen esa curiosidad (no siendo necesario conocimientos previos de programación) y espero que sea de utilidad para nuevos programadores.

Para las lecciones voy a utilizar el código fuente de mi propio motor, DanaSah, pero si un día termino estas lecciones y las sigues espero que a partir de entonces no solo puedas entender como funciona mi motor sino también otros e incluso animarte a comenzar el tuyo.

DanaSah es un motor de ajedrez con protocolo xboard y que podrá jugar en aquellos GUIS que soporten dicho protocolo, como el propio Winboard (Windows) y xboard (Linux), Arena, ChessGUI e incluso Chessmaster. También mediante un adaptador llamado WB2UCI podrá jugar en GUIS que soporten el protocolo UCI como son Fritz, Shredder, etc.

DanaSah es un programa de código abierto y con licencia GPL, así que es posible descargarte gratuitamente el programa e incluso ver el código fuente utilizado para hacer el motor. El código fuente suele estar en una carpeta llamada src, en dicha carpeta encontrarás varios archivos con extensiones h y c. Todo el código del programa podría estar en un único archivo, pero al estar dividido en varios archivos la cosa está mejor organizada, vamos a encontrar más rápido el código que queremos ver o modificar y también lo harán otras personas. Si te fijas en los nombres de los archivos, estos están en castellano, la mayoría de programadores influenciados por programas de código abierto o páginas que hablan de detalles de programación en ajedrez utilizan nombres para los archivos (y para el código) en ingles. Para comprender un día esos programas es importante que vayamos conociendo también terminología en inglés,  por ejemplo en castellano utilizamos búsqueda, en inglés search.

Una vez que tenemos la carpeta src con el código, ¿Qué archivo empezamos a estudiar y que orden seguimos? La verdad es que no hay establecido ningún orden, pero parece lógico comenzar por el archivo “definiciones.h”.

Para la lección 1 (14-02-2012) descarga el archivo “definiciones.h” (definiciones y estructuras), es un archivo que contiene código, lo bueno sería abrirlo con un programa para escribir código en lenguaje C, pero si no tenemos uno instalado lo podemos abrir con el bloc de notas (también os podéis instalar el notepad++). La explicación de dicho código la tendremos en el archivo pdf MOTOR_AJEDREZ_1.

Para la lección 2 (20-02-2012) descarga los archivos “variables.c” y “variables.h” (variables globales), la explicación de lo que es una variable, los diferentes tipos que tenemos, como crearlas y cuales utiliza nuestro motor lo tenemos en el archivo pdf MOTOR_AJEDREZ_2.

Para la lección 3 (25-02-2012) descarga los archivos “funciones.h” (pototipo de funciones) y “danasah.c” (función principal), en el archivo pdf MOTOR_AJEDREZ_3 encontraréis lo que es una función, lo que es un prototipo de función y lo que es la función main.

Si no has programado anteriormente, descarga el archivo pdf IDE (28-02-2012) para encontrar información sobre entornos integrados de desarrollo gratuitos para el lenguaje C, verás lo sencillo que es crear un ejecutable a partir del código fuente de un motor y podrás utilizar el IDE para empezar a realizar prácticas sobre dicho lenguaje. Como complemento al archivo pdf tenemos 2 vídeos:

El primero muestra qué sencillo es descargarse un entorno integrado de desarrollo y configurarlo (DEV-C++ portable). También se descargan 3 motores de ajedrez y se procede a crear un ejecutable para cada uno de ellos. El vídeo ha quedado un poco largo, unos 45 minutos, en parte por utilizar 3 motores en lugar de 1, pero de esta forma comprobáis que no solo funciona con DanaSah.

El segundo vídeo muestra como es posible crear ejecutables de 32 y 64 bit (64 bit siempre que hayamos descargado la versión de 64 bit y luego tengáis un sistema operativo de 64 bit para poder ejecutar el motor creado). También se ve como se pueden cambiar algunas opciones del compilador para crear ejecutables más rápidos. Este segundo vídeo tiene una duración de unos 23 minutos.

Para la lección 4 (01-03-2012) utiliza el archivo “danasah.c”, en el archivo pdf MOTOR_AJEDREZ_4 encontraremos información de las instrucciones necesarias para comprender el código de la función main (también utilizadas en el resto de archivos) y tendremos una explicación de dicho código. Seguramente es una lección dura para aquellas personas que no han programado nunca, de golpe se enseñan unas 7 instrucciones, pero es algo necesario si queremos comprender el código o tener la opción de crear nuestro motor. Si superamos esta lección y la comprendemos, el resto creo que serán sencillas de comprender.

Para la lección 5 (05-03-2012) descarga los archivo “leer_archivo_ini.c” y “danasah.ini”, el archivo “leer_archivo_ini.c” contiene el código necesario para abrir el archivo de configuración “danasah.ini”, buscar dónde están los parámetros que ha definido el usuario y asignar el valor de dichos parámetros a las variables adecuadas, la explicación del código lo encontraremos en el archivo pdf MOTOR_AJEDREZ_5, que además de hablar del archivo de configuración explicará un segundo método para configurar los parámetros de un motor con protocolo xboard, la línea de comandos.

Para la lección 6 (06-03-2012) descarga el archivo “xboard.c”, dicho archivo contiene el código sobre el protocolo xboard que nos permite comunicar el GUI con el motor. En el archivo pdf MOTOR_AJEDREZ_6 encontraremos la explicación sobre los protocolos y especialmente sobre el xboard y encontraremos la explicación de la función xboard().

Para la lección 7 (12-03-2012) descarga el archivo “fen.c”, dicho archivo contiene el código de la función SetBoard(string) que permite iniciar las variables del motor de acuerdo a una posición entrada en formato FEN. El código de dicha función y el formato FEN están explicados en el archivo pdf MOTOR_AJEDREZ_7.

Para la lección 8 (20-03-2012) descarga el archivo “fen.c” que contiene la función Tablero_FEN(EPD) para convertir la posición interna de DanaSah al formato FEN y el archivo “libro.c” que contiene las funciones necesarias para manejar el libro de aperturas, cuando llamamos al libro de aperturas pasamos la posición en el formato FEN. El código de la función Tablero_FEN(EPD) e información sobre los libros de aperturas lo encontraremos en el archivo pdf MOTOR_AJEDREZ_8.

Para la lección 9 (29-03-2012) descarga el archivo “egbb.c” que contiene el código de acceso a las bitbases de Scorpio, en el archivo pdf MOTOR_AJEDREZ_9 encontramos información sobre el código además de información sobre bases de datos de finales.

Para la lección 10 (02-04-2012) descarga los archivos “entradas.c” y “salidas.c” que contienen el código para comprobar si recibimos un movimiento del contrario y si es el final de partida. La explicación del código lo tenemos en el archivo pdf MOTOR_AJEDREZ_10.

Para la lección 11 (13-04-2012) descarga el archivo “generarmovimiento.c” que contiene el código para generar todos los posibles movimientos para una posición. La explicación del código la tenemos en el archivo pdf MOTOR_AJEDREZ_11.

Para la lección 12 (28-04-2012) utiliza el archivo “generarmovimiento.c” que contiene el código para la función Hacer_movimiento() y Deshacer(). La explicación del código la tenemos en el archivo pdf MOTOR_AJEDREZ_12.

Para la lección 13 (10-05-2012) utiliza el archivo “atacado.c” que contiene el código para las funciones atacado() y EstaEnJaque(). La explicación del código la tenemos en el archivo pdf MOTOR_AJEDREZ_13.

Para la lección 14 (07-06-2012) utiliza los archivos “busqueda.c” y “entradas.c” que contienen el código para las funciones MotorPiensa() y get-ms() respectivamente. La explicación del código la tenemos en el archivo pdf MOTOR_AJEDREZ_14.

 

Deja un comentario

Your email address will not be published.

Optimization WordPress Plugins & Solutions by W3 EDGE