Coiled 0.2b - Motor de ajedrez por Oscar Gavira. Espaa.
----------------------------------------------------------------------------------------------
Versin del motor : 0.2b
Fecha de publicacin: 21 - Julio - 2014
Versiones disponibles : Windows/Linux de 32 y 64 bits
Protocolo de comunicacin: UCI

TABLA DE CONTENIDO
--------------------------------
1) Introduccin.
2) Descripcin general.
3) Los planes futuros.
4) Contenido.
5) Opciones UCI.
6) Rendimiento.
7) Licencia.
8) Crditos.


1) INTRODUCCIN
---------------------------

Todo empez cuando decid actualizar el programa de AjedrezNet a una versin ms moderna, utilizando la plataforma Framework .Net 
Intent realizar la migracin de AjedrezNet a .Net y no me termin de gustar y empec a reescribir todo el cdigo con una estructura mejorada.
Al llegar a la seccin del algoritmo de los movimientos que se pueden realizar, que tambin intent migrarlo a .Net v que era una burrada de cdigo 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 grfica (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 grfica (AjedreNet).
Pero su rendimiento no me terminaba de gustar. Al final opt por migrarlo a C.

Tambin reconozco que  me ha costado y me cuesta manejar ya que no he programado nunca en C, sobre todo el trato con cadenas (lo que sera un string), pero la sintaxis es parecida a php y casi todo el programa son funciones matemticas.

He utilizado CodeBlocks con GNU GCC, para su compilacin, tanto para Windows como para Linux

Por el momento, Coiled estimo que tiene alrededor de 1725 ELO es su versin 0.1a
Segn CCRL 40/4 - 1707 ELO.
Segn Motores de Ajedrez Hispanos - 1758 ELO.

2) DESCRIPCIN GENERAL
-------------------------------------

Coiled tiene las siguientes caractersticas:

Protocolo:			UCI.
Representacin del tablero:	Vector lineal de 64. Tipo entero.
Generador de movimientos:	Sencillo.
Bsqueda:			Profundidad iterativa.
				PVS/Alpha-Beta.
				Quiescence.
Reducciones/Podas:
				Distancia mate.
				Movimiento nulo.
				Reducciones de movimientos finales.
				Tabla de transposicin.
				Futility.
				Razoring.
				Captures.
Extensiones:
				Jaque.
				Pen pasado.
Ordenacin de movimientos:
				PV.
				Tabla de transposicin.
				Profundizacin iterativa Interna. (IID)
				MVV/LVA.
				Killer heurstico.
				Historico heurstico.
Evaluacin:
				Material.
				Posicin de las piezas en el tablero.
				Estructura de peones.
					Pen retrasado.
					Pen candidato.
					Pen doblados.
					Pen aislado.
					Pen pasado.
				Pareja de alfiles.
				Alfil malo.
				Alfil atrapado.
				Caballo atrapado.
				Caballo Outposts.
				Caballo valor decreciente segn desaparecen los peones.
				Torre valor creciente segn desaparecen los peones.
				Torre en fila abierta y semi abierta.
				Torre en octavo.
				Torre atrapada.
				Torre bloqueada.
				Seguridad del rey.
					Enroque.
					Estructura de peones.
				Finales (KP vs k, KBN vs k, KR vs k, KD vs k, KBB vs K).
Otros:
				Deteccin del final del juego con las reglas de la FIDE, incluyendo triple repeticin y la regla de 50 movimientos..
				Tablas por material insuficiente con (KNN vs k, K vs knn, (KR vs k, K vs kr)...
Tabla de transposicin:		Si.
Libro de aperturas:		No.
Lenguaje de programacin:	C
Modo de juego:			Control por tiempo (convencional, incremental y tiempo fijo por movimiento) o profundidad fija.
Elo estimado:			 2000 (?).

3) PLANES FUTUROS
------------------------------

Alcanzar un Elo de 2000 o 2500 con activacin de casi todas las opciones soportadas por el protocolo UCI.
Integrarlo a la parte grfica (AjedrezNet)

4) CONTENIDO
---------------------

- Coiled_02b_x86.exe ->		Motor para Windows de 32Bits.
- Coiled_02b_x64.exe ->		Motor para Windows de 64Bits.
- Coiled_02b_x86 ->		Motor para Linux de 32Bits.
- Coiled_02b_x64 ->		Motor para Linux de 64Bits.
- Leeme.html ->			Este archivo.
- Leeme.txt ->			Igual que leeme.html.
- Coiled.bmp ->			Logotipo de Coiled.
- Coiled.jpg ->			Logotipo de Coiled.

5) OPCIONES UCI
-------------------------

Hash -> Para ajustar el tamao de la tabla hash (por defecto: 64)

6) RENDIMIENTO
-------------------------

Existe la opcin de realizar un perft para descubrir fallos en la generacin de movimientos, los pasos son:

- Desde una posicin inicial:
  ucinewgame	
  perft <n>	(Realiza una bsqueda de todos los movimientos asta la profundidad X, con divide)

- Desde una posicin en concreto:
  position fen 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -
  perft <n>	(Realiza una bsqueda de todos los movimientos asta la profundidad X, con divide)

7) LICENCIA
------------------

Coiled es libre de ser usado y distribuido libremente sin ninguna restriccin, salvo modificaciones de su contenido.
Se ha probado en gran medida sin causar ningn problema.
Utilice este programa bajo su propio riesgo.
Este programa es un producto sin garanta.
En ningn caso, el autor se hace responsable de los daos y perjuicios derivados de la utilizacin de este programa.

8) CRDITOS
-------------------

Estoy muy agradecido a las siguientes personas:

- A mi familia y amigos, que siempre estn ah para ayudar.
- A todos aquellos que han decidido compartir el cdigo fuente de sus motores (Me han aclarado funciones y entendimiento de ellos).
- A la web CPW <a href="http://chessprogramming.wikispaces.com">(http://chessprogramming.wikispaces.com)</a> por todo el contenido sobre las tcnicas aplicables a un motor ajedrez.
- A todos aquellos que han jugado con el motor y han publicado su experiencia y opiniones.
- A la web CCRL 40/4 por realizar un torneo y darle una clasificacin de ELO.
- A la web Motores de Ajedrez Hispanos por realizar un torneo y darle una clasificacin de ELO.
- 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.