Maackesgeist: Un Motor de Ajedrez para el Raumschach
El Primer Oponente de IA Documentado para el Ajedrez Tridimensional
El Raumschach — literalmente “ajedrez espacial” en alemán — fue inventado por Ferdinand Maack de Hamburgo y publicado por primera vez en 1907. Se juega en un tablero de 5×5×5 compuesto por cinco niveles de 5×5 apilados, e introduce dos piezas ausentes del ajedrez ortodoxo: el Alfil restringido a las diagonales de cara, el Unicornio restringido a las diagonales espaciales (triagonales), y una Reina que combina las tres direcciones de deslizamiento del espacio tridimensional. A pesar de más de un siglo de atención teórica — documentada de manera más autorizada por Anthony Dickins (1914–1987) en A Guide to Fairy Chess (1969–71) — ningún oponente informático para el Raumschach había sido, según el conocimiento del presente autor, documentado públicamente antes del motor aquí descrito.
Maackesgeist es el componente de IA de una implementación de Raumschach basada en el navegador. Está escrito íntegramente en JavaScript, se ejecuta sin servidor y es jugable en cuatro niveles de dificultad. Este artículo ofrece una descripción formal del motor: su diseño algorítmico, su función de evaluación, sus novedades respecto al estado del arte en programación de ajedrez, y una evaluación franca de sus debilidades actuales y mejoras potenciales.
La programación de ajedrez ortodoxo tiene una historia documentada que se extiende desde el artículo de Shannon de 1950 hasta la dominancia de los motores de redes neuronales en la década de 2010. Las variantes de ajedrez, sin embargo, han recibido mucha menos atención. Los motores para variantes como Chess960, Crazyhouse y Antiajedrez son soportados por motores de propósito general como Stockfish y Fairy-Stockfish. Para el ajedrez tridimensional específicamente, han aparecido implementaciones del juego comercial Tri-Dimensional Chess (popularizado por Star Trek), pero las reglas de ese juego difieren fundamentalmente del Raumschach.
Para el Raumschach propiamente dicho — con su geometría de 5×5×5, la pieza del Unicornio y las reglas Maack–Dickins — no parece haber existido ningún oponente de IA abierto o documentado antes de Maackesgeist. Han existido versiones jugables en línea del Raumschach, así como un oponente de IA, pero estos oponentes de IA han carecido de documentación más allá de una descripción vaga como minimax con poda alfa-beta. La ausencia de un oponente de IA documentado no es sorprendente: la complejidad combinatoria del tablero 3D es sustancialmente mayor que la del ajedrez ortodoxo, y la literatura teórica se ha centrado en reglas, notación y problemas en lugar de computación.
La afirmación de Maackesgeist como el primer motor de Raumschach completamente documentado debe avanzarse con la debida cautela epistémica. Es posible que hayan existido implementaciones privadas, documentadas e indéditas en contextos académicos, proyectos de aficionados o software propietario. La afirmación que se presenta aquí es más estrecha y más defendible: Maackesgeist es, según el mejor conocimiento del presente autor, el primer oponente de IA públicamente jugable y documentado para el Raumschach según las reglas Maack–Dickins. El código fuente del motor está integrado en un único archivo HTML, completamente inspeccionable y no requiere instalación.
El tablero se representa como un array JavaScript tridimensional board[l][r][f], donde l ∈ {0,1,2,3,4} indexa el nivel (A a E en notación Maack; A = 0 en la base para Blancas), r ∈ {0,1,2,3,4} indexa la fila (1 a 5), y f ∈ {0,1,2,3,4} indexa la columna (a a e). Cada celda no vacía contiene un objeto plano { type, color }. El tablero se clona en cada nodo del árbol de búsqueda mediante una copia profunda completa; esta representación es simple y correcta, aunque conlleva costes de rendimiento significativos en relación con las codificaciones de bitboard (discutidas en §7.6).
El movimiento de piezas tridimensional requiere tres clases de vector de dirección, generalizando las dos clases del ajedrez ortodoxo:
| Nombre | Cantidad | Descripción | Piezas |
|---|---|---|---|
| Ortogonal | 6 | ±1 a lo largo de exactamente un eje | Torre, Reina |
| Diagonal de cara | 12 | ±1 a lo largo de exactamente dos ejes | Alfil, Reina |
| Diagonal espacial | 8 | ±1 a lo largo de los tres ejes | Unicornio, Reina |
| Todas las direcciones | 26 | Unión de las anteriores | Reina, Rey |
La Reina en el Raumschach controla así hasta 26 direcciones de movimiento deslizante — un aumento dramático sobre las 8 direcciones disponibles en el ajedrez ortodoxo, y una fuente principal de la complejidad táctica del juego. El movimiento del Caballo se extiende a tres dimensiones enumerando todos los desplazamientos enteros que son permutaciones de (±2, ±1, 0), produciendo 24 direcciones distintas frente a 8 en el ajedrez ortodoxo.
La generación de movimientos sigue el enfoque pseudolegal estándar. Para cada pieza del bando que mueve, se generan movimientos candidatos sin comprobar si exponen al Rey del bando que mueve a un jaque; estos se filtran luego hasta los movimientos legales. Las piezas deslizantes (Torre, Alfil, Unicornio, Reina) usan un bucle de ray-casting que se extiende en cada dirección hasta alcanzar el borde del tablero o encontrar una pieza. Las piezas de paso único (Rey, Caballo) generan candidatos de un solo paso. Los Peones avanzan en la dirección de fila positiva para Blancas (o negativa para Negras) y también pueden avanzar un nivel por movimiento, con capturas diagonales en las mismas direcciones combinadas.
Los movimientos legales se obtienen aplicando cada movimiento pseudolegal a una copia del tablero y comprobando si el Rey del bando que mueve está entonces en jaque. La detección de jaque realiza un rastreo de rayos inverso: pregunta si alguna pieza adversaria de cada tipo relevante podría atacar la casilla del Rey desde las direcciones apropiadas para ese tipo de pieza. Esto es tanto lógicamente correcto como el enfoque convencional.
Maackesgeist implementa la distinción Maack–Dickins entre jaque de tablero y jaque espacial. Si el Rey está en jaque y no tiene movimientos legales en su nivel actual pero aún puede escapar a un nivel adyacente, la posición es jaque de tablero (anotado ††). Solo si el Rey está en jaque y no tiene ningún movimiento legal en absoluto la posición es jaque espacial — el verdadero jaque mate, que pone fin a la partida (anotado †††). Esta distinción, ausente del ajedrez ortodoxo, está correctamente implementada y anotada en el registro de movimientos.
Maackesgeist utiliza búsqueda minimax alfa-beta con ordenamiento de movimientos por captura primero. La búsqueda está limitada en profundidad; en profundidad cero se llama a la función de evaluación estática. No se emplea búsqueda de quietud, tabla de transposición ni profundización iterativa.
| Nivel | Nombre | Profundidad de Búsqueda | Característica |
|---|---|---|---|
| 0 | Principiante | 0 capas | Selecciona un movimiento legal aleatorio |
| 1 | Fácil | 2 capas | Ve un movimiento adelante por cada bando |
| 2 | Normal | 3 capas | Conciencia táctica rudimentaria |
| 3 | Difícil | 4 capas | El más fuerte disponible; ve combinaciones de 2 movimientos |
El presente autor no conoce ninguna función de evaluación publicada anteriormente para el Raumschach. Maackesgeist establece por tanto el primer punto de referencia para los valores de piezas y la puntuación posicional en este juego. Varias de sus decisiones merecen un comentario específico.
Centralidad en tres dimensiones. La puntuación de centralidad 6 − (|l−2| + |r−2| + |f−2|) es el análogo tridimensional de la centralidad de taxicab usada en las tablas de casillas de piezas del ajedrez ortodoxo. El centro geométrico del tablero de 5×5×5 es la celda Cc3 en notación Maack, que obtiene la centralidad máxima de 6; las ocho celdas de esquina obtienen 0. Ponderar los valores de las piezas con esta medida recompensa la centralidad de manera principiada.
La excepcional bonificación de centralidad del Unicornio. El Unicornio recibe el mismo multiplicador de centralidad (×100) que la Reina — mayor que el de la Torre (×67), el Alfil (×33) y el Caballo (×50). Esto tiene motivación teórica: el movimiento triagonal del Unicornio irradia desde el centro del tablero y su cobertura cae bruscamente cuando se desplaza a una esquina. Un Unicornio en el centro domina 8 largas diagonales espaciales a través del volumen entero; en un centro de cara domina solo 4; en una esquina domina solo 1. Por tanto, recompensar la colocación central del Unicornio es correcto.
Bonificación de nivel del Alfil. Además de la bonificación general de centralidad, el Alfil recibe una recompensa suplementaria por ocupar un nivel central: (2 − |l−2|) × 8. Esto refleja el hecho de que un Alfil en los niveles A o E está efectivamente restringido a deslizamientos dentro de un único plano de 5×5 y sus diagonales de cara hacia los planos adyacentes; un Alfil en el nivel central C tiene acceso a diagonales de cara en todas las direcciones.
Avance del peón en dos dimensiones. La evaluación del ajedrez ortodoxo recompensa a los peones únicamente por el avance de fila. Maackesgeist recompensa adicionalmente el avance en la dimensión de nivel (la × 15), reflejando el hecho de que los peones blancos pueden avanzar una fila o un nivel por movimiento, y que el avance de nivel es estratégicamente tan significativo como el avance de fila. Se otorga una bonificación adicional (+25) a los peones en el nivel central, que disfruta de la mayor conectividad en todas las direcciones.
El motor implementa correctamente los seis tipos de piezas del Raumschach según las reglas Maack–Dickins, incluyendo el Caballo 3D completo de 24 direcciones y la distinción entre las tres familias de piezas deslizantes. Implementaciones anteriores de Raumschach en línea han empleado, en algunos casos, conjuntos de movimientos simplificados o incorrectos. La generación de movimientos de Maackesgeist ha sido verificada contra la fuente teórica.
El motor se ejecuta en un único archivo HTML sin infraestructura de servidor, bibliotecas externas ni instalación. Esto lo convierte en el oponente de Raumschach más accesible jamás producido. La totalidad de la lógica del juego — representación del tablero, generación de movimientos, detección de jaque, búsqueda, evaluación, renderizado y notación — ocupa menos de 300 líneas de JavaScript.
La debilidad algorítmica más significativa es la ausencia de búsqueda de quietud. En los nodos hoja del árbol de búsqueda, la función de evaluación estática se llama sobre posiciones que pueden ser tácticamente inestables: una pieza puede estar colgando, una secuencia de capturas puede estar en curso, o una combinación forzada puede estar a una capa más allá del horizonte. Evaluar tales posiciones con un recuento de material estático produce el efecto horizonte, por el cual el motor juega un movimiento que parece bueno a la profundidad buscada pero se adentra en una secuencia perdedora justo más allá de ella. En el Raumschach este efecto se amplifica: el tablero soporta más amenazas simultáneas debido al mayor número de direcciones de ataque, y las secuencias de captura no resueltas son correspondientemente más peligrosas.
La búsqueda revisita posiciones idénticas alcanzadas por diferentes secuencias de movimientos. Una tabla de transposición (una tabla hash indexada por hashes de Zobrist de posiciones del tablero) permitiría al motor recordar la puntuación de una posición evaluada anteriormente, evitando cómputo redundante y extendiendo efectivamente la profundidad de búsqueda sin coste adicional. Sin ella, el motor realiza significativamente más trabajo del necesario, particularmente en el final donde muchos órdenes de movimientos convergen a la misma posición.
La profundidad máxima de búsqueda es de 4 capas. En el ajedrez ortodoxo, la búsqueda a 4 capas corresponde aproximadamente a la fuerza de un jugador de club principiante. En el Raumschach, el factor de ramificación del árbol de búsqueda es sustancialmente mayor que en el ajedrez ortodoxo: cada posición tiene más movimientos legales en promedio, debido a la mayor movilidad de las piezas deslizantes en tres dimensiones. El efecto práctico es que la búsqueda a 4 capas en el Raumschach cubre muchas menos secuencias de movimientos significativas que la búsqueda a 4 capas en el ajedrez ortodoxo, y las combinaciones tácticas de más de 2 movimientos son en gran medida invisibles para el motor.
El ordenamiento de movimientos consiste únicamente en ordenar por el valor de la pieza capturada (Víctima Más Valiosa, o MVV). No se aplica ningún desempate por Agresor Menos Valioso (LVA), y no se implementan heurísticas de ordenamiento de movimientos tranquilos — movimientos asesinos, heurística de historial. Un ordenamiento deficiente de movimientos reduce la efectividad de la poda alfa-beta. Con un ordenamiento perfecto de movimientos, alfa-beta busca un árbol de tamaño O(bd/2) en lugar de O(bd), donde b es el factor de ramificación y d la profundidad. Sin un buen ordenamiento, este ahorro se reduce sustancialmente.
La función de evaluación captura el balance material y la centralidad, pero es ciega a una amplia gama de características estratégicamente importantes. El motor no tiene incentivo para mantener a su Rey seguro excepto en la medida en que esto lo captura la detección de jaque en las hojas. Las características de estructura de peones (peones doblados, aislados y pasados) no se reconocen. La movilidad de las piezas no se cuenta. Los valores de las piezas son fijos independientemente de la fase del juego: en el final, la actividad del Rey y la promoción de peones se vuelven dominantes, pero el motor aplica los mismos pesos a lo largo de toda la partida.
Clonar el tablero en cada nodo del árbol de búsqueda es costoso. Cada copia profunda del array de objetos de 5×5×5 implica una asignación de memoria significativa y activa el recolector de basura de JavaScript. Una representación de bitboard — en la que las posiciones de cada tipo y color de pieza se codifican como enteros — permitiría al motor hacer y deshacer movimientos en el lugar, reduciendo dramáticamente la sobrecarga. En un tablero de 5×5×5 = 125 celdas, cada conjunto de piezas cabe en dos enteros de 64 bits (ya que 125 < 128 = 2×64), haciendo los bitboards factibles.
Añadir búsqueda de quietud en los nodos hoja eliminaría la clase de errores tácticos más dañinos. Una implementación mínima extendería la búsqueda en las capturas, llamando a evalBoard solo cuando no haya capturas disponibles. Este cambio no requiere ninguna alteración en la función de evaluación y mejoraría la fuerza de juego sustancialmente incluso sin aumentar la profundidad de búsqueda nominal.
El hash de Zobrist asigna un entero aleatorio de 64 bits a cada triple (pieza, color, casilla) y aplica XOR a estos valores para producir un hash compacto del tablero. El hash puede actualizarse incrementalmente en make y unmake. Una tabla hash que mapee posiciones a puntuaciones previamente calculadas — con metadatos de profundidad e indicador — eliminaría el cómputo repetido y permitiría el uso efectivo de la profundización iterativa.
En lugar de buscar a una profundidad fija, la profundización iterativa busca hasta la profundidad 1, luego 2, luego 3, y así sucesivamente, usando los resultados de cada búsqueda más superficial para ordenar los movimientos de la siguiente. Combinada con una tabla de transposición, la profundización iterativa proporciona a la búsqueda en profundidad los beneficios de ordenamiento de movimientos de la búsqueda en amplitud, y permite que el motor sea interrumpido después de cualquier iteración completa, haciéndolo apropiado para el juego con control de tiempo.
Añadir el desempate LVA al ordenamiento MVV (preferir capturar con el agresor menos valioso) mejoraría la eficiencia de poda sin coste alguno. Las heurísticas de movimientos asesinos — almacenar movimientos que causaron cortes beta a una profundidad dada y probarlos primero — mejorarían adicionalmente el ordenamiento para posiciones tranquilas.
Añadir un término para el número de movimientos legales disponibles para cada bando — particularmente para la Reina y el Unicornio — daría al motor una señal posicional significativa en posiciones donde el material es aproximadamente igual. La evaluación de movilidad es estándar en los motores de ajedrez ortodoxo y es especialmente relevante en un juego tridimensional donde el alcance de las piezas varía dramáticamente con la posición.
Una reescritura completa de la representación del tablero usando bitboards, con actualizaciones incrementales del hash de Zobrist y make/unmake en el lugar, sería una inversión de ingeniería significativa pero desbloquearía una mejora de un orden de magnitud en los nodos explorados por segundo. Esto permitiría al motor buscar hasta la profundidad 6 o 7 dentro del mismo presupuesto de tiempo que la búsqueda actual de profundidad 4 — un cambio cualitativo en la fuerza de juego.
Maackesgeist constituye, según el mejor conocimiento actual, el primer oponente de IA documentado para el Raumschach. Su algoritmo es una búsqueda minimax alfa-beta clásica con ordenamiento de movimientos por captura primero y una función de evaluación de material más centralidad. La función de evaluación introduce varios refinamientos específicos del Raumschach — la bonificación de centralidad del Unicornio, la bonificación de nivel del Alfil y la recompensa de avance bidimiensional del peón — que tienen motivación teórica y no tienen análogos en trabajos anteriores.
Las debilidades del motor son las típicas de una implementación de primera generación sin dependencias: el efecto horizonte por la ausencia de búsqueda de quietud, la profundidad efectiva superficial debida al alto factor de ramificación 3D, y el coste de rendimiento de la representación del tablero basada en clonado. Existe una hoja de ruta clara para la mejora, comenzando con la búsqueda de quietud y una tabla de transposición, que avanzarían la fuerza del motor sustancialmente sin requerir una reescritura completa.
Como primer oponente funcional para un juego descrito en la literatura teórica durante más de un siglo, Maackesgeist es un artefacto históricamente notable en el estudio del ajedrez tridimensional. Su existencia puede estimular un mayor desarrollo — de motores más fuertes, de teoría de aperturas y de análisis de finales — en un ámbito que durante demasiado tiempo ha permanecido sin un adversario mecánico.