Inicio Aprender ajedrez Ajedrez informático AJEDREZ POR ORDENADOR: Pasado, presente y futuro (Parte 5)

AJEDREZ POR ORDENADOR: Pasado, presente y futuro (Parte 5)

6
Foto de Pexels

AJEDREZ POR ORDENADOR: Pasado, presente y futuro
Parte 5
Por Jose Fernando Blanco

¿Qué pasaba con ese enroque?

Terminé mi artículo anterior con un diagrama y una pregunta:

Figura 1: ¡Falta información!

¿Cuál es el número exacto de posiciones que contiene el árbol de variantes de la siguiente posición (producida tras la jugada 29 de las negras), con una profundidad de 2 movimientos (uno por bando)?

Ya dije que la pregunta tenía trampas. Estas eran dos, como los lectores pudieron adivinar:

  • ¿Cuál fue la última jugada del negro? Si esta fue 29 … c7-c5 o 29 … e7-e5, el blanco tendría sendas capturas al paso disponibles.
  • ¿Puede enrocar corto el blanco?

Esta información faltaba adrede en mi problema, por lo que pido disculpas a los lectores; si bien, conociendo los datos de la partida, es posible encontrarla en Internet (aunque reconozco que no es sencillo). Aquí, por ejemplo:

https://chess24.com/en/watch/live-tournaments/espana-veteran-2018-50/1/1/2

Como puede verse, la última jugada negra fue 29 … Ad8, por lo que no hay capturas al paso disponibles para el blanco. Por otro lado, y esto es lo que me llamó la atención de la partida, el enroque corto blanco no es posible porque… ¡el blanco ya enrocó en la jugada 17! Lo más curioso es que la torre que se encuentra actualmente en h8 no es la que comenzó la partida en esa casilla, sino la otra.

Aclaradas estas dudas, las jugadas posibles del blanco y sus respectivas posibles respuestas del negro están en esta tabla:

Rd1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Rd2 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Rf1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
b2 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
b4 30 respuestas: Rg7, Rh7, Rh8, axb4, cxb4, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Ca3 29 respuestas: Rg7, Rh7, Rh8, Ac6, Ab5, Axa4, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Ca7 29 respuestas: Rg7, Rh7, Rh8, Ac6, Ab5, Axa4, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Cc3 29 respuestas: Rg7, Rh7, Rh8, Ac6, Ab5, Axa4, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Cc7 28 respuestas: Rg7, Rh7, Rh8, Ac6, Ab5, Axa4, Ae6, Af5, Ag4, Ah3, Ac8, Axc7, Ae7, Af6, Cf6, Cxc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Cd4 31 respuestas: Rg7, Rh7, Rh8, cxd4, Ac6, Ab5, Axa4, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, exd4, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Cxd6 31 respuestas: Rg7, Rh7, Rh8, Ac6, Ab5, Axa4, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cxd6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dxd6, Dg7, g4, h5
Dd1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Dd2 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Dc2 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Df1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Dd3 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
De3 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
Tg2 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
T2f1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
f4 29 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, exf4, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Txf4, De7, Dg7, g4, gxf4, h5
g4 26 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Axg4, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, h5
Tg1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
T1f1 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
h3 28 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Axh3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, h5
h4 29 respuestas: Rg7, Rh7, Rh8, Ac6, Axb5, Ae6, Af5, Ag4, Ah3, Ac8, Ac7, Ab6, Ae7, Af6, Cf6, Cc7, Cg7, Tg7, Th7, Te7, Tf6, Tf5, Tf4, Txf3, De7, Dg7, g4, gxh4, h5

Tabla 1: La punta del iceberg.

En resumen, el blanco tiene 25 jugadas legales y hay 711 respuestas en total a todas ellas, por lo que las posiciones que se dan, contando ambos nodos, son 736.

Esto es solo el comienzo de una bola de nieve que alcanza dimensiones astronómicas en pocos pasos, como ya vimos al final del artículo anterior. Profundicemos un poco ahora en cómo afecta esta bola de nieve a las expectativas de conseguir un ordenador capaz de aplicar la Estrategia A de Shannon de forma rápida y con buenos resultados.

Recordemos que el artículo objeto de nuestro estudio está escrito en los primeros años 50, es decir, en la prehistoria de la computación: aparecieron los primeros mastodontes, ordenadores enormes y (desde nuestro punto de vista) muy lentos. Los microprocesadores y los procesadores en paralelo, que fueron las bases para el desarrollo exponencial de la computación, no aparecieron hasta los años 70. Los pioneros de mitad del siglo pasado confiaban, sin duda, en un aumento de la velocidad de proceso, pero no tan espectacular, ni tan sostenido, como se dio veinte años después.

Con estas consideraciones en mente, veamos lo que pensaba Shannon:

Por desgracia, una máquina que operara según la Estrategia A sería lenta, y su juego demasiado débil. Sería lenta porque, aunque se pudiera evaluar cada posición en un microsegundo (muy optimista), se necesitan unas 10 9 evaluaciones para cada posición tras la tercera jugada de ambos bandos. De este modo, se requerirían más de 16 minutos para una jugada, o sea, diez horas para realizar las jugadas de uno de los dos bandos en una partida de cuarenta jugadas.

Una puntualización: para hacer una jugada en la Estrategia A no basta con “evaluar” las posiciones. Como ya expliqué en el apartado anterior, también hay que comparar estas evaluaciones y trasladarlas a las ramas superiores del árbol de variantes. Este proceso no es ni mucho menos sencillo, pero por ahora vamos a aceptar que la mayor parte del tiempo de proceso consiste, como insinúa Shannon, en evaluar las posiciones. Por este y otros motivos, los cálculos que siguen son solamente aproximados.

Para entender hasta qué punto el cálculo de Shannon era “muy optimista”, vamos a tomar como ejemplo el ordenador SEAC, construido en 1950 y que, según la Wikipedia, podía realizar una suma en 864 μs (microsegundos) y una multiplicación en 2.980 μs.

Figura 2: El ordenador SEAC.

Retomemos, de nuestro tercer artículo, la función f(P) propuesta para la evaluación de una posición:

f(P) = 9(D-D’) + 5(T-T’) + 3(A-A’+C-C’) + (P-P’) – 0,5(d-d’+r-r’+a-a’) + 0,1(m-m’) + 0,3(n-n’)

Como vemos, la función incluye 18 sumas (las restas cuentan como sumas también) y siete multiplicaciones. El tiempo de evaluación de esta función para SEAC (al que llamaremos t(P)) sería, por tanto:

t(P) = 18 x 864 + 7 x 2.980 = 36.412 μs

Esto quiere decir que la estimación de Shannon era unas 36.000 veces más optimista que la realidad de ese momento (insisto de nuevo en que son cálculos poco precisos, pero válidos para unas conclusiones aproximadas).

 icon-chevron-right Sugerencia: Aprende más informática aplicada al ajedrez en nuestra Academia online: The Zugzwang Members.

Es bueno tener un plan B

Probablemente Shannon calculaba que se tardaría unas cuantas décadas en llegar a la velocidad de proceso de su estimación. Hoy sabemos que estaba equivocado, pero por ahora vamos a seguir su línea de razonamiento: Si nunca vamos a tener una máquina así y, aunque la tuviéramos, sería demasiado lenta (diez horas por partida) y demasiado floja (ya que una profundidad de tres jugadas por bando tampoco es para tirar cohetes), más nos vale mejorar la Estrategia A. Para ello, Shannon identificó dos áreas de mejora:

  • En primer lugar, un aspecto que comentamos de pasada en otro artículo y que dejamos “aparcado” entonces: el tratamiento de posiciones no quiescentes, es decir, aquellas en las que, por así decirlo, están pasando cosas (intercambios de piezas, sucesiones de jaques, posibles promociones de peones…). Detenerse en un nivel preestablecido, como establece la Estrategia A, puede ser terrible si en alguna de las variantes dicho nivel se encuentra en una posición no quiescente (cosa bastante normal).
  • En segundo lugar, parece innecesario calcular todas las variantes posibles. Sin duda hay jugadas, en cualquier posición, que son obviamente malas, o al menos irrelevantes; detectar esas jugadas y eliminarlas del proceso de selección se traduciría en un gran ahorro de tiempo y, por tanto, en un aumento en el nivel de juego.

A la implementación de estas dos mejoras en el programa de ajedrez Shannon la llamó Estrategia B.

Un personaje escurridizo

A Shannon le atraía la idea de que estas dos mejoras, si llegaran a implementarse, acercarían la estrategia del ordenador al modo de pensar de un ajedrecista humano. En sus propias palabras (las negritas son mías):

La máquina opera de forma muy ineficiente: calcula todas las variantes hasta exactamente tres jugadas y ahí se detiene (incluso si ella o el oponente están en jaque). Un buen jugador humano examina solo unas pocas variantes seleccionadas y las analiza hasta un nivel razonable.

Así aparece por primera vez, en esta historia, nuestro segundo protagonista: si en la tercera entrega de esta serie conocimos al personaje principal (la inteligencia humana, a la que en adelante, para abreviar, llamaremos IH), ahora se presenta ante nosotros su hermanastra (o su hija, según se mire): la inteligencia artificial (en adelante IA).

No es raro que ya en el primer artículo sobre programación de ordenadores para jugar al ajedrez aparezca este sujeto. Cuando nació el concepto de procesador artificial ya se planteó la pregunta: “¿Podrán llegar a pensar estas máquinas como pensamos nosotros?”, y desde siempre se ha asociado la tarea de pensar con el juego del ajedrez (no se sabe muy bien por qué; supongo que por la cara de concentración que ponemos cuando jugamos).

Como consecuencia de esta asociación, una y otra vez los avances del ajedrez por ordenador se han identificado como avances de la IA, cuando eran en realidad grandes logros de la IH. Pero no adelantemos acontecimientos. Por ahora vamos a conformarnos con analizar hasta qué punto la Estrategia B es comparable al modo de jugar humano.

Dice Shannon que el ser humano examina solo unas pocas variantes seleccionadas y las analiza hasta un nivel razonable. Eso es cierto. Pero el ser humano hace también otras cosas cuando juega una partida de ajedrez. No me resisto a copiar aquí un fragmento del magnífico libro “Los siete pecados capitales del ajedrez”, de Jonathan Rowson (también la traducción es mía):

Figura 3: GM Jonathan Rowson.

También piensas cuando juegas al ajedrez, pero al hacerlo estás evaluando, recordando, juzgando, analizando, comparando, intuyendo, buscando, dudando, sincronizando, calibrando, provocando, comprendiendo, orientando, complicando, simplificando, planificando, anticipando, cuestionando, divagando, etcétera. Como vimos en el prólogo, los pensamientos están también profundamente vinculados con las emociones, en cuyo caso también puedes estar preocupándote, temiendo, confiando, esperando, lamentando, reprochándote, alarmándote, excitándote, etcétera.

Cierto que no necesitamos que un programa haga todas esas cosas para parecer humano; pero es innegable que la Estrategia B de Shannon está bastante lejos de conseguir dicho objetivo. Le faltaría, por ejemplo (me limito a enumerar cosas que se pueden hacer durante la partida, no antes o después de la misma):

  • Idear planes, que podríamos definir, de forma muy simple, como conjuntos de jugadas. Por ejemplo “voy a llevar a mi rey de g1 a b3”, “pondré todos mis peones en casillas de color negro”, “cambiaré mi alfil de casillas blancas por uno de sus caballos”, etcétera.
  • Recordar esquemas de partidas anteriores (propias y de otros jugadores) que tengan similitudes con la posición actual.
  • Tratar de adivinar y adelantarse a las intenciones del rival.
  • Juzgar posiciones según nuestra intuición.
  • Inducir al rival, por diferentes medios, a caer en una celada.
  • Hacer trampas.

Esta lista no es exhaustiva (y los dos últimos puntos posiblemente sean prescindibles), pero sirve para ilustrar que hay un mundo entre el programa imaginado por Shannon y el juego de una persona medianamente experta.

Pero al menos es un paso, porque la Estrategia A no tiene nada de humana; y pongo esta frase en negrita porque, como veremos en un artículo posterior, tiene una importancia capital.

Si hay que ir más lejos, se va…

Sigamos ahora con Shannon. ¿Qué propone hacer para implementar las dos mejoras que definen la “Estrategia B”?

  • Para la primera mejora: Una función g(P), siendo P la posición objeto del cálculo, que determine la quiescencia de la misma. Esta función valdrá:
    • 1, si hay alguna pieza atacada por una pieza de menor valor, o bien atacada por más piezas que las que la defienden; o si hay un jaque posible en una casilla controlada por el rival.
    • 0, en cualquier otro caso.
  • Para la segunda mejora: Una función h(P, M), siendo P la posición y M un posible movimiento en la misma. Esta función determinaría si el movimiento M merece la pena analizarse, por comparación con un valor concreto hmin (es decir: si h(P, M) es mayor que hmin, la variante se tendrá en cuenta, y viceversa).

La primera función es fácil de implementar y su uso consistiría en profundizar en el análisis de la posición en cuestión, si g(P) = 1, hasta que g(P) = 0, estableciendo posiblemente un límite máximo de profundidad. Esta mejora, por cierto, también es aplicable a la Estrategia A. Todos los módulos con un nivel presentable implementan esta función, y las variantes adicionales que se calculan suelen recibir el nombre de extensores. Como ejemplo, véase el siguiente pantallazo, tomado de un programa comercial muy conocido:

Figura 4: Doble profundidad.

La profundidad, que he enmarcado en rojo, tiene dos números: el primero (15) es la profundidad a la que el programa ha llegado calculando todas las variantes seleccionadas, mientras que el segundo (46) es la profundidad a la que ha llegado el extensor más largo.

Este filtro es un coladero

Ya tenemos una función g(P) que decide si deberíamos profundizar en una variante concreta. ¿Y la función h(P, M)? Eso ya es otra historia… Veamos qué sugiere Shannon:

Un jaque es el tipo de jugada más forzada. Las respuestas del oponente están muy limitadas; nunca puede contestar con un contraataque, por ejemplo. Esto significa que una variante que empiece con jaque puede calcularse más fácilmente que otras. De manera similar las capturas, ataques a piezas mayores, amenazas de mate, etcétera, limitan las respuestas del rival y deberían calcularse tanto si la jugada parece buena a primera vista como si no. Por tanto, h(P, M) debería tener valores altos para todas las jugadas que fuercen la respuesta (jaques, capturas y jugadas de ataque) y para jugadas de desarrollo; valores medios para las jugadas defensivas; y valores bajos para el resto de jugadas. Al explorar una variante, h(P, M) debe calcularse para cada movimiento posible y usarse para seleccionar o descartar la variante que dicho movimiento origina. A medida que se profundiza en el análisis, se requiere aumentar hmin, de manera que se analicen menos subvariantes cada vez.

No hay que ser Gran Maestro para detectar los puntos dudosos de estas sugerencias. Por ejemplo, ¿que un jaque no se puede contestar con un contraataque? Hay cientos de ejemplos de partidas en los que se demuestra lo contrario. Por otro lado, a menudo la mejor jugada en una partida no es un jaque o una amenaza, o una jugada defensiva, sino una jugada tranquila:

Figura 5: Tranquila, pero venenosa.

Muchos lectores identificarán esta posición; a los que no la conozcan, les sugiero que intenten adivinar la jugada del blanco sin ayuda de un módulo. Pista: seguramente el valor de la función h(P, M) de Shannon para esta jugada sería muy bajo, pues no da jaque, no captura, no ataca ninguna pieza, ni amenaza mate.

Hay miles de ejemplos parecidos. La conclusión es clara: Muchas jugadas buenas (a veces ganadoras, y a veces las únicas ganadoras) no pasarían el filtro de Shannon. Si aplicáramos su criterio, de hecho, nuestro programa estaría todo el rato dando jaques o capturando piezas rivales.

Lógicamente, el criterio de Shannon es muy mejorable, pero el problema de fondo permanece: tarde o temprano alguna jugada importante no pasará el filtro de la función h(P, M). Supongamos, por ejemplo, que encontramos una nueva h(P, M) tan fina que tiene un 95% de eficacia (es decir, que 95 de cada 100 veces la mejor jugada pasa el filtro). Pues bien, después de 7 movimientos por bando la probabilidad de que la mejor jugada se nos haya escapado en algún nivel del análisis es de más del 50%. Y en una partida de 40 jugadas la probabilidad de que la mejor jugada se nos escape alguna vez es superior al 98%.

Esto no es muy grave si pasan el filtro otras jugadas, no tan buenas pero lo bastante buenas; pero en una partida siempre hay varias posiciones que requieren gran precisión, y a la larga la probabilidad de desechar una jugada importante es siempre alta.

Sin embargo, con todas sus limitaciones, en los años 50 la Estrategia B era la única esperanza de conseguir un programa de ordenador que jugara a un nivel decente en un tiempo aceptable; los números en contra de la Estrategia A eran demasiado contundentes. En mi próxima entrega contaré cómo se las apañaron los primeros programadores; ahora vamos a comentar los últimos apartados del artículo de Shannon.

Creando estilos

A Shannon le preocupaba (con motivo) que su hipotético programa hiciera siempre las mismas jugadas (y, sobre todo, que cayera siempre en las mismas líneas perdedoras). Para evitar esto, planteó algunas posibilidades:

  • Introducir un elemento aleatorio que permitiera, en la misma posición, elegir jugadas diferentes, siempre que las evaluaciones de dichas jugadas fueran iguales o muy parecidas.
  • Proporcionar al programa las principales variantes de apertura, de manera que eligiera entre ellas, variando de una partida u otra.
  • Permitir aplicar diferentes estilos al juego de la máquina, modificando a voluntad, de una partida a otra, los valores de la función de evaluación.

Es interesante que ya Shannon plantea el problema ético de si la segunda posibilidad (proporcionar al programa variantes de apertura conocidas) es una ventaja adicional para la máquina con respecto al jugador humano. Para él no lo es:

Durante las primeras jugadas (hasta que alguno de los rivales se desvíe del libro o se alcance el final de la variante almacenada) la máquina jugará de memoria. Esto no puede considerarse “trampa”, ya que es así como los maestros de ajedrez juegan la apertura.

Hay que reconocer que el razonamiento parece bastante válido, aunque tiene un matiz importante: los ajedrecistas humanos, efectivamente, aprenden aperturas que después aplican en sus partidas; pero las memorizan en un medio (su cerebro) no demasiado fiable para guardar información, ya que tiene mucha tendencia a olvidarla y mezclarla. En cambio, los ordenadores llevan las variantes escritas en un soporte tecnológico prácticamente infalible.

Además, los maestros aprenden esas variantes a base de un gran esfuerzo y mucho tiempo de estudio; mientras que los ordenadores no emplean ese tiempo, simplemente leen la información que alguien les ha dejado escrita. Es como si los humanos, en vez de memorizar las variantes que juegan, pudieran llevarlas apuntadas en una enorme chuleta que les asomara por los bolsillos, sin que nadie pudiera acusarles de hacer trampa (y las chuletas se las hiciera un secretario).

En los años cincuenta esto no parecía un problema. De hecho, todos los módulos decentes incluían libros de aperturas; pero más que nada para conseguir que hicieran las primeras jugadas más rápidamente y, sobre todo, para igualar un poco las condiciones de juego, ya que el nivel de juego de los programas era muy inferior incluso al de simples aficionados.

El problema vino mucho después, cuando los programas alcanzaron el nivel de maestros, y muchos usuarios empezaron a ver con desconfianza que ese monstruo que habían comprado, además de jugar mejor que ellos, tuviera apuntadas todas las jugadas de apertura conocidas. Pero ya llegaremos a eso.

A continuación, Shannon comenta la (in)capacidad de aprendizaje de las máquinas. Dejo sus reflexiones aquí tal cual e invito a los lectores a comentarlas. Yo lo haré en una futura entrega, pues este es uno de los aspectos que más han cambiado en estos setenta años:

La principal debilidad de la máquina es que no puede aprender de sus errores. El único modo de que lo haga es mejorar el programa. Se ha estudiado la posibilidad de diseñar un programa capaz de mejorar su juego de forma autónoma pero, aunque parece posible, los métodos estudiados hasta ahora no parecen muy prácticos. Una posibilidad es tener un programa de mayor nivel que cambie los términos y coeficientes implicados en la función de evaluación, basándose en los resultados de las partidas jugadas por la máquina.

Y ahora ¡todos a programar!

Shannon termina su artículo proponiendo un enfoque radicalmente distinto a todo lo anteriormente expuesto. Resumidamente, se trataría de alimentar al programa con “posiciones tipo” (combinaciones estándar, temas tácticos, maniobras…) de manera que el programa reconozca dichas posiciones en sus partidas y dirija sus análisis hacia las mismas.

Esto, desde luego, es muchísimo más fácil de decir que de hacer, y así lo reconoce Shannon. No obstante, algunos lo han intentado y, en su momento, hablaremos de ello también (adelanto que tuvieron poco éxito y que incluso cierta eminencia ajedrecística se llevó un buen revolcón).

Termina así mi revisión del artículo de Shannon, que se ha alargado más de lo que yo preveía. Este artículo fue el pistoletazo de salida que puso a cientos de informáticos manos a la obra de crear un programa de ajedrez ejecutable en un ordenador. En los próximos artículos veremos cómo les fue.

Ya he dejado un par de preguntas repartidas por el texto, por tanto no voy a poner más aquí. ¡Espero vuestros comentarios!

 

José Fernando Blanco (JF) es informático de profesión desde 1985 y ajedrecista aficionado desde diez años antes. Fue campeón de Madrid por correspondencia poco antes de que acabara el siglo XX. Del ajedrez, como del cerdo ibérico, le gustan hasta los andares.

6 COMENTARIOS

  1. Bueno, poco a poco vamos siguiendo el tema. El capítulo anterior me costó, pero más o menos, y después de varias relecturas, puedo seguir con la lectura de esta nueva entrega. Aunque cueste, (al menos para mí) porque son temas muy técnicos, no deja de ser interesante, y tampoco viene mal un poco de ejercicio extra para nuestras neuronas.

    Uno de mis grandes defectos es la impaciencia, de los peores defectos para el que juega al ajedrez. Digo esto a colación de la posición «venenosa» que muestras en el artículo. No me resistí a desobedecer tu sugerencia y consultarla con un módulo (una de mis máquinas). Le dí las blancas a la máquina y yo asumí las negras, coloqué las piezas en el tablero y «le dije» a la máquina que movía ella y… efectivamente hizo un movimiento tranquilo (no lo indico por si algún lector decide hacerlo, que no se vea condicionado). Finalmente me ganó la máquina, ¡como siempre!.

    En cuanto a la otra cuestión planteada, no se sabe si las máquinas llegarán a pensar como nosotros, pero desde luego cada día se acercan más, ya que nuestra forma de pensar no resiste el análisis de científicos de variados campos de la ciencia (psicólogos, neurólogos, ingenieros, programadores informáticos…), y más ahora que la robótica está alcanzando niveles que hace sólo unos años eran inpensables, solo concebibles como «ciencia ficción». Aun así, yo creo que siempre habrá algo, aunque sea muy… «escondido», que marcará la diferencia.

    Por ejemplo eso mismo que tú apuntas: la intuición, ¿como se hace un algoritmo de intuición?. La intuición se define como «la habilidad para conocer, comprender o percibir algo de manera inmediata, sin la intervención de la razón». Dicen los filósofos que la intuición es el alma que nos habla. ¿como metemos todo eso en un algoritmo?. Por eso creo que las máquinas nunca llegarán a pensar como nosotros. Quizás lleguen a conclusiones similares, y nos dé la impresión de que piensan como nosotros, pero desde luego a esa conclusión similar habrán llegado por caminos distintos. ¡Y menos mal! …

  2. Muchas gracias por tus comentarios,Francisco. Siempre son interesantes, pero esta vez has planteado varias cuestiones que merecen una respuesta detenida. Por mi parte, prometo hacerlo lo antes posible. Por supuesto, también puede haber otros puntos de vista, ¡espero que muchos lectores se animen a exponer el suyo!

  3. Esa posición que dices que muchos conocerán, yo no la conozco, por tanto no sé que movió las blancas. Pero como digo en mi comentario anterior, se la puse finalmente a una de mis máquinas, a la más fuerte (la última que adquirí). Le puse un nivel fuerte, un nivel de torneo donde realiza una profundidad de búsqueda de hasta 9 plys. El resultado fué para mí sorprendente, porque yo no lo hubiera hecho. Movió tras 80 seg. el rey a H2, jugada tranquila y en apariencia nada hostil.

    Animado tras esta respuesta, puse esa posición a mis otras dos máquinas. La mediana (en potencia de procesador) hizo lo mismo, pero tardó algo más de tiempo, Y la más débil, la que más me gusta, y no porque sea más débil, sino porque es la «más humana» (¿se quedaría en la estrategia B de Shannon?), la única que me da la sensación de que estoy jugando contra una persona y no contra una poderosa máquina, esa si movió la jugada que yo hubiera movido, capturó la torre negra.

    Esa opción si fué contemplada por las otras dos máquinas. Tras pulsar el botón info de la máquina, la mostró en la pantallita LCD mientras «pensaba».

    En definitiva, estas máquinas que tengo, con programas muy pequeñitos de unos pocos bytes, y gestionados por pequeños micros dedicados, aunque imagino que ya han superado las teorías de Shannon, también imagino que no habrán llegado a los procesos que siguen los módulos actuales para ordenador, donde se habrán ido implementando nuevas funciones para alcanzar una mayor profundidad de análisis en el menor tiempo posible, dando lugar a módulos como el todopoderoso Fritz 15, que gestionado por poderosos procesadores, como cuando lo uso en mi ordenador (Intel core i7), es una bomba que no se puede desactivar, y en tan sólo unos segundos alcanzan profundidades de búsqueda insospechadas…

    En cuanto a esas reflexiones de Shannon que indicas al final del artículo, creo que hoy si es posible que un programa IA aprenda de sus errores. No sé en que punto se encuentra esto aplicado al Ajedrez, pero me consta que hay programas, no de Ajedrez, que si lo hacen.

  4. Gracias de nuevo, Francisco. Ante todo, disculpas por no haber estado muy atento al blog en los últimos días.

    He dudado bastante sobre si comentar a fondo el tema que planteas, ya que mi intención inicial era tratar esa posición «venenosa» en el siguiente artículo. Sin embargo, lo cierto es que no sé muy bien cuando podré tenerlo preparado para publicar, y me parece injusto dejar el tema «colgando» tanto tiempo. Por tanto, te comento:

    La posición corresponde a la partida Karpov-Spassky, novena de la semifinal de Candidatos de 1974. La jugada de Karpov es 25 Rh2!, y no se trata tanto de demostrar que dicha jugada es la mejor en esa posición, sino de dejar claro que es una jugada muy plausible (si la hizo Karpov, mala no era) y que en el 99% de los casos, por no decir el 100%, una estrategia B de Shannon la habría dejado fuera, porque no captura ni amenaza nada.

    Eso es lo que tienen en común los diferentes módulos que has probado con esta posición: todos usan la estrategia A. De otro modo, Rh2 no aparecería ni como jugada preferida ni como alternativa. En cuanto a otras técnicas de programación que apuntas, no sabría decirte si as usan o no, pero, como intentaré demostrar en siguientes entregas, eso es poco relevante.

    Dejo, eso sí, para otra ocasión tu último párrafo, en el que indicas que crees que hay programas (no necesariamente de ajedrez) que aprenden de sus errores. Te dejo una pregunta, de todos modos: ¿Los programas cometen errores?

    De nuevo, muchas gracias por tus comentarios!

    jf

  5. Gracias por tu respuesta. Ya he encontrado esa partida en chessgames, que parece ser muy interesante, y la estudiaré (y también las demás de esa semifinal).

    No sé si la pregunta que me haces tiene «trampa». Puedes referirte a si los programas pueden cometer errores por tenerlos en su código, en su confección, o sí los programas pueden cometer errores aún estando éstos bien confeccionados. En el primer caso, por supuesto que sí. Cuantas veces no hemos visto programas con uno de esos errores, y rápidamente se ha tenido que sacar una nueva versión para corregirlo. De hecho, hablando de micros dedicados, han habido algunos, en cuyos programas había uno de esos errores o bugs. Recuerdo vagamente uno, con un programa de Frans Morsch, llamado Bug H8, en el que si la máquina alcanzaba en algún momento de la partida la casilla H8, después hacía siempre sin «pensar» y de forma instantánea, un determinado movimiento, que no venía a cuento y que además podía abocarle a una derrota. Pero este error podemos decir que más que del programa es del programador. Por tanto este caso voy a descartarlo.

    El segundo caso es más complejo. Primero habría que definir a qué llamamos error cuando hablamos de un programa, de un módulo, de un código, de un algoritmo, de una serie de instrucciones. Podemos entender por error a que el programa se pare, y haya que reiniciarlo. O tambien podemos entender por error a que el programa haga algo imprevisto y no esperado del cometido para el que está hecho. Pero también creo que es posible.

    Pueden ocurrir imprevistos durante la ejecución de alguna de las instrucciones del algoritmo, o sencillamente por imposibilidad de que el código pueda abarcar todas las variantes o posibilidades para lo que está concebido, y en algún momento, si llega a ese punto, se produzca el error (aclaro que estoy hablando desde el punto de vista de un profano, aplicando mi lógica a lo poquito o nada que sé sobre programación). En el caso del Ajedrez, por lo que estamos viendo en tus artículos, todas esas posibilidades se van teniendo en cuenta y se van previniendo, y la ejecución del programa siempre tiene una salida, una posible respuesta, y ésta podrá ser mejor o peor, pero el programa continúa, no se para, ¿acaso podemos llamar a esto error?, esa es la questión.

    Es decir, ¿es un error que el programa no haga lo esperado cuando el algoritmo se encuentra con algo no previsto en sus instrucciones?. Podríamos decir que sí, por no tener otro algoritmo que desvíe la ejecución del código cuando éste se encuentra con ese imprevisto, hacia una consecución determinada, pero ¿podemos decir también en este caso que es un error del programador y no del programa?. Ahí lo dejo, porque entramos en un campo más semántico que informático.

  6. Gracias de nuevo Francisco, y disculpa que haya tardado en contestar.
    Mi pregunta venía al hilo de tu afirmación: «Algunos programas aprenden de sus errores». Eso implica que los programas cometen errores, y por tales, en este contexto, debemos entender la selección de malas jugadas en algún momento. De momento lo dejo aquí; espero tener ocasión de extenderme sobre ello en mi próximo artículo. Saludos cordiales.

DEJA UNA RESPUESTA

¡Por favor, escribe tu comentario!
Por favor ingrese su nombre aquí

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.