Cómo entrenar a una computadora …para jugar al - Jos'b Page

 Cómo entrenar a una computadora ...
Cómo entrenar a una computadora …
...para jugar al Ajedrez
1
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
José Javier Franco Benítez
Trabajo realizado para el “Curso de Entrenadores Nivel I”
organizado por la Federación Extremeña de Ajedrez
CopyLeft 2012
2
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
Contenidos
1.2.3.4.-
Introducción . . . . . . . . . . . . . . . . . .
Evolución histórica . . . . . . . . . . . . . .
El reto . . . . . . . . . . . . . . . . . . . .
Técnica orientada a la programación . . . . . .
4.1.- La función generadora de movimientos . .
4.2.- Las estrategias de cálculo . . . . . . .
4.3.- Corrigiendo la estrategia Shannon A . . .
4.4.- El método MiniMax . . . . . . . . . . . .
4.5.- Alfa-Beta (mejorando el método MiniMax) .
4.6.- Poda anticipada . . . . . . . . . . . . .
4.7.- Otros métodos de búsqueda . . . . . . . .
5.- Técnica orientada a la valoración de posiciones
5.1.- El libro de aperturas . . . . . . . . . .
5.2.- Finales . . . . . . . . . . . . . . . . .
5.3.- El medio juego . . . . . . . . . . . . .
6.- Protocolos de comunicación . . . . . . . . . . .
7.- Conclusiones . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
5
7
9
9
10
11
13
14
15
16
18
18
20
21
24
26
Advertencia Legal: Si por algún casual alguien plagia el contenido de
este trabajo para beneficio propio, y tiene la fortuna de enriquecerse
con ello (cosa que por otro lado dudo muy mucho), que la maldición de
Tutankhamon recaíga sobre él, y le persigan eternamente todos los
vástagos de Ramsés II.
**las imágenes han sido obtenidas googleando en internet
3
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
1.- Introducción
Este pequeño trabajo acerca de cómo hacer un juego de ajedrez
para ordenador pretende dar las claves esenciales para comprender
como funcionan en la actualidad este tipo de programas. No
pretende ser una guía exhaustiva que explique paso a paso los más
íntimos secretos de los grandes programas de ajedrez, al
contrario, debe verse como un manual de filosofía que incide en la
realidad del software y la problemática que supone afrontar el
reto de hacer uno de ellos.
En la actualidad es fácil encontrar información al respecto.
De hecho, hay un exceso de información que produce lo que suele
conocerse como “ruido informativo”, y que impide distinguir la
buena información de la rápidamente desechable. Podemos encontrar
desde pequeños tutoriales, que sin entrar en profundidad,
pretenden enseñar como afrontar el reto de hacer un programa de
ajedrez, hasta los más pretenciosos que explican paso a paso como
hacerlo desde un punto de vista meramente algorítmico. Todos
carecen de lo que realmente es importante, cómo valorar
adecuadamente las diferentes posiciones que se van sucediendo
durante una partida. Este es el secreto, y el mejor guardado por
las empresas y programadores, que no se encuentra al alcance de
cualquiera.
En el fondo existe una enorme similitud entre hacer un
programa de ajedrez y enseñar a un niño a jugar. Una vez que son
conocidas las reglas de juego, alguien debe servir de guía. En el
caso de un niño es el entrenador, que vaya dirigiendo el proceso
de aprendizaje hasta conseguir que las jugadas realizadas se
ajusten a la lógica y naturaleza de la posición en cada momento.
De igual forma, un programa de ajedrez necesita esa guía externa
que le indique como descartar los errores de los aciertos, que
camino seguir y cual es el objetivo final del juego. Ésto es lo
verdaderamente difícil de conseguir, tanto en la práctica como en
la información accesible, y que esconden como una reliquia los más
avezados programadores de programas de ajedrez.
Sin embargo, a lo largo de este trabajo y en la medida de lo
posible se intentará dar las claves más importantes. Aquellas que
realmente diferencian unos programas de otros y que nos permitirá
disfrutar de todos ellos una vez conozcamos su naturaleza.
4
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
2.- Evolución histórica
Uno de los mayores pecados capitales de la humanidad es
nuestra clara tendencia a autodenominarnos seres inteligentes.
Cuestionar nuestra inteligencia es zarandear nuestra fibra más
sensible, es llegar a lo más hondo de nuestro ser, es, en
definitiva, cuestionar nuestra propia existencia.
No es casualidad que desde ese punto de vista, y debido al
estereotipo asociado a nuestro juego que envuelve a los jugadores
que lo practican en un halo de seso y una gran capacidad
analítica, ha motivado que ciertas personas quisieran romper esa
barrera que cuestionara esa realidad y provocara el asombro de
todos.
Imagen 1. El turco
Uno de estos personajes que ha pasado a la historia por
intentarlo fue el Barón Wolgang von Kempelen, que en el año 1769,
nada más y nada menos, realizó una máquina (Imagen 1) capaz de
vencer a los mejores jugadores locales de donde se iba mostrando
el invento. Incluso el célebre Napoleón perdió contra ella,
arrojando todas las piezas al suelo en un ataque de ira. Pero,
¿que había de cierto en ello?. Después de mas de un siglo, fue en
Filadelfia, cuando entre el tumulto de personas que coreaban la
máquina, alguien grito “¡fuego!” y se desveló el autentico secreto
de tan maravilloso ingenio. El experto ajedrecista que se escondía
en su interior no dudó en ponerse a salvo descubriéndose así uno
de los engaños más celebres de la historia.
Por suerte la inquietud de imaginar una máquina que jugara al
ajedrez no desapareció y en 1890 se diseñó la primera máquina que
realmente fue capaz de realizar jugadas de ajedrez. Realizada por
el Ingeniero español Leonardo Torres Quevedo, mediante un sistema
electromecánico, fue capaz de crear una máquina que forzara el
mate en finales de Torre y Rey contra Rey. Aún se puede observar
en la universidad complutense de Madrid. Y no es casualidad este
hecho, ya que su carrera estaba íntimamente relacionada con el
mundo de las telecomunicaciones en aquél entonces, introduciendo
5
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
muchas novedades en este campo, entre ellas las operaciones en
punto flotante que actualmente emplean todos los dispositivos
electrónicos.
Imagen 2. Máquina de Torres Quevedo
La evolución en este campo durante la segunda mitad el siglo
XX ha ido estrechamente relacionada con la evolución electrónica,
y con la enorme especialización de los diferentes campos
matemáticos. Hacer un repaso de esta etapa solo aportaría a este
trabajo la evolución que la inteligencia artificial ha sufrido
hasta nuestros días. Y siendo estrictos, llegaríamos a la
decepcionante conclusión de que, más que evolucionar los ingenios
creados
por
el
hombre
para
jugar
al
ajedrez
han
ido
involucionando, a pesar de su más que evidente superioridad.
A día de hoy existe un margen muy pequeño para la creatividad
dentro de este campo, los programas abusan de libros de aperturas,
llegando incluso a realizar hasta 30 jugadas dentro de líneas
teóricas. Abusan también de las tablas de finales. Gracias a las
tablas de Nalimov es posible conocer de antemano cualquier
resultado para cualquier jugada en posiciones donde existan hasta
6 piezas en el tablero. ¿Acaso no son los programas actuales
versiones modernas de la máquina creada por Kempelen?.
Sólo la valoración del medio juego, y la eficacia en el
cálculo, diferencian unos programas de otros en la actualidad. Y
al igual que nadie se plantea competir en velocidad con un Formula
I, la tendencia en ajedrez es, que las competiciones se vayan
sectarizando entre máquinas por un lado y humanos por otra,
evitando la confrontación directa entre ambos colectivos.
6
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
3.- El Reto
Para hacer un programa de ajedrez es necesario conocer cuales
son los requerimientos previos y necesarios para afrontar el reto.
Es necesario comprender que en la tarea de enseñar a nuestra
computadora confluyen diferentes disciplinas, y que analizadas por
separado no nos aportan ninguna pista de cómo hacerlo, pero que
interrelacionadas entre sí dejan entrever cuales son los pasos a
seguir.
Imagen 3. Extracto de código ensamblador
Obviamente cuando hablamos de hacer un programa, sea de lo que
fuere, es necesario conocer alguna herramienta que nos ofrezca la
capacidad de generar código para la máquina. En nuestro caso, esta
herramienta es conocida como lenguaje de programación. Y en la
actualidad, hay mucho donde elegir. Cobol, Fortran, Python, C/C++,
Basic, Java, Javascript, etc, son algunos de ellos. En un
principio los programas se realizaban directamente introduciendo
los op-codes (códigos de operación) de cada máquina, y que
rápidamente fueron sustituidos por los lenguajes ensambladores que
permitían de una forma sencilla sustituir los códigos nemotécnicos
por su homólogos op-codes. En esta primera etapa de programación,
y desde un punto de vista actual, la tarea de programación podría
convertirse en una autentica tarea de chinos, y si a ello le
añadimos la escasa capacidad de las primeras computadoras, el
resultado era auténticamente desastroso y el debate de si las
máquinas alcanzarían el nivel de juego humano estaba servido. Aún
así, se consiguieron hacer buenos programas, algunos de ellos como
fue el caso de “Chess 4.6” en el año 1977 llegó a alcanzar una
fuerza de aproximadamente 2000 puntos ELO y con un tiempo de
respuesta entre jugada y jugada de 3 minutos venciendo por primera
vez a un Maestro Internacional. El agraciado con este honor fue el
MI David Levy que perdió, para su fortuna, en una simultanea.
En la actualidad, es difícil poner en duda la superioridad de
las máquinas sobre el ser humano. Solo unos pocos son capaces de
jugar “de tu a tu” contra ellas. Y a diferencia de lo que ocurría
antaño, la programación de este tipo de software también ha
7
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
evolucionado. Ahora se prefieren lenguajes de más alto nivel donde
la lógica es mucho más fácil de implementar, y debido a la enorme
potencia de los ordenadores actuales, la falta de optimización en
el código no supone una merma en la respuesta de juego del
programa.
Una segunda disciplina a conocer para hacer un buen programa,
son las más que temidas matemáticas. Desafortunadamente, al igual
que el hecho de saber escribir no es garante de saber escribir un
buen libro, el hecho de saber programar tampoco lo es de hacer un
buen programa. Sin embargo, como es conocido, el conocimiento
suple el talento, y en nuestro caso una muy moderna rama de las
matemáticas puede ayudarnos a conseguir nuestro objetivo de hacer
que la computadora juegue al ajedrez.
La teoría de juegos, que a pesar de su lúdico nombre, es una
de las ramas más importantes en el mundo de las matemáticas en la
actualidad. Y a pesar de lo que podamos pensar, no está realmente
orientada al juego, sino a maximizar las ganancias en cualquier
ámbito de la vida. Sirva de ejemplo el mundo empresarial.
La complejidad de esta teoría es tan grande, que aplicada a
nuestro juego se queda en una simple tarea de niños. No obstante,
esta relativa sencillez permite que cualquiera con unos mínimos
conocimientos y algo de inquietud pueda optar por hacerse su
propio juego.
Finalmente, y aunque parezca una verdad de perogrullo, para
hacer un buen programa de ajedrez es necesario saber jugar al
ajedrez. No es casualidad que los programadores de la DEEP BLUE
avisaran al Gran Maestro Miguel Illescas cuando se preparaba uno
de los enfrentamientos más épicos de la historia de la computación
ajedrecística entre la mencionada computadora y Gran Maestro Gary
Kasparov. Miguel Illescas no solo es capaz de jugar bien al
ajedrez, lo que es obvio, sino además y debido a su formación,
tiene extensos conocimientos en fundamentos de la programación,
por lo que era candidato ideal para asesorar a los creadores de
DEEP BLUE en su tarea de mejorar el estilo de juego de la máquina.
Por tanto, para atreverse con este reto, es necesario saber
programar, no importa en que lenguaje, tener unos mínimos
fundamentos matemáticos, y por supuesto saber disfrutar del
ajedrez.
8
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
4.- Técnica orientada a la programación
Cuando alguien
programa de ajedrez
empezar?. Y es que,
concepto claro de lo
se enfrenta a la larga tarea de hacer un
siempre se hace la misma pregunta. ¿por dónde
para afrontar este reto es necesario tener un
que se quiere conseguir.
Imagen 4. Programador (chessprogramming.wikispaces.com)
Siendo minimalistas, y desde un punto de vista meramente ajeno
a los entresijos de la programación de juegos de ajedrez, lo que
cualquiera puede observar en ellos es que los programas de ajedrez
se comportan de un forma cíclica: se introduce el movimiento, se
calcula la respuesta y se ejecuta la mejor opción para la
computadora.
¿Pero como se comporta realmente la máquina? Aunque las etapas
de cálculo están suficientemente diferenciadas dentro del código
fuente lo cierto es que existe una interrelación entre ellas que
va más allá de lo que se puede observar desde la cómoda posición
del usuario.
Todo programa tiene al menos dos funciones (o rutinas) que
hace la mayor parte del trabajo, y aunque no lo hacen de una forma
compensada, ambas son igualmente importantes. Estas funciones son:
la función generadora de movimientos y la función evaluadora de
posiciones.
4.1.- La función generadora de movimientos
Es necesario comenzar haciendo notar que las reglas de ajedrez
se enseñan a través de una función, rutina, que sea capaz de
generar todos los movimientos lícitos para cada posición. Estos
movimientos, que por razones evidentes deben ser almacenados en la
memoria de la máquina (bien directamente, o a través de tablas o
arrays, o incluso en soportes magnéticos, ¿por qué no?) y además
utilizados para dos finalidades concretas: por un lado verificar
que los movimientos introducidos por el usuario son legales, y por
9
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
otro, generar las diferentes posiciones, que a la postre, debe
evaluar la computadora.
Obsérvese que el número de movimientos lícitos posibles en
cada posición, nos indica a su vez la movilidad, la libertad de
movimiento, que cada bando tiene. Existen en internet varios
programas, muy pequeños, que haciendo uso de esta evaluación de
movilidad y añadiéndole un simple conteo de piezas para conocer el
equilibrio o desequilibrio de material pueden jugar al ajedrez. El
mexicano Oscar Toledo tiene el honor de haber hecho el programa de
ajedrez más pequeño del mundo, en tan solo 1Kb (y mediante código
C ofuscado) ha sido capaz de hacer un verdadero programa de
ajedrez. Su versión en Java es algo mayor, 5kb, y es jugable
online en su web www.nanochess.com.
A pesar de la sencillez del planteamiento, y como suele
ocurrir habitualmente, la realidad es bien distinta. Para que esta
función pueda ser utilizada de una forma sencilla y genérica debe
fabricar los movimientos pseudo-lícitos, esto es, permitir generar
movimientos sin tener en cuenta los jaques. La explicación es
sencilla, con esto se evita una excesiva tendencia de la máquina a
dar jaque. Nótese que cuando un bando está en jaque la cantidad de
movimientos legales se reducen a muy pocos, del orden de 3 o 4
jugadas, frente a los más de 60 jugadas lícitas que como media
existen en cada posición.
4.2.- Las estrategias de cálculo
La estrategia de cálculo es sin duda el tema más importante a
la hora de valorar hacer un programa de ajedrez. Aunque en la
actualidad todos los programas que suelen estar en circulación, y
que se precien dignos, tienden a usar la misma estrategia y
algorítmica, el mundo de la programación de juegos de ajedrez
empezó con el matemático Claude Shannon que entre 1949 y 1950
escribió un artículo llamado “Programación de un ordenador para
jugar al ajedrez”, estableciendo así las bases actuales para
desarrollar con éxito un programa de ajedrez.
En su artículo hablaba de una primera estrategia, hoy conocida
como Shannon A, en la que se analiza cada posición a una
profundidad fija, independientemente de su naturaleza, y que
comúnmente se le añade el bonito calificativo de “fuerza bruta”.
10
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
Figura 1
Pronto observó que esta forma de proceder produce una más que
evidente miopía en la computadora. Como se puede observar en la
figura 1 si cortamos de raíz el análisis a una profundidad fija de
movimientos, la máquina puede llegar a la conclusión de que la
jugada DxA o TxA de las negras es una ganancia de material sin
tener en cuenta la recaptura que se produce mediante el caballo y
por último con la dama invirtiendo la báscula a favor del bando
blanco. Obsérvese también, que este defecto no es subsanable
incrementando la profundidad en el cálculo pues siempre existiría
la posibilidad de encontrarse en el análisis con una posición
similar.
Así, y siendo consciente de esta situación C.Shannon elaboró
una nueva estrategia que se conoce como Shannon B, y en la que
hace una distinción entre posiciones tranquilas (estáticas) y
posiciones violentas(aquellas en las que hay intercambio de
material). El análisis debe realizarse a una profundidad variable
de forma que sólo se computen las posiciones del tipo estático. A
pesar de la sencillez de este segundo planteamiento, las
dificultades técnicas para realizar un programa de este tipo y la
dificultad para homogeneizar valoraciones a diferentes niveles de
profundidad son grandes.
Existe una tercera estrategia, C, que Herber E. Bruderer
propuso en su libro “Proceso de datos no numéricos” que
complementa el trabajo de C.Shannon basada en los principios
estratégicos en los que se funda el juego del ajedrez.
Desafortunadamente no es muy conocida debido a la falta de éxitos
de los programas que funcionan bajo esta estrategia. Como
curiosidad, el programa “Pioner” del campeón del mundo M.
Botvinnik funcionaba bajo esta base.
4.3.- Corrigiendo la estrategia Shannon A
¿Existe más estrategias? Pues básicamente no. Lo que hay es
una combinación de las arriba mencionadas, o en algunos casos
modificaciones y rectificaciones de las mismas. Para el aficionado
a la programación puede ser muy sencillo usar la estrategia
11
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
Shannon A (y la realidad es que ha sido la estrategia más
utilizada hasta finales de los 90 aprovechando la potencia y
mejora electrónica), debido a que con un algoritmo sencillo de
reiteración se puede emplear sin más la fuerza bruta. Si además
corregimos la miopía en el cálculo que se produce en posiciones
violentas podemos obtener un programa de ajedrez más que digno.
La tendencia a modificar dicha miopía es a través de la
formulación matemática. Si encontramos la expresión exacta que
evalúe la posición turbulenta si necesidad de profundizar más
allá, tendremos resuelto el problema de forma sencilla, eficaz y
rápida. Para un escaque donde existe una pieza que está atacada
por más piezas de las que es defendida, podemos aplicar una
expresión del tipo siguiente:
valoración = cte/(valor_pieza_a_capturar – valor_pieza_a_mover)
garantizando así la captura en dicho punto cuando existe
desequilibrio de fuerzas, aunque en contrapartida, se podría hacer
con la pieza erronea.
Y tal es así, que la vía más segura para garantizar la captura
correcta es conocer de antemano el tren de ataque y defensa en
dicho punto. Definiendo cono tren de ataque y defensa la
ordenación por valor (de menor a mayor) de las piezas que dominan
dicho punto. Así, mediante la expresión siguiente:
valoración=pieza_a_mover–(pieza_a_capturar+pieza_defensora_de_menor_valor)
se garantiza, ahora sí, la captura con la pieza de menor valor.
Figura 2
La figura 2 muestra como de las tres piezas negras que pueden
capturar en la casilla d4, solo la de menor valor (el peón) es la
más rentable. Aplicando la última expresión, y usando la
valoración estándar y arbitraria de las piezas (peon=1, alfil=4,
caballo=3, torre=5 y dama=9), lo podemos comprobar.
12
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
Captura con peón: 1 – (1 + 3) = - 3
Captura con alfil: 4 – (1 + 3) =
0
Captura con dama: 9 – (1 + 3) =
5
Teniendo en cuenta el criterio comúnmente aceptado de que
valores negativos son beneficiosos para el bando negro, y los
positivos lo son para el bando blanco, podemos observar claramente
que la captura con el peón da la máxima ventaja al programa.
4.4.- El método MiniMax
Elegida la estrategia debemos encontrar una forma de saber
como elegir el mejor movimiento para la computadora. El método
MiniMax se extrae directamente de la teoría de juegos y para el
caso del ajedrez, cuya información para valorar la posición es
totalmente transparente a ambos bandos (se dice que es completa),
es muy sencillo de aplicar.
Desde un punto de vista meramente conceptual consiste en
enseñar a la computadora a elegir aquél movimiento que dá menos
opciones al contrario. Como cualquier jugador de ajedrez conoce,
no debe basarse el movimiento sobre el tablero en un supuesto
error del contrario, sino todo lo contrario, hay que hacerlo
pensando que la respuesta va a ser la más fuerte de todas las
posibles. El método MiniMax es precisamente esto, pero desde un
punto de vista estrictamente formal y puramente matemático.
Suponiendo una posición cualquiera, la máquina debe hacer un
cálculo, en primer lugar, para valorar que posiciones son más
beneficiosas para el adversario de entre las generadas en el árbol
de análisis a determinada profundidad (mínimo valor desde el punto
de vista de la computadora), y en segundo lugar, de entre todas
ellas debe elegir la de mayor beneficio para la computadora
(máximo) llevando a cabo el concepto de proceder en base a que el
contrario realizará la mejor jugada y no cometerá error al mover.
De aquí el nombre MiniMax, elegir el valor máximo de todos los
mínimos posibles.
Figura 3
13
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
Aplicando la idea a la posición mostrada, figura 3, imaginemos
que analizamos las posibilidad de capturar el peón de 'd4' con
piezas negras (movimiento computadora). Sin tener en cuenta la
recaptura para simplificar el ejemplo, que por otro lado es un
situación que se presenta en la práctica en el desarrollo de un
motor de ajedrez, y que se clasifican como posiciones violentas,
(ver Estrategias de cálculo), y teniendo en cuenta como criterio
de valoración el meramente material atendiendo a la arbitraria
valoración de piezas ya establecida, podemos generar un mini árbol
cuyas ramas finales terminan en la valoración indicada en la
siguiente tabla:
Posición de juego (figura 3)
Variante A (1.Axd4)
Variante B (1.Txd4)
Variante C (1.Dxd4)
Resp 1 Resp 2 Resp 3 Resp 1 Resp 2 Resp 3 Resp 1 Resp 2 Resp 3
1. …
1. …
1. …
1. …
1. …
1. …
1. …
1. …
1. …
Axd4
Cexd4 Cfxd4
Axd4
Cexd4 Cfxd4
Axd4
Cexd4 Cfxd4
0
-1
-1
-1
-2
-2
-5
-6
-6
Tabla 1
Obsérvese que para la variante A el movimiento más beneficioso
para el bando blanco es recapturar con caballo, de momento es
indiferente con cuál pues solo se tiene en cuenta la valoración
material, así el valor mínimo (desde el punto de vista de la
computadora, máximo desde el punto de vista del oponente) es -1:
Valor mínimo en variante A = -1
Aplicando la misma idea en las variantes B y C, obtenemos que:
Valor mínimo en variante B = -2
Valor mínimo en variante C = -6
De todos ellos, el valor máximo es el -1, correspondiente al
valor mínimo de la variante A. Así, de las opciones analizadas, el
movimiento más beneficioso para las negras (conducidas por la
máquina) sería 1.Axd4. Sirviendo este sencillo ejemplo como
muestra del funcionamiento del método MiniMax.
4.5.- Alfa-Beta (mejora del método MiniMax)
El algoritmo Alfa-Beta esta basado en dejar de analizar
aquellas posiciones que ya quedan demostradas como peores sin
necesidad de verificar todas las posibilidades. Detrás de esta
definición, quizás un poco confusa, hay una increíble sencillez
lógica.
Si observamos atentamente la tabla 1 del epígrafe anterior
podemos observar que la valoración que se dio para la variante A,
14
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
el movimiento 1. Axd4, después de analizar todas las posibles
respuestas, fue de -1. Continuando el análisis para la Variante B,
1. Txd4, observamos que la primera respuesta produce una
valoración -1, que claramente es la misma puntuación que la mínima
obtenida para la variante A. Esta es la clave del algoritmo AlfaBeta, ya no es necesario seguir analizando la posición pues ya se
sabe que al menos hay una valoración igual o peor que la obtenida
previamente (en nuestro ejemplo la variante A), sin importar el
resto, pues es de suponer que el adversario siempre optará por
buscar la jugada que más le beneficie. Aplicando el mismo
razonamiento para la variante
C, llegaríamos a la misma
conclusión. Y finalmente sin necesidad de examinar detalladamente
todos los movimientos llegaríamos a la conclusión de que el
movimiento mejor valorado es 1. Axd4, correspondiente a la
variante A.
Por tanto, el algoritmo Alfa-Beta supone una simplificación
del árbol de variantes y un enorme ahorro tiempo. Imaginando que
una posición cualquiera hay más de 60 movimientos posibles (como
media), el árbol de posiciones a una profundidad de 4 movimientos
puede llegar a crecer hasta la nada desdeñable cifra de
aproximadamente 13.000.000 (que es aproximadamente 60 elevada a su
cuarta potencia). En la actualidad, y con la potencia de cálculo
de los actuales procesadores, dicha cifra es una nimiedad, sin
embargo no hace mucho esto suponía un tremendo esfuerzo. Como
ejemplo se puede acudir a los obsoletos procesadores de Zilog. El
Z80 funcionaba con una frecuencia de aproximadamente 3,5 Mhz
(3.500.000 ciclos por segundo), cada operación realizada por el
procesador (instrucción) consume una media de 7 u 8 ciclos, lo que
supone que a esa frecuencia el procesador solo puede realizar una
media (mal contada) de 500.000 operaciones por segundo. Haciendo
una simple división, 13.000.000/500.000, podemos concluir que
solamente el conocimiento de todas las posiciones le cuesta a la
computadora la cantidad de 26 segundos. Sin contar el resto de
esfuerzos necesarios para hacer que la máquina juegue, entre los
que están el valorar cada una de las posiciones previstas, que sin
duda es el de mayor consumo.
4.6.- Poda anticipada
Todavía es posible mejorar la búsqueda para encontrar la mejor
valoración. En este caso, se busca una simplificación en el árbol
en su sentido longitudinal (y no trasversal como en el algoritmo
Alfa-Beta).
15
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
Figura 4
Supongamos la siguiente línea de análisis, que aunque
totalmente ingenua, es una posibilidad real para la computadora:
1. … Rd7 2. dxe4 Rc7 3. e5 Rb7 4. e6 (valoración -9)
Obviamente la computadora ha previsto que esta línea basada en
el movimiento de Rey produce una valoración muy desfavorable, pues
pierde la dama.
Ahora supongamos otra línea de análisis, solamente hasta su
segundo movimiento:
1. … Rf7 2. dxe4 (valoración -9)
Comprobamos que después de 2. dxe4, cualquier movimiento del
Rey negro no hará que varíe la valoración (pues seguirá existiendo
una perdida clara de material), por tanto no es rentable seguir
indagando en dicha línea.
Obviamente esta forma de proceder hace que el ordenador
adquiera un sentido muy materialista de la posición, sin tener en
cuenta posibles sacrificios, sin embargo acelera el cálculo
notablemente.
4.7.- Otros métodos de búsqueda
En la práctica existen muchos algoritmos que ayudan a
encontrar el mejor movimiento de la computadora, y que a modo de
información se muestran a continuación:
- La heurística vencedora: basada en la búsqueda de
movimientos que refuten el generado por el ordenador, de forma
que, comparando dicho movimiento con los siguientes generados por
la máquina, permite valorar si los nuevos movimientos son
rentables.
- La ventana Alfa-Beta: teniendo en cuenta que no es habitual
16
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
que se obtenga una ganancia muy grande para una posición dada, se
puede reducir el análisis descartando aquellas ramas que produzcan
ganancias (o perdidas) muy exageradas, o fuera, de los valores
Alfa y Beta que forman la ventana.
- La reiteración: consiste en ir analizando la posición por
niveles de profundidad, de forma que se ajuste al tiempo
establecido de juego.
- Otros algoritmos de mejora Alfa-Beta: Movimiento Nulo
(Chrilly Donniger, 1993), Aspiration Search, Negamax, Negascout,
Algoritmo SSS*, Scout (Judea Pearl), Algoritmo MTD, etc.
En definitiva, a pesar de la gran cantidad de algoritmos que
se pueden encontrar, todos están basados en las estrategias
creadas por C. Shannon hace más de medio siglo y en el concepto de
MiniMax extraído de la Teoría de Juegos.
17
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
5.- Valoración de posiciones
La valoración de las posiciones es la parte de un programa de
ajedrez más compleja. Es también la más próxima al entrenamiento
de personas, pues mientras que la técnica de programación (veáse
los anteriores apartados) depende en gran medida de la habilidad o
virtuosismo del programador, el saber transmitir cómo valorar una
posición depende de la capacidad de enseñar a jugar, entendiendo
como jugar, el paso que va más allá del simple movimiento de las
piezas y conocimiento de las reglas.
A pesar de que se puede suscitar un gran debate al respecto,
lo cierto y verdad, y a diferencia de lo que se tiende a pensar,
la capacidad de enseñar no depende de los conocimientos del
instructor, sino del nivel que se pretende alcanzar y de la
capacidad para transmitir ideas de una forma clara y sencilla.
En este aspecto y al igual que ocurre en el entrenamiento,
enseñar a jugar a una computadora, es saber transmitir los
conceptos correctos a un código legible por la máquina.
Actualmente es fácil encontrar mucha información en relación a
las técnicas empleadas para programar un buen juego de ajedrez.
Por el contrario existe muy poca, y a veces difícil de obtener,
información en relación a cómo se debe valorar las posiciones que
deben ser analizadas por el programa. Tanto es así, que la mayor
parte de los programas que circulan en internet, por ejemplo en la
modalidad de código abierto, se limitan a un simple conteo de
material y movilidad a una profundidad fija. Otros incluyen en su
código tablas rectificadoras que permiten dar un añadido más a la
valoración relativa de las piezas en función de su posición. Pero
en el fondo, nadie desvela los secretos de cómo hacer que un
programa de ajedrez pueda jugar como un Gran Maestro.
Esto es lo realmente entretenido del asunto, pues al igual que
a un niño se le va explicando como debe ir realizado las jugadas,
en qué detalles debe fijarse o que criterios seguir cuando la
posición parece muerta (en ideas), el diseño y programación de un
juego de ajedrez está basado en las mismas ideas extrapoladas a un
lenguaje mas abstracto y simbólico, a un lenguaje matemático.
5.1.- El libro de aperturas
Como ya se reseñó al principio de este trabajo, los actuales
programas son en realidad pequeños engaños que pretenden hacernos
creer que saben jugar al ajedrez desde el principio hasta el fin.
Sin embargo, todos ellos abusan de la gran capacidad de computo y
almacenamiento, y el más sencillo ejemplo es la enorme capacidad
que todos tienen para acudir a la teoría de aperturas para
18
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
emplearla directamente en el juego.
Es fácil comprobar, como ya en la década de los noventa,
programas como el “Genius Chess” para el obsoleto sistema
operativo MS DOS que se hizo famoso por su pequeño tamaño y
preciso juego, era capaz de seguir la teoría hasta casi alcanzar
la jugada 30 en variantes de la siciliana, como por ejemplo la
variante Nardof que popularizó el ex campeón mundial B.Fischer.
Esta forma de proceder en la programación de juegos de ajedrez
garantiza la creación de un fuerte rival para los grandes
jugadores, pero que deja poco disfrute para el aficionado que
pronto se ve sumido en la desolación de sus continuas derrotas,
sin caer en la cuenta de que en nadie en su sano juicio es capar
de almacenar tal cantidad de información al modo en que lo hacen
las computadoras actuales.
El libro de aperturas en realidad no fue creado en un
principio para vencer desde las primeras jugadas, sino para romper
el determinismo al que tiende la máquina, pues sin un mínimo de
aleatorización en las jugadas la máquina tendería a repetir una y
otra vez las mismas jugadas ante posiciones idénticas. Algo que
además se ha extrapolado al medio juego, permitiendo al programa
elegir de una forma totalmente aleatoria entre varias jugadas
supuestamente igual de aceptables.
Poco más hay que añadir, pues en realidad desde un punto de
vista meramente técnico no tiene complicación. Existen infinidad
de criterios para la creación de un libro de apertura, siendo el
más simple la creación de una tabla de donde leer la información
formateada
según
algunos
de
los
actuales
protocolos
de
comunicación entre motores e interfaces, como xboard o UCI
(Universal Chess Interfaces).
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
e2e4
g8f6
c7c6
c7c6
c7c6
c7c6
c7c6
c7c6
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
c7c5
e4e5
d2d4
d2d4
d2d4
d2d4
d2d4
d2d4
b1c3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
g1f3
f6d5
d7d5
d7d5
d7d5
d7d5
d7d5
d7d5
b8c6
b8c6
b8c6
b8c6
b8c6
b8c6
b8c6
b8c6
b8c6
d7d6
d7d6
d7d6
d7d6
d7d6
d7d6
d7d6
d2d4
b1c3
b1c3
b1d2
b1d2
e4d5
e4e5
g2g3
f1b5
d2d4
d2d4
d2d4
d2d4
d2d4
d2d4
d2d4
f1b5
d2d4
d2d4
d2d4
d2d4
d2d4
d2d4
d7d6
d5e4
d5e4
d5e4
d5e4
c6d5
c8f5
g7g6
g1f3
c3e4
c3e4
d2e4
d2e4
c2c4
c5d4
c5d4
c5d4
c5d4
c5d4
c5d4
c5d4
f3d4
f3d4
f3d4
f3d4
f3d4
f3d4
f3d4
g8f6
g8f6
g8f6
g8f6
e7e6
e7e6
g7g6
b1c3
b1c3
b1c3
b1c3
b1c3
b1c3
d7d6
d7d6
d7d6
e7e5
d8c7
a7a6
c1g5 e7e6 d1d2 f8e7 e1c1 e8g8
c1g5 e7e6 d1d2 a7a6 e1c1 h7h6
f1c4
d4b5 d7d6
c5d4
c5d4
c5d4
c5d4
c5d4
c5d4
f3d4
f3d4
f3d4
f3d4
f3d4
f3d4
g8f6
g8f6
g8f6
g8f6
g8f6
g8f6
b1c3
b1c3
b1c3
b1c3
b1c3
b1c3
b8c6
b8c6
b8c6
a7a6
a7a6
a7a6
c1g5
c1g5
f1c4
c1e3
c1g5
f1e2
b8d7
c8f5 e4g3 f5g6 h2h4 h7h6
b8d7
c8f5 e4g3 f5g6 h2h4 h7h6
g8f6 b1c3 e7e6 g1f3
f1g2 f8g7
e7e6 d1d2 f8e7 e1c1 e8g8
e7e6 d1d2 a7a6 e1c1 h7h6
e7e6 f2f4
e7e5 d4b3 f8e7
Tabla 2
19
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
La tabla 2 muestra un extracto del fichero book.txt del libro
de aperturas creado por Tom Kerrigan para su educativo programa de
Ajedrez TSCP (Tom Kerrigan Simple Chess Program, 1997). En este
caso el autor optó por incluir el libro de aperturas en archivo
indepediente, y por fortuna para los aficionados totalmente
transparente, pues podemos modificar a placer su contenido
añadiendo o eliminado variantes.
Otras opciones son generar archivos más complejos, o incluso
comprimidos, o si se opta por un libro no muy extenso incluirlo
como parte del código del programa.
5.2.- Finales
La otra parte del engaño de los actuales programas de ajedrez
son los finales. Desde los orígenes de la programación de juegos
de ajedrez, los finales han sido el caballo de batalla debido a la
enorme complicación conceptual que conlleva poder matematizarlos
de una forma genérica.
Incluso en los finales más simples se requiere especificar
mediante código concreto las acciones para poder llevar a buen
término la victoria por parte de la computadora. Cualquier final
de Dama y Rey contra Rey requeriría la siguiente secuencia de
código:
1. Reducir la distancia entre la pieza mayor y el Rey contrario
2. si no es posible el punto 1, acercar el Rey atacante al Rey contrario
De esta forma se consigue, poco a poco, arrinconar al Rey en
minoría con Dama y Rey hasta alcanzar la posición de mate. Sin
embargo, para el caso de que la pieza mayor sea la Torre el
anterior criterio debe modificarse en el sentido de tener en
cuenta las posibles amenazas a la Torre y tener la precaución de
mantener el Rey a salto de caballo, lo cual a su vez puede
necesitar una pérdida de tiempo de la Torre.
Pensar en términos de finales de Alfiles, o Alfil y Caballo,
para dar mate se excede en mucho del objetivo de este trabajo. Y
si además añadimos más elementos, otras piezas o simplemente
peones, mantener el objetivo de juego se convierte en algo difuso,
difícilmente cuantificable desde un criterio meramente matemático.
En la actualidad todos los motores de ajedrez que pretendan
presumir de seriedad acuden a lo que se conocen como tablas de
finales. Por ejemplo, las “Tablas de Nalimov”, que no son más que
una gigantesta base de datos generada de forma inversa y que
indican el resultado que se obtendría en cualquier posición para
cualquier movimiento. Estas tablas desde su creación han ido
creciendo hasta conocer de antemano el resultado de posiciones
20
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
formadas por seis piezas.
En Internet existen varios sitios online donde se puede verificar el
resultado
de
un
final
concreto,
la
siguiente
dirección
http://www.lokasoft.nl/tbweb.aspx es un claro ejemplo, y un ejemplo
de como no es posible competir humanamente con máquinas que usan como
criterio de cálculo el obtener información de enormes bases de datos.
Por tanto, la ardua tarea del final está encomendada a la
simple consulta en una base de datos.
Sin embargo, para el aficionado, tanto al ajedrez como a la
programación, este asunto, lejos de ser algo tedioso, puede
convertirse en algo divertido, y ayuda a comprender los entresijos
de los finales a medida que se van modificando los criterios de
valoración.
5.3.- El Medio Juego
Por suerte, no todo esta precocinado de antemano, y la parte
más determinante de un programa de ajedrez radica principalmente
en la valoración del medio juego (suponiendo que la programación
se realiza de forma eficaz). Pero, ¿qué debemos valorar? ¿y cómo?
Las respuestas a estas preguntas no son sencillas, si lo fueran,
hacía tiempo que podríamos haber disfrutado de buenos programas de
ajedrez.
Obviamente, y como ya se ha indicado, el equilibrio de
material y la capacidad de expansión (movilidad) son fundamentales
en un primer análisis, pero para querer ir más allá se deben
considerar otros muchos factores como son: el desarrollo de las
piezas, la estructura de peones, el derecho a enroque, la
seguridad del rey, la capacidad de ataque, en definitiva cualquier
criterio que deduzcamos puede intervenir en la posición. Además,
hay que ser consciente de la importancia del valor relativo de las
piezas, que como es sabido, dependen en gran medida de la
naturaleza de la posición.
Generalmente la valoración de los criterios elegidos se hacen por
separado, y finalmente se ponderan conjuntamente mediante una
expresión similar a la siguiente:
Vt = K1 * C1 + K2 * C2 + K3 * C3 + K4 * C4 + K5 * C5 + ... + Kn * Cn
Donde los factores C corresponden al valor absoluto de cada
criterio, y los factores K corresponden al peso específico en la
valoración total.
A modo de ejemplo, se suele considerar como válido que la
movilidad represente el 10% del material. En nuestra expresión
anterior, si K1 representa el peso específico del material podemos
21
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
asignarle un valor K1=1 , y si K2 representa el peso específico de
la movilidad podemos asignarle un valor de K2=0.1.
El valor relativo de las piezas es otro de los aspectos
importantes a tener en cuenta, y la manera habitual de rectificar
el valor original de cada pieza es mediante tablas de consulta. Es
conocido que un Alfil o un Caballo situado en alguna de las
casillas centrales es mucho más valioso que otro escorado en un
flanco o en los rincones, por tanto hay que dar un valor añadido a
cada pieza en estas posiciones, o restar en caso contrario.
|
|
|
|
|
|
|
|
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
0
0
1
3
3
3
3
1
0
0
1
3
5
5
3
1
0
0
1
3
5
5
3
1
0
0
1
3
3
3
3
1
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
|
|
|
|
|
|
|
|
La matriz 8x8 arriba representada podría corresponder a los
valores que habría que añadir a las piezas menores para rectificar
su valor en función de su posición. Donde se premia el ocupar
casillas centrales.
Este sistema de valoraciones (con otro tipo de valores,
obviamente) es ampliamente utilizado en los programas reales de
ajedrez. Se puede utilizar para fomentar el avance de los peones
en finales, por ejemplo, si establecemos los siguientes valores:
|
|
|
|
|
|
|
|
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
5
2
1
1
1
0
0
0
|
|
|
|
|
|
|
|
Obsérvese que los valores no tienen porque ser graduales, pues
tanto un peón que mueve desde su casilla de origen a e4, es
premiado con un punto extra al igual que un peón que pasa de e4 a
e5, sin embargo cuando el peón esta próximo a coronar el
incremento de su valor relativo aumenta. Los valores de las
matrices son totalmente arbitrarios en este trabajo, pero aquí
radica la auténtica belleza de fabricar un programa de ajedrez,
pues no está al alcance de cualquiera conocer los verdaderos
valores que los programas profesionales asignan a este tipo de
tablas.
El sistema tabulado de valores que se ha indicado es muy
22
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
ventajoso en tiempo de desarrollo, sin embargo, hay muchas
ocasiones en las que este tipo de tablas deben construirse
dinámicamente, en tiempo de ejecución. Un ejemplo más que evidente
es cuando se trata de conocer las posibilidades reales de ataque
al Rey.
|
|
|
|
|
|
|
|
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
3
3
3
1
0
0
0
0
5
5
3
1
0
0
0
0
8
5
3
1
0
0
0
0
5
5
3
1
0
0
0
0
3
3
3
1
0
0
0
0
1
1
1
1
0
0
0
0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tabla dinámica para rey en e8
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
3
3
3
1
0
0
0
0
5
5
3
1
0
0
0
0
8
5
3
1
0
0
0
0
5
5
3
1
0
0
0
0
|
|
|
|
|
|
|
|
tabla dinámica para rey enrocado
Como se muestran en las anteriores tablas, se fomenta la
ocupación de casillas próximas al rey y para ello es necesario que
el programa se encargue de construirlas a partir de la posición
real del Rey enemigo.
Por desgracia para el programador no todo depende de la
geometría del tablero, hay criterios que son muy difíciles de
cuantificar. Uno de ellos, por ejemplo, es el desarrollo de las
piezas. A pesar de que puede parecer más que evidente que se deben
mover las piezas menores acercándolas al centro y buscar el
enroque, lo cierto es que formular dicha situación es mucho más
compleja de lo que parece. El propio David Levy, que en los
primeros apartados de este trabajo se presentó como el hombre que
tuvo el gran honor de ser el primero en perder contra una
computadora, dejó escrita la siguiente formula aplicable al
desarrollo:
Desarrollo = D/3 – U/4 – (K * C)
donde,
D, es el número de piezas menores que no están en sus escaques iniciales
U, que toma el valor cero si la dama no ha sido movida o ha sido
capturada, y si se ha movido toma el valor de las piezas que aún no han sido
desarrolladas, incluidas las torres.
C, igual a dos si el contrario tiene aún la dama sobre el tablero.
K, toma valor en función a los derechos a enrocar, cero, por ejemplo si se
ha enrocado.
23
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
6.- Protocolos de Comunicación
Actualmente, y debido a la enorme evolución de los sistemas
informáticos, los programas de ajedrez han ido evolucionando hasta
tal punto que existe una clara división de tareas entre lo que es
el interface gráfico y el motor de ajedrez propiamente dicho. De
esta forma se puede especializar a los diferentes programadores de
manera que por un lado exista un trabajo intensivo en la creación
de un entorno amigable de juego y por otro, mucho más
especializado, dedicado a la programación del motor (engine).
Tenemos así que, en realidad, el software actual dedicado al
ajedrez esta formado por dos programas independientes, el
interface y el engine, de forma que podemos introducir mejoras en
el programa de juego sin necesidad de modificar todo el entorno, o
viceversa.
Sin embargo para que este sistema de trabajo pueda funcionar
correctamente deben existir unas normas que garanticen la correcta
comunicación entre ambos programas. Estas normas se conocen como
protocolos de comunicación. Al principio, estos protocolos estaban
establecidos a nivel de empresa, pero gracias al software libre y
a los esfuerzos realizados para dotar de un interface gráfico al
programa de ajedrez gnuchess, se han ido diversificando y
creciendo hasta establecerse como auténticos estandares en el
mundo de la programación de programas de ajedrez.
Los protocolos más utilizados en la actualidad son el
Universal Chess Interfaces (UCI) creado por Rudolf Huber y Stefan
Meyer-Kahlen en el año 2000 y el protocolo Xboard/Winboard que en
su versión 2 fue desarrollado por Tim Mann y H.G. Muller en
septiembre del año 1999, y que aún sigue en desarrollo.
El primero de ellos, UCI, goza de mayor fama
programas de ajedrez por ser ampliamente utilizado por
comerciales, sin embargo Xboard/Winboard es, en teoría,
fácil de implementar y está ampliamente difundido debido
cantidad de sofware abierto existente que lo aplica.
entre los
programas
mucho más
a la gran
¿Pero como funcionan realmente estos protocolos? La filosofía
de funcionamiento es mucho más fácil de entender que implementar
en código, en palabras de Tim Mann. Sin embargo, se hace necesario
su implementación si no se quiere desarrollar, con todo lo que
conlleva, un entorno gráfico personalizado para el motor.
La primera parte del protocolo es crear un canal de
comunicación entre el interface y el engine, que por suerte para
el desarrollador de programas de ajedrez, se encarga el propio
interface. Hecho esto, simplemente hay que saber enviar la
información correcta desde el engine y recibirla desde el entorno
24
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
gráfico, atendiendo a las normas del protocolo. Tanto UCI como
Xboard utilizan la salida y entrada setandar para comunicarse, por
lo que es muy fácil implementar el código para realizar esta
labor. Aún así, es posible encontrar dificultades al usar
diferentes sistemas operativos, pues en el caso de Windows, por
ejemplo, no se dispone de un sistema eficaz para este tipo de
tareas, y que en sistemas unix es muy sencillo de realizar debido
a las denominadas tuberías de comunicación o “pipes”.
De cualquier modo, siempre es más fácil implementar el
protocolo en el motor de ajedrez, que crear un interface gráfico,
con la ventaja evidente de poder usar cualquier entorno de los
disponibles tanto de forma gratuita como de forma comercial.
Para poder conectar un motor de ajedrez al interface xboard, en
sistemas Linux, hay que ejecutar el siguiente comando desde la
consola
#linux> xboard -fcp “engine”
siendo “engine” el path o ruta completa hasta el archivo donde se
encuentre el engine ejecutable, y xboard el interface gráfico que es
necesario tener instalado en el ordenador, no confundir con el
protocolo xboard. Y si queremos hacer competir dos motores, hacemos,
#linux> xboard -fcp “engine1” -scp “engine2”
En sistemas windows es tan sencillo conectar motores al interface
como cambiar xboard por winboard.
Estos protocolos están tan extendidos que como curiosidad
existe un tercer programa, denominado PolyGlot, que permite
conectar un motor basado en UCI a un interface gráfico basado en
xboard/winboard, actuando como intermediario entre ambos. Aunque,
salvo excepciones, lo habitual es que tanto los motores como los
interfaces puedan conectarse indistintamente en ambos protocolos.
25
José Javier Franco Benítez 2012
Cómo entrenar a una computadora ...
7.- Conclusiones
De todo lo expuesto es posible deducir que no es fácil hacer
un programa de ajedrez, aunque en verdad y a pesar de lo que
parece, lo verdaderamente difícil es hacer uno que juegue bien.
Hay una parte de programación técnica que es necesario conocer
para poder realizar el software, pero hay otra, que depende de
nuestra total y absoluta imaginación. Y es aquí donde entra en
juego la auténtica diversión del programador. Ver la evolución del
programa desde sus primeros pasos hasta su definitivo desarrollo
es un autentico placer. Y la diversión está garantizada, pues
existen infinidad de formas de ir enseñando al programa a jugar
correctamente. Como se ha visto, podemos acudir a bases de datos
de información, tablas de valores, fórmulas matemáticas, en
definitiva, cualquier cosa que se nos ocurra es posible plasmarla
en el código, y quién sabe si funcionará.
En el fondo no existe diferencia alguna entre el entrenamiento
personal de futuros jugadores y la creación de programas de
ajedrez, pues salvando las distancias en lo que a relaciones
humanas se refiere, es necesario enseñar a jugar, analizar
errores, y volver a enseñar hasta alcanzar los objetivos
planteados.
En la actualidad existe tendencia a creer que los futuros
grandes jugadores de ajedrez serán en realidad grandes alumnos de
las máquinas. Y es más que evidente que la posibilidad real de
poder vencer, al más que numeroso ejercito de computadoras que
saben jugar al ajedrez, es una tarea que está reservada a tan solo
unos pocos privilegiados, quedando el resto de aficionados como
meros espectadores ante el asombroso espectáculo que nos ofrecen
los ordenadores.
Así pues, si el futuro esta en el software, ¿por qué no
entender su funcionamiento?
26
José Javier Franco Benítez 2012