Coiled-NNUE 0.7 - Motor de ajedrez por Oscar Gavira.

Versión del motor:

0.7

Fecha de publicación:

08 - Agosto - 2021

Versiones disponibles:

Windows 64 bits.

Protocolo de comunicación:

UCI

Tipo de licencia:

GNU General Public License v3.0


Tabla de contenido

1) Introducción.

2) Instalación.

3) Requisitos.

4) Progreso de ELO.

5) Técnicas utilizadas.

6) Contenido.

7) Opciones UCI.

8) Rendimiento.

9) Licencia.

10) Agradecimientos.


Introducción

Ahora Coiled es de código abierto.

Quiero aportar mi pequeño granito de arena a la comunidad de investigación, que tanto me ha aportado a mi en la creación de Coiled.

Espero no infligir nada, no ofender a nadie con alguna acción incorrecta... Toda ayuda y mejora sera bien recibida.

He decidido quitar la parte interna de la evaluación, ya que es muy densa y poco clara. Poco a poco volveré a implementar un código de evaluación propio/interno. Pues en esta versión, solo funciona con redes neuronales.


Coliled es un motor de ajedrez que yo mismo he diseñado. Su origen empezó hace un tiempo, cuando decidí actualizar el programa de AjedrezNet (AjedrezNet es una GUI que es capaz de gestionar motores de ajedrez de protocolo XBoard, realizado en vb6) a una versión más moderna, utilizando la plataforma Framework .Net, con mejor soporte para Windows Vista, Windows 7 y 10.

En primer lugar, intenté realizar la migración de AjedrezNet a la plataforma Framework.Net y el resultado no me terminó de gustar, por ello empecé a reescribir todo el código con una estructura mejorada. Pero tampoco me gustaba, así que decidí generar mi propio motor de ajedrez.

Actualmente, la GUI, que viene siendo la parte gráfica (AjedrezNet), ha pasado a un segundo plano para mí, por lo que no estoy centrando mi trabajo en él, sino que estoy volcado en el motor Coiled.

En un principio el motor lo realicé en Visual basic .Net ya que la idea era unirlo a la parte gráfica (AjedreNet). Pero su rendimiento era bajo. Finalmente opté por hacerlo en el lenguaje de programación C.

Reconozco que me ha costado y me cuesta manejar C, ya que no he programado nunca en este formato, sobre todo el trato con cadenas (lo que sería un string). Sin embargo, la sintaxis es parecida a PHP (sintaxis que sí conozco) y casi todo el programa son funciones matemáticas y poco trato con cadenas.

En agosto del 2013, Coiled fue publicado por primera vez para el usuario final. Desde entonces, he ido realizando actualizaciones, depurando errores, incrementando su fuerza de ELO, etc. Actualmente Coiled es capaz de jugar al ajedrez y también a la variante Chess960.

Esta versión a sido compilado para Windows con la plataforma CodeBlocks y MinGW versión 8.1.0


Instalación

Coiled es un motor y como tal no incluye de un tablero de ajedrez, solo calcula los movimientos. Es por eso que requiere de una parte gráfica para que el usuario final pueda jugar cómodamente. Existen diversos programas para esta tarea, pudiendo elegir el que más agrade al usuario. Algunos de ellos son:


Entornos gratuito

Arena Chess Gui

Tarrasch Chess GUI

Lucas Chess GUI

PyChess GUI

ChessX GUI

Cute Chess GUI


Un pequeño listado de GUI


Para instalar Coiled es necesario descomprimir el archivo: coiled_0.7.zip en una carpeta, acto seguido abrir la GUI elegida y consultar el manual de instalación de un motor de ajedrez en dicha GUI.


Requisitos hardware

X64

PROCESADOR

Intel o Ahtlon con soporte AVX2

RAM

128MB Mínimo.


Progreso de ELO

Versión 0.3 No publicada. Se incrementó en 250. Dado así una fuerza de 2250 ELO


La versión actual de Coiled-NNUE 0.7 calculo que alcanza los 3050 ELO.


Proceso de ELO Proceso de ELO


Técnicas utilizadas

Protocolo:

UCI.

Representación del tablero:

Mailbox. 8x8 unidimensional tipo entero.

Generador:

Sencillo.

Búsqueda:

Profundidad iterativa.

Ventana de aspiración.

PVS / Alpha-Beta.

Quiescence.

Reducciones y podas:

Distancia mate.

Movimiento nulo poda.

Reducciones de movimientos finales. (LMR)

Poda de movimientos finales. (LMP)

Tabla de transposición poda.

See (Static Exchange Evaluation).

Extensiones:

Jaque.

Ordenación:

Movimiento Hash.

Profundización iterativa Interna. (IID)

MVV / LVA.

Killer heurístico.

Histórico heurístico.

Evaluación:

Redes neuronales (NNUE)

No incluye evaluación propia.

Otros:

Detección final del juego con las reglas de la FIDE.

Incluyendo triple repetición y la regla de 50 movimientos.

Tablas por material insuficiente.

Tabla de transposición:

Si.

Tabla de finales:

Si. Gaviota. Por Miguel Ballicora. *

Libro de aperturas:

Si.

Chess960:

Si.

Lenguaje de programación:

C

Modo de juego:

Por tiempo:

Convencional.

Convencional e incremental.

Por movimiento.

Profundidad.

Nodos.

Mate.

Infinito.

ELO estimado:

± 3050 (?).


* Formato de compresión .cp4 (LZMA). Disponibles en internet. http://oics.olympuschess.com/tracker/


Contenido

Coiled-NNUE_07_x64.exe

Motor para Windows de 64Bits.

Book.db

Libro de aperturas en formato SqlIte.

gtbprobe_x64.dll

Librería para manejar las tablas de finales de Gaviota de 64Bits para Windows.

nnue_avx2.dll

Librería para manejar las redes neuronales.

sqlite3_x64.dll

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

Leeme.html

Instrucciones e información sobre el motor Coiled.

Coiled.bmp

Logotipo de Coiled.

nn-a9f9e868162a.nnue

Red neuronal.

Más

Código fuente.


Opciones Uci

Hash

Para ajustar el tamaño de la tabla hash en MB.

ShowPv

Limita la información enviada a la GUI en el proceso de calculo.

OwnBook

Para usar el libro de apertura propio del motor. (por defecto: false)

OwnBookLimit

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

GaviotaUse

Activa/desactiva el uso de tablas de finales de Gaviota. (por defecto: false)

GaviotaPath

Para asignar la carpetas/directorios de las tablas de finales de Gaviota. (por defecto: Vacío)

GaviotaCache

Asigna la cache de las tablas de finales de Gaviota. (por defecto: 32MB)

GaviotaProbeLimit

Indica a partir de cuantas piezas busca en la tabla de finales. (por defecto: 5)

NnueUse

Activa/desactiva el uso de redes neuronales. (por defecto: true)

NnuePath

Para asignar la ruta de la red neuronal. (por defecto: nn-a9f9e868162a.nnue)

UCI_Chess960 **

Activa/desactiva el modo de juego Chess960. (por defecto: false)

UCI_Chess960CastlingSign **

Indica si utiliza el enroque estándar del protocolo UCI o el de la GUI Arena (por defecto: UCI)


** Si activa UCI_Chess960 y utiliza la GUI de Arena, en la opción UCI_Chess960CastlingSign debes seleccionar la configuración: O-O/O-O-O. Para un correcto funcionamiento con la GUI Arena.


Rendimiento

Existe la posibilidad de realizar un Perft. esta opción sirve para descubrir fallos en la generación de movimientos.

Puedes realizar una búsqueda de todos los movimientos hasta la profundidad que se desee, con divide, escribiendo los siguientes comandos:


- Si partes desde una posición inicial:

ucinewgame

perft <X>


- Desde una posición en concreto:

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

perft <X>


Esta opción (Perft) también están disponibles para el modo Chess960, solo has de activar el modo UCI_Chess960.


Licencia

GNU General Public License v3.0


Agradecimientos

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 https://www.chessprogramming.org/ 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 de rendimientos .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 y a CEGT 40/4, 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.