Coiled 0.4 - Motor de ajedrez por Oscar Gavira. España.

Versión del motor: 0.4
Fecha de publicación: 11 - Septiembre - 2016
Versiones disponibles: Windows de 32 y 64 bits
Protocolo de comunicación: UCI

Tabla de contenido

1) Instalación.

2) Introducción.

3) Progreso de ELO.

3) Técnicas utilizadas.

4) Los planes futuros.

5) Contenido.

6) Opciones UCI.

7) Rendimiento.

8) Licencia.

9) Créditos.


Instalación

Para su instalación debe seleccionar el motor que desee instalar (32/64 Bits) y copiar el motor en una carpeta junto con sus componentes.

Ejemplo:

- Windows 32 Bits: Coiled_04_x86.exe, sqlite_x86.dll, gtbprobe_x86.dll, Book.db, Coiled.bmp/Coiled.jpg

- Windows 64 Bits: Coiled_04_x64.exe, sqlite_x64.dll, gtbprobe_x64.dll, Book.db, Coiled.bmp/Coiled.jpg


Introducción

Todo empezó cuando decidí actualizar el programa de AjedrezNet a una versión más moderna, utilizando la plataforma Framework .Net

Intenté realizar la migración de AjedrezNet a .Net y no me terminó de gustar y empecé a reescribir todo el código con una estructura mejorada.

Al llegar a la sección del algoritmo de los movimientos que se pueden realizar, que también intenté migrar a .Net ví que era una burrada de código y poco optimizado, entonces empecé a mirar de generar un motor de ajedrez.

Algo que tenia en mente realizar para que AjedrezNet tuviera su propio motor o IA pero que nunca realicé.


Ahora tengo la parte gráfica (AjedrezNet) aparcada y estoy volcado en el motor Coiled.


En un principio el motor lo realicé en Vb .Net ya que la idea era integrarlo a la parte gráfica (AjedreNet).

Pero su rendimiento no me terminaba de gustar. Al final opté por migrar a C.


También reconozco que me ha costado y me cuesta manejar C, ya que no he programado nunca en C, sobre todo el trato con cadenas (lo que sería un string), pero la sintaxis es parecida a php (sintaxis que conozco) y casi todo el programa son funciones matemáticas.


He utilizado CodeBlocks con TDM-GCC versión 4.9.2 (tdm-1)/(tdm64-1), para su compilación para Windows.


Progreso de ELO

Por el momento, Coiled estimo que tiene alrededor de 1725 ELO en su versión 0.1a

- CCRL 40/4 - 1707 ELO.

- Motores de Ajedrez Hispanos - 1758 ELO.


En su versión 0.2b se incremento en 200. Dado así una fuerza de 1925 ELO

- CCRL 40/4 - 1996 ELO.

- CEGT 40/4 - 1826 ELO.


Versión 0.3 No publicada. Alrededor de 2250 ELO.


La versión actual de Coiled 0.4 calculo que alcanza los 2500 ELO.


Proceso de ELO


Técnicas utilizadas

Protocolo: UCI.
Representación del tablero: 8x8 array unidimensional de 64. Tipo entero.
Generador de movimientos: Sencillo.
Búsqueda: Profundidad iterativa.
Ventana de aspiración.
PVS/Alpha-Beta.
Quiescence.
Reducciones/Podas: Distancia mate.
Movimiento nulo R = 3.
Reducciones de movimientos finales. (LMR)
Tabla de transposición.
Futility.
Razoring.
See (Static Exchange Evaluation).
Extensiones: Jaque.
Peón en séptima.
Ordenación de movimientos: Tabla de transposición.
PV.
Profundización iterativa Interna. (IID)
MVV/LVA
Killer heurístico.
Historico heurístico.
Evaluación: Evaluación balanceada.
Estado de juego mediante (Phase)
Material.
Posición de las piezas en el tablero.
Estructura de peones.
Peón pasado.
Peón aislado.
Peón retrasado.
Peón doblados.
Peón imparable.
Peón candidato.
Peón candidato falso. (Fake)
Peón pasado oculto (Hidden passed)
Alfil
Pareja de alfiles.
Alfil ataques y defensas.
Alfil atrapado.
Alfil movilidad.
Caballo
Caballo atrapado.
Caballo Outposts.
Caballo ataques y defensas.
Caballo movilidad.
Torre
Torre en fila abierta y semi abierta.
Torre en séptima.
Torre ataques y defensas.
Torre atrapada.
Torre bloqueada.
Torre movilidad.
Seguridad del rey.
Enroque.
Estructura de peones.
Ataques en conjunto.
Tropismo.
Finales (KP vs k, KBN vs k, KR vs k, KD vs k, KBB vs K...) ampliada y mejorada.
Otros: Detección del final del juego con las reglas de la FIDE, incluyendo triple repetición y la regla de 50 movimientos...
Tablas por material insuficiente como: NN vs k, KB vs k...
Tabla de transposición: Si.
Pawn Hash Table: Si.
Tabla de finales: Gaviota. Por Miguel Ballicora.
Ponder: Si. Incrementando un 50 o 75 ELO más.
Libro de aperturas: Si. Formato SqlIte.
Lenguaje de programación: C
Modo de juego: Control por tiempo (convencional, incremental y tiempo fijo por movimiento), profundidad fija, infinito (para análisis de archivos .epd tipo wac.epd en el entorno Arena).
Elo estimado: ± 2500 versión 32Bits. ± 2525 versión 64Bits.

Planes futuros

Alcanzar un Elo de 2000 o 2500. Ya que con el formato de representación del tablero elegido, creo que es lo máximo.

Con activación de casi todas las opciones soportadas por el protocolo UCI.

Integrarlo a la parte gráfica (AjedrezNet)


Contenido

- Coiled_04_x86.exe -> Motor para Windows de 32Bits.

- Coiled_04_x64.exe -> Motor para Windows de 64Bits.

- sqlite_x86.dll -> Librería para manejar el libro de aperturas, formato sqlite de 32Bits para Windows.

- sqlite_x64.dll -> Librería para manejar el libro de aperturas, formato sqlite de 64Bits para Windows.

- gtbprobe_x86.dll -> Librería para manejar las tablas de finales de Gaviota de 32Bits para Windows.

- gtbprobe_x64.dll -> Librería para manejar las tablas de finales de Gaviota de 64Bits para Windows.

- Book.db -> Libro de aperturas en formato SqlIte.

- Leeme.html -> Este archivo.

- Coiled.bmp -> Logotipo de Coiled.

- Coiled.jpg -> Logotipo de Coiled.


Opciones Uci

Hash -> Para ajustar el tamaño de la tabla hash. (por defecto: 128Mb)

Ponder -> Piensa en tiempo del adversario. (por defecto: false)

OwnBook -> Para usar el libro propio del motor.  (por defecto: false)

OwnBookLimit -> Para limitar el numero de jugadas máximas obtenidas desde el libro de apertura.  (por defecto: 8)

ShowPv -> Para limitar la información enviada a la GUI, tales como: Estado de la tabla hash, nodos analizados, puntuación y la variante principal.

UseGaviotaTablebases -> Para activar/desactivar el uso de tablas de finales de Gaviota.  (por defecto: false)

GaviotaTbPath -> Para asignar la ruta de las tablas de finales de Gaviota. (por defecto: Vacío)

GaviotaTbCache -> Para asignar la cachea de las tablas de finales de Gaviota. (por defecto: 32Mb)

GaviotaCompression -> Para asignar el tipo de compresión de las tablas de finales. (por defecto: 4)


Rendimiento

Existe la opción de realizar un perft para descubrir fallos en la generación de movimientos, los pasos son:


- Desde una posición inicial:

ucinewgame

perft <X> (Realiza una búsqueda de todos los movimientos hasta la profundidad X, con divide)


- Desde una posición en concreto:

position fen 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -

perft <X> (Realiza una búsqueda de todos los movimientos hasta la profundidad X, con divide)


- También esta la opción de comprobar la integración del libro de apertura, ya que es fácil su manipulación, inserción y eliminación de aperturas:

book (Comprueba la integridad del las jugadas en las aperturas del libro. Máximo 100 caracteres por registro el resto lo omite.)


Licencia

Coiled es libre de ser usado y distribuido libremente sin ninguna restricción, salvo modificaciones de su contenido.

Se ha probado en gran medida sin causar ningún problema.

Utilice este programa bajo su propio riesgo.

Este programa es un producto sin garantía.

En ningún caso, el autor se hace responsable de los daños y perjuicios derivados de la utilización de este programa.


Créditos

Estoy muy agradecido a las siguientes personas:


- A mi familia y amigos, que siempre están ahí para ayudar.

- A todos aquellos que han decidido compartir el código fuente de sus motores (Me han aclarado funciones y entendimiento de ellos).

- A la web CPW http://chessprogramming.wikispaces.com por todo el contenido sobre las técnicas aplicables a un motor ajedrez.

- A todos aquellos que han jugado con el motor y han publicado su experiencia y opiniones.

- A los archivos .epd de posiciones estratégicas tipo: WAC, IQ6, mes400... En especial a la web https://sites.google.com/site/strategictestsuite/

- A la web CCRL 40/4 por realizar un torneo y darle una clasificación de ELO.

- A la web CEGT 40/4 por realizar un torneo y darle una clasificación de ELO.

- A la web E4E6 por realizar un torneo y darle una clasificación de ELO.

- A toda web que haya publicado una clasificación ELO o/y haya añadido un enlace a mi web.

- A Pedro Castro por ser el primero en probar y realizar un torneo. Autor de la web Motores de ajedrez hispanos y autor de DanaSah.

- A la web Motores de Ajedrez Hispanos por realizar su primer torneo y darle una clasificación de ELO en su primera versión.