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

Versión del motor:

0.5

Fecha de publicación:

16 - Julio - 2018

Versiones disponibles:

Windows de 32 y 64 bits.

Protocolo de comunicación:

UCI

# Tabla de contenido

1) Introducción.

2) Instalación.

3) Requisitos.

4) Progreso de ELO.

5) Técnicas utilizadas.

6) Los planes futuros.

7) Contenido.

8) Opciones UCI.

9) Rendimiento.

10) Licencia.

11) Créditos.

# 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 MinGW versión 6.3.0, para su compilación para Windows.

# Instalación

Coiled no incluye de un tablero de ajedrez, solo calcula los movimientos. Requiere de una parte gráfica para jugar cómodamente. Existen muchos programas para esta tarea, paso a enumerar unos cuantos.

Entornos gratuito

Arena Chess Gui

Tarrasch Chess GUI

Entornos comercial

Chessbase

Fritz

Aquarium

Descomprimir el archivo coiled_0.5.zip en una carpeta, donde tenga su colección de motores. Apto seguido abrir la GUI preferida y buscar el motor Coiled para su instalación.

Para una correcta instalación consulte el manual de la GUI de como instalar un motor.

Coiled funciona tanto en 32bit como 64bit, solo debe seleccionar el archivo correcto:

- 32 bit: Coiled_05_x86.exe

- 64 bit: Coiled_05_x64.exe

# Requisitos

X86

X64

PROCESADOR

Intel Pentium o AMD-K6. (Instrucciones x86)

Intel Core 2 o Ahtlon 64 (MMX, SSE, SSE2)

RAM

128MB Mínimo. 1GB Máximo

128MB Mínimo. 2GB Máximo

# Progreso de ELO

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

La versión actual de Coiled 0.5 calculo que alcanza los 2600 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 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:

PV.

Tabla de transposición.

Profundización iterativa Interna. (IID)

MVV / LVA.

Killer heurístico.

Histórico heurístico.

Evaluación:

Evaluación balanceada.

Estado de juego mediante (Phase)

Material.

Posición de las piezas en el tablero.

Estructura de peones.

Pasado.

Aislado.

Retrasado.

Doblados.

Imparable.

Candidato.

Candidato falso. (Fake).

Peón pasado oculto (Hidden passed).

Alfil

Pareja de alfiles.

Atrapado.

Alfil ataques y defensas.

Movilidad.

Caballo

Outposts.

Atrapado.

Caballo ataques y defensas..

Movilidad.

Torre

En fila abierta y semi-abierta.

En séptima.

Atrapada.

Bloqueada.

Torre ataques y defensas.

Movilidad.

Seguridad rey.

Enroque.

Estructura de peones.

Ataques en conjunto.

Tropismo.

Finales (KP vs k, KBN vs k, KR vs k, KQ vs k, KBB vs K...) ampliada y mejorada.

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: KNN vs k, KB vs k...

Tabla de transposición:

Si.

Pawn Hash Table:

Si.

Tabla de finales:

Gaviota. Por Miguel Ballicora.

Ponder:

No. Anulado en esta versión.

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:

±2600 (?).

# 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_05_x86.exe

Motor para Windows de 32Bits.

Coiled_05_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)

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.

GaviotaTbUse

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)

GaviotaTbCompression

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.