SOBERANGO
(Chess engine in development/motor de ajedrez en desarrollo).
Luis Babboni.
Paraná, Argentina.
2017.

-Descarga última versión/Download last version: 
-Soberango 0.10.3  (Marzo 20 de 2017).

Soberango version for CCRL site´s Swiss System Tournament. Edition II (Group E):
Soberango 0.10.1

Basic winboard engine for Windows for the moment just checked successfully in Arena 3.5.1 GUI.
-Options: there isn´t, just plays matchs from the initial position.
-Just could play m/t/0 (moves/time/increment) games. It is thought for the moment for tipical 40/4 option but could play any m/t/0 option with t in minutes and >= 1.
-Could follow an opening dictates by the GUI.
-Searching algorithm: iterative deepening with move ordering; deep cutoff; quiescence search and check extension.
-Evaluation: just material difference (Values: Queen 9; Rook 5; Bishop and Knight 3 and Pawn 1).
-Detection of  50 moves and 3rd repetition rules and when there are insufficient material for mate.
-At same priority in move ordering, choice by random wich move to analyze first making not always do the same in the same situation.
-32 bits engine.
-8x8 matrix board representation.
-Wrote in  FreeBasic.
-Level: around 1150 ELO points compared with engines at 40/4 de CCRL rank.
                  
Motor winboard básico para Windows por ahora solamente chequeado con éxito en el GUI Arena 3.5.1.
-Opciones: no las tiene, sólo juega partidas desde la posición inicial.
-Sólo puede jugar partidas con opción de tiempo m/t/0 (movidas/tiempo/incremento). Está pensado por el momento para la típica opción 40/4 pero puede jugar cualquier opción m/t/0 con t medido en minutos y >= 1.
-Puede jugar con libro de aperturas dictado por el GUI.
-Algoritmo de búsqueda: iterative deepening con move ordering; deep cutoff; quiescence search y check extension.
-Evaluación: sólo diferencia de material (Valuaciones: Dama 9; Torre 5; Alfil y Caballo 3 y Peón 1).
-Detecta las reglas de 50 movimientos y de 3 repeticiones y cuando hay material insuficiente para el mate.
-Motor de 32 bits.
-A igual prioridad en el move ordering, elige aleatoriamente el orden en el que estudiar las movidas de manera que no siempre hace lo mismo en la misma situación.
-Representación del tablero como matriz 8x8.
-Escrito en FreeBasic.
-Nivel: alrededor de 1150 puntos ELO comparado con los motores del ranking 40/4 de CCRL.
                  
-Detailed information showed in Arena / información detallada mostrada en Arena:


-Changes in 0.10.3 respect 0.10.2:
    Now Soberango do not consider underpromotions in QS.

-Cambios de 0.10.3 con respecto a 0.10.2:
    Ahora Soberango no tiene en cuenta underpromotions en la QS.

-Code / Código: Soberango 0.10.3_noexe

-Next target in the developement:

    Start bitboards developement for generate moves.

-Próximo objetivo de desarrollo:
   Comenzar a desarrollar bitboards para generar movidas.

-A lot of guys to thanks to, but specialy:
    From talkchess.com forum: Sven Schüle; Norbert Leisner, Sergio Martínez; Graham Banks, H.G. Müller and many others for sure I forgot now and here.
    From freeBasic.net forum: Laurent (SARG); fxm; MrSwiss; frisian; grindstone; Tourist Trap; Vicne (vdecampo); counting_pine and many others for sure I forgot now and here.

Todas las versiones:
-Soberango 0.10.3  (Marzo 20 de 2017). IDEM Soberango 0.10.2 no teniendo en cuenta underpromotions en la QS.
-Soberango 0.10.2  (Marzo 16 de 2017). IDEM Soberango 0.10.0 solucionado un error que hacía que a veces se colgara cuando tenía una sola movida posible y ya no podía evitar caer en mate.
-Soberango 0.10.1  (Marzo 13 de 2017). IDEM Soberango 0.10.1 con un bug solucionado pero todavía sigue colgándose cada tanto aunque menos que antes.
-Soberango 0.10.0  (Marzo 07 de 2017). IDEM Soberango 0.09.8 agregando check extension y mejorada subrutina de testeo de si está en jaque.
-Soberango 0.09.8  (Febrero 12 de 2017). ELO aproximado a 1100 en 40/4 comparando con el ranking de CCRL. Corregidos un error que hacía que no pasara a la siguiente iteración la mejor movida si esta incluía la QS y eliminado cierto código redundante que hacía que chequeara lo mismo tanto en la subrutina donde se generan las movidas que en la subrutina donde se hacen.
-Soberango 0.09.7 (Buggy?)  (Febrero 12 de 2017). ELO aproximado a 1100 en 40/4 comparando con el ranking de CCRL. Corregido bug que evitaba generar enroques como movidas posibles durante la QS. Eliminado código redundante (chequeaban inútilmente lo mismo tanto MainGeneradorMovOrd como MainGenerador). No se aprecia cambio notable en el nivel de juego.
-Soberango 0.09.6  (Febrero 5 de 2017). ELO aproximado a 1100 en 40/4 comparando con el ranking de CCRL. Corregidos 2 bugs que había en 0.09.5 (uno cuando usaba force, por ejemplo sigueindo una apertura dictada por el GUI,  y evaluaba mal y eventualmente se colgaba y otro que hacía que a veces no detectara la posibilidad de comer al paso.)
-Soberango 0.09.5  (Enero 28 de 2017). ELO superior a 1070. Quiescence search activo y funcionando correctamente.
-Soberango 0.09.4   (Enero 17 de 2017). -ELO estimado en 1070. Versión más prolija que 0.09.3 con quiescence search anulada.
-Soberango 0.09.4 QS    (Enero 17 de 2017). -ELO estimado en 1050. Misma versión que 0.09.4 pero con quiescense search activada lo que le provoca una pérdida de velocidad que hace que caiga su nivel de juego.
-Soberango 0.09.3   (Enero 9 de 2017). ELO estimado en cerca de 1050. IDEM 0.09.2 solucionando un error en la QS pero disminuyendo su nivel.
-Soberango 0.09.2   (Diciembre 12 de 2016). ELO de 1061 en 40/4 según CCRL. IDEM 0.09.0 mejorando el criterio sobre cuándo realizar quiscence search. Mejora de nivel.
-Soberango 0.09.0   (Noviembre 10 de 2016). ELO estimado algo superior a 1060. IDEM 0.08.3 incorporando quiescence search. Leve mejora en el nivel de juego.
-Soberango 0.08.3   (Octubre 2 de 2016). ELO estimado en 1050. IDEM 0.08.1 mejorando la velocidad del algoritmo de ordenamiento de jugadas. No se aprecia cambio en su nivel de juego.
-Soberango 0.08.1   (Septiembre 26 de 2016). ELO estimado superior a la versión 0.07.4.IDEM 0.07.4 agregando move ordering y compilado sin la opción de debug lo que hace su tamaño menor.
-Soberango 0.07.4   (Septiembre 24 de 2016). Puntos ELO algo superior a los 1027 de la versión 0.07.2. IDEM 0.07.2 corrigiendo en el algoritmo de búsqueda la poda que erróneamente se creía era del tipo Alfa Beta y era en realidad del tipo llamada "shallow cutoff" por una del tipo "deep cutoff" que, hasta dónde logro discernir, produce los mismos resultados que la poda Alfa Beta.
-Soberango 0.07.2   (Julio 29 de 2016). Con ELO 1027, aparece en la posición nº498 entre 523 motores en el 40/4 CCRL rank al 13 de Agosto del 2016. IDEM 0.07.1 agregando posibilidad de jugar con libro de aperturas externo seguido por el GUI.
-Soberango 0.07.1   (Julio 23 de 2016, aprox. ELO 1025 en 40/4 sin libro de aperturas.)    IDEM 0.06.2 agregando principalmente iterative deepening. También con un cambio en el manejo del tiempo y corrigiendo un error que hacía aceptar una oferta de tablas en la circunstacia que fuera.
-Soberango 0.06.2   (Junio 18 de 2016, aprox. ELO 1000 en 40/4 sin libro de aperturas.)   IDEM 0.06.0 mejorando manejo del tiempo y agregando mostrar el pensamiento.
-Soberango 0.06.0   (Junio 10 de 2016).   IDEM 0.05.0 agregando mejor evaluación para mate cuanto en menos movidas lo dé cuando sea Soberango el que dé mate y peor evaluación cuanto en menos movidas se dé cuando se lo den a Soberango.
-Soberango 0.05.0   (Junio 07 de 2016, aprox. ELO 960 en 40/4 sin libro de aperturas.)   IDEM 0.04.3 agregando manejo elemental del tiempo pero restringido a partidas del tipo movidas/tiempo/incremento con incremento=0.
-Soberango 0.04.3   (Mayo 04 de 2016).  IDEM 0.04.2 corrigiendo un bug con aplicación de la regla de las 50 movidas.
-Soberango 0.04.2   (Mayo 01 de 2016).  IDEM 0.04.1 corrigiendo el análisis de la insuficiencia de material en el caso de rey y 2 caballos contra rey.
-Soberango 0.04.1   (Abril 24 de 2016).   IDEM 0.04.0 corrigiendo una omisión en la insuficiencia de material.
-Soberango 0.04.0   (Abril 23 de 2016).   IDEM 0.03.0 agregando reconocimiento de material insuficiente para dar mate.
-Soberango 0.03.0   (Abril 20 de 2016).   IDEM 0.02.1 agregando reconocimiento de la regla de 3ra repetición y corrigiendo un bug.
-Soberango 0.02.1   (Abril 11 de 2016).   IDEM 0.02.0 con un bug corregido.
-Soberango 0.02.0   (Abril 08 de 2016).   IDEM 0.01.4 pero ahora tiene en cuenta la regla de las 50 movidas.
-Soberango 0.01.4   (Abril 07 de 2016).   IDEM 0.01.3 con azar en qué pieza y en qué dirección mueve primero antes de cada movida.
-Soberango 0.01.3   (Abril 06 de 2016, aprox. ELO 900 en 40/4 sin libro de aperturas.)   IDEM 0.01.2 con azar en qué pieza mueve primero antes de cada movida.
-Soberango 0.01.2   (Abril 05 de 2106).   IDEM 0.01.1 con azar en qué pieza mueve primero al comenzar partida.
-Soberango 0.01.1   (Abril 04 de 2016).   IDEM 0.00.3 pero con alfabeta (sin azar) en vez de minimax que le permite fijar profundidad de búsqueda en 5 para Blitz 5/0.
-Soberango 0.00.3   (Marzo 31 de 2016). IDEM 0.00.1 solucionado un bug.
-Soberango 0.00.2   (Marzo 30 de 2016). IDEM 0.00.0 solucionados 2 bugs.
-Soberango 0.00.0   (Marzo 27 de 2016, aprox. ELO 700 en 40/4 sin libro de aperturas.) Motor Winboard, funciona sólo en Arena; sin opciones, sólo juega partidas desde el principio; algoritmo de búsqueda minimax; profundidad de búsqueda fija en 4 plies; no manejo del tiempo, en un Phenom 955 de 3,2GHz puede jugar Blits 5/0 sin perder por tiempo; evaluación: sólo diferencia de material; no detecta regla de las 50 movidas ni de 3ra repetición; bug conocido: si pierde por tiempo no puede reiniciarse automáticamente; motor de 32 bits; representación del tablero como matriz 8x8; escrito en FreeBasic.

DESARROLLO:

Próximos objetivos:
-Nullmove.
-Transpositions Tables.
-Bitboards.

2017-03-20: Quito underpromotions de la QS.
Publico versión 0.10.3

2017-03-16: 
Soluciono un bug que hacía que a veces se colgara cuando tenía una sola movida posible y ya no podía evitar caer en mate.
Publico versión 0.10.2

2017-03-07: Agrego check extension en la full width search (o sea que en la última movida miro si da jaque y de ser así, aprovechando que el siguiente ply no puede ser muy extenso ya que hay jaque, aumento en 1 la profundidad. También mejoro la subrutina de testeo de si está en jaque haciendo saltar hasta el final al primer jaque que encuentra sin seguir inútilmente estudiando otros posibles jaques.
Publico versión 0.10.0

2017-02-26:
 Graham Banks publica el nuevo ranking 40/4 incluyendo a Soberango 0.09.8 con 643 partidas jugadas y un ELO de 1129 que lo ubican en la posición nº497 entre 519 motores.

2017-02-12:
 Corrijo la versión 0.09.7 que se colgaba por un bug en la subrutina Xboard.
Publico versión 0.09.8

2017-02-12:  Corrijo dos bugs- Uno que no permitía los enroques como posibles movidas durante la QS y otro que si la actual mejor movida incluía parte en QS, no era pasada a la siguiente iteración. También recorté código redundante que hacía que testeara lo mismo en cuanto a la legalidad de una movida tanto en la generación de estas como en las movidas propiamente dichas.
Publico versión 0.09.7

2017-02-05:
 Corrijo dos bugs. Uno en la subrutina xboard que en modo force hacía quienmueve=-quienmueve una vez de más y hacía que se cargara mal  la cantidad de piezas. El otro olvidaba de cargar Path ( 0 , i ) cuando un peón avanzaba 2 casillas y por lo tanto al volver atrás hasta p=0, al empezar la iteración siguiente no detectaba que había un peón pasible de ser comido al paso.
Publico versión 0.09.6

2017-01-28:  Con la ayuda inestimable de Sven Schüle de Talkchess.com, pude detectar y corregir el error que no hacía funcionar la quiescence search correctamente. Ahora mejoró de nivel con respecto a las versiones sin QS aún sin necesidad de mejorar la velocidad que sigue siendo una cuestión a atacar en un futuro no lejano. Detecté un bug en las capturas al paso y Sven me hizo ver que tengo código redundante que corregido debería hacer mejorar la velocidad del motor.
Publico versión 0.09.5

2017-01-17:
 Creo haber logrado que la QS funcione correctamente, pero el necesitar para esto aplicar el generador de movidas sólo a reconocer capturas, hace que en mi computadora (Phenom 955) la cantidad de movidas analizadas por segundo caiga de alrededor de 250Kn/seg a unos 85Kn/seg con lo que su nivel de juego termina perdiendo más por esto que lo que gana por la aplicación de la QS en sí. Aparentemente según puede verse en Chessprograming, sería un problema conocido y es una de las razones de utilizar bitboards para generar movidas "...In Quiescence Search the performance of generating (winning) capture moves is crucial...." (link) Por lo tanto la solución que adopté hasta tanto pueda armar un nuevo generador de movidas más veloz, fue dejar la QS como optativa en el archivo opciones.bas . Tengo entonces dos versiones de 0.09.4, la así mismo llamada con la QS desactivada y la 0.09.4 QS con la QS activada.
Publico versiones 0.09.4 y 0.09.4 QS.

2017-01-09:  Logro corregir en parte la QS de 0.09.2 Por ahora sólo hace QS cuando las piezas que capturan son los peones pero lo hace correctamente. Leve mejora del nivel.
Publico versión 0.09.3

2017-01-07: Graham Banks publica una nueva lista del ranking 40/4 de CCRL incorporando a Soberango 0.09.2 con un ELO de 1061!

2016-12-22:
Sven Schüle me hace dar cuenta de que no estoy implementando correctamente la QS. Sigo trabajando sin éxito en corregir los errores antes nombrados y a partir de ahora en seguir los consejos de Sven.

2016-12-15: aproximadamente en esta fecha me doy cuenta de que cometí un error de programación en la QS, tomé valores con el signo en vez de los absolutos lo que provoca una asimetría para jugar con blancas o negras y además en realidad sólo apliqué QS cuando hay captura de pate de los peones y no de parte de otras piezas como quise hacer. ¡¡Sin embargo no logro mejorar su performance aún corrigiendo esos errores!!

2016-12-12: Encuentro un criterio más claro y simple sobre cuándo hacer o no quiscence search que es cuando una pieza come a una igual o inferior sin tener que pasar por comparaciones con la evaluación estática como hacía en 0.09.0. Está claro que sirve principalmente en la etapa actual de la evaluación en que sólo tiene en cuenta material.
Sigo más que nada desde hace unas semanas trabajando en el agregado de Tablas de Transposición. El cambio para hacer 0.09.2 surgió en una conversación explicando el funcionameinto del programa y pudo ser implementado cmabiando pocas líneas.
Publico versión 0.09.2

2016-11-10: Sin convencerme del todo su performance entiendo debido a que pierde profundidad en la búsqueda completa, logro agregarle quiescence search para extensiones en la búsqueda. Creo que hay cuestiones al respecto todavía por ajustar o corregir pero ya logra ser un poco superior a la versión sin extensiones en la búsqueda.
Publico versión 0.09.0

2016-10-02: Guardando las movidas generadas de manera ya ordenadas en vez ed ir ordenándolas a todas tras cada nueva movida generada, eso se hace aprovechando que sólo hay 21 niveles de orden (20 por capturas o no capturas y uno por enroque agregado por error pero que parece ayuda), mejoró la velocidad total del motor en algo así como un 5% a un 10%. Me he cansado de revisar si cometí algún bug por lo que eso no mejora el rendimiento del motor pero no lo he encontrado.
Publico versión 0.08.3

2016-09-26: Tras corregir un bug en la valuación para el move ordering, la versión con esto que no lograba ser mejor que la sin move ordering, e incluso era algo inferior, ahora es claramente superior, por alcanzar en alrededor del 50% de las veces un ply más de profundidad de búsqueda en el medio juego a pesar de haber bajado su velocidad de alrededor de 600Kn/s a menos de 200Kn/s. Urge aumentar la velocidad mejorando el algoritmo del move ordering y creo saber cómo hacerlo pero por ahora no logro que no se cuelgue el programa con las modificaciones para eso.
Publico versión 0.08.1

2016-09-24: Tras varias semanas de reprogramación y pruebas buscando agregar a 0.07.2 quiescence search, lo logré pero los resultados de la versión que lo incorporaba eran inferiores a la versión sin ello. La conclusión, tras consultas varias en talkchess.com, fue que esto era debido a no tener Soberango moves ordering. Por lo tanto tuve que dedicarle otras semanas a lograr agregarle moves ordering. Sin embargo cuando lo logré, los resultados de la versión con este, sin quiescence search, tampoco eran superiores a los de la versión sin moves ordering ni quiescence search. La conclusión tras nuevas consultas en  talkchess.com, fue que quizás mi algoritmo de búsqueda no utilizaba la poda Alfa Beta. Y, contrariamente a lo que creía que hacía Soberango desde varias versiones anteriores, así era, la poda que utilizaba era apenas la llamada "shallow cutoff". Así que nuevamente tuve que reprogramar parte del código y ahora sí logré que utiilice una poda llamada "deep cutoff" que, al menos por ahora, creo que permite obtener los mismos resultados (en cuanto a la cantidad de nodos que recorta del árbol) que la poda Alfa Beta. Los primeros tests sí me dan que es algo superior a la versión con shallow cutoff: 27-18-5 contra esa versión (la 0.07.2). Así que decido publicar por ahora la versión que sólo incorpora el deep cutoff a la 0.07.2, le llamo 0.07.4, dejando como siguiente paso incorporar el moves ordering y el quiscence search que básicamente ya están programados pero debo evaluar si ahora sí mejoran el rendimiento.
Publico versión 0.07.4

2016-08-13:
aparece Soberango por primera vez en el CCRL 40/4 Rank.!!! Con ELO 1027 figura en la posición nº498 entre 523 motores.

2016-07-28: Logré que Sergio Martínez intentara testear a Soberango para entrar al ranking CCRL 40/4 pero se le colgaba y era porque él lo hacía usando las aperturas de Arena como primeras movidas y Soberango no lo permitía.
Agregué esa posibilidad y los resultados contra ditintos rivales parecen haberse magnificado (pierde por más con quien ya perdía y le gana por más a quien ya le ganaba) pero no cambiaron contra quién perdía y contra quién ganaba.
Publico versión 0.07.2

2016-07-23:
Primero hice un cambio en el manejo del tiempo aunque no pude comprobar que sea mejor que es que cuando termina de analizar hasta la profundidad p, si ya usó más de 1/3 del tiempo disponible, no inicia el estudio hasta la profundidad p+1 (antes se detenía recién si había ya alcanzado 1/2 del tiempo disponible). A esa versión le llamé 0.06.3 pero nunca la publiqué justamente porque no pude comprobar que tuviera un mejor rendimiento.
    Luego logré, tras mucho tiempo buscando que implementar esto no se colgara, que funcione la búsqueda con iterative deepening. En realidad lo único que tuve que agregar, como el "deepening" ya lo tenía (iba aumentando de a una la profundidad analizada), fue que el estudio de la profundidad p+1 comenzara por la mejor jugada hallada en el estudio de la profundidad p. Sin embargo para solucionar el tema de los cuelgues tuve que aceptar dos "desprolijidades" aunque su efecto es menor en el rendimiento que son que habiendo empezado la búsqueda por la mejor movida en el estudio de la profundidad anterior, cuando estudia el resto de las movidas y llega nuevamente a la mejor movida, no la saltea como podría hacerlo sino que la vuelve a estudiar. Por otro lado la profundidad 2 no la comienza por la mejor movida de la profundidad 1 sino por el orden habitual, recién a partir de la profundidad 3 logro que comience por la mejor movida de la profundiad anterior.
    También tiene un cambio en el intérprete xBoard, arrastrado desde antes de la versión 0.00.0, corrigiendo un bug que hacía aceptar siempre una oferta de tablas en cualquier circunstancia.
Publico versión 0.07.1

2016-06-18:
En búsqueda de agregar iterative deepening se me ocurrió una manera rápida y obvia de mejorar el manejo del tiempo y aparte, para poder analizar porqué por el momento no logro hacer funcionar el iterative deepening, necesité agregar que pueda ver las movidas que piensa y entonces como paso previo saqué esta versión agregando esas dos cosas que había tenido planeadas para más adelante.
Publico versión 0.06.2

2016-06-10: Agrego diferencia de evaluación entre dar mate antes o después. Si se hace en menos jugadas, un mate vale más si el que da mate es Soberango y vale menos si el que da mate es el oponente.
Publico versión 0.06.0

2016-06-07: Tras más de un mes lidiando con la nueva versión que incorpora un elemental manejo del tiempo* pero que tenía un bug que lo hacía colgarse al menos en una de cada 50 partidas, logro hacer una versión estable deshabilitando la creación de un rudimentario log usado a fines de debug.
*: simplemente divide la cantidad de tiempo por la cantidad de movidas que debe hacer en ese tiempo y utiliza ese resultado como tiempo de análisis de cada movimiento. Empieza con profundidad 1 y si logra completarla sin que se acabe el tiempo establecido por movida, aumenta la profundidad a 2 y luego lo mismo a 3 y así repetidamente. Durante el análisis va testeando el tiempo restante de manera de poder interrumpir la búsqueda a una dada profundidad utilizando para mover los resultados del estudio a una profundidad menos.
    Por primera vez, en la modalidad 40/4,  logra Soberango imponerse a NSVChess v0.14 que es el motor había sido usado hasta este momento como parámetro a alcanzar. En el desarrolllo del juego sigue siendo superior NSV, pero no detecta la regla de repetición de movidas por lo que desaprovecha situaciones en las que se encuentra superior cosa que no suele** suceder con Soberango cuando este se encuentra en superioridad.
**: sin embargo tengo un par de partidas en estudio donde aparentemente cometió Soberango también ese error.
Publico versión 0.05.0

2016-05-04: Mientras trabajaba en el manejo de tiempo descubrí un bug con la regla de las 50 movidas que me llevó unos días corregir que también podía afectar a la detección de material insuficiente.
Publico versión 0.04.3

2016-05-01: Para distinguir las situaciones de rey y 2 caballos contra rey en que hay y no hay insuficiencia de material tuve que armarme dos pequeñas "tablabases": una de 232 posiciones en que hay mate en 1 y una de 56 posiciones en que es mate.
Publico versión 0.04.2

2016-04-24: El link que usé para ver cuándo había material insuficiente que fue este: http://www.e4ec.org/immr.html , no nombraba el caso de rey y 2 caballos contra rey. Tuve que agregarlo.
Pensando en poder contar las piezas atacadas, volví a tratar de meterme en el tema bitboards. Una alegría encontrar en el último FreeBasic la posibilidad de manejo de bits que no estoy seguro que tuviera la vieja, muy vieja, versión que estaba usando el año pasado cuando me había puesto a ver lo mismo.
Publico versión 0.04.1

2016-04-23: Después de varias complicaciones para detectar un bug por el que contaba mal las piezas al agregarle el poder distinguir entre alfiles sobre casillas blancas y sobre casillas negras, logro implementar que reconozca posiciones que son tablas por insuficiencia de material.
Publico versión 0.04.0

2016-04-20: Después de varias complicaciones sobre todo con que no sea parte de una 3ra repetición una posición donde hubiera un peón pasible de ser comido al paso, logro implementar el reconocimiento de la regla de la tercera repetición.
Está tenido en cuena no sólo que no se cuente para las repeticiones cuando haya un peón que puede ser comido al paso sino también la condición de enroque y de a quién le toca mover.
Esto evita que sean tablas por 3ra repetición partidas donde Soberango en su evaluación se considera mejor que el rival.
Corregí un bug de 0.02.1 (0.020.0 no lo tenía) que hacía que si al 1er partida de un torneo era empezada por el rival adelantando un peón 2 casillas, Soberango se colgaba.
El sigueinte paso a incorporar será el que se dé cuenta cuando una posición sea tablas por material insuficiente.
Publico versión 0.03.0

2016-04-11: Corrijo un bug por el que no detectaba correctamente la regla de los 50 movimientos.
Publico versión 0.02.1

2016-04-07: Tiene en cuenta la regla de las 50 movidas.
Publico versión 0.02.0

2016-04-07: Un poco más de azar aún, ahora cambia movida a movida qué movimiento de cada pieza estudia primero (perdura que de los alfiles, las torres y las damas estudia primero las casillas más cercanas).
Una diferencia observable a simple vista es que antes nunca empezaba avanzando un peón 2 casillas y ahora cada tanto lo hace.
También optimicé el movimiento de los peones salteando estudiar las posibilidades de estudiar lo que no sea coronoación cuando ya están en 7 o las coronaciones si no están todavía en 7.
Publico versión 0.01.4

2016-04-06: Le incorporé aún más azar, ahora cambia movida a movida la 1er pieza que elige para mover primero. Juega mejor (17-7-26 en 40/4) y menos feo que 0.01.1 y 0.01.2.
Todavía falta darle azar a las direcciones en que mueve primero cada pieza.
Publico versión 0.01.3

2016-04-05: Conseguí volver a incorporarle algo de azar. La medí contra la versión sin azar y, en 50 partidas 40/4, terminaron 7-7-36.
Voy por más azar, actualmente en cada partida elige una pieza distinta para mover primero, pero a lo largo del juego se nota cuál es. Voy a tratar de que elija una distinta en cada movida.
Publico versión 0.01.2

2016-04-04: Solucioné el bug con las capturas al paso y creo haber encontrado una nueva manera de que no mueva siempre igual ante la misma situación (es lo próximo a trabajar sobre todo para hacer menos feo su juego).
Publico versión 0.01.1
Desempeño en Blitz 5/0:  supera a Soberango 0.00.3; empareja a NSVChess v0.14  y pierde con Kace 0.82 ja .

2016-04-03: Entendí el problema del azar y Alfa-Beta, no encuentro solución por el momento. Apareció un nuevo bug con las capturas al paso.

2016-04-01: Completé el Alfa-Beta pero no entiendo porqué no es compatible con mi manera de que elija azarosamente entre movidas de igual puntuación.

2016-03-31: Sigo con la búsqueda Alfa-Beta, encontré un bug con la captura al paso que está corregido en la versión 0.00.3 que todavía usa sólo un MiniMax para la búsqueda.
Publico versión 0.00.3
Desempeño en Blitz 5/0:  igual a Soberango 0.00.2

2016-03-30: Implementando la búsqueda Alfa-Beta, encontré dos bugs en la versión 0.00.0 que están corregidos en la versión 0.00.2 que todavía usa sólo un MiniMax para la búsqueda.
Publico versión 0.00.2
Desempeño en Blitz 5/0:  igual a Soberango 0.00.0

2016-03-28: Empiezo a testear nuevas opciones.

2016-03-27: Tras una centena de partidas jugadas conmigo y contra sí mismo, doy por aprobada (no terminada), la primera versión de Soberango.
Por ahora funciona en Arena, cargado como winboard engine, sin lograr solucionar el problema de que si pierde por tiempo no puede jugar una partida a continuación sin reiniciarse.
Desempeño en Blitz 5/0:
Supera a BrutusRND; Pos1.20; ACE 0.1; CPP1; LaMoSca 0.10; Ram 2.0; NEG 1.2; MicroChess 1976; ReBorn mainsworthy 3.0.
Es superado por NSVChess v0.14.
Publico versión 0.00.0

2016-03-22: Empiezo con la interfase. El año pasado ya había trabajado un poco en esto y me había decidido por la Xboard por sobre la UCI.

2016-03-21: Terminada, hasta el momento aparentemente sin bugs, la función de búsqueda.

2016-03-16: Terminada y testeada la evaluación. Comienzo con la función de búsqueda.

2016-03-14: Empiezo a construir la evaluación.

2016-03-13: Dejé de testear por el momento al generador de movidas comparando resultados con los Perfts de la wiki de Chessprogramming .
Hasta ahora se han logrado los siguientes resultados positivos y ninguno negativo:
-Posición inicial: aprobado hasta ply 7 inclusive.
-Kiwipete: aprobado completo.
-Position 3: aprobado completo.
-Position 4: aprobado completo.
-Position 5: aprobado completo.
-Position 6: aprobado hasta ply 6 inclusive.

2016-02-21: Comienzo a debuggear el generador de movidas.

2016-02-01: Comienzo a construir el generador de movidas.

2015-12-15: Retomo las tareas analizando cómo construir una función de evaluación.

2015-03-01: Suspendo las tareas por comenzar el año laboral en su parte más activa.

2015-02-19: Decido ponerle de nombre Soberango.
Siendo mi hermano Pablo y yo niños, yendo una noche con mis padres en auto por un camino de tierra en el campo estando él dormido, de golpe apareció en la oscuridad un caballo blanco.
Mamá alarmada sin darse cuenta qué era esa mancha blanca en el camino, preguntó con un grito:
-"¡¿QUÉ ES ESO?!"
Y papá le respondió:
-"UN CABALLO BLANCO!."
Y Pablo despertándose de golpe con el grito de mamá, pero todavía semidormido habiendo entendido cualquier cosa, preguntó:
-"¿QUÉ ES UN SOBERANGO?"
La anécdota quedó para siempre en mi familia y cada vez que veíamos un caballo blanco decíamos:
"Mirá, un soberango."
Pablo, siendo escultor, en 1997 a los 25 años se fue a vivir a Italia.
En el 2007 desapareció en circunstancias misteriosas probablemente habiendo sido asesinado.
Es entonces que como homenaje a él y siendo el ajedrez usualmente relacionado con la imagen de un caballo, decidí llamar Soberango a mi motor de ajedrez.
Después entonces de haber decidido eso y tener que buscarle un logo, es que me puse a revisar carpetas de dibujos de Pablo y encontré (acá en escala 1/3) este que me sirvió de base:

En el logo del  programa puede entonces verse al caballo blanco en la oscuridad, iluminado por los focos del auto con el fondo verde de campo detrás:


2015-02-01: Después de hacer algunos intentos de aprender C++ y de usar el QB64 (actual versión del QuickBasic, con el que solía programar desde unas décadas atrás), decido utilizar el FreeBasic:

2015-01-10: Estando de vacaciones y, por culpa de una hernia de disco, imposibilitado de dedicarle el mismo tiempo que antes a mi hobby de simracer, empiezo a estudiar cómo se hace un motor de ajedrez.