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
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.
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
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
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.
X64
PROCESADOR
Intel o Ahtlon con soporte AVX2
RAM
128MB Mínimo.
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.
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/
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.
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.
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.
GNU General Public License v3.0
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.