# Corpus de investigación Eternity II (eternity2.dev) — texto completo > Todas las páginas de investigación traducidas al español, concatenadas. Espejo legible por máquina del wiki en https://eternity2.dev/es/research/. El mapa con los enlaces está en https://eternity2.dev/es/llms.txt. --- # Investigación > El wiki de investigación abierto de la comunidad de Eternity II: por qué el puzzle es tan difícil, todo lo que necesitas para construir un solucionador y los cuadernos abiertos de los investigadores: récords, métodos, experimentos y callejones sin salida, todo con fuentes y reproducible. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/ - Actualizado: 2026-07-21 --- > **Note** > > Este wiki está en construcción: el sitio es joven y va absorbiendo poco a poco años de investigación de la comunidad. Si falta algo que conoces, la lista de distribución de más abajo es el lugar indicado para señalarlo. Este wiki es para quienes quieren resolverlo de verdad. Todos los que se han enfrentado a Eternity II tomaron uno de nueve caminos, desde modelar por qué se resiste, pasando por podar la búsqueda y construir tableros pieza a pieza, hasta lanzar hardware contra el muro. Elige el camino que te interese; cada uno abre hacia todo lo que el wiki sabe al respecto, tomado tanto de la teoría como de las guías para construir solucionadores y del cuaderno de laboratorio. ## ¿Nuevo por aquí? Empieza por estas Cinco páginas, en orden, te llevan de no haber oído hablar nunca del puzzle a elegir un objetivo propio: 1. **[Por qué se resiste](/es/research/why/)**: los muros estructurales que hacen difícil a Eternity II, para que sepas a qué te enfrentas. 2. **[El estado del arte](/es/research/records/)**: quién ostenta el mejor tablero y a qué distancia está de una solución completa. 3. **[Ejecutar el código](/es/research/build/toolkit/)**: el kit de inicio que ya puntúa, genera y evalúa, para que solo escribas el solucionador. 4. **[Elegir un objetivo](/es/research/open-problems/)**: la frontera abierta, una fila por cada ángulo que todavía merece un intento, etiquetada por su accesibilidad. 5. **[Contribuir](/es/research/contribute/)**: cómo redactar lo que encuentres, acreditado a tu nombre, junto al resto. > **[Interactive: RootsDiagram]** Rendered on the canonical page (link above); not shown in this markdown export. ¿Prefieres explorar por modo de lectura en lugar de por método? El wiki se divide en cuatro:
- [Por qué es difícil](/es/research/why/) — El diseño que se ajustó para resistir la astucia, y los muros estructurales (rigidez, entropía, patrones prohibidos) que explican la brecha entre el mejor tablero conocido y una solución completa. - [Construir un solucionador](/es/research/build/) — Datos de validación, la literatura ordenada por utilidad, los métodos detrás de los récords, los callejones sin salida y cómo ejecutar el código tú mismo. - [El laboratorio](/es/research/lab/) — El cuaderno abierto: hallazgos estructurales y los experimentos de búsqueda con nombre propio, construidos para atacar el puzzle, cada uno acreditado a su autor y reproducible desde el código fuente. - [Historia y comunidad](/es/research/community/) — El récord y las personas que lo forjaron: dos décadas contadas como una historia, los propios tableros récord, los poseedores de récords y los teóricos, y los artículos.
O explora por método en su lugar: los nueve caminos de la columna izquierda son, cada uno, un núcleo que reúne todos los artículos sobre ese tema. ## El estante de referencia Las consultas y la frontera a las que recurrirás una y otra vez mientras lees o construyes:
- [Referencia](/es/research/reference/) — Los recuentos exactos (piezas, colores, aristas) para contrastar tu propio código de emparejamiento de aristas y de restricciones. - [Glosario](/es/research/glossary/) — Cada término en el que se apoya el wiki, definido una sola vez: la jerga de la comunidad, las palabras cargadas de la informática y la notación en la que se escriben los tableros. - [Problemas abiertos](/es/research/open-problems/) — La frontera abierta en un solo tablero: cada ángulo que todavía merece un intento, el muro que ataca, y dónde se detuvo el último intento.
La historia del puzzle, sus récords y las personas que los persiguieron ahora conviven juntas en [Historia y comunidad](/es/research/community/). ## Infraestructura de la comunidad La conversación de investigación ocurre en unos pocos lugares de larga trayectoria:
- [Visor de tableros e2.bucas.name](https://e2.bucas.name) — El visor GPL de Jef Bucas; su formato de URL es la lingua franca de la comunidad (y este sitio lo habla de forma nativa). - [Discord de Eternity II](https://discord.gg/Ny5xs3q8w) — Un servidor activo donde los aficionados comparten sus ejecuciones, récords y código, en tiempo real. - [groups.io/g/eternity2](https://groups.io/g/eternity2) — La lista de distribución activa: récords, técnicas y más de 15 años de folclore acumulado.
## Páginas de esta sección - [Construir un solucionador](https://eternity2.dev/es/research/build/) — El rincón práctico del wiki: datos de validación para comprobar tu código, la literatura ordenada por utilidad, la cronología del récord y los métodos que hay detrás, los callejones sin salida, y cómo ejecutar el código tú mismo. - [Historia y comunidad](https://eternity2.dev/es/research/community/) — El récord y las personas que hay detrás: dos décadas de Eternity II contadas como una historia, los propios tableros récord, los poseedores del récord y los teóricos, la literatura académica, y cómo añadir tu propio trabajo al wiki. - [Contribuye con tus investigaciones](https://eternity2.dev/es/research/contribute/) — Este wiki es el hogar de investigación de la comunidad, y hay sitio en él para tu trabajo. Tres formas de publicarlo, desde un mensaje en la lista de correo hasta una pull request, más el pequeño conjunto de reglas de la casa que mantiene cada página digna de confianza. - [Historia: los grandes hitos](https://eternity2.dev/es/research/history/) — La historia de Eternity II de un vistazo, desde la lista de correo fundada en 2000 hasta el récord de 470 que aún se mantiene. Una cronología recorrible de los momentos decisivos, cada uno con enlace a la historia completa en dos partes y al mensaje donde ocurrió. - [El laboratorio](https://eternity2.dev/es/research/lab/) — El cuaderno abierto del wiki: hallazgos estructurales y experimentos de búsqueda con nombre propio, cada uno atribuido al investigador que lo llevó a cabo y reproducible desde el código fuente. Un rincón de la investigación más amplia de la comunidad. - [Problemas abiertos](https://eternity2.dev/es/research/open-problems/) — La frontera abierta de Eternity II reunida en un solo lugar: cada ángulo que todavía merece un intento, el muro que ataca, qué se ha probado y dónde se detuvo, y si es un objetivo accesible para principiantes o uno difícil y bien cartografiado. - [Artículos](https://eternity2.dev/es/research/papers/) — La literatura académica sobre Eternity II y los puzzles de emparejamiento de aristas, extraída de las notas de investigación del proyecto y de la lista de lecturas de la comunidad, y ordenada según lo útil que resulta realmente cada artículo si tu objetivo es escribir un solucionador. - [Quién es quién en la investigación de E2](https://eternity2.dev/es/research/people/) — Dos décadas de investigación sobre Eternity II fueron obra de personas concretas, en una lista de correo. Esta página es la galería: quiénes son, qué aportó cada una y dónde leerlo en sus propias palabras. Un agradecimiento tanto como un índice. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Números de referencia](https://eternity2.dev/es/research/reference/) — Recuentos exactos de cuántas maneras válidas hay de rellenar un bloque pequeño en una posición dada del tablero oficial de Eternity II, bajo reglas cada vez más restrictivas: números fiables para contrastar el código de emparejamiento de aristas y de restricciones de tu solucionador. - [Por qué es difícil](https://eternity2.dev/es/research/why/) — Eternity II no es difícil por accidente. Fue diseñado para resistir el ingenio, y los muros estructurales medibles (rigidez, entropía, patrones prohibidos) explican por qué ninguna búsqueda, por ingeniosa que sea, ha llegado al final. --- # Construir un solucionador > El rincón práctico del wiki: datos de validación para comprobar tu código, la literatura ordenada por utilidad, la cronología del récord y los métodos que hay detrás, los callejones sin salida, y cómo ejecutar el código tú mismo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/ - Actualizado: 2026-07-21 --- El rincón práctico. Datos de validación para contrastar tu código, la literatura ordenada por utilidad, la cronología del récord y los métodos que hay detrás, además de los callejones sin salida para que no pierdas un mes en un enfoque que, demostrablemente, no puede funcionar. ## Por dónde empezar 1. **[La caja de herramientas del constructor](/es/research/build/toolkit/)** es el único paso que te lleva a código que se ejecuta: un espacio de trabajo Rust listo para usar que ya puntúa, genera, convierte y mide, con un bucle resolver→barrer→comparar, para que solo escribas el solucionador. Configúralo en tu agente de código en una línea, o genera tableros en el navegador. Empieza aquí. 2. **[Un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/)** es el panorama en una página: cada familia de ataque a Eternity II, hasta dónde llegó cada una, y dónde se topa con un muro. El lugar para orientarse antes de lanzarse. 3. **[Las técnicas](/es/research/build/techniques/)** son la estantería de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio, cada uno con lo que cuesta y lo que realmente aportó en este puzzle. 4. **[Catálogo de solucionadores](/es/research/build/solvers/)** muestra cómo los motores del récord ensamblan esas piezas, desde el 467 de Verhaard hasta el 470 de Blackwood. 5. **[Números de referencia](/es/research/reference/)** y los **[hechos conocidos](/es/research/build/known-facts/)** te dan los recuentos exactos para comprobar tu propio código de emparejamiento de aristas y de restricciones. 6. **[Callejones sin salida](/es/research/build/dead-ends/)** enumera los enfoques que sonaban bien y que, demostrablemente, no mueven la puntuación, para que puedas saltártelos. 7. **[Ejecútalo tú mismo](/es/research/build/run-it-yourself/)** explica cómo compilar y ejecutar el código propio de este proyecto. La [cronología del récord](/es/research/records/) y la [historia](/es/research/community/hunt/) en dos partes trazan cómo la comunidad ascendió desde los primeros tableros parciales hasta el 470 de hoy. ## Páginas de esta sección - [La caja de herramientas del constructor](https://eternity2.dev/es/research/build/toolkit/) — Un kit de inicio en Rust listo para usar para construir tu propio solucionador de Eternity II: puntuar, generar tableros con equilibrio de colores real, generar lotes con pistas fijadas, convertir todos los formatos, medir el rendimiento y un bucle resolver→barrer→comparar, donde solo escribes el solucionador. Además, una configuración de una línea para agentes de código y un generador de tableros directamente en el navegador. - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Los formatos de tablero y de puzzle, puestos por escrito](https://eternity2.dev/es/research/build/formats/) — Todos los formatos en los que un tablero o un puzzle de Eternity II circula en este sitio y en la comunidad: la cadena de letras board_edges y la lista de pistas hints, e2pieces.txt, el CSV de puzzle, el JSON Puzzle del sitio, y la URL de visor, con las reglas exactas a nivel de byte (cómo se codifica el borde gris en cada uno) y, sobre todo, qué puede y qué no puede recuperar cada formato. - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - [La caja de herramientas de la comunidad, 2007-2026](https://eternity2.dev/es/research/build/tooling/) — Diecinueve años de software comunitario para Eternity II (interfaces de colocación manual, editores, solucionadores públicos, generadores y visualizadores), más la capa más discreta que los hizo interoperar: e2pieces.txt, las sumas de comprobación CRC-16 y el formato tablero-en-una-URL que se convirtió en la lingua franca. Un censo de referencia, con cada herramienta rastreada hasta el mensaje que la anunció. - [Los cuatro puzzles-pista](https://eternity2.dev/es/research/build/clue-puzzles/) — Tomy vendió cuatro pequeños puzzles complementarios de Eternity II: resuelve uno, envía la solución y el sitio oficial revelaba la posición de una pieza en el tablero principal. Qué era cada puzzle, el verificador en línea defectuoso, el mercado gris de eBay, por qué los puzzles 5 y 6 nunca llegaron, y la segunda vida de los puzzles-pista como casos de prueba para la teoría de complejos y como juegos de piezas donantes. - [Las variantes y las afirmaciones que habitan en ellas](https://eternity2.dev/es/research/build/variants/) — Todos los «Eternity II» que no son el puzzle real: la variante Marathon de TopCoder y el 468 sin resolver de Takahashi, el 480/480 sin marco de McGavin, los tableros de juegos mezclados, el desafío sin pieza inicial y la cuarentena de afirmaciones, desde la advertencia de 2007 sobre los juegos fantasma hasta la ética comunitaria de verificación de conocimiento cero. Termina con una lista de comprobación para enunciar una puntuación correctamente. - [Cómo buscan los solucionadores récord](https://eternity2.dev/es/research/build/solvers/) — Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. - [Reducir la búsqueda](https://eternity2.dev/es/research/build/reduce/) — Todo lo que descarta estados sin esperanza antes de que la búsqueda pierda tiempo en ellos: propagación hasta el punto fijo, el filtro de emparejamiento all-different, no-goods aprendidos y el invariante de deslizamiento de bordes. - [Backtracking](https://eternity2.dev/es/research/build/backtracking/) — La búsqueda en profundidad tomada en serio. El orden en que un solucionador visita las celdas es su única elección libre y hace variar el tamaño del árbol en órdenes de magnitud; los reinicios convierten un tiempo de ejecución de cola pesada en un portafolio. Esta es la familia detrás de cada backtracker récord. - [Ir más rápido](https://eternity2.dev/es/research/build/faster/) — Rendimiento en bruto: el oficio por debajo del algoritmo (tablas de consulta, estructuras dimensionadas para la caché, código generado) y la distribución del trabajo entre muchas máquinas. Es lo que decide si un nodo cuesta 26 ciclos o 2600, y es la demostración más clara de que la velocidad por sí sola no mueve el muro. - [Construir tableros desde cero](https://eternity2.dev/es/research/build/construct/) — Construir un tablero de alta puntuación a partir de una cuadrícula vacía en lugar de excavar con backtracking: la búsqueda en haz mantiene vivos los mejores tableros parciales y los hace crecer celda a celda. El caballo de batalla de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la amplitud por sí sola se atasca en las profundidades del interior. - [Aprender de los tableros fuertes](https://eternity2.dev/es/research/build/learning/) — La mayoría de los ataques a Eternity II buscan partiendo de cero. Una familia distinta hace lo contrario: explora el corpus de tableros que la gente ya ha encontrado en busca de estructura, y luego reinyecta esa estructura en la búsqueda. Priors de posición, ordenación aprendida de jugadas, minería de antipatrones, decodificación de récords y el modo de fallo en el que una señal aprendida se derrumba. - [Búsqueda local](https://eternity2.dev/es/research/build/local-search/) — Parte de un tablero completo pero imperfecto y mejóralo mediante movimientos: destrucción-reparación, recocido y templado, recombinación evolutiva. Los pulidores más fiables del sitio, y las demostraciones más nítidas del muro de rigidez, donde cada uno de ellos se detiene a la misma altura. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. - [Métodos exactos](https://eternity2.dev/es/research/build/exact/) — Solucionadores capaces de demostrar: codificaciones SAT y CSP, programación entera y sus relajaciones, cobertura exacta, encuentro en el medio y mapas de proyección iterados. Los métodos completos se atascan en el tablero completo, pero sus veredictos se ganan su lugar como pruebas de imposibilidad en subtableros. - [Análisis](https://eternity2.dev/es/research/build/analysis/) — Estos métodos no intentan resolver el puzzle: lo miden, y así es como la comunidad sabe dónde están los muros. Los argumentos de paridad aportan pruebas de imposibilidad en una sola pasada; el conteo de soluciones fija cuántas soluciones completas existen con un margen de un factor dos, sin que nadie haya visto ninguna. - [GPU y hardware](https://eternity2.dev/es/research/build/hardware/) — Lanzar silicio contra el muro: portes a GPU, pipelines FPGA, barridos distribuidos y la eterna propuesta cuántica. Este es el balance de lo que cada uno aportó realmente, y por qué el muro que encuentran es la memoria y la estructura, no la aritmética. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [El conjunto de datos](https://eternity2.dev/es/research/build/dataset/) — Un conjunto de datos público bajo licencia CC0 para Eternity II, en dos partes: catorce instancias de referencia para resolver, y un corpus de 7658 tableros fuertes distintos de los que aprender. Cada puntuación se recalcula a partir del propio tablero, y se verifica que el corpus sea realmente variado, en lugar de mil copias de un mismo tablero. - [Ejecútalo tú mismo](https://eternity2.dev/es/research/build/run-it-yourself/) — Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha, recompilar el motor WebAssembly y reproducir las cifras. --- # Análisis > Estos métodos no intentan resolver el puzzle: lo miden, y así es como la comunidad sabe dónde están los muros. Los argumentos de paridad aportan pruebas de imposibilidad en una sola pasada; el conteo de soluciones fija cuántas soluciones completas existen con un margen de un factor dos, sin que nadie haya visto ninguna. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/analysis/ - Actualizado: 2026-07-13 --- Estos métodos no intentan resolver el puzzle: lo miden, y así es como la comunidad sabe dónde están los muros. Los argumentos de paridad aportan pruebas de imposibilidad en una sola pasada; el conteo de soluciones fija cuántas soluciones completas existen con un margen de un factor dos, sin que nadie haya visto ninguna. Las páginas siguientes proceden técnica por técnica: qué es cada una en una línea, qué alcanzó realmente sobre el tablero 16×16 real, dónde se detiene, y los laboratorios y las mediciones que la respaldan. Para abarcar todo el territorio de una vez, empieza por [un mapa de todas las aproximaciones conocidas](/es/research/build/approaches-map/). ## Páginas de esta sección - [Argumentos de paridad](https://eternity2.dev/es/research/build/analysis/parity-arguments/) — Cuente cualquier cosa en un tablero de emparejamiento de aristas dos veces, una desde cada lado, y los totales deben coincidir, entregando pruebas de imposibilidad al precio de una sola pasada. La historia del 479 muestra tanto su poder como su trampa: un argumento de paridad limpio, cierto para todo movimiento interior, derrotado por las sesenta aristas de borde que nadie puntúa. - [Contar soluciones: medir lo que no se puede encontrar](https://eternity2.dev/es/research/build/analysis/solution-counting/) — Nadie ha visto jamás una solución completa de Eternity II y, sin embargo, la comunidad sabe, con un margen de un factor de dos, cuántas existen. Esta página cuenta la historia y el oficio de ese número: censos exactos en tableros pequeños, la fórmula de esperanza y su convergencia sobre 14 702 a lo largo de veinte años, y las estimaciones por búsqueda podada en las que solo se confió cuando cuatro ejecuciones independientes coincidieron. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # Argumentos de paridad > Cuente cualquier cosa en un tablero de emparejamiento de aristas dos veces, una desde cada lado, y los totales deben coincidir, entregando pruebas de imposibilidad al precio de una sola pasada. La historia del 479 muestra tanto su poder como su trampa: un argumento de paridad limpio, cierto para todo movimiento interior, derrotado por las sesenta aristas de borde que nadie puntúa. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/analysis/parity-arguments/ - Actualizado: 2026-07-02 - Temas: structure, search-space - Fuente: El argumento de paridad de kubzpa según el cual una puntuación de 479 es imposible (agosto de 2007) — https://groups.io/g/eternity2/message/1640 - Fuente: La construcción del 478 de psykowally: rotar una pieza interior con aristas opuestas iguales (msg 1642) — https://groups.io/g/eternity2/message/1642 - Fuente: La refutación de Verhaard: 479 mediante una pieza de borde volteada (enero de 2009) — https://groups.io/g/eternity2/message/6317 - Fuente: angwin_uk y mjqxxxx sobre el equilibrio de tipos de arista de borde, 12 por lado (agosto de 2007) — https://groups.io/g/eternity2/message/2073 - Fuente: El megahilo de paridad de 2011: tablero de ajedrez y conjuntos de piezas equilibrados en rotación — https://groups.io/g/eternity2/message/8898 - Fuente: El resultado negativo de John Gilbert: los conjuntos equilibrados bloquean a los backtrackers más rápido (msg 8913) — https://groups.io/g/eternity2/message/8913 - Fuente: El conjunto casi equilibrado de Nick a lápiz y papel, y la verificación de la suma global de Jamison (msgs 8977/8978) — https://groups.io/g/eternity2/message/8977 --- Un argumento de paridad es contabilidad por partida doble aplicada a un tablero de juego. Cada arista interior al puzzle tiene dos lados, así que cualquier cosa contada sobre todo el tablero (ocurrencias de color, aristas emparejadas, sumas de orientaciones) queda contada dos veces, una desde cada lado, y los dos libros de cuentas deben coincidir. Un estado donde discrepan no es meramente poco prometedor: es imposible, y no hace falta ninguna búsqueda para probarlo. En un puzzle donde [ningún movimiento está jamás forzado](/es/research/why/no-forced-moves/) y la anticipación cuesta cara, un invariante que solo cuesta una pasada sobre el tablero y nunca miente merece que se lo tome en serio, siempre que se recuerde en qué dirección apunta. ## La historia del 479, en tres actos El mejor relato de paridad de la comunidad empieza dos semanas después del lanzamiento. En agosto de 2007, kubzpa sostuvo que una colocación con *exactamente* 479 aristas emparejadas, una sola discordancia, no puede existir ([msg 1640](https://groups.io/g/eternity2/message/1640)). La intuición es un basculamiento de paridad: perturbe cualquier pieza y las aristas que toca cambian de estado juntas, de modo que las discordancias deberían venir en pares. psykowally aportó de inmediato el complemento constructivo para el 478: tome un tablero resuelto y rote 180° una pieza interior cuyas aristas opuestas lleven colores iguales: exactamente dos aristas se rompen ([msg 1642](https://groups.io/g/eternity2/message/1642)). El argumento es correcto para todo movimiento interior. Falla en el marco. En enero de 2009, Louis Verhaard señaló la fuga: las 60 aristas grises orientadas hacia el exterior *no se puntúan*, de modo que una pieza de borde cuyos dos lados orientados hacia el anillo comparten un color puede voltearse de punta a punta, rompiendo exactamente una arista puntuada (la arista de costura tras ella) mientras que el cambio en el lado gris no cuesta nada ([msg 6317](https://groups.io/g/eternity2/message/6317)). Una discordancia, puntuación 479, paridad derrotada por las aristas que la convención de puntuación ignora. Este proyecto verificó la afirmación contra el conjunto de piezas oficial: 14 piezas de borde califican (calculado), de modo que toda solución completa implica un 479. Esa es la versión de la historia que ahora recogen [los hechos establecidos](/es/research/build/known-facts/). Verhaard añadió una coda burocrática: el formulario de inscripción al premio registraba los números de pieza pero no las rotaciones, de modo que el corrector de Tomy habría leído un tablero así como un 480. La lección se generaliza. Un argumento de paridad solo es tan fuerte como las condiciones de frontera que contempla, y las reglas de puntuación de Eternity II perforan la frontera en sesenta lugares. ## Voltéela usted mismo Los tres actos caben en un tablero pequeño. Debajo hay un 8×8 enmarcado genuinamente resuelto, generado por el motor: cada arista puntuada emparejada, y un ribete gris exterior que la puntuación ignora, exactamente como las 60 aristas grises del puzzle real (32 a este tamaño). Cada afirmación del relato anterior es un solo clic aquí. > **[Figure]** Interactivo: el argumento de paridad — interactive: ParityFlipLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso 1. **Parta del resuelto.** Las 112 aristas puntuadas coinciden, el sustituto de 480/480 en este tablero. La banda gris es el ribete que la convención de puntuación nunca lee. 2. **Acto uno: haga clic en cualquier pieza interior sin marcar.** Un giro de 180° intercambia juntas las aristas arriba/abajo y juntas las aristas izquierda/derecha, de modo que las aristas puntuadas se rompen en pares por eje: 0, 2 o 4 a la vez, nunca un conteo impar. Pruebe cuantas quiera; ningún clic interior producirá jamás exactamente una discordancia. Ese es el argumento de kubzpa, y para los movimientos interiores es inatacable. 3. **Acto dos: haga clic en una pieza interior con anillo celeste.** Un par opuesto igual, el otro no: exactamente dos aristas puntuadas se rompen, y la insignia marca un tablero de clase 478, el complemento constructivo de psykowally. 4. **Acto tres: haga clic en una pieza de borde con anillo esmeralda.** Sus dos lados orientados hacia el anillo comparten un color, de modo que el volteo de 180° deja emparejadas ambas aristas laterales. Solo se rompe la arista de costura tras ella (*una* arista puntuada) mientras que el cambio hacia el exterior se estaciona en el ribete gris (destellado en ámbar), donde ningún corrector mira jamás. Una discordancia. 479. La refutación de Verhaard, en un clic. 5. **Audite la frontera.** El panel del contador le indica cuántas piezas de este sorteo califican para cada movimiento; en el conjunto oficial, 14 piezas de borde califican (calculado), de modo que toda solución completa implica un 479. La prueba era correcta en todas partes donde la puntuación miraba; la fuga son precisamente las aristas que ella eximió. ## Lo que cuesta Una comprobación de paridad o equilibrio es una sola pasada sobre las aristas puntuadas: $$ O(\text{edges}) \;=\; O(480) \ \text{on the full board}, \qquad O(56) \ \text{for NS-1's seam}, $$ con una constante tan pequeña que es de hecho gratuita: 480 lecturas de aristas tardan microsegundos, frente a pasos de búsqueda que se cuentan por miles de millones. Esa asimetría de precio es lo que hace que tales comprobaciones se compongan con todo: NS-1, tras el cierre del borde, rechaza el 10-28 % de los callejones sin salida profundos por 56 lecturas, la poda más barata que este proyecto conoce. Pero la asimetría de *información* corre en sentido contrario, y nunca se ablanda: un invariante violado es una prueba de imposibilidad, uno satisfecho no prueba absolutamente nada. Una pasada sobre las aristas compra un certificado que solo dice no. Vale exactamente su precio, siempre que nadie lo confunda con una guía. ## Sumas de color y equilibrio de multiconjuntos La segunda familia de argumentos de conteo cuenta colores en lugar de discordancias. Ya en agosto de 2007, angwin_uk observó que el borde se construye equilibrado: cinco tipos de arista de borde, doce de cada uno a cada lado de la arista gris de cada pieza de borde ([msg 2073](https://groups.io/g/eternity2/message/2073)). mjqxxxx afinó el punto: las piezas de borde ocupan una orientación fija, de modo que cada tipo debe repartirse *por igual* en aristas orientadas a la izquierda y a la derecha, una condición estrictamente más fuerte que meros conteos pares ([msg 2098](https://groups.io/g/eternity2/message/2098)). Siga ese razonamiento hacia adentro y llegará a la costura. En toda solución completa, el multiconjunto de colores que el anillo de borde presenta al interior debe igualar al multiconjunto que el interior le presenta de vuelta: cada color entregado es devuelto. Esa es la condición NS-1 de Hopfer, formalizada en 2022 y tratada en detalle en [la página del equilibrio de borde](/es/research/why/border-balance/): una condición necesaria genuina, barata de comprobar, y ciega a todo lo que ocurre de interior a interior. La misma matemática, dos usos. En 2007 el equilibrio servía para [estimar cuántas soluciones de borde existen](/es/research/build/analysis/solution-counting/); en 2022 se lo dio la vuelta hasta convertirlo en un certificado de poda. ## La expedición de 2011: el equilibrio es abundante y no compra nada Una vez terminado el concurso, la lista pasó el verano de 2011 llevando la paridad tan lejos como podía llegar. Juraj Pivovarov planteó el problema del *conjunto orientado*: dividir las 256 piezas en dos montones de tablero de ajedrez A y B de modo que los conteos de aristas direccionales de cada color se equilibren, porque conocer las orientaciones o la asignación de montones de una solución haría fácil el resto ([msg 8898](https://groups.io/g/eternity2/message/8898)). Peter McGavin redujo la condición a sumas por color, izquierda igual a derecha y arriba igual a abajo ([msg 8906](https://groups.io/g/eternity2/message/8906)). Juraj contó entonces los conjuntos de tablero de ajedrez equilibrados en rotación que califican: su primera estimación de aproximadamente $4.5 \times 10^{485}$ ([msg 8929](https://groups.io/g/eternity2/message/8929)) arrancó un «algo debe estar mal» a Michael Field ([msg 8930](https://groups.io/g/eternity2/message/8930)), y el conteo corregido se estabilizó en torno a $3 \times 10^{147}$ ([msg 8931](https://groups.io/g/eternity2/message/8931)). Todo el tiempo, planteó la búsqueda de aunque fuera uno solo como una instancia difícil de PARTITION. Dos resultados pusieron fin a la expedición, ambos dignos de conservar. John Gilbert hizo el experimento: los conjuntos de tablero de ajedrez equilibrados pueden encontrarse uno a uno, pero darle el equilibrio a un backtracker como restricción hace que se bloquee *más rápido*: cada colocación recurre ahora a la mitad de las piezas candidatas, y la restricción cuesta más de lo que poda ([msg 8913](https://groups.io/g/eternity2/message/8913)). Y Nick, trabajando a lápiz y papel mientras se aburría en un tren ([msg 8960](https://groups.io/g/eternity2/message/8960)), llevó una asignación completa de las 256 piezas (tablero de ajedrez más rotación) hasta un único basculamiento de arista del equilibrio ([msg 8977](https://groups.io/g/eternity2/message/8977)); Jason Jamison verificó las sumas globales bajo la codificación de Nick (todos los arribas iguales a todos los abajos en 2809, todas las izquierdas iguales a todas las derechas en 2881) e informó de que el conjunto casi equilibrado seguía bloqueando su backtracker a unas 19 piezas de una esquina ([msg 8978](https://groups.io/g/eternity2/message/8978)). El equilibrio es real, abundante, y no le compra nada a la búsqueda. ## Lo que la paridad le rinde al autor de un solucionador Tres cosas, ninguna de ellas una solución. **Condiciones necesarias baratas.** Una comprobación de paridad o equilibrio cuesta una pasada y se compone con cualquier cosa: un backtracker, una [búsqueda local](/es/research/build/local-search/local-search-alns/), un control de cordura sobre el tablero que otro afirma haber logrado. Las cifras de NS-1 de arriba dan la tarifa vigente. **Asimetría del certificado.** Todo argumento de esta página apunta en un solo sentido: un invariante violado dice *definitivamente roto*, uno satisfecho nunca dice *definitivamente bien*. Intercambie dos piezas de borde y NS-1 se queda en cero; equilibre a la perfección un conjunto de piezas y el backtracker se bloquea de todos modos. La paridad poda; no guía. **Un reflejo de condiciones de frontera.** La prueba del 479 era correcta en todas partes donde el probador miraba, y errónea porque las reglas de puntuación creaban sesenta aristas que él no tenía que mirar. Antes de confiar en cualquier argumento de conteo sobre este puzzle, incluidos los del propio proyecto, audite qué están eximiendo en silencio el marco, la convención de puntuación y el gris no puntuado. En Eternity II, las excepciones viven en el borde, y el borde es donde los argumentos van a morir. ## Relacionado - [El equilibrio del borde](https://eternity2.dev/es/research/why/border-balance/) — Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. --- # Contar soluciones: medir lo que no se puede encontrar > Nadie ha visto jamás una solución completa de Eternity II y, sin embargo, la comunidad sabe, con un margen de un factor de dos, cuántas existen. Esta página cuenta la historia y el oficio de ese número: censos exactos en tableros pequeños, la fórmula de esperanza y su convergencia sobre 14 702 a lo largo de veinte años, y las estimaciones por búsqueda podada en las que solo se confió cuando cuatro ejecuciones independientes coincidieron. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/analysis/solution-counting/ - Actualizado: 2026-07-02 - Temas: structure - Fuente: La estimación de Brendan Owen el día del lanzamiento: 5 930 con la pista, ~4,65 M sin ella, reconciliando los «aproximadamente 5 millones» que Monckton había dado a Dave Clark (msg 987, 2007-07) — https://groups.io/g/eternity2/message/987 - Fuente: El producto cerrado de la esperanza del número de soluciones publicado en la lista (msg 3385, 2007-11) — https://groups.io/g/eternity2/message/3385 - Fuente: El artículo de kubzpa «E2 has 15 millions of solutions» (msg 3497, 2007-12; v2 tras revisión por pares, msg 3583) — https://groups.io/g/eternity2/message/3497 - Fuente: Las cuatro búsquedas de borde podadas e independientes de Owen convergen sobre ≈ 4,05×10³⁷ (msg 2696, 2007-09; primera cifra msg 1225) — https://groups.io/g/eternity2/message/2696 - Fuente: McGavin: 1,1527×10⁷ soluciones sin la pieza de inicio frente a 14 702 con ella, y nodos por solución sin cambios (msg 8924, 2011) — https://groups.io/g/eternity2/message/8924 - Fuente: El enunciado canónico de McGavin: 14 702 con la pieza de inicio, 4×10⁻⁸ con las cinco pistas (msg 11193, 2024) — https://groups.io/g/eternity2/message/11193 - Fuente: La pista n.º 3 contada exactamente: 2 195 647 488 soluciones (msg 8168, 2010) — https://groups.io/g/eternity2/message/8168 - Fuente: Los dos benchmarks 9×9 agotados: 2 y 3 soluciones frente a las 3,2 predichas (msg 8793, 2011; correcciones 8801–8803) — https://groups.io/g/eternity2/message/8793 --- Nadie ha exhibido jamás una solución completa de Eternity II. La comunidad, sin embargo, se pone de acuerdo sobre cuántas existen, con un margen de un factor de dos según lo que sostiene: alrededor de **14 702** con la pieza de inicio obligatoria, y alrededor de **4×10⁻⁸**, es decir, exactamente una, una vez colocadas las cinco pistas ([msg 11193](https://groups.io/g/eternity2/message/11193)). Esta página trata de cómo un grupo de personas aprendió a contar algo que ninguna de ellas podía encontrar, y por qué se molestaron en hacerlo. El *porqué* no es la curiosidad. Un puzzle con 14 702 soluciones y un puzzle con 1 son bestias distintas en todo lo que importa. **Diseño**: los parámetros del puzzle se ajustaron para que el número esperado quedara cerca de uno; la comunidad hizo ingeniería inversa de la perilla del diseñador en cuestión de semanas tras el anuncio de 2007, cuando Alan O'Donnell escribió el número como función del número de colores $B$ y descubrió que cruza $1$ en $B \approx 14.67$ ([msg 94](https://groups.io/g/eternity2/message/94)); los [17 colores interiores](/es/research/why/phase-transition/) del puzzle real se sitúan justo pasado ese filo del cuchillo. **Dificultad**: el número de soluciones dividido entre el tamaño del árbol de búsqueda (nodos por solución) es el verdadero precio de la caza, y se comporta de forma contraintuitiva: Peter McGavin calculó que retirar la restricción de la pieza de inicio multiplica las soluciones por 784 mientras deja los nodos por solución esencialmente sin cambios, $9.2766\times10^{42}$ frente a $9.2751\times10^{42}$ ([msg 8924](https://groups.io/g/eternity2/message/8924)). Más soluciones no significan un puzzle más fácil; significan un pajar proporcionalmente más grande. **Verificación**: los conteos exactos sobre regiones pequeñas son la moneda de corrección de la comunidad: la forma en que dos solucionadores prueban que leen las mismas piezas sin compartirlas jamás (véase [la cultura de los benchmarks](/es/research/build/benchmarks/)). Una razón más por la que el número importa: las soluciones no son variaciones sobre un mismo tema. Brendan Owen y otros insistieron en que las soluciones distintas son "por lo general una reestructuración completa de todo el puzzle", y no permutaciones locales de unas pocas piezas ([msgs 7364/7365](https://groups.io/g/eternity2/message/7365)), de modo que 14 702 es un conteo de tableros genuinamente diferentes, dispersos por el espacio de búsqueda. ## Tres formas de contar Veinte años de tráfico en la lista ordenan cada resultado de conteo en tres regímenes, cada uno con sus propias garantías, su propio precio y sus propios modos de fallo. | Régimen | Lo que da | Lo que cuesta | Resultado insignia | | --- | --- | --- | --- | | Enumeración exacta | El conteo verdadero | El árbol de búsqueda entero | Pista n.º 3: exactamente 2 195 647 488 | | Esperanza de primer momento | Un promedio sobre puzzles de este tipo | Aritmética con lápiz y papel | 14 702 con la pieza de inicio | | Búsqueda muestreada / podada | Una estimación con barras de error informales | Un presupuesto de nodos fijo por ejecución | Anillo de borde ≈ 4,05×10³⁷ | ### Enumeración exacta: contar agotando Allí donde el árbol es lo bastante pequeño para recorrerlo por completo, contar no es más que buscar sin detenerse en el primer éxito. La comunidad lo empleó desde las primeras semanas como un *protocolo de verificación*: recubre la esquina superior izquierda 3×3 con las 256 piezas y deberás encontrar exactamente **2 633 221** soluciones ([msg 2229](https://groups.io/g/eternity2/message/2229)), un número que se puede publicar sin infringir el derecho de autor sobre el juego de piezas, e imposible de reproducir aunque sea con una sola pieza mal introducida. Las esquinas 5×5 siguieron en 2009, verificadas de forma cruzada por tres programas independientes (superior izquierda: 1 596 901 885 652 soluciones parciales con las cinco pistas, [msg 7103](https://groups.io/g/eternity2/message/7103), [7105](https://groups.io/g/eternity2/message/7105)). Alcanzar el consenso te hacía entrar en el medio en broma "Right Numbers Club" de la comunidad; toda la historia está en la [página de benchmarks](/es/research/build/benchmarks/). Dos resultados exactos destacan por encima del resto. En 2010, apal1969 agotó el puzzle oficial de la Pista n.º 3 (una instancia comercial real de Tomy) y encontró exactamente **2 195 647 488** soluciones ([msg 8168](https://groups.io/g/eternity2/message/8168)): la única instancia comercializada de la familia cuyo número de soluciones se conoce exactamente en lugar de estimarse. Y en 2011, los dos puzzles de referencia 9×9 de Brendan Owen fueron agotados, a un coste de en torno a $1.9\times10^{14}$ y $1.45\times10^{14}$ nodos y tres semanas cada uno en un Opteron de doble núcleo. Rindieron **2** y **3** soluciones; [la teoría compleja](/es/research/why/complex-theory/) había predicho 3,2 para el primero ([msg 8793](https://groups.io/g/eternity2/message/8793)). Hasta el conteo tuvo que contarse con cuidado: el primer informe afirmaba una solución cada uno, y hicieron falta los backtrackers barajados de forma independiente de McGavin para hacer aflorar los tableros que faltaban ([msgs 8801–8803](https://groups.io/g/eternity2/message/8801)). Exhaustivo no significa libre de errores; solo la replicación lo es. ### El primer momento: contar por esperanza Para el tablero completo 16×16, el agotamiento está descartado, así que la herramienta principal de la comunidad siempre ha sido el cálculo del *primer momento* (valor esperado): multiplicar el número de formas de disponer las piezas por la probabilidad de que cada arista interna concuerde, tratando los colores de las aristas como extracciones independientes. Las primeras versiones aparecieron en cuestión de **días** tras el anuncio de enero de 2007, meses antes de que nadie tuviera piezas ([msg 38](https://groups.io/g/eternity2/message/38), [94](https://groups.io/g/eternity2/message/94)). El día del lanzamiento, con las estadísticas reales de las piezas en mano, Owen calculó ≈ **5 930** soluciones con la pista obligatoria y ≈ **4,65 millones** sin ella, y luego usó la separación para auditar el marketing: Christopher Monckton había dado a Dave Clark de eternity2.net una mejor estimación de "aproximadamente 5 millones" de soluciones, así que Owen concluyó que los matemáticos de Monckton simplemente habían olvidado la restricción de la pista ([msg 987](https://groups.io/g/eternity2/message/987)). David Eddy añadió el mismo día que las [correcciones de paridad](/es/research/build/analysis/parity-arguments/) (el número de aristas de cada color debe ser par) aportan un factor de aproximadamente $2^{16}$ que pone de acuerdo a las familias de estimaciones ([msg 992](https://groups.io/g/eternity2/message/992)). La convergencia llevó años, y no fue monótona. El producto cerrado se publicó en noviembre de 2007 ([msg 3385](https://groups.io/g/eternity2/message/3385)); mjqxxxx ya había iniciado un marco de conteo plenamente riguroso ese julio ([msg 1221](https://groups.io/g/eternity2/message/1221)); el artículo de kubzpa de diciembre de 2007 defendía ~**15 millones** de soluciones con la pieza de inicio. Recibió una auténtica revisión por pares en la lista: las correcciones de la lista produjeron una segunda versión corregida ([msg 3497](https://groups.io/g/eternity2/message/3497), [3583](https://groups.io/g/eternity2/message/3583)), y entonces mjqxxxx detectó una inconsistencia de Monte-Carlo en la v2 ([msg 3589](https://groups.io/g/eternity2/message/3589)) que kubzpa rastreó hasta un barajado sesgado, revisando de nuevo su estimación ([msg 3591](https://groups.io/g/eternity2/message/3591)). Una cifra de "20 000 soluciones" circuló durante años antes de rastrearse hasta el sitio oficial francés archivado ([msg 8515](https://groups.io/g/eternity2/message/8515)). El número que sobrevivió es el de la teoría compleja: jagbrain derivó **14 702** de un modelo de Markov cerrado e independiente en 2008, coincidiendo exactamente con el método iterativo de Owen ([msg 5758](https://groups.io/g/eternity2/message/5758)); McGavin publicó la misma cifra en 2011 ([msg 8924](https://groups.io/g/eternity2/message/8924)) y la reenunció como la respuesta canónica en 2024: 14 702 con la pieza de inicio, "probablemente exacta con un margen de un factor de 2", y $4\times10^{-8}$ con las cinco pistas, "sugiriendo muy fuertemente… una solución única, unívoca" ([msg 11193](https://groups.io/g/eternity2/message/11193)). La maquinaria detrás de esos números, la esperanza profundidad a profundidad y lo que predice sobre el árbol de búsqueda, vive en la [página de la teoría compleja](/es/research/why/complex-theory/); esta página solo necesita su resultado. Una salvedad que la propia comunidad planteó tiene aquí su lugar. E2 fue *generado a partir de una solución*, y elegir un puzzle eligiendo una solución sobremuestrea los juegos de piezas ricos en soluciones, así que el conteo condicionado por el proceso de generación debería resultar *más alto* que la esperanza a secas, en una cantidad que el hilo intentó acotar sin éxito ([msgs 6892/6894](https://groups.io/g/eternity2/message/6892)). Las fórmulas de esperanza tarifan un puzzle aleatorio con las estadísticas de E2; E2 no es del todo un puzzle aleatorio de ese tipo. ### Búsqueda muestreada y podada: contar sobreviviendo Entre lo exacto y lo esperado se sitúa el tercer régimen: lanzar una búsqueda real, pero podarla al azar hasta un presupuesto fijo, y volver a escalar los supervivientes. La joya metodológica del archivo es el censo del anillo de borde que hizo Owen en septiembre de 2007. Lanzó **cuatro búsquedas separadas** del marco de 60 piezas, cada una podando el árbol al azar mientras mantenía unos 10 millones de nodos activos por profundidad. Cada una de las cuatro estimó de forma independiente **≈ 4,05×10³⁷** soluciones de borde ([msg 2696](https://groups.io/g/eternity2/message/2696), publicada por primera vez en [msg 1225](https://groups.io/g/eternity2/message/1225)). La cifra discrepaba de la estimación publicada por eternity2.net en trece órdenes de magnitud, y la replicación es exactamente la razón por la que la comunidad se puso del lado de Owen. Una única ejecución podada puede estar silenciosamente sesgada por cualquier cosa; cuatro ejecuciones independientes que coinciden son una barra de error que se puede ver. Ese hábito (la replicación como control de error, no como argumento de autoridad) es el mismo que más tarde rigió los censos de las esquinas y los recuentos de los 9×9. ## Paso a paso: la fórmula de esperanza en un tablero minúsculo El cálculo del primer momento merece hacerse una vez a mano. Tomemos un E2 en miniatura: un tablero 3×3 enmarcado (4 piezas de esquina, 4 piezas de borde, 1 pieza interior) con una única paleta de $c$ colores en cada arista interna. **Paso 1: contar las disposiciones.** Las esquinas van a las celdas de esquina con su orientación forzada por los dos lados grises; las piezas de borde, igualmente; la única pieza interior conserva sus 4 rotaciones: $$ A \;=\; 4! \times 4! \times 4 \;=\; 2304 . $$ **Paso 2: contar las restricciones.** El tablero tiene $2\cdot3\cdot2 = 12$ aristas internas. Si los colores fueran extracciones uniformes independientes, cada arista concordaría con probabilidad $1/c$. **Paso 3: multiplicar.** $$ \mathbb{E}[S] \;=\; \frac{2304}{c^{12}} \quad\Longrightarrow\quad c=2:\ 0.56, \qquad c=3:\ 0.0043 . $$ Ese es todo el dilema del diseñador en una línea: con dos colores el puzzle minúsculo espera alrededor de media solución, con tres es casi con seguridad irresoluble. Una fracción de color mueve la esperanza de un lado a otro de la línea "exactamente una". Escala el mismo producto hasta el tablero real, con $4!$ disposiciones de esquinas, $56!$ disposiciones de bordes, $195!\cdot4^{195}$ disposiciones interiores (la pieza de inicio está fijada), 60 aristas del anillo del marco a $1/5$ y $56+364=420$ aristas restantes a $1/17$, y obtienes la forma publicada en la lista en noviembre de 2007 ([msg 3385](https://groups.io/g/eternity2/message/3385)): $$ \mathbb{E}[S] \;=\; 4!\;56!\;195!\;4^{195} \left(\tfrac{1}{5}\right)^{60}\left(\tfrac{1}{17}\right)^{420} \;\approx\; 0.02 . $$ No hay manera de esconder la brecha: **0,02 no es 14 702**. El producto ingenuo es casi seis órdenes de magnitud demasiado pequeño, y la comunidad sabía por qué desde el principio. Tratar cada arista como una moneda al aire independiente de $1/17$ tarifa la última pieza como la primera, cuando en realidad el juego de piezas real se empareja a la perfección (cada color tiene un conteo par, con [holgura cero](/es/research/build/known-facts/)), de modo que las probabilidades de concordancia del final de la partida quedan condicionadas muy por encima de $1/17$ por todo lo ya colocado. Esas correcciones de paridad y de agotamiento se señalaron en el mismísimo mensaje que publicó la fórmula, y el factor de conteo par $\sim 2^{16}$ de Eddy ([msg 992](https://groups.io/g/eternity2/message/992)) es el mayor de ellos. [La teoría compleja](/es/research/why/complex-theory/) es precisamente este cálculo hecho correctamente, siguiendo los conteos de piezas y colores supervivientes profundidad a profundidad en lugar de suponer una probabilidad fija, y *esa* es la versión que aterriza en 14 702 y coincide con los conteos exhaustivos sobre tableros pequeños con el margen de un factor de dos que sostiene. La estructura de la fórmula (disposiciones × probabilidad de concordancia) es correcta; de dónde sacas la probabilidad es todo el juego. ## Lo que cuesta Los tres regímenes son en realidad tres puntos sobre una curva coste–conocimiento. **La enumeración exacta cuesta el árbol mismo.** Contar es una búsqueda exhaustiva que se niega a detenerse: cada censo 9×9 costó del orden de $10^{14}$ nodos y tres semanas de hardware de 2011, y el precio crece con el espacio de búsqueda, no con la respuesta. Para el puzzle completo, el árbol tiene una anchura de $\sim 10^{45}$ en su meseta; el conteo exacto de las soluciones de E2 no lo calculará nadie, jamás, por esta vía. **La esperanza no cuesta casi nada, y ahí está su trampa.** La fórmula de primer momento es aritmética $O(1)$ (la versión refinada de la teoría compleja son unos pocos cientos de multiplicaciones, una por celda), y por eso existía antes de que el puzzle saliera a la venta. Pero un primer momento no lleva información alguna sobre la *varianza*: te dice el conteo promedio sobre puzzles con las estadísticas de E2, no si la masa se encuentra en las instancias típicas o en raros bichos ricos en soluciones, ni si los tableros parciales que se cuentan a cada profundidad son genuinamente distintos. Los [resultados de entropía y de ley de área](/es/research/why/entropy-area-law/) muestran exactamente dónde muerde esa ceguera: a medida que crecen los parches, la distinción se derrumba de una manera que ningún modelo de independencia puede ver. Usa las esperanzas para comparar órdenes de magnitud y encuadrar las expectativas, nunca como cotas. **El muestreo solo compra barras de error mediante la repetición.** Una búsqueda podada cuesta un presupuesto de nodos por ejecución y da una estimación de sesgo desconocido; Owen pagó cuatro presupuestos por el anillo de borde y compró la única clase de confianza que ofrece este régimen. La regla en la que la comunidad se asentó es la que merece llevarse de esta página: un conteo muestreado que has visto una sola vez es una anécdota; el mismo conteo a partir de ejecuciones, semillas y autores independientes es una medición. ## Relacionado - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. --- # Un mapa de todos los enfoques conocidos > La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/approaches-map/ - Actualizado: 2026-07-21 - Fuente: El balance que la propia comunidad hace de dos décadas de esfuerzo: 1,6 TFlops, 10^19 operaciones de CPU, ninguna solución (groups.io, mensaje 3511) — https://groups.io/g/eternity2/message/3511 - Fuente: El récord vigente, 470, en el puzzle oficial: Joshua Blackwood, "470 Found", eternity2@groups.io, 2021 (groups.io, mensaje 10117) — https://groups.io/g/eternity2/message/10117 - Fuente: Eternity II (Wikipedia): el puzzle, el premio y el registro público — https://en.wikipedia.org/wiki/Eternity_II_puzzle --- Quienes trabajan en Eternity II acaban planteándose siempre la misma pregunta: ¿existe un lugar que recoja *todos* los enfoques? La respuesta habitual es que no, porque quienes lo abordan forman una mezcla de académicos, solucionadores de competición y aficionados, y nadie llegó a trazar el mapa. Esta página es ese mapa. No añade ningún método nuevo; alinea los que este wiki ya documenta, una familia cada vez, para que abarques todo el territorio antes de elegir una dirección. Para cada familia: lo que es en una línea, lo que alcanzó realmente en el verdadero tablero 16×16, dónde se detiene, y un enlace a la página de fondo con los laboratorios, las mediciones y las citas de archivo. Ninguno de estos métodos es una invención propia de Eternity II: provienen de la programación por restricciones, la combinatoria y el criptoanálisis, y cada página de fondo nombra al inventor del método y cita el artículo original. Lo que las páginas de fondo añaden es cómo se comporta cada uno cuando se apunta a este puzzle concreto, con las mediciones propias del proyecto allí donde existen y un simple «no medido» allí donde faltan. El [estante de técnicas](/es/research/build/techniques/) es el índice de esas páginas. ## La única idea que organiza todo el mapa Cada una de las familias siguientes se atasca en el mismo punto: el techo comunitario de 470 aristas casadas de 480, con [los propios experimentos de este proyecto](/es/research/lab/experiments/raphael-anjou/) agrupados en torno a [460–463](/es/research/records/). Se atascan ahí por la misma razón, y vale la pena enunciarla antes del catálogo para que el resto se lea como otras tantas variaciones sobre un mismo tema. La razón radica en un problema de evaluación. La única señal barata de la que dispone un solucionador es el número de aristas casadas, y ese número no dice a qué distancia de la solución te encuentras. Un tablero de 470 aristas y uno de 460 pueden estar igual de lejos de terminarse, porque las diez últimas aristas no son una tarea de acabado: se sitúan al otro lado de un muro global que ninguna puntuación local percibe. Así, los buscadores sistemáticos y los buscadores estocásticos, que no se parecen en nada, convergen hacia la misma altura. Es el **[muro de rigidez](/es/research/why/rigidity-wall/)**: los tableros récord están localmente congelados, y el paso de un tablero excelente a uno perfecto es un único intercambio indivisible, sin gradiente que seguir. Su contrapartida es **[por qué un ordenador más rápido no ayuda](/es/research/why/prune-vs-speed/)**: cuando no puedes reducir la búsqueda, la velocidad bruta apenas compra nada. La sección **[por qué es difícil](/es/research/why/)** demuestra ambos, y **[qué muro detiene a qué método](/es/research/why/walls-and-methods/)** confronta cada ataque con el muro en el que muere. Ten esto presente y el mapa de abajo se lee sin esfuerzo: las familias difieren en el *cómo* trepan, no en la *altura* que alcanzan. ## Búsqueda sistemática La familia del backtracking: colocar las piezas una a una en un orden fijo o calculado, podar las colocaciones ilegales, y deshacer en caso de fallo. Todo lo que ostenta un récord vive aquí. - **[Órdenes de relleno](/es/research/build/backtracking/fill-order/)**. El orden en que un backtracker visita las 256 celdas es su único grado de libertad, y hace variar el tamaño del árbol de búsqueda en órdenes de magnitud sin coste de ejecución. Veinte años de ciencia comunitaria, desde el debate fijo-contra- dinámico hasta la búsqueda en peine de Verhaard. Esto es la palanca, no un muro. - **[Consistencia de arco](/es/research/build/reduce/arc-consistency/)**. Hacer que la lista de candidatos de cada celda se defienda frente a sus vecinas hasta un punto fijo, más allá del simple control anticipado a un movimiento. El AC-3 de Mackworth y sus refinamientos podan con fuerza en los tableros pequeños; en el tablero completo, la poda alcanzable se desvanece a unas dos celdas de distancia y no logra colapsar el factor de ramificación. - **[All-different, el filtro de emparejamiento de Régin](/es/research/build/reduce/alldiff-regin/)**. Ninguna pieza puede usarse dos veces: una sola restricción global sobre 256 celdas, filtrada por completo en tiempo polinómico mediante emparejamiento bipartito. El propagador más potente que se ha medido aquí, con una salvedad marcada en cuanto la búsqueda tolera desajustes. - **[Aprendizaje de no-goods](/es/research/build/reduce/nogood-learning/)**. Un subárbol fallido es un teorema: regístralo y no vuelvas a entrar nunca. Las tablas de transposición y las restricciones minadas rinden ambas en los tableros pequeños; en 16×16, el número de no-goods distintos desborda cualquier memoria que puedas retener. - **[Reinicios y colas pesadas](/es/research/build/backtracking/restarts/)**. El mismo backtracker sobre el mismo puzzle termina en tiempos de ejecución que difieren en varias potencias de diez, así que corta, baraja de nuevo y reinicia. Todo solucionador récord desde 2007 es una cartera de reinicios. Cambia qué tableros alcanzas, no el techo. - **[Encuentro en el medio](/es/research/build/exact/meet-in-the-middle/)**. Enumerar dos mitades y unirlas en una interfaz compartida, cambiando memoria por la mitad del exponente. Real en bandas del tablero; el experimento BANDSAW de este proyecto midió dónde deja de rendir a tamaño completo. - **[Cobertura exacta y dancing links](/es/research/build/exact/exact-cover-dlx/)**. Eternity II se enuncia limpiamente como cobertura exacta, y el Algoritmo X de Knuth es la máquina clásica para ello. Brilla en los tableros pequeños y en el conteo exhaustivo; en el 16×16 el árbol queda sin reducir y un casi-acierto no vale ningún crédito parcial. - **[Ingeniería de solucionadores](/es/research/build/faster/solver-engineering/)**. No un algoritmo, sino el oficio que lo sostiene: tablas de consulta, funciones de hash perfectas, structs dimensionados al caché, código generado. Decide si un nodo cuesta 26 ciclos o 2600, y es la razón de que los motores récord funcionen siquiera. Compra velocidad, y la velocidad es precisamente lo que no mueve el muro. El **[catálogo de solucionadores](/es/research/build/solvers/)** muestra cómo los motores récord (el 467 de Verhaard, el 470 de Blackwood) ensamblan estas piezas. ## Codificaciones hacia otros solucionadores En lugar de escribir un backtracker, se traduce el puzzle al lenguaje de entrada de un solucionador industrial y se deja que una década de ingeniería lleve la búsqueda. - **[Codificaciones SAT y CSP](/es/research/build/exact/sat-csp-encodings/)**. Escribir el puzzle en forma de cláusulas y entregarlo a un solucionador completo. Intentado desde 2008. Los solucionadores se atascan en el tablero completo, pero sus veredictos siguen ganándose el sitio como pruebas de imposibilidad en subtableros. - **[Relajaciones LP y ILP](/es/research/build/exact/lp-relaxations/)**. Escribirlo como un programa entero y abandonar la integralidad: un solucionador lineal alcanza error cero en segundos colocando fracciones de piezas. La comodidad termina en el instante en que las piezas deben ser enteras: una meseta en 420–440 aristas, un muro ILP ya en el 8×8, y un mejor resultado académico de 461 en una hora. ## Búsqueda local y estocástica Partir de un tablero completo (imperfecto) y mejorarlo mediante movimientos, guiado por un objetivo. Estos métodos no se parecen en nada al backtracking, y se detienen a la misma altura. - **[Búsqueda local y ALNS](/es/research/build/local-search/local-search-alns/)**. Destruir una parte de un tablero, reconstruirla mejor, y aprender qué demoliciones rinden. El pulidor más fiable aquí, y la demostración más nítida de dónde termina el pulido. - **[Recocido simulado y parallel tempering](/es/research/build/local-search/parallel-tempering/)**. Tratar los desajustes como energía y la temperatura como tolerancia a empeorar. El recocido ostenta el récord más longevo de esta familia; el tempering cruza barreras que el recocido no puede cruzar. Ambos se detienen en el mismo muro. - **[Búsqueda por haz](/es/research/build/construct/beam-search/)**. Mantener con vida los K tableros parciales más prometedores y hacerlos crecer celda a celda. El caballo de tiro tras los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se atasca en el interior profundo. - **[Enfoques evolutivos y genéticos](/es/research/build/local-search/evolutionary/)**. Criar una población, quedarse con los más aptos, recombinar a los supervivientes. La metáfora más natural de la caja de herramientas y aquella cuyo operador central, el cruce, choca de frente con la estructura del puzzle. - **[Mapas iterados y divide-and-concur](/es/research/build/exact/iterated-maps/)**. Escindir el puzzle en dos conjuntos de restricciones fáciles de proyectar e iterar un mapa cuyos puntos fijos son soluciones. El método de Elser hizo la portada de PNAS; en la lista de Eternity II se probó una vez y nunca se llevó hasta el final. ## Aprender de los tableros fuertes Cada uno de los métodos anteriores razona únicamente a partir de las reglas del puzzle. Esta familia razona a partir de los tableros ya encontrados: explotar el corpus de tableros fuertes para extraerle estructura y reinyectarla en una búsqueda como sesgo. Alcanza rápida y fiablemente la cima del rango de una búsqueda, y no eleva el techo. - **[Aprender de los tableros fuertes](/es/research/build/learning/)**. El nudo de la familia: [priors](/es/research/build/learning/corpus-priors/) de posición y de demanda escasa, [ordenamiento de movimientos aprendido](/es/research/build/learning/learned-value-ordering/) por voto, [minería de antipatrones](/es/research/build/learning/anti-pattern-mining/) que separa la estructura compartida de la trampa compartida, y [decodificar un récord](/es/research/build/learning/decoding-records/) para recuperar el movimiento que una búsqueda ordinaria pasaba por alto. La [síntesis del colapso](/es/research/build/learning/when-learning-collapses/) es donde la familia se detiene: concede demasiada confianza a una señal aprendida y la búsqueda se desmorona, y aun aprovechada a la perfección, ninguno de estos métodos franquea el muro de rigidez, porque el corpus del que aprenden está hecho de tableros bloqueados en ese mismo muro. ## Vías exóticas y de hardware Cada pocos años alguien propone hardware nuevo o física nueva. Estas páginas llevan el registro de lo que cada una entregó realmente. - **[Resolución en GPU](/es/research/build/hardware/gpu-solving/)**. Parece la carga de trabajo perfecta (millones de subárboles independientes), y dieciocho años de intentos midieron una realidad muy distinta: ramificación divergente y estado por hilo que desborda la memoria rápida. El muro es la memoria, no la aritmética. - **[Resolución en FPGA](/es/research/build/hardware/fpga-solving/)**. Colocar las tablas de consulta a un ciclo de distancia en la RAM embebida y encauzar en pipeline docenas de backtrackers diminutos. Michael Field lo diseñó, proyectó 5000 millones de colocaciones por segundo y por chip, e hizo funcionar un prototipo. La vía se cartografió en detalle y nunca se recorrió hasta el final. - **[Resolución distribuida](/es/research/build/faster/distributed-solving/)**. Echarle más ordenadores: salvapantallas BOINC, sindicatos de reparto del premio, clústeres de consolas, granjas de placas monobloque. El esfuerzo total de la comunidad alcanzó unas 10^19 operaciones sin solución; lo único que la distribución hace de verdad bien es el conteo exhaustivo en los tableros pequeños. - **[Enfoques cuánticos](/es/research/build/hardware/quantum/)**. El deus ex machina más antiguo de la lista, invocado ya en el primer mes del puzzle y cada pocos años desde entonces. Dos historias reales (la aceleración cuadrática de Grover y el recocido sobre un QUBO), la aritmética confrontada con las cifras reales de Eternity II, y un balance de cero ejecuciones. ## Análisis, no solucionadores Estos no intentan resolver el puzzle. Lo miden, y así es como la comunidad sabe dónde están los muros. - **[Argumentos de paridad](/es/research/build/analysis/parity-arguments/)**. Contar una cantidad del tablero dos veces, una vez desde cada lado, y los totales deben coincidir, lo que aporta pruebas de imposibilidad para una pasada. La historia del 479 muestra a la vez la potencia y la trampa. - **[Conteo de soluciones](/es/research/build/analysis/solution-counting/)**. Nadie ha visto jamás una solución completa, y sin embargo la comunidad sabe, hasta un factor de dos, cuántas existen: censos exactos en los tableros pequeños y una fórmula de esperanza que convergió en torno a 14 702. ## Callejones sin salida Algunas ideas suenan tan bien como cualquiera de las anteriores y, de forma demostrable, no mueven la puntuación. La página **[callejones sin salida](/es/research/build/dead-ends/)** las reúne con la razón por la que cada una falla, para ahorrarte un mes de trabajo: ruptura de simetría (no hay ninguna simetría global que romper), propagación de probabilidades que se desvanece a dos celdas de distancia, y otras. ## Lo que el mapa te dice Léelo de arriba abajo y la forma es clara. Las familias sistemáticas ostentan los récords porque pueden demostrar cosas y podar con fuerza en los tableros pequeños, pero no consiguen reducir lo suficiente la búsqueda completa para llegar al final. Las familias estocásticas pulen de maravilla y alcanzan tableros realmente distintos, y luego se atascan a la misma altura. Las vías de hardware cambian la velocidad y nunca el techo. Y las páginas de análisis explican por qué: las diez últimas aristas no son cuestión de esfuerzo ni de ingenio en ninguna familia concreta, sino un muro global que cada familia encuentra desde su propia dirección. Si estás eligiendo dónde invertir tu tiempo, la pregunta útil no es qué familia es la mejor. Es qué muro crees que puedes franquear, porque eso es lo que decide realmente la puntuación. **[Qué muro detiene a qué método](/es/research/why/walls-and-methods/)** es el lugar por donde empezar. Para los objetivos aún abiertos en la frontera, y los que, con nombre propio, merece la pena atacar a continuación, consulta el **[tablero de problemas abiertos](/es/research/open-problems/)**. ## Relacionado - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. - [Cómo buscan los solucionadores récord](https://eternity2.dev/es/research/build/solvers/) — Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. - [Por qué es difícil](https://eternity2.dev/es/research/why/) — Eternity II no es difícil por accidente. Fue diseñado para resistir el ingenio, y los muros estructurales medibles (rigidez, entropía, patrones prohibidos) explican por qué ninguna búsqueda, por ingeniosa que sea, ha llegado al final. --- # Backtracking > La búsqueda en profundidad tomada en serio. El orden en que un solucionador visita las celdas es su única elección libre y hace variar el tamaño del árbol en órdenes de magnitud; los reinicios convierten un tiempo de ejecución de cola pesada en un portafolio. Esta es la familia detrás de cada backtracker récord. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/backtracking/ - Actualizado: 2026-07-13 --- La búsqueda en profundidad tomada en serio. El orden en que un solucionador visita las celdas es su única elección libre y hace variar el tamaño del árbol en órdenes de magnitud; los reinicios convierten un tiempo de ejecución de cola pesada en un portafolio. Esta es la familia detrás de cada backtracker récord. Las páginas siguientes avanzan técnica por técnica: qué es cada una en una línea, qué alcanzó realmente en el tablero 16×16 real, dónde se detiene, y los laboratorios y mediciones que la respaldan. Para abarcar todo el territorio de una vez, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Páginas de esta sección - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? - [Reinicios y colas pesadas](https://eternity2.dev/es/research/build/backtracking/restarts/) — Ejecute el mismo backtracker sobre el mismo puzzle dos veces y los tiempos de ejecución diferirán por potencias de diez. La comunidad lo midió en 2007; la literatura CSP ya lo había bautizado. La cura (cortar, rebarajar, reiniciar) es la razón por la que todo solucionador récord desde entonces es un portafolio de reinicios. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # Órdenes de relleno > El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/backtracking/fill-order/ - Actualizado: 2026-07-22 - Temas: backtracking, search-space - Fuente: El «mejor orden de búsqueda» de Owen, el barrido casi óptimo y el argumento por conteo de formas (septiembre de 2007) — https://groups.io/g/eternity2/message/2714 - Fuente: El debate entre fijo y dinámico, donde los caminos fijos ganan empíricamente (msg 2392; el veredicto de Owen, msg 2425) — https://groups.io/g/eternity2/message/2392 - Fuente: Velocidad, la respuesta de istarinz en una palabra a por qué ganan los caminos fijos (septiembre de 2008) — https://groups.io/g/eternity2/message/5860 - Fuente: El «cuadrado mágico 10×16» de Verhaard (msg 5868; la explicación en profundidad 160 es el msg 5879) — https://groups.io/g/eternity2/message/5868 - Fuente: Max mide las orientaciones de barrido, 2,3 contra 2,7 × 10⁴⁰ nodos (octubre de 2008; el hilo empieza en el msg 6015) — https://groups.io/g/eternity2/message/6023 - Fuente: El experimento de diseño de Owen que muestra que el barrido gana solo porque la partición 5/17 de E2 está equilibrada (msg 5263; tablas msg 5243) — https://groups.io/g/eternity2/message/5263 - Fuente: Verhaard revela la búsqueda en peine para las puntuaciones altas (octubre de 2008) — https://groups.io/g/eternity2/message/6112 - Fuente: El orden de puntuación alta de Max, casi idéntico, doce filas y luego columnas (octubre de 2008) — https://groups.io/g/eternity2/message/6126 - Fuente: La carrera de estrategias de 89.794 nodos, diseño de orden automatizado contra ajuste manual (msg 2896; la réplica msg 2928) — https://groups.io/g/eternity2/message/2896 - Fuente: La cadena de Markov de Verhaard, optimizando conjuntamente el orden de relleno y el arreglo de deslizamientos (enero de 2009) — https://groups.io/g/eternity2/message/6423 - Fuente: El duelo 8×8 de Markus Zajc, el valor restante mínimo bate al barrido que bate a la reducción máxima (septiembre de 2008) — https://groups.io/g/eternity2/message/5918 - Fuente: Ansotegui, Bejar, Fernandez y Mateu, la línea de benchmarks SAT/CSP cuyos órdenes estáticos de damero y espiral reproducen las mediciones de cuaderno de esta página (CP 2008; versión extendida en revista, Constraints 2013) — https://link.springer.com/article/10.1007/s10601-012-9128-9 - Fuente: El estudio hiperheurístico de Wauters, Vancroonenburg y Vanden Berghe, cuya base de backtracking hace competir el barrido por filas contra espiral, espiral inversa y órdenes en espejo (2012) — https://link.springer.com/article/10.1007/s10852-012-9178-4 --- Un algoritmo de backtracking apenas tiene libertad. Las piezas están dadas, la regla de emparejamiento está dada, el tablero está dado. Lo único que depende enteramente de ti es el *orden de relleno*: la secuencia en que se rellenan las 256 celdas. Parece un detalle (la búsqueda es exhaustiva de cualquier modo), y en realidad es la decisión de mayor apalancamiento de todo el solucionador. Brendan Owen lo dijo sin rodeos en 2007: «Uno de los mayores ahorros de conteo de nodos que puedes lograr consiste en elegir un buen orden de búsqueda» ([msg 2714](https://groups.io/g/eternity2/message/2714)). El mismo puzzle, recorrido en un orden distinto, puede costar diez órdenes de magnitud más de nodos. Y la elección es gratuita, decidida antes de colocar la primera pieza. Por eso la lista de correo lo debatió durante veinte años. El primer gran debate, en el verano de 2007, fue *fijo contra dinámico*: los veteranos de Eternity I abogaban por elegir dinámicamente, en cada paso, la celda más restringida, la heurística CSP clásica ([msg 2392](https://groups.io/g/eternity2/message/2392)). Los empiristas respondieron con conteos de nodos: los mejores resultados venían de caminos fijos, precalculados, y el veredicto de Owen fue que «un barrido por líneas después de colocar la pieza pista parece lo mejor» ([msg 2425](https://groups.io/g/eternity2/message/2425)). Un año más tarde, cuando le preguntaron por qué nadie se molestaba con la colocación completamente dinámica, istarinz comprimió la mitad de ingeniería de la respuesta en una palabra, velocidad: un camino fijo mantiene el bucle interno sin ramificaciones y guiado por tablas ([msg 5860](https://groups.io/g/eternity2/message/5860)). La mitad teórica tardó más, y es el tema de esta página. ## El punto de vista del conteo de restricciones Una idea que subyace a todo lo demás: la colocación de una pieza solo se comprueba jamás contra los vecinos *ya presentes en el tablero*. Una cuadrícula 16×16 tiene exactamente 480 uniones internas, y todo orden de relleno completo (barrido por líneas, espiral, lo que sea) acaba comprobando las 480. El orden solo cambia la *planificación*: qué uniones se pagan temprano, mientras el árbol sigue siendo estrecho, y cuáles se posponen hasta donde es ancho. Una celda que llega con dos vecinos ya colocados admite pocas piezas candidatas; una celda que llega sin ninguno las admite casi todas y no poda nada. Los buenos órdenes son los que alimentan a la búsqueda con una dieta constante de celdas restringidas, que es exactamente lo que hace un barrido por líneas: tras la primera fila, casi cada celda nueva toca una pieza a su izquierda y una pieza debajo. Owen lo convirtió en un método. Para un orden fijo, los nodos a la profundidad $D$ son (en esperanza) el número de formas de teselar la *forma* que el orden ha construido a la profundidad $D$. Cualquier orden candidato puede por tanto puntuarse, forma a forma, sin ejecutarlo. Su conclusión, extraída de hacerlo de manera exhaustiva: las formas que dominan el total son las de tamaños 121 a 185, y las mejores formas en esa ventana crítica «forman un simple orden de barrido por líneas» ([msg 2714](https://groups.io/g/eternity2/message/2714)). Toda la maquinaria, probabilidades de unión incluidas, se convirtió en la [teoría compleja](/es/research/why/complex-theory/); esta página muestra a qué se parecen sus respuestas en la práctica. El cuaderno de laboratorio del proyecto pone números a la dieta misma. Llamemos $k$ al número de lados vecinos ya colocados que una celda presenta cuando la búsqueda la alcanza. Una ley de campo medio dice que la celda debería admitir unas $4Rp^k$ colocaciones candidatas, donde $R$ es el número de piezas aún en mano y $p \approx 0{,}048$ es la probabilidad media, en E2, de que un lado empareje con un color. Al comienzo del relleno interior eso predice unos 38 candidatos para una celda $k=1$, 1,8 para $k=2$, 0,09 para $k=3$ y 0,004 para $k=4$. Una enumeración exacta contra el juego real de 256 piezas (40 ensayos sembrados por configuración) cae dentro del 20 a 40% de esas predicciones y confirma los tres regímenes que dibujan: las celdas $k=1$ son en esencia siempre rellenables; las celdas $k=2$ cruzan el 50% de celdas muertas en algún punto entre el 50 y el 62% de relleno del tablero; y las celdas con tres o más vecinos colocados están muertas en el 87 a 100% de los ensayos a cualquier nivel de relleno, incluida la primera colocación interior. (La ley es una idealización de campo medio validada para las estadísticas de color de Eternity II, una sola instancia; no es una afirmación sobre el emparejamiento de aristas en general.) Leída como regla de diseño: un buen orden es aquel cuya frontera presenta a cada celda nueva exactamente dos vecinos colocados, suficientes para podar, pocos para sobrevivir. El barrido por filas lo hace por construcción, un $k=2$ constante tras la primera fila; cualquier orden cuya frontera desarrolle bolsas cóncavas de tres lados paga celdas casi seguramente muertas, esté como esté de lleno el tablero. Los mismos regímenes miden también lo que compra el propio backtracking. Sin backtracking alguno, un relleno voraz aleatorio se atasca dentro del primer 5 a 12% del tablero use el recorrido que use: sobre 8 semillas por orden, el atasco mediano llegó en el paso 15 para fila-mayor, 13 para un recorrido diagonal y 15 para una espiral (el recorrido diagonal osciló entre 4 y 32), y ninguna de las 24 ejecuciones llegó más lejos. Cualquier recorrido fabrica una esquina cóncava fatal en un puñado de colocaciones; ese número ilustra la geometría, no es un banco de pruebas de solucionadores. El laboratorio de abajo hace visible la planificación. Anima la secuencia de visita de cuatro órdenes predefinidos sobre una cuadrícula 16×16 y traza, en directo, el conteo de restricciones (cuántos vecinos ya colocados tiene cada celda nueva) junto con el acumulado de uniones recogidas. (Muestra la *geometría*; para hacer correr resoluciones reales a lo largo de caminos que tú mismo dibujas, el complemento práctico es el [campo de juego de caminos de búsqueda](/playground/paths/).) > **[Figure]** Interactivo: orden de relleno contra ramificación — interactive: FillOrderLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Lo que la comunidad midió **Las carreras de estrategias.** A finales de 2007 la pregunta se había vuelto cuantitativa: puzzles de referencia compartidos, conteos de nodos en búsqueda completa y un marcador público. La cima del estilo fue el algoritmo completamente automático de búsqueda de estrategias de doc_s_smith, que diseñó un orden de búsqueda que agotó el benchmark de tamaño 14 `hints15_2` en 89.794 nodos, batiendo los 141.628 ajustados a mano de Txibilis: la máquina sobre el humano ([msg 2896](https://groups.io/g/eternity2/message/2896)). Txibilis contraatacó en dos días con 85.729 ([msg 2928](https://groups.io/g/eternity2/message/2928)); doc_s_smith ya venía reflexionando sobre por qué los humanos son tan fuertes en esta disciplina ([msg 2883](https://groups.io/g/eternity2/message/2883)). La lección que sobrevivió a la carrera: la calidad de un orden es medible, y las diferencias nunca son pequeñas. **Dinámico contra fijo, medido.** El argumento entre fijo y dinámico de 2007 obtuvo una pequeña prueba controlada en septiembre de 2008. Markus Zajc ejecutó tres órdenes sobre el 8×8 sin pistas, cada uno sobre diez órdenes de piezas aleatorizados para cancelar los efectos del orden de entrada, todos bajo un resolvedor de restricciones: barrido simple, un orden por valor restante mínimo que toma siempre la celda con menos candidatos, y un orden por reducción máxima que toma la celda cuya colocación poda más. El valor restante mínimo ganó; el barrido quedó segundo pero oscilaba con el orden de entrada (su mejor ejecución seguía siendo ~2× el ganador); la reducción máxima quedó última, porque sembrar temprano el interior abierto compra un gran primer corte pero luego un factor de ramificación castigador en cada retroceso ([msg 5918](https://groups.io/g/eternity2/message/5918); los volcados de dominios por orden están en su carpeta del área de archivos). Es un tablero pequeño, pero es el duelo más limpio de la heurística CSP clásica contra un barrido fijo, y aterriza donde aterrizan los conteos de nodos posteriores de la comunidad: el valor reside en alimentar a la búsqueda con celdas restringidas, ya sea una regla dinámica o un buen camino fijo el que te lleve allí. **La victoria del barrido es un hecho sobre el diseño de E2.** En abril de 2008 Owen construyó puzzles 16×16 con el equilibrio de colores borde/interior deliberadamente inclinado (2 colores de borde y 19 de interior, luego 14 y 15) y puntuó los órdenes barrido, centro primero y borde primero en cada uno. Los diseños inclinados son atacables: el centro primero bate al barrido en ~150× en el diseño 2/19, el borde primero gana en el 14/15. En la partición 5/17 real de E2, toda desviación *pierde*: el centro primero cuesta $1,22\times10^{60}$ nodos frente a los $1,07\times10^{50}$ del barrido, porque el diseño equilibra la teselabilidad del borde y del interior, dando al puzzle «ninguna zona débil por la que empezar a teselar» ([msg 5263](https://groups.io/g/eternity2/message/5263), [5243](https://groups.io/g/eternity2/message/5243)). El barrido por líneas no es una ley de la naturaleza; es la respuesta correcta a un diseño específico y adversario. **El cuadrado mágico 10×16.** ¿Por qué el barrido por líneas y no, digamos, un orden por bloques 4×4? La regla empírica de la forma de frontera de Louis Verhaard: la mayoría de los órdenes alcanzan su máximo de conteo de nodos en torno a la profundidad 160, así que lo que importa es la forma que tu orden ha construido *ahí*, y la mejor forma conocida en profundidad 160 para E2 es un rectángulo 10×16 (con dos esquinas rellenas). Los órdenes cuya frontera pasa por «el cuadrado mágico 10×16» son casi óptimos; un barrido por bloques 2×2 lo hace, un 4×4 no, que es exactamente la brecha que Max acababa de medir ([msg 5868](https://groups.io/g/eternity2/message/5868), [5879](https://groups.io/g/eternity2/message/5879)). Esta es la pieza que la curva de conteo de restricciones por sí sola no puede ver: dos órdenes pueden pagar uniones según la misma planificación y aun así diferir por el perímetro de la región que construyen. **Por qué «resolver el borde primero» es una trampa.** El instinto humano más natural, construir el marco fácil y luego rellenar el medio, es cuantitativamente uno de los peores órdenes, y en 2025 Owen y Peter McGavin detallaron por qué, precisamente sobre este pico en profundidad 160. El borde es realmente fácil: tras la pieza de partida hay unas $5,17\times10^{37}$ formas de completarlo, de las cuales solo 14.702 pueden rellenarse con las 196 piezas de interior, de modo que unos $3,5\times10^{33}$ marcos deben probarse antes de que uno siquiera *pueda* terminar ([msg 11572](https://groups.io/g/eternity2/message/11572)). Eso por sí solo es desesperante, pero no es el verdadero problema. El problema es que con el marco fijado primero, el conteo de nodos sigue *subiendo* después del borde hasta un pico de unos $10^{57}$ hacia las 160 piezas, frente a unos $10^{43}$ del barrido por filas. Un orden borde primero se compromete temprano con el borde y luego se mete de lleno en un pico catorce órdenes de magnitud más alto que el del barrido por filas, porque solo alrededor de 1 marco de cada $10^{31}$ lleva a alguna parte y cada uno es caro de descartar ([msg 11573](https://groups.io/g/eternity2/message/11573)). El barrido por líneas no gana construyendo una frontera más bonita, sino no pagando nunca por un borde que aún no puede saber que está condenado. **Pero ¿qué barrido?** Incluso dentro de los barridos por filas hay ocho orientaciones: cuatro esquinas de partida, filas o columnas ([msg 6018](https://groups.io/g/eternity2/message/6018)). Max ejecutó durante varios días estimaciones por muestreo del tamaño del árbol completo por orientación: de derecha a izquierda se mantuvo estable justo por debajo de $2,7\times10^{40}$ nodos, mientras que de abajo arriba, de izquierda a derecha (la orientación que conecta más pronto la pieza de partida obligatoria, y la que Verhaard ya usaba) salió en torno a $2,3\times10^{40}$ ([msg 6015](https://groups.io/g/eternity2/message/6015), [6023](https://groups.io/g/eternity2/message/6023)). Una elección de folclore convertida en un ~15% medido: minúsculo al lado de los órdenes de magnitud de arriba, pero gratis. **Desviaciones que pagaron.** La ortodoxia del orden de barrido se puso a prueba constantemente, y en su mayoría ganó, pero no siempre. El propio Owen resolvió su desafío 14×14 con un orden de *cuadrados decrecientes* después de que el barrido se atascara; en tableros irregulares el argumento de equilibrio ya no se sostiene ([msg 3124](https://groups.io/g/eternity2/message/3124)). Se propusieron híbridos que empiezan como cuadrados crecientes (más baratos al principio) y cambian al barrido antes del pico de profundidad media ([msg 6142](https://groups.io/g/eternity2/message/6142)). Y Max encontró una mejora genuina dentro del barrido: al comienzo de una fila, los candidatos de borde que difieren únicamente en su segundo color de borde no emparejado son equivalentes: refuta uno y los has refutado todos. Verhaard, encantado («¡Por fin algo que bate al simple barrido por filas!»), la implementó y confirmó ~10% del espacio de búsqueda eliminado a un coste casi nulo ([msg 5980](https://groups.io/g/eternity2/message/5980), [5983](https://groups.io/g/eternity2/message/5983), [6062](https://groups.io/g/eternity2/message/6062)). ### Desviaciones que no pagaron (mediciones del cuaderno) La comunidad publicó sobre todo las desviaciones que tenían argumentos a favor. El cuaderno de laboratorio del proyecto guarda la otra especie, órdenes atractivos que perdieron, y los regímenes $k$ de arriba saben nombrar el mecanismo de cada uno. **Las espirales pagan un impuesto de cierre.** En un banco de pruebas de interior 14×14 con borde (8 semillas por brazo), una espiral de fuera hacia dentro se atascó en la profundidad 26 en las 8 semillas, en la esquina de cierre de su primer anillo. Una espiral de borde libre se estancó en profundidades 133 a 141 con 0 completados, frente a 344 a 347 de un barrido por filas; con todas las asistencias del motor activadas aún chocaba en 131 a 140 con 0 completados en 300 s, frente a 446 a 448 del barrido. La ley en $k$ dice por qué: todo el primer anillo de una espiral de borde libre corre con un vecino colocado o menos por celda, una ramificación casi imposible de podar, mientras que una espiral con borde paga un *impuesto de cierre*: cada anillo carga 4 o 5 celdas con tres vecinos colocados en sus esquinas y en su empalme, y las celdas de tres lados son casi irrellenables. El barrido por filas es el orden de Ricitos de Oro, dos vecinos constantes y una sola zona de daños activa. **Partir de las pistas pierde.** «Empieza donde está la información» suena bien y apunta al revés. En un duelo de 60 s sobre el puzzle real (una configuración, una ejecución, así que léase como nuestra prueba y no como una refutación), un orden centrado en las pistas, extendiéndose desde las cinco celdas de pista, alcanzó la profundidad 42 (62 aristas emparejadas) mientras que un orden dinámico por celda más restringida, que en la práctica devora primero el borde pero sigue libre de abandonarlo (a diferencia del marco comprometido de la trampa de arriba), alcanzaba la profundidad 164 (282 aristas emparejadas). Las celdas alrededor de las pistas centrales llevan los dominios de piezas más *anchos* del tablero; el orden centrado en las pistas prioriza exactamente las celdas menos restringidas. **Una X a través de las pistas también pierde.** Precomprometer dos diagonales de 3 celdas de ancho pasando por las cinco pistas, y luego rellenar hacia fuera, terminó 51 aristas emparejadas por debajo de su referencia (396 contra 447 con presupuestos idénticos, una sola semilla). Tres experimentos, un patrón, enunciado como patrón y no como teorema: todo orden estático que probamos que pasa temprano por celdas interiores de dominio ancho perdió. Un orden estático no esquiva la región difícil; elige qué región se convierte en la región difícil. También elige dónde aterrizan los fallos: [dónde se amontonan los desajustes](/es/research/why/mismatch-geometry/) en un tablero casi perfecto sigue al orden de barrido, centro-abajo para los barridos de arriba abajo, arriba para los de abajo arriba (visible en los propios tableros de clase 469 de la comunidad), esquinas para las espirales desde el centro. Un orden de relleno no solo decide cuánto fallas, sino dónde. La literatura académica aterriza en el mismo sitio. Ansotegui, Bejar, Fernandez y Mateu, que convirtieron los puzzles de emparejamiento de aristas en benchmarks SAT/CSP, trabajaban con órdenes estáticos de la familia damero-más-espiral-central; reproducido en nuestro motor sin el filtrado all-different completo que sus modelos suponen, ese orden hizo explotar los conteos de nodos en unas 600×. Y la base de backtracking del estudio hiperheurístico de 2012 de Wauters, Vancroonenburg y Vanden Berghe hizo competir el barrido por filas contra espiral, espiral inversa y órdenes en espejo, y encontró el barrido significativamente mejor: un redescubrimiento independiente de la tesis de la lista de correo. ### La búsqueda en peine: la geometría de las puntuaciones altas Todo lo anterior optimiza una búsqueda *completa*, cuyo conteo de nodos culmina cerca de la profundidad 160. En octubre de 2008, mientras guardaba en privado los tableros que ganarían el premio de escrutinio de 10.000 dólares, Verhaard respondió a una pregunta distinta de Owen: ¿cuál es el mejor orden cuando persigues una *puntuación* parcial y por tanto vives mucho más profundo en el tablero ([msg 6111](https://groups.io/g/eternity2/message/6111))? Su respuesta nombraba una geometría: los mejores órdenes que había encontrado se parecen a una **búsqueda en peine** (la mayoría de las filas recorridas horizontalmente, y luego las filas restantes recorridas verticalmente), con la longitud de los dientes ligada al objetivo: «Cuanto más baja sea la puntuación que persigues, más largos se vuelven los dientes del peine» ([msg 6112](https://groups.io/g/eternity2/message/6112)). Max había convergido de forma independiente hacia casi el mismo orden (doce filas de barrido, luego barrido por columnas) y reportó puntuaciones «aproximadamente 1 arista más bajas» que lo que lograba el solucionador de Louis ([msg 6126](https://groups.io/g/eternity2/message/6126)). La intuición: una búsqueda completa debe cruzar el cuello de botella de la profundidad 160 lo más barato posible; una búsqueda de puntuación alta, en cambio, quiere muchas maneras baratas de *terminar*. Cada diente vertical es una columna corta, casi independiente, cuyos fallos son locales, de modo que fronteras profundas y de puntuación alta se alcanzan una y otra vez. El peine era una de las dos mitades de la máquina detrás del 467; la otra mitad, el [deslizamiento de aristas con umbral de profundidad](/es/research/build/reduce/edge-slipping/), decidía qué se les permitía colocar a los dientes. Y las dos se ajustaron *conjuntamente*: Verhaard optimizó el orden de relleno y el arreglo de deslizamientos juntos con una cadena de Markov sobre (profundidad, deslizamientos usados), construida a partir de probabilidades de ajuste por profundidad medidas ([msg 6423](https://groups.io/g/eternity2/message/6423)). Diseño de orden por cálculo, no por folclore. El motor completo está en [la página eii de Verhaard](/es/research/lab/experiments/louis-verhaard/eii/). ### El peine, reproducido El peine durmió dieciocho años en la historia de los récords antes de que lo probáramos en casa; fue releer los mensajes de arriba lo que sacó a la luz la palanca. Injertar la geometría del peine en un productor de búsqueda en haz escrito desde cero (filas superiores en fila-mayor, filas inferiores rellenadas como dientes verticales cortos) elevó su mejor parcial bruto de 455 a 457 aristas emparejadas de 480, en tableros con las cinco pistas estrictas, solo por el orden de visita; nada más cambió. Detrás de esa frase hay un barrido, no una carrera afortunada: cinco órdenes (fila-mayor más cortes de peine tras las filas 8, 10, 12 y 14) cruzados con tres anchuras de haz (2048, 8192 y 16384), 24 semillas cada uno a cómputo igualado, en 8 núcleos. El techo nuevo solo aparece en el haz más ancho, donde el corte 14 alcanzó 457 en una semilla y el corte 12 alcanzó 456 en dos, cada tablero comprobado de tres maneras independientes (un repuntuador independiente, un verificador externo y el conteo propio del productor; colocación estricta de las cinco pistas, las 256 piezas todas distintas). En anchuras menores el peine empata el máximo del fila-mayor. Lo que el peine mueve con fiabilidad es el suelo y el centro de la distribución. En haz 2048, los cortes 10 y 12 suben el mínimo de 24 semillas de 446 a 449 y la mediana de 449 a 451; en el haz más ancho, la mediana del corte 12 gana una arista. El corte 12 también alcanza 455, el antiguo techo del fila-mayor, con la mitad de la anchura de haz, y en haz 8192 un barrido de 24 semillas rinde 15 tableros de 453 o mejor contra 9 del fila-mayor: +67% de buenos tableros de partida por unidad de cómputo. La regla de Verhaard sobre la longitud de los dientes se sostiene también desde arriba. Los dientes largos (corte 8, dientes de 8 celdas) retroceden por debajo del fila-mayor en todas las anchuras; los dientes cortos ganan. El corte 12, el exacto «doce filas, luego columnas» de Max, es el mejor para toda la distribución, mientras que el corte 14, con sus dientes de 2 celdas, encuentra el mejor tablero aislado sobre una mediana más baja: una geometría de remate más fina y de mayor varianza. El mecanismo es la intuición enunciada arriba, ahora medida: cada diente corto es una columna casi independiente cuyos fallos quedan confinados, de modo que las fronteras profundas de puntuación alta se alcanzan una y otra vez. El orden también decide dónde acaba la holgura recuperable. Una re-resolución exacta de las tres últimas filas sube un tablero fila-mayor de 455 a 457 y no hace nada por un tablero peine de 457: la región rellenada al final y menos restringida del peine son sus dientes verticales, no sus filas inferiores, así que una reparación por banda de filas apunta al lugar equivocado. Una re-resolución exacta alineada con los dientes, por banda de columnas, lleva los tableros peine a 459 y no más allá, porque los dientes salen del haz ya exactamente óptimos (un solucionador exacto probó óptima una región de dientes de 32 celdas en unos 21 s); el peine gasta durante la construcción la holgura que la reparación habría recuperado. Las dos rutas convergen en 459: el peine adelanta la puntuación, el fila-mayor la deja en una cola recuperable, y orden más reparación de final de partida cosechan la misma holgura. Para la escala, 455, 457 y 459 son conteos de aristas emparejadas en tableros con las cinco pistas estrictas, de un productor de cuaderno en 8 núcleos; los tableros comunitarios están más arriba, y [la página de récords](/es/research/records/) lleva la clasificación. ## El otro orden: qué pieza probar primero Todo lo anterior ordena *celdas*. La perilla gemela es el orden de las *piezas* probadas dentro de una celda: el duelo de Zajc iba de qué celda abrir a continuación, este va de qué candidato entra primero. La respuesta del cuaderno es un nulo limpio. Dentro de un relleno fila-mayor fijo, reordenar la lista de candidatos de cada celda por escasez global de color (colores más raros primero) no cambió nada medible sobre 8 semillas por brazo: a 60 s de reloj iguales, la mediana fue de 389 aristas emparejadas (pistas fijadas, puzle de cinco pistas) en *cada* brazo, orden de referencia, escasez-primero, y un contraorden deliberado (colores más abundantes primero) diseñado para perder. El control no perdió; su mejor ejecución (419) batió a la mejor de la referencia (415). El caudal de nodos fue plano entre brazos, 8,2 a 9,6 millones de nodos por segundo: el reordenamiento es gratis, y sin valor, en ambos sentidos. (Antes de comparar, el brazo de referencia se verificó idéntico nodo a nodo al motor sin modificar.) El mecanismo es una señal hambrienta. Cuando un barrido fila-mayor alcanza una celda, la lista de candidatos ya está filtrada al puñado de piezas que emparejan con dos colores fijados, y una poda global de factibilidad oferta-demanda ya explota la escasez de color sobre todo el resto del inventario; el orden por escasez re-deriva, más toscamente, información que la búsqueda ya usa, y cuál de tres piezas legales entra primero importa poco cuando el cubo se agotará de todos modos. Acotémoslo como se midió: el orden de candidatos fue inerte en nuestro motor en un punto de operación (una pila de podas, un presupuesto de 60 s, solo señales globales de escasez), no «el orden de valores nunca importa en ningún sitio». Rima además con la única victoria intra-barrido de arriba: el ~10% de Max vino de *eliminar* candidatos de borde, no de reordenarlos. Las ganancias viven en la poda y en el orden de las celdas. ## Paso a paso 1. **Observa el barrido por filas.** Tras la primera fila, casi cada colocación encuentra exactamente dos vecinos colocados: a la izquierda y debajo. La curva de restricciones se aplana en 2, y el acumulado de uniones sube de forma constante: la búsqueda paga a medida que avanza. 2. **Cambia a la espiral.** Todo el primer anillo (60 colocaciones) llega con como mucho un vecino colocado: sesenta elecciones casi sin restricción apiladas antes de que el interior empiece a devolverlas. La línea acumulada se hunde por debajo de la referencia del barrido por filas exactamente donde el árbol menos se lo puede permitir. 3. **Prueba la diagonal.** Sorpresa: los conteos se parecen casi a los del barrido por filas. Este es el límite del punto de vista por conteo de vecinos: la frontera de la diagonal es más larga que la de un barrido durante buena parte del medio juego, un efecto de forma que solo la [teoría compleja](/es/research/why/complex-theory/) (o la regla mágica del 10×16) puede puntuar. 4. **Selecciona el peine con dientes de 4.** Doce filas de barrido, luego dientes verticales, el orden de Max del [msg 6126](https://groups.io/g/eternity2/message/6126). Fíjate en el pequeño acantilado en cada nuevo diente: la primera columna paga una celda débil, de 1 vecino, en su base, el precio de la geometría de las puntuaciones altas. 5. **Alarga los dientes.** Una mayor parte del tablero pasa a modo vertical y las colocaciones débiles se multiplican. Ese es el compromiso de Verhaard, dicho visualmente: cuanto más baja sea la puntuación que persigues (cuantos más deslizamientos permitas), más largos serán los dientes que puedes permitirte. 6. **Luego hazlo correr de verdad.** El [campo de juego de caminos de búsqueda](/playground/paths/) te permite dibujar cualquiera de estos caminos, o el tuyo propio, sobre un puzzle real y ver a los solucionadores correrlos en carrera, con una estimación de pico de meseta en directo al lado. ## Lo que cuesta En tiempo de ejecución, nada: un orden de relleno fijo es un arreglo precalculado de 256 índices de celda, y «elegir la siguiente celda» es un incremento de índice: $O(1)$, cero ramificaciones, que es precisamente el argumento de velocidad que mató al ordenamiento dinámico para E2 ([msg 5860](https://groups.io/g/eternity2/message/5860)). Todo el coste y todo el beneficio residen en el árbol que el orden induce: - **Entre familias de órdenes, órdenes de magnitud.** El centro primero en E2 es $10^{10}$ veces más caro que el barrido ([msg 5263](https://groups.io/g/eternity2/message/5263)); un orden por bloques 4×4 cuesta ~70× sobre el barrido 1×1 según las estimaciones de teoría compleja de Max, la brecha que resume la regla mágica del 10×16 ([msg 5867](https://groups.io/g/eternity2/message/5867)). - **Dentro de una familia, porcentajes medibles.** Abajo-arriba-izquierda-derecha contra barrido de derecha a izquierda: ~15% ([msg 6023](https://groups.io/g/eternity2/message/6023)); poda por equivalencia de piezas de borde: ~10% ([msg 6062](https://groups.io/g/eternity2/message/6062)). Vale la pena tenerlo, nunca decisivo. - **Elegir mal es invisible.** Un mal orden no produce ningún error, solo un árbol $10^{10}$ veces más grande, en silencio. Por eso el verdadero avance de la comunidad no fue ningún orden en particular, sino la capacidad de *puntuar un orden antes de ejecutarlo*: los conteos de formas de Owen, luego la [teoría compleja](/es/research/why/complex-theory/), luego el ajuste por cadena de Markov de Verhaard combinando orden y calendario de deslizamientos ([msg 6423](https://groups.io/g/eternity2/message/6423)). Cada motor récord desde entonces ha tratado el orden como un objeto diseñado y calculado: el peine-más-arreglo-de-deslizamientos de Verhaard ([eii](/es/research/lab/experiments/louis-verhaard/eii/)), el barrido inferior- izquierdo elegido por teoría compleja de McGavin, y el orden de barrido fijo bajo los cortes con umbral de profundidad de [Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/). Veinte años de ciencia del orden de barrido se condensan en una sola instrucción: antes de gastar una sola hora-CPU, gasta un milisegundo puntuando el camino. ## Relacionado - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [El eii de Verhaard: el solucionador que ganó el único premio](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/eii/) — El motor detrás del 467, la única puntuación de Eternity II jamás premiada, reconstruido a partir de los propios mensajes de Louis Verhaard en la lista de correo: poda prospectiva, órdenes de relleno en peine, deslizamiento de arista condicionado por la profundidad, un calendario de deslizamiento ajustado por cadena de Markov. Y por qué su propio binario Win32, sin código fuente, no puede compilarse ni ejecutarse en esta máquina en absoluto. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [El deslizamiento de arista](https://eternity2.dev/es/research/build/reduce/edge-slipping/) — La jugada premiada de Louis Verhaard: dejar que el backtracker coloque una pieza no concordante, pero solo a profundidades escogidas cerca del final del tablero. Cada deslizamiento permitido cuesta un punto de puntuación y multiplica de forma astronómica el número de tableros objetivo. Por eso su 467 se encontró más de cincuenta veces, y el ancestro directo de las rupturas de Blackwood. - [Reinicios y colas pesadas](https://eternity2.dev/es/research/build/backtracking/restarts/) — Ejecute el mismo backtracker sobre el mismo puzzle dos veces y los tiempos de ejecución diferirán por potencias de diez. La comunidad lo midió en 2007; la literatura CSP ya lo había bautizado. La cura (cortar, rebarajar, reiniciar) es la razón por la que todo solucionador récord desde entonces es un portafolio de reinicios. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Reinicios y colas pesadas > Ejecute el mismo backtracker sobre el mismo puzzle dos veces y los tiempos de ejecución diferirán por potencias de diez. La comunidad lo midió en 2007; la literatura CSP ya lo había bautizado. La cura (cortar, rebarajar, reiniciar) es la razón por la que todo solucionador récord desde entonces es un portafolio de reinicios. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/backtracking/restarts/ - Actualizado: 2026-07-02 - Temas: backtracking, search-space - Fuente: El experimento de Txibilis sobre 500 puzzles: los reinicios ganan el 52 % de las carreras, pero toda la cola (groups.io message 2822) — https://groups.io/g/eternity2/message/2822 - Fuente: La afirmación original de antminder, backtracking con múltiples reinicios (groups.io message 2420) — https://groups.io/g/eternity2/message/2420 - Fuente: Verhaard sobre lo que el muestreo por reinicios reveló acerca del paisaje de puntuaciones (groups.io message 5182) — https://groups.io/g/eternity2/message/5182 - Fuente: antminder sobre la búsqueda con conciencia de plazo, donde la probabilidad dentro de la ventana vence a un mejor promedio (groups.io message 3089) — https://groups.io/g/eternity2/message/3089 - Fuente: Blackwood sobre el tope de 50 mil millones, un número «arbitrario» (groups.io message 10066) — https://groups.io/g/eternity2/message/10066 - Fuente: La granja de 20 PC reiniciados a mano de McGavin para el censo 9×9 (groups.io message 9342) — https://groups.io/g/eternity2/message/9342 - Fuente: La resolución 10×10 de McGavin: 92 907 búsquedas de fila reiniciadas y la ley de los grandes números (groups.io message 9688) — https://groups.io/g/eternity2/message/9688 - Fuente: El hilo sobre la higiene del PRNG, periodo del generador frente a campañas de reinicios (groups.io message 6798) — https://groups.io/g/eternity2/message/6798 - Fuente: Gomes, Selman & Kautz, Heavy-Tailed Phenomena in Satisfiability and Constraint Satisfaction Problems (J. Automated Reasoning, 2000) — https://doi.org/10.1023/A:1006314320276 - Fuente: Gomes, Selman & Kautz, Boosting Combinatorial Search Through Randomization (AAAI-98) — https://cdn.aaai.org/AAAI/1998/AAAI98-061.pdf - Fuente: Luby, Sinclair & Zuckerman, Optimal Speedup of Las Vegas Algorithms (Information Processing Letters, 1993) — https://doi.org/10.1016/0020-0190(93)90029-9 --- Ejecute el mismo backtracker sobre dos puzzles extraídos de la misma distribución y los tiempos de resolución no difieren en porcentajes; difieren por potencias de diez. La comunidad de Eternity II lo midió en octubre de 2007. En respuesta a la afirmación de antminder de que el «backtracking con múltiples reinicios» batía al backtracking simple ([groups.io message 2420](https://groups.io/g/eternity2/message/2420)), un escéptico Txibilis generó 500 puzzles 7×7 aleatorios e hizo competir ambas políticas en cada uno, con el solucionador con reinicios cortando a 10 millones de nodos por intento. El reiniciador ganó solo el 52 % de las carreras, un cara o cruz. Entonces observó los *márgenes*: entre las 240 carreras que ganó el backtracker simple, su mayor margen de victoria fue de 90 millones de nodos. Entre las 260 que ganó el reiniciador, el mayor margen fue de **50 463 millones**, y en 45 de esas carreras el solo margen del reiniciador superaba la mejor victoria del solucionador simple ([message 2822](https://groups.io/g/eternity2/message/2822)). Una columna del registro está acotada; la otra no lo está. Esa asimetría tiene un nombre en la literatura: una **distribución de tiempos de ejecución de cola pesada**. Gomes, Selman y Kautz habían descrito exactamente este fenómeno en la búsqueda SAT y CSP una década antes ([AAAI-98](https://cdn.aaai.org/AAAI/1998/AAAI98-061.pdf)), y lo formalizaron en [su artículo de 2000](https://doi.org/10.1023/A:1006314320276): para el backtracking sobre instancias difíciles, la función de supervivencia decae como una ley de potencia, $P(T > t) \approx C\,t^{-\alpha}$, no como una exponencial. El decaimiento es tan lento que para $\alpha \le 1$ el *promedio* del tiempo de ejecución es infinito. Cada récord de Eternity II desde entonces, desde el [467 de Verhaard](/es/research/lab/experiments/louis-verhaard/eii/) y el [10×10 de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) hasta la [oleada de 468–470](/es/research/lab/experiments/joshua-blackwood/solver/), fue hallado por un solucionador construido en torno a este hecho. ## Por qué aparecen las colas Un backtracker en profundidad con un [orden de relleno](/es/research/build/backtracking/fill-order/) fijo toma sus decisiones más baratas primero y luego no las revisa jamás: un solucionador de recorrido por filas que ha alcanzado la profundidad 150 ha fijado, en la práctica, definitivamente sus tres primeras filas. Si una de esas colocaciones tempranas es errónea (legal, plausible, pero sobre ningún tablero completable), todo el subárbol por debajo de ella es estéril, y el solucionador debe *agotar* ese subárbol antes de que el mecanismo ordinario de backtracking suba lo bastante alto como para deshacer el error. Los tamaños de subárbol son exponenciales en la altura del giro equivocado, de modo que un mal compromiso a la profundidad 3 cuesta exponencialmente más que uno a la profundidad 30. La cola de la distribución de tiempos de ejecución es precisamente la distribución de los malos compromisos tempranos, heredados para siempre. El reverso es una cola *izquierda* igualmente gruesa: algunas ejecuciones aciertan todas sus decisiones tempranas por suerte y terminan con una rapidez absurda. El punto de Gomes, Selman y Kautz es que ambas colas proceden del mismo mecanismo amplificador de la varianza, y que la respuesta correcta no es una mejor ejecución promedio, sino *más extracciones de la distribución*. Louis Verhaard añadió una observación propia de Eternity II. Al principio había usado los reinicios como instrumento de sondeo, con la esperanza de que las regiones de alta puntuación se agruparan como cordilleras: encontrar el Himalaya por muestreo grueso y luego escalar. Lo que su muestreo halló en realidad es que las puntuaciones altas están dispersas «como rascacielos en las ciudades»: uno o unos pocos en cualquier parte, y encontrar uno no dice nada sobre dónde se alza el siguiente ([message 5182](https://groups.io/g/eternity2/message/5182)). No hay señal regional que valga la pena para quedarse, lo que elimina el último argumento en favor de la lealtad a una ejecución que penosamente avanza. El hilo original llevaba una salvedad: Txibilis razonaba que los reinicios solo deberían rendir cuando la instancia tiene *muchas* soluciones (muchas oportunidades de un prefijo afortunado) y menos en un banco de pruebas de solución única. Para Eternity II la distinción es irrelevante, a favor del buscador: la [teoría compleja](/es/research/why/complex-theory/) sitúa el puzzle completo sin pistas en aproximadamente $1.15 \times 10^7$ soluciones, cualquiera de las cuales gana, y la caza de puntuaciones parciales cuenta con astronómicamente más objetivos todavía. ## El remedio El remedio es de una simplicidad casi embarazosa, y la receta de 2007 de antminder ya lo contiene por completo: ejecutar el backtracker durante un presupuesto fijo y, si no ha aparecido ninguna solución, **detener, rebarajar el orden de las piezas y empezar de nuevo desde el tablero vacío** ([message 2420](https://groups.io/g/eternity2/message/2420)). Dos ingredientes importan: - **El corte** trunca la cola derecha por decreto. Ningún intento puede costar más que el presupuesto $c$, de modo que la columna no acotada del registro de Txibilis simplemente deja de existir. - **Una aleatorización fresca** (un orden de candidatos rebarajado, una apertura distinta) hace de cada intento una extracción independiente de la distribución de tiempos de ejecución, en lugar de una repetición del mismo descenso condenado. Sin ella, reiniciar no es más que la misma ejecución aquejada de amnesia. Cuando la distribución es conocida, existe un corte *fijo* óptimo. Cuando no lo es, que es el caso habitual, [Luby, Sinclair y Zuckerman](https://doi.org/10.1016/0020-0190(93)90029-9) demostraron que apenas se necesita: su planificación universal $1,1,2,1,1,2,4,1,1,2,\ldots$ (cada potencia de dos apareciendo según un patrón autosimilar) queda a un factor logarítmico del corte fijo óptimo sobre *toda* distribución, y ninguna planificación universal puede hacerlo mejor en general. Cómo se ve la producción, veinte años después: - **El motor de Blackwood** limita cada intento a 50 mil millones de nodos y rebaraja las piezas de apertura, la primera esquina y la fila inferior, antes de cada nueva ejecución, de modo que ningún par de intentos vuelve a recorrer el mismo prefijo ([la página del solucionador](/es/research/lab/experiments/joshua-blackwood/solver/) cubre la maquinaria). Preguntado por cómo se eligió la cifra de 50 mil millones, Blackwood respondió: «El número de 50 G era arbitrario. Probé unos cuantos números grandes (más de 1 G) y no marcaban demasiada diferencia» ([message 10066](https://groups.io/g/eternity2/message/10066)). Esa insensibilidad es en sí misma una firma de cola pesada: cuando el enemigo es la cola, casi cualquier corte que respete el cuerpo de la distribución funciona. - **Las granjas de McGavin** son la misma política a escala humana. Su censo de soluciones 9×9 corría en «unos 20 PC» recolectados para alcanzar hasta 60 núcleos, cada uno ejecutando un backtracker de recorrido por filas a partir de un arreglo de piezas rebarajado aleatoriamente, y él «reiniciaba manualmente los que parecían atascados» ([message 9342](https://groups.io/g/eternity2/message/9342)). Su resolución en 2017 del 10×10 de Brendan Owen, el banco de pruebas resuelto más difícil de la comunidad, fue un portafolio de reinicios por construcción: 92 907 búsquedas independientes de primera fila, repartidas en más de 400 núcleos, donde la teoría predecía alrededor de un éxito por cada 70 000. Su propio resumen: «ningún método nuevo, solo persistencia sistemática y la ley de los grandes números» ([message 9688](https://groups.io/g/eternity2/message/9688)). Existe también una lectura estratégica, enunciada en la lista ya en 2007: bajo el plazo de un concurso, un solucionador con un *peor promedio* pero con más masa de probabilidad dentro de la ventana de tiempo es el mejor solucionador ([message 3089](https://groups.io/g/eternity2/message/3089)). Los reinicios son exactamente ese trueque: remodelan la distribución en torno a su cuerpo, a costa de nunca llevar a término una ejecución de maratón. > **Alimente el portafolio con azar genuino** > > Un portafolio de reinicios es tan diverso como sus rebarajados. En 2009 un miembro se preocupaba de que el generador estándar de su solucionador, con su periodo de $2^{32}$, pudiera limitar silenciosamente cuánto del árbol podrían llegar a muestrear sus reinicios ([message 6798](https://groups.io/g/eternity2/message/6798)); la respuesta de la lista fue el Mersenne Twister, el remedio estándar para la simulación no criptográfica ([message 6801](https://groups.io/g/eternity2/message/6801)). Un PRNG débil no hace caer una campaña de reinicios; estrecha discretamente la distribución de la que se extrae. ## Vea colapsar la cola El laboratorio de abajo extrae 400 ejecuciones de solucionador de una mezcla de cola pesada inicializada por semilla, calibrada para coincidir con la medición de 2007: un cuerpo de ejecuciones afortunadas en torno a unos pocos millones de nodos, una cola que se extiende cinco órdenes de magnitud más allá. Luego le confía el corte. > **[Figure]** Interactivo: tiempos de ejecución de cola pesada y reinicios — interactive: RestartTailLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso 1. **Observe cómo se llena el histograma.** La mediana (marcador esmeralda) se estabiliza dentro de las primeras decenas de ejecuciones y ya casi no se mueve. La media (marcador rosa) no se estabiliza jamás: cada ejecución que cae en la cola la tira hacia la derecha. Un estadístico dominado por sus muestras más raras es la definición visual de una cola pesada. 2. **Lea el eje logarítmico.** El cuerpo se sitúa cerca de $10^6$ nodos; las peores ejecuciones superan los $10^{11}$, la misma dispersión de órdenes de magnitud que el registro de 90 M frente a 50 463 M de Txibilis, sobre una distribución lo bastante pequeña como para dibujarla. 3. **Ahora corte.** El corte por defecto es de 10 millones de nodos, el propio de Txibilis. Cada ejecución ámbar que lo habría rebasado se abandona en la línea discontinua y se reintenta. La media y el P99 de la fila de reinicios caen muy por debajo de la fila de ejecución única: la cola no se sobrevive, se *elimina*. 4. **Corte demasiado profundo.** Arrastre el corte por debajo del borde izquierdo del cuerpo. La probabilidad de éxito por intento se desploma, el número esperado de intentos estalla y el total esperado asciende. En el extremo, ninguna ejecución puede terminar y la política nunca tiene éxito. El corte debe respetar las ejecuciones afortunadas sobre las que apuesta. 5. **Fíjese en lo plano que es el punto óptimo.** Entre «demasiado codicioso» y «demasiado paciente» se extiende una meseta de varios órdenes de magnitud de ancho donde el total esperado apenas cambia. Los 50 mil millones «arbitrarios» de Blackwood, hallados empíricamente, son esa meseta que se expresa. ## Lo que cuesta Fije un corte $c$ y sea $F(c) = P(T \le c)$ la probabilidad de que un único intento tenga éxito dentro del presupuesto. Los intentos fallidos cuestan $c$ cada uno y su número es geométrico, de modo que el trabajo total esperado hasta el primer éxito es $$ \mathbb{E}[T_c] \;=\; \frac{1 - F(c)}{F(c)}\,c \;+\; \mathbb{E}[T \mid T \le c]. $$ Minimizar sobre $c$ da el mejor tiempo con corte fijo $\ell^{\ast} = \min_c \mathbb{E}[T_c]$. Frente a una cola pesada $P(T > t) \approx C\,t^{-\alpha}$ esto no es un refinamiento sino un rescate: para $\alpha \le 1$ el promedio sin reinicio $\mathbb{E}[T]$ diverge mientras que $\ell^{\ast}$ permanece finito: la política convierte una esperanza infinita en una finita. Y el teorema de Luby pone precio a la ignorancia de no conocer $F$: la planificación universal alcanza un tiempo esperado de $O(\ell^{\ast} \log \ell^{\ast})$ sin conocimiento alguno de la distribución, y ese factor logarítmico es óptimo. El precio del reinicio es aquello que desecha: un tablero parcial profundo, abandonado. En Eternity II ese precio es inusualmente bajo, por dos razones. Primero, el [embudo de la teoría compleja](/es/research/why/complex-theory/): las ejecuciones se atascan contra un muro de profundidad a una profundidad característica, y el progreso más allá de él es raro de un modo que no se acumula. Las 92 907 búsquedas de fila 10×10 de McGavin registraron una profundidad de colocación máxima de 88–99 (sobre 100) para todas menos una, con bastante más de la mitad de la masa en solo tres profundidades ([message 9688](https://groups.io/g/eternity2/message/9688)). Una ejecución plantada en el muro durante horas no posee ningún activo que una ejecución fresca no pueda volver a ganar en minutos; su «progreso» era un boleto de lotería, ya rascado. Segundo, el estado del tablero no lleva aprendizaje alguno: a diferencia de un [solucionador SAT con aprendizaje de cláusulas](/es/research/build/reduce/nogood-learning/), un backtracker simple que muere a la profundidad 190 no ha registrado nada sobre el *porqué*, de modo que persistir tampoco preserva conocimiento alguno. Lo que se pierde de verdad es el certificado. Un portafolio de reinicios muestrea el árbol; no lo barre. McGavin lo dice sin rodeos a propósito de su censo 9×9: «no recorrí sistemáticamente todo el árbol de búsqueda, así que podría haber pasado por alto algunas soluciones» ([message 9342](https://groups.io/g/eternity2/message/9342)). Para probar que una región está vacía, los reinicios son la herramienta equivocada. Para encontrar una solución, o un tablero récord, en un espacio donde su tiempo de ejecución abarca potencias de diez, son la única política sensata, y todo motor de la [cronología de récords](/es/research/records/) los emplea. ## Relacionado - [LADDER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lanzar cientos de búsquedas cortas y baratas sobre el tablero, conservar solo los arranques más profundos y hacer ascender a los supervivientes a través de rondas cada vez más largas. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. --- # Los benchmarks de la comunidad > Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/benchmarks/ - Actualizado: 2026-07-21 - Temas: backtracking, speed - Fuente: La propuesta de censo de esquinas 3×3: 'Suggestion for Benchmark/Test' (arthurhucksake), eternity2@groups.io, 2007-08 — https://groups.io/g/eternity2/message/2229 - Fuente: Txibilis lanza la suite de benchmarks: 'New round of benchmarks...', eternity2@groups.io, 2007-08 — https://groups.io/g/eternity2/message/1610 - Fuente: Los conjuntos de datos 'Benchmarks for Beginners' de Geoff, eternity2@groups.io, 2008-02 — https://groups.io/g/eternity2/message/4322 - Fuente: hints.20.3 enumerado por completo: 'Algorithmic Challenges related to E2' (doc_s_smith), eternity2@groups.io, 2010-07 — https://groups.io/g/eternity2/message/7861 - Fuente: Ambos 9×9 explorados exhaustivamente (istarinz), eternity2@groups.io, 2011-03 — https://groups.io/g/eternity2/message/8793 - Fuente: El set_1 10×10 de Brendan resuelto (Peter McGavin), eternity2@groups.io, 2017-09 — https://groups.io/g/eternity2/message/9686 - Fuente: La suite Sample Puzzles de Dave Clark y su formato de archivo documentado (archivos de groups.io) — https://groups.io/g/eternity2/files/Sample%20Puzzles - Fuente: Los tableros de benchmark de tamaños variables, lados 11 a 16 (archivos de groups.io) — https://groups.io/g/eternity2/files/Benchmarks --- Toda comunidad de solucionadores necesita problemas de prueba, pero la de Eternity II tenía una restricción adicional: en agosto de 2007, Christopher Monckton reclamó el copyright sobre el diseño de las piezas y amenazó con acciones legales contra "cualquier circulación de las mismas, en cualquier forma o medio", llegando a descalificar a Brendan Owen por un archivo que ni siquiera contenía las piezas reales ([mensajes 1342](https://groups.io/g/eternity2/message/1342) y [1358](https://groups.io/g/eternity2/message/1358)). Así que la comunidad construyó su cultura de pruebas en torno a dos cosas que *sí* podían compartirse: conteos derivados calculados a partir de las piezas, y puzzles del tipo de E2 generados desde cero. Ambas siguen siendo hoy la forma correcta de calibrar un solucionador. ## El protocolo de censo: verificar sin compartir Si dos personas transcriben las mismas 256 piezas y escriben código correcto, sus solucionadores deben coincidir en los conteos exhaustivos. Esa observación, publicada por arthurhucksake en agosto de 2007, se convirtió en la prueba de corrección estándar de la comunidad: pavimentar la esquina superior izquierda 3×3 con todas las piezas de E2 y contar. La respuesta es **2 633 221** soluciones, o **2 582 369** sin la pieza pista obligatoria ([mensaje 2229](https://groups.io/g/eternity2/message/2229), [2370](https://groups.io/g/eternity2/message/2370)). El censo de bloques 2×2 siguió ese mismo otoño, con dos programas independientes convergiendo en **5 248** bloques de esquina, **292 012** bloques de borde y **4 059 952** bloques interiores ([mensaje 3044](https://groups.io/g/eternity2/message/3044), [3046](https://groups.io/g/eternity2/message/3046)). El protocolo demostró su valor. Cuando apal1969 publicó en 2009 los conteos, pieza central por pieza central, de todos los parciales 3×3 interiores, la avalancha de programas independientes halló bugs en *ambos* lados. Un verificador descubrió que su propia pieza pista estaba girada 90°, y el propio apal1969 encontró un error que afectaba a cada pieza central salvo una ([mensaje 6625](https://groups.io/g/eternity2/message/6625), [6657](https://groups.io/g/eternity2/message/6657), [6666](https://groups.io/g/eternity2/message/6666)). Reproducir los números del consenso te valía ser recibido, medio en broma, en el "Right Numbers Club" ([mensaje 6869](https://groups.io/g/eternity2/message/6869)). Compartir conteos en lugar de piezas era seguro en cuanto al copyright, y atrapaba más bugs que cualquier revisión de código. Los formatos de intercambio cristalizaron en el mismo periodo: la comunidad se estandarizó en los archivos `e2pieces.txt` / `e2hints.txt` del proyecto eternity2.net de Dave Clark, consignados de forma explícita para que las herramientas pudieran interoperar ([mensajes 3571](https://groups.io/g/eternity2/message/3571) y [3572](https://groups.io/g/eternity2/message/3572)). La métrica tardó más. Un debate de "nodo contra paso" sobre qué debía contar exactamente un solucionador terminó con la admisión de que no se acordaría ninguna métrica común ([mensaje 3946](https://groups.io/g/eternity2/message/3946)). La convención de Txibilis, según la cual un nodo es una *colocación válida comprometida* y el lookahead no se cuenta ([mensaje 3843](https://groups.io/g/eternity2/message/3843)), es la que emplean la mayoría de los números de la época, y la razón por la que las viejas afirmaciones de velocidad exigen cuidado cuando se comparan. ## La suite Txibilis y la carrera al número de nodos En agosto de 2007, tras un debate sobre cómo debía ser un sustituto justo de E2 (la distribución plana 17+5 de colores, por encima de todo), Txibilis generó tableros del tipo de E2 en los lados 11 a 14 con variantes de pistas (los archivos `tiles_N_5.17`), y Craig Easton montó una base de datos de resultados ([mensaje 1610](https://groups.io/g/eternity2/message/1610), [1683](https://groups.io/g/eternity2/message/1683), [1784](https://groups.io/g/eternity2/message/1784)). La suite se convirtió de inmediato en una arena competitiva: el primer barrido completo del puzzle con pistas de tamaño 12 por parte de doc_s_smith costó 750 226 469 nodos ([mensaje 1862](https://groups.io/g/eternity2/message/1862)); dos meses de enfrentamiento entre su buscador automático de estrategia y los órdenes de relleno construidos a mano por Txibilis bajaron la búsqueda completa del benchmark de tamaño 14 `hints15_2` hasta 89 794 nodos, luego 85 729 ([mensaje 2896](https://groups.io/g/eternity2/message/2896), [2928](https://groups.io/g/eternity2/message/2928)): órdenes de magnitud por debajo de donde arrancó la carrera, con estrategias diseñadas por máquina y por humanos disputándose la delantera. Las mismas semanas produjeron un anticipo de la otra palanca: el solucionador con propagación de restricciones del recién llegado Geoff recorrió apenas 198 nodos hasta una primera solución en un benchmark con pistas 14×14 ([mensaje 2902](https://groups.io/g/eternity2/message/2902)). Y en el extremo de los pesos pesados, Txibilis agotó todo el espacio de búsqueda 14×14 (unos 2,2 × 10¹³ nodos) con la ayuda de los ordenadores de sus amigos ([mensaje 2550](https://groups.io/g/eternity2/message/2550)). La lección que enseñó la carrera es aquella a la que este wiki vuelve una y otra vez: el número de nodos es una propiedad del *orden de relleno*, y la brecha entre un orden ingenuo y uno diseñado se mide en órdenes de magnitud, no en porcentaje. Esa brecha es exactamente lo que la [teoría de la complejidad](/es/research/why/complex-theory/) hizo más tarde calculable de antemano. ## Benchmarks for Beginners En febrero de 2008, Geoff empaquetó la rampa de entrada: tres puzzles extraídos del "Set 1" generado por Brendan Owen (un 6×6 con una pista, un 8×8 con dos, un 10×10 con tres), publicados directamente en el mensaje con un formato autodocumentado ([mensaje 4322](https://groups.io/g/eternity2/message/4322)). Siguieron conjuntos de soluciones completos (el 6×6 tiene 65 soluciones distintas, 260 contando rotaciones; [mensaje 4604](https://groups.io/g/eternity2/message/4604)), y la suite acumuló números de calibración canónicos hacia los que todavía se orienta a los recién llegados: 260 soluciones con rotaciones y una búsqueda por barrido de filas completo de exactamente 69 284 103 nodos para el 6×6 ([mensaje 7771](https://groups.io/g/eternity2/message/7771), [7777](https://groups.io/g/eternity2/message/7777)). Si tu solucionador obtiene un conteo distinto, tu solucionador está mal; esa es toda la propuesta de valor. ## El duelo del 12×12 con 40 pistas En mayo de 2008, Max subió una instancia diseñada a propósito, el 12×12 de Brendan con 40 pistas (cuatro esquinas 3×3 más un 2×2 central), para medir cuánto reduce la búsqueda conocer los "entornos" de las pistas ([mensaje 5453](https://groups.io/g/eternity2/message/5453)). Lo que siguió es la mejor comparación de instancia única de la época, con todas las escuelas a la vez: el híbrido de consistencia de arco + backtracking de Geoff encontró la solución en ~7 s y 1,29 × 10⁸ nodos ([mensaje 5455](https://groups.io/g/eternity2/message/5455)); la teoría de la complejidad de Brendan tasó la búsqueda completa por simple barrido de líneas en 5,6 × 10⁸ nodos ([mensaje 5458](https://groups.io/g/eternity2/message/5458)); el fuerza-bruta en C generado de istarinz corrió a ~68 millones de colocaciones por segundo ([mensaje 5459](https://groups.io/g/eternity2/message/5459)); y el camino afinado a mano por Txibilis recortó la búsqueda completa a 2,89 × 10⁸ nodos, más de 20× por debajo del barrido de líneas, con un camino derivado de la teoría quedando justo detrás ([mensaje 5494](https://groups.io/g/eternity2/message/5494), [5522](https://groups.io/g/eternity2/message/5522)). Propagación, teoría, velocidad bruta y diseño de camino, todo en un solo tablero: el formato de duelo con el que sueña en secreto todo autor de solucionadores. ## hints.20.3: el desafío de la enumeración completa Cuando doc_s_smith volvió en 2010, reencuadró el juego: resolver E2 en sí es fuerza bruta y por tanto aburrido; el problema interesante y *comparable* es contar exhaustivamente las soluciones de benchmarks ricos en pistas ([mensaje 7803](https://groups.io/g/eternity2/message/7803)). Su buque insignia era el puzzle 16×16 `hints.20.3`, enumerado por completo en un solo núcleo a 3,5 GHz: **29 481 602 025 785 nodos** (unos 2,9 × 10¹³), 15,6 días-CPU, exactamente **una** solución ([mensaje 7861](https://groups.io/g/eternity2/message/7861)). Lo planteó como un desafío permanente: superar el número de nodos, el tiempo, o ambos. El desafío hizo lo que hacen los buenos benchmarks: forzó la colaboración. En tres semanas, Martin (capiman), istarinz y doc hicieron converger sus implementaciones de consistencia de arco y reducción de dominio intercambiando volcados completos de los dominios 16×16 para esta instancia exacta, atrapándose mutuamente bugs de espejado de coordenadas y de propagación; la estimación de doc del número de nodos para el benchmark cayó de 1,6 × 10¹³ a 2,6 × 10¹² ([mensaje 7890](https://groups.io/g/eternity2/message/7890), [7902](https://groups.io/g/eternity2/message/7902)). ## El par de 9×9: agotados, luego reverificados en una GPU En marzo de 2011, istarinz informó de haber agotado todos los espacios de búsqueda de *ambos* puzzles 9×9 de Brendan, tres semanas cada uno en un Opteron de doble núcleo: 191 750 810 226 600 nodos para el set 1, 145 088 777 827 367 para el set 2, frente a una estimación teórica de ~1,84 × 10¹⁴ ([mensaje 8793](https://groups.io/g/eternity2/message/8793)). El protocolo de censo hizo entonces su trabajo sobre la propia respuesta: al principio anunció una solución para cada uno, pero los backtrackers barajados de forma independiente de Peter McGavin encontraron una *segunda* solución para el set 1 ([mensaje 8801](https://groups.io/g/eternity2/message/8801)), y los recuentos corregidos (**2 soluciones para el set 1, 3 para el set 2**) se confirmaron cuando McGavin encontró las tres soluciones del set 2 ([mensaje 8803](https://groups.io/g/eternity2/message/8803)). La teoría de la complejidad había predicho 3,2 soluciones para el set 1: el orden de magnitud correcto en la mayor instancia jamás explorada por completo. Siete años después, los números fueron reverificados desde cero por una implementación completamente distinta sobre un hardware absurdamente diferente: el solucionador con compute-shader de DirectX 12 de Adam Miles recorrió el árbol completo del set 1 9×9 en una Xbox One X en 25 h 24 m y encontró exactamente las 2 soluciones conocidas ([mensaje 9822](https://groups.io/g/eternity2/message/9822)). Así es como se ve una cultura de benchmarks madura: un censo en CPU de 2011 y una GPU de consola de 2018 coincidiendo hasta la solución. ## Los 10×10 de Brendan: uno cayó, el otro sigue en pie Los puzzles 10×10 sin pistas de Brendan Owen eran la frontera reconocida de la comunidad: "Nadie ha resuelto siquiera su 10×10 todavía. El mayor resuelto es el 9×9" ([mensaje 8936](https://groups.io/g/eternity2/message/8936)). En septiembre de 2017, Peter McGavin resolvió **set_1**: enumerar las ~20 millones de primeras filas, clasificarlas según la probabilidad de solución por nodo del árbol de búsqueda que da la teoría de la complejidad, y repartir el backtracking entre más de 400 núcleos de placas ARM caseras y servidores prestados. La solución llegó tras ~2 × 10¹⁷ nodos (unos **180 núcleos-año**), en la búsqueda de fila ~92 907 de una predicción de una por cada 70 000, tras haber cubierto menos del 0,5 % del árbol entero ([mensaje 9686](https://groups.io/g/eternity2/message/9686); método y estadísticas en [9688](https://groups.io/g/eternity2/message/9688)). Martin validó el tablero de forma independiente ([mensaje 9725](https://groups.io/g/eternity2/message/9725)), y el veredicto de la comunidad, "asombroso que esté siendo realmente tan difícil como se predijo" ([mensaje 9693](https://groups.io/g/eternity2/message/9693)), hizo las veces de la validación empírica más fuerte que la [teoría de la complejidad](/es/research/why/complex-theory/) haya recibido jamás. En palabras del propio McGavin: ningún método nuevo, solo persistencia sistemática y la ley de los grandes números. **Set_2 nunca se ha resuelto.** A la última actualización de esta página, sigue siendo exactamente lo que set_1 fue durante una década: un 10×10 sin pistas, con estadísticas conocidas, con la dificultad tasada por la teoría, esperando los 180 núcleos-año de alguien. Si quieres un benchmark con el que hacerte un nombre, es este. Figura en el [tablero de problemas abiertos](/es/research/open-problems/) como el objetivo con nombre más cercano por debajo del puzzle completo; si le echas una carrera, [contribuir](/es/research/contribute/) el tablero o las estadísticas le da al resultado un hogar permanente. ## El rendimiento, en términos de 2026 Las afirmaciones de velocidad de la época de más arriba (los ~68 millones de colocaciones por segundo de istarinz en 2008) merecen una actualización, porque las "colocaciones por segundo" siguen siendo el modo en que la comunidad mide un solucionador, y el techo se ha movido. Preguntado directamente en junio de 2026 sobre qué hacen los motores punteros, Adam Miles dio la regla empírica del momento: un backtracker de CPU bien afinado alcanza más o menos **50 millones de colocaciones válidas por segundo y por núcleo**, y los solucionadores en GPU corren **por encima de 10 000 millones de colocaciones por segundo** ([mensaje 11826](https://groups.io/g/eternity2/message/11826)). Cifras concretas del mismo hilo lo corroboran: David Barr midió su propio núcleo de CPU en ~23 millones de colocaciones por segundo y su portación a GPU en ~2400 millones ([mensaje 11835](https://groups.io/g/eternity2/message/11835)), y el backtracker optimizado de Peter McGavin alcanzó ~295 millones por segundo en un núcleo único rápido ([mensaje 11750](https://groups.io/g/eternity2/message/11750)) - aunque esa es una cifra de *tablero fácil*; en un tablero difícil el mismo motor corre a ~105 M, donde un [motor en Rust portable en este sitio](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) lo iguala. Dos advertencias heredadas del viejo debate nodo-contra-paso subsisten: una "colocación válida" cuenta solo las piezas que pasan la búsqueda de ajuste de color, no cada pieza probada, y la velocidad en un solo núcleo sobre un 16×16 completo suele valer aproximadamente la mitad de la cifra en un puzzle pequeño, porque la búsqueda pasa su tiempo en el bosque denso de restricciones cercanas al borde. (Estas cifras de colocaciones/s son un eje de «rápido», sin relación con el puntaje en aristas casadas de un tablero; el [registro de ingeniería de solucionadores](/es/research/build/faster/solver-engineering/) fija los tres sentidos de la palabra.) Nada de esto cambia el veredicto [poda contra velocidad](/es/research/why/prune-vs-speed/): un salto de rendimiento de 400× desde 2008 no ha movido el récord, porque hace el árbol más barato de recorrer, no más pequeño. ## Qué ejecutar hoy Las suites históricas viven en la zona de Archivos del grupo (con algunos enlaces rotos); el protocolo que encarnan es más fácil de seguir ahora que entonces: 1. **Únete primero al Right Numbers Club.** Antes de confiar en cualquier cronometraje, contrasta tu solucionador con los conteos exhaustivos. Este sitio mantiene el equivalente moderno de las publicaciones de censo (conteos exactos de bloques en cada posición del tablero, bajo reglas cada vez más restringidas) en la página de [números de referencia](/es/research/reference/). Los clásicos también siguen funcionando: 2 633 221 para la esquina 3×3, 69 284 103 nodos de barrido de filas para el 6×6 de Brendan. 2. **Sube la escalera.** Los puzzles generados por Brendan tienen respuestas acordadas: 6×6 (65 soluciones), 7×7 (set 1: 6 297 soluciones en 67 667 477 364 nodos, el micro-benchmark estándar desde el [mensaje 9793](https://groups.io/g/eternity2/message/9793)), 8×8 (24 soluciones con esquinas fijadas, [mensaje 8890](https://groups.io/g/eternity2/message/8890)), el par de 9×9 (2 y 3 soluciones), luego `hints.20.3` (exactamente 1 solución en 2,9 × 10¹³ nodos). 3. **Reporta los números de nodos junto con tus tiempos**, y di qué cuentas: la ambigüedad nodo-contra-paso de 2007 nunca murió del todo, y un cronometraje sin número de nodos es infalsificable. El hábito de publicar ambos es lo que hizo que los resultados de 2017-2018 fueran comparables entre un Phenom, un Xeon y una Xbox. 4. **Luego apunta a set_2.** La [página de hechos establecidos](/es/research/build/known-facts/) tiene los números del tablero real; el 10×10 abierto es el siguiente peldaño que la comunidad se acuerda en situar justo por debajo. ## Dónde están realmente los archivos Dos de estas suites sobrevivieron intactas a la migración de Yahoo a groups.io y merece la pena apuntar tu parser directamente a ellas. Los [Sample Puzzles](https://groups.io/g/eternity2/files/Sample%20Puzzles) (2007) de Dave Clark son el conjunto de partida más limpio: tableros 16×16 del tipo de E2 con 16 y 40 colores de borde, cada uno con su solución, en un formato autodocumentado. Un archivo de puzzle `sample_16_16_16_flat.txt` se abre con una línea `width height borders`, luego una línea de colores `Left Top Right Bottom` por celda (`0` es el gris); el archivo `solution_…` correspondiente lista filas `piece x y orientation`, con la orientación `0`–`3` para 0°/90°/180°/270° en sentido horario. Las variantes `flat` reparten los colores de manera uniforme; las variantes `rand` asignan cada arista de forma independiente, de modo que un par `flat`/`rand` es una prueba lista para usar de cuánto se apoya tu solucionador en una distribución uniforme de colores. La [carpeta Benchmarks](https://groups.io/g/eternity2/files/Benchmarks) reúne los tableros de tamaños variables sobre los que se libró la carrera al número de nodos de más arriba (lados 11 a 16, más `8x8x8.txt`, un 8×8 de solución única que un backtracker correcto despacha en unos veinte minutos). Entre estas dos carpetas puedes recorrer toda la escalera, desde un puzzle que se resuelve en lo que dura un café hasta los 16×16 generados, sin tocar nunca las piezas del premio protegidas por copyright. ## Relacionado - [Números de referencia](https://eternity2.dev/es/research/reference/) — Recuentos exactos de cuántas maneras válidas hay de rellenar un bloque pequeño en una posición dada del tablero oficial de Eternity II, bajo reglas cada vez más restrictivas: números fiables para contrastar el código de emparejamiento de aristas y de restricciones de tu solucionador. - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. --- # Los cuatro puzzles-pista > Tomy vendió cuatro pequeños puzzles complementarios de Eternity II: resuelve uno, envía la solución y el sitio oficial revelaba la posición de una pieza en el tablero principal. Qué era cada puzzle, el verificador en línea defectuoso, el mercado gris de eBay, por qué los puzzles 5 y 6 nunca llegaron, y la segunda vida de los puzzles-pista como casos de prueba para la teoría de complejos y como juegos de piezas donantes. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/clue-puzzles/ - Actualizado: 2026-07-02 - Fuente: Las reglas oficiales: cuatro puzzles-pista, dos por año, una pista cada uno, eternity2@groups.io, 2007-05 — https://groups.io/g/eternity2/message/182 - Fuente: El texto de las reglas sobre los puzzles-pista citado textualmente (Jim Towler), eternity2@groups.io, 2008-01 — https://groups.io/g/eternity2/message/4187 - Fuente: Los puzzles-pista 3 y 4 aparecen en el sitio británico (Mark Sheppard), eternity2@groups.io, 2008-01 — https://groups.io/g/eternity2/message/3858 - Fuente: El verificador en línea acepta una respuesta incorrecta a la pista 4, eternity2@groups.io, 2008-01 — https://groups.io/g/eternity2/message/4109 - Fuente: Pistas de puzzle vendidas en eBay (Martin / capiman), eternity2@groups.io, 2008-01 — https://groups.io/g/eternity2/message/3971 - Fuente: TOMY: sin planes para los puzzles-pista 5 y 6 (Steve Grant), eternity2@groups.io, 2009-01 — https://groups.io/g/eternity2/message/6381 - Fuente: Los puzzles-pista 3 y 4 agotados en el proveedor, eternity2@groups.io, 2009-10 — https://groups.io/g/eternity2/message/7185 - Fuente: Recuentos exhaustivos de los puzzles-pista frente a las estimaciones de la teoría de complejos (apal1969, Peter McGavin), eternity2@groups.io, 2010-11 — https://groups.io/g/eternity2/message/8142 - Fuente: Jef Bucas entrega la página de Pistas del visualizador, eternity2@groups.io, 2021-01 — https://groups.io/g/eternity2/message/10082 - Fuente: Un «480» construido a partir de un juego E2 + las piezas de las pistas 1 y 2 (Peter McGavin), eternity2@groups.io, 2023-10 — https://groups.io/g/eternity2/message/11169 - Fuente: El solucionador SHORTER de Armel Le Bail, cuyos archivos de ejemplo llevan las piezas de las pistas 1 y 2 (cristal.org, 2007) — http://www.cristal.org/Eternity-II/ - Fuente: Eternity2Puzzles.jl de Janos Wortmann, cuyos archivos de piezas llevan los cuatro puzzles-pista, incluidas las pistas 3 y 4 (GitHub, 2024–25) — https://github.com/jwortmann/Eternity2Puzzles.jl - Fuente: Los propios archivos de posiciones de los puzzles-pista de eternity2.net (Wayback Machine, 2007-10-17) — https://web.archive.org/web/20071017024639/http://eternity2.net:80/e2pieces_clue2.txt --- Junto al puzzle-premio de 256 piezas, Tomy vendió cuatro pequeños puzzles complementarios, del **puzzle-pista 1** al **puzzle-pista 4**. Cada uno era un puzzle de emparejamiento de bordes por derecho propio, y cada uno, una vez resuelto y enviado en el sitio web oficial, revelaba la posición de una pieza en el tablero principal. Esta página trata sobre esos cuatro *productos*: qué contenían, cómo funcionaba el mecanismo de la pista, cómo se vendieron y luego se descatalogaron discretamente, y qué hizo la comunidad con ellos después. **No** es la página sobre las cinco posiciones de pista del puzzle principal. Esas posiciones (la pieza central obligatoria 139 en I8 más las cuatro opcionales que revelaban los puzzles-pista) están tabuladas con su procedencia en [Hechos y cifras conocidos](/es/research/build/known-facts/). Los dos temas se encuentran a medio camino: las cuatro filas opcionales de esa tabla son exactamente para lo que servían los cuatro puzzles-pista. ## El mecanismo: resolver, enviar, recibir una posición Las reglas publicadas en mayo de 2007 anunciaban cuatro puzzles-pista, cada uno portando una pista: dos a la venta con el puzzle principal en 2007, dos más por llegar en 2008 ([msg 182](https://groups.io/g/eternity2/message/182)). El texto de las reglas australianas detallaba el mecanismo: «Por cada puzzle-pista que resuelvas, envía tu solución para obtener una pista que da la posición correcta de una pieza del puzzle-premio» ([msg 4187](https://groups.io/g/eternity2/message/4187)). En la práctica, la recompensa era el número de la pieza, su casilla en el tablero 16×16 **y su rotación exacta** ([msg 7747](https://groups.io/g/eternity2/message/7747)). Tres detalles del diseño tenían importancia: - **Los puzzles-pista tienen muchas soluciones.** A diferencia del puzzle principal, contienen piezas duplicadas y casi duplicadas; las 36 piezas del puzzle-pista 1 llevan solo 110 patrones de borde distintos de un posible 288 ([msg 2875](https://groups.io/g/eternity2/message/2875)). Cualquier disposición válida era aceptada. - **Todo el mundo recibía la misma pista.** Enviar soluciones diferentes al mismo puzzle-pista devolvía la misma pieza-pista ([msg 2860](https://groups.io/g/eternity2/message/2860)); las pistas eran propiedades fijas del puzzle principal, no secretos propios de cada cliente. - **Las pistas eran opcionales.** Según las reglas del concurso, solo la pieza inicial era obligatoria; las candidaturas al premio podían ignorar las cuatro posiciones de los puzzles-pista ([msg 11046](https://groups.io/g/eternity2/message/11046)), y la línea del récord abierto (467→470) sí las ignora; la línea estricta de cinco pistas que honra las cuatro se sigue por separado (mejor conocido: 464, véase [Récords y solucionadores](/es/research/records/)). ## Los cuatro puzzles | Puzzle | Tamaño | Piezas | Colores (borde / interior) | A la venta | Soluciones | | --- | --- | --- | --- | --- | --- | | Puzzle-pista 1 | 6×6 | 36 | 4 / 3 | julio 2007 | ≈ 3,6 × 10¹⁰ (muestreado) | | Puzzle-pista 2 | 12×6 | 72 | 4 / 4 | julio 2007 | nunca contadas por completo (≥ 1,4 × 10⁶ halladas) | | Puzzle-pista 3 | 6×6 | 36 | n/a | enero 2008 | 2.195.647.488 (exacto) | | Puzzle-pista 4 | 12×6 | 72 | 5 / 4 | enero 2008 | nunca contadas por completo | Tamaños y fechas de lanzamiento: [msg 4187](https://groups.io/g/eternity2/message/4187), [msg 3858](https://groups.io/g/eternity2/message/3858); recuentos de colores: [msg 8052](https://groups.io/g/eternity2/message/8052) (pista 1), [msg 8137](https://groups.io/g/eternity2/message/8137) (pistas 2 y 4); recuentos de soluciones: más abajo. ### Puzzle-pista 1: el que se resuelve a mano Un cuadrado 6×6, lanzado con el puzzle principal en julio de 2007. Es genuinamente fácil: resuelto a mano en un centenar de movimientos, y un simple backtracker necesita del orden de 10²–10⁴ nodos ([msg 2873](https://groups.io/g/eternity2/message/2873); solucionador de Anthony Cole: 108 nodos, [msg 8775](https://groups.io/g/eternity2/message/8775)). El reverso de lo fácil es la degeneración: la búsqueda exhaustiva parcial de apal1969 extrapolaba a aproximadamente 3,6 × 10¹⁰ soluciones no degeneradas ([msg 8052](https://groups.io/g/eternity2/message/8052)). Sus sumas de verificación CRC-16 son las únicas sumas de verificación de puzzle-pista jamás publicadas en la lista ([msg 6769](https://groups.io/g/eternity2/message/6769); véase más abajo). > **[Interactive: CluePuzzlePieces]** Rendered on the canonical page (link above); not shown in this markdown export. ### Puzzle-pista 2: el difícil Un rectángulo 12×6, también de julio de 2007, y por consenso el más difícil de los cuatro. «How to solve Clue2?» fue un hilo en cuestión de meses ([msg 3381](https://groups.io/g/eternity2/message/3381)). Un ordenador lo resuelve en milisegundos ([msg 3386](https://groups.io/g/eternity2/message/3386)), pero a mano desconcertó a gente que había pasado sin problemas por la pista 1 ([msg 3773](https://groups.io/g/eternity2/message/3773)), y apal1969 informó de aproximadamente un día de resolución a mano todavía en 2010 ([msg 8137](https://groups.io/g/eternity2/message/8137)). Es también el único puzzle-pista cuyas soluciones nunca se contaron de forma exhaustiva: una ejecución de 8 horas había hallado ≈ 1,4 × 10⁶ soluciones no degeneradas «y continuaba» ([msg 8142](https://groups.io/g/eternity2/message/8142)), y Brendan Owen juzgó el espacio demasiado grande para una búsqueda completa ([msg 8143](https://groups.io/g/eternity2/message/8143)). Para un solucionador sigue siendo trivial: 1.637.300 nodos, alrededor de un segundo ([msg 8775](https://groups.io/g/eternity2/message/8775)). > **[Interactive: CluePuzzlePieces]** Rendered on the canonical page (link above); not shown in this markdown export. ### Puzzle-pista 3: el contado exactamente Un segundo 6×6, anunciado en el sitio británico (con la pista 4) en enero de 2008 ([msg 3858](https://groups.io/g/eternity2/message/3858)); los primeros compradores lo habían resuelto y reclamado la pista a mediados de enero ([msg 3982](https://groups.io/g/eternity2/message/3982)). Su fama llegó más tarde: es el único puzzle-pista cuyo recuento de soluciones se conoce **exactamente**, en 2.195.647.488, gracias a la ejecución exhaustiva de apal1969 de aproximadamente un día ([msg 8168](https://groups.io/g/eternity2/message/8168)). Ese recuento lo convirtió en el más preciso de los casos de prueba de puzzle-pista para la [teoría de complejos](/es/research/why/complex-theory/) (sección siguiente). Un backtracker encuentra una primera solución en 78 nodos ([msg 8775](https://groups.io/g/eternity2/message/8775)). > **[Interactive: CluePuzzlePieces]** Rendered on the canonical page (link above); not shown in this markdown export. ### Puzzle-pista 4: el último Un segundo 12×6, lanzado junto a la pista 3 en enero de 2008, con 5 colores de borde y 4 de interior ([msg 8137](https://groups.io/g/eternity2/message/8137)). Más fácil que la pista 2 para una máquina (primera solución en 4.951 nodos, [msg 8775](https://groups.io/g/eternity2/message/8775)); como la pista 2, sus soluciones nunca se contaron por completo, de modo que las estimaciones de McGavin de la teoría de complejos para los puzzles 12×6 hacían las veces de números exactos ([msg 10236](https://groups.io/g/eternity2/message/10236)). Su marca duradera en el archivo es el fiasco del verificador que sigue. > **[Interactive: CluePuzzlePieces]** Rendered on the canonical page (link above); not shown in this markdown export. El mensaje de referencia de Cole nombra también un quinto hermano, no oficial: la demo «web teaser» de 16 piezas en el sitio oficial, resuelta en 34 nodos ([msg 8775](https://groups.io/g/eternity2/message/8775)). ## El fiasco del verificador y el mercado gris El lanzamiento de los puzzles-pista no fue tranquilo. Cuando los formularios de envío de las pistas 3 y 4 abrieron en enero de 2008, los miembros que los sondeaban descubrieron la validación defectuosa: petzi.petzi tecleó su solución de la **pista 2** en el formulario de la **pista 4** (con una pieza errónea «449» que no existe en un puzzle de 72 piezas), y el sitio la aceptó y entregó la pista 4 ([msg 4109](https://groups.io/g/eternity2/message/4109), [4119](https://groups.io/g/eternity2/message/4119), [4141](https://groups.io/g/eternity2/message/4141)). El mismo truco falló para otro miembro ([msg 4117](https://groups.io/g/eternity2/message/4117)), así que el verificador no solo era permisivo sino inconsistente. La mejor conjetura de la comunidad para una explicación parcial: la fuerte redundancia de piezas de los puzzles-pista implica una cantidad enorme de disposiciones válidas, de modo que envíos de aspecto erróneo pueden coincidir con soluciones reales ([msg 4118](https://groups.io/g/eternity2/message/4118)). Pero «449» descarta cualquier lectura en la que el formulario estuviera validando piezas reales. Nadie informó jamás de que Tomy lo corrigiera ni lo reconociera. Las pistas mismas se filtraron de inmediato: - **eBay.** Ya en enero de 2008, algunos vendedores ofrecían la información de pista de los puzzles-pista 1 y 2 como un producto ([msg 3971](https://groups.io/g/eternity2/message/3971)); según se dice, uno la había vendido más de dos docenas de veces ([msg 3976](https://groups.io/g/eternity2/message/3976)), con un breve debate sobre si es siquiera reprobable revender información que uno ha comprado ([msg 3972](https://groups.io/g/eternity2/message/3972)). - **Derivación.** En julio de 2008, danmayoh derivó las pistas 3 y 4 de una «matriz de posibilidades» que otro miembro había publicado. La matriz se había construido usando las pistas, y la construcción podía invertirse pese a erratas deliberadas. El moderador Brendan Owen borró cada mensaje que contenía la matriz «por seguridad» ([msg 5650](https://groups.io/g/eternity2/message/5650), [5651](https://groups.io/g/eternity2/message/5651)); danmayoh confirmó que el truco no podía hacer surgir pistas que no estuvieran ya integradas ([msg 5732](https://groups.io/g/eternity2/message/5732)). ## Una vida útil corta: agotados, y sin puzzles 5 y 6 La distribución fue irregular desde el principio: las pistas 1 y 2 eran al principio inconseguibles en Estados Unidos ([msg 2855](https://groups.io/g/eternity2/message/2855) hilo), y las pistas 3 y 4 aparecieron primero en el Reino Unido, suscitando quejas de Suecia, Australia, España y Estados Unidos ([msg 3858](https://groups.io/g/eternity2/message/3858), [4502](https://groups.io/g/eternity2/message/4502) y [7517](https://groups.io/g/eternity2/message/7517) hilos). Luego el suministro se secó por completo: - **Enero de 2009.** Después de que el primer escrutinio no encontrara ningún ganador, Steve Grant escribió a la Careline de Tomy preguntando cuándo llegarían los puzzles-pista 5 y 6. La respuesta: Tomy **no tiene planes de sacar más puzzles-pista** ([msg 6381](https://groups.io/g/eternity2/message/6381)). La mayor parte del grupo se sintió aliviada; más pistas habrían abaratado el desafío. - **Octubre de 2009.** A un comprador sueco le dijeron que las pistas 3 y 4 se habían agotado en la primavera de 2009 y que el proveedor no podía reabastecerse ([msg 7185](https://groups.io/g/eternity2/message/7185)); en noviembre no existía stock en ninguna parte, como si la producción se hubiera detenido ([msg 7232](https://groups.io/g/eternity2/message/7232)). - **Mayo de 2010.** Los puzzles llevaban unos 18 meses fuera del mercado británico y **nunca se comercializaron en absoluto en algunas regiones**; la segunda mano era la única vía ([msg 7752](https://groups.io/g/eternity2/message/7752)), y los anuncios de eBay ya incluían las propias posiciones de pista resueltas ([msg 7350](https://groups.io/g/eternity2/message/7350)). Así, los puzzles-pista fueron comprables durante aproximadamente dos años, en algunos países nunca, y la información que vendían se volvió incomprable mientras al concurso de 2 M$ aún le quedaba un año y medio por delante. ## ¿Ayudaron siquiera las pistas? En su mayor parte no, y la comunidad lo sabía pronto. Brendan Owen nunca las compró («solo una estrategia de marketing»), calculando que las pistas ayudan pero «no hay ni de lejos suficientes pistas» para hacer E2 tratable ([msg 2842](https://groups.io/g/eternity2/message/2842)); sus simulaciones de teoría de pistas situaban el requisito en unas 20 o más pistas bien colocadas ([msg 1107](https://groups.io/g/eternity2/message/1107)), refinado más tarde a ~12–13 repartidas ([msg 5652](https://groups.io/g/eternity2/message/5652)). Repartidas es mejor que agrupadas, una conclusión que se seguía afinando en 2026 ([msg 11736](https://groups.io/g/eternity2/message/11736)). El panorama cuantitativo, en tres números: - **Una pista reduce el espacio de búsqueda local unas 767×**: Verhaard contó 3.366 maneras de rellenar el rectángulo de la esquina hasta una pieza-pista frente a 2.582.369 sin ella ([msg 3543](https://groups.io/g/eternity2/message/3543)). - **Las cuatro reducen el número esperado de soluciones de ≈ 14.702 a ≈ 4 × 10⁻⁸** ([teoría de complejos](/es/research/why/complex-theory/); [msg 11193](https://groups.io/g/eternity2/message/11193)); las pistas compran *unicidad*, por diseño. - **Pero el número esperado de nodos por solución apenas se mueve**: McGavin midió un coste de backtracker esencialmente idéntico con y sin la restricción adicional ([msg 8924](https://groups.io/g/eternity2/message/8924)). Menos agujas, pajar proporcionalmente más pequeño. De ahí el veredicto establecido, pronunciado por Jef Bucas cuando por fin publicó las posiciones en su visualizador: «hasta ahora, la mayor parte del progreso se ha hecho *sin* las pistas» ([msg 10082](https://groups.io/g/eternity2/message/10082)). El mejor tablero que respeta las cinco posiciones puntúa 464 (Benjamin Riotte, 2026); el récord abierto, que solo respeta la pieza inicial obligatoria, es 470 ([Récords y solucionadores](/es/research/records/)). ## Verificar un juego-pista sin las piezas Como el juego principal, los diseños de las piezas de los puzzles-pista caían bajo la reivindicación de derechos de autor del inventor, de modo que nunca se publicaron. La respuesta de la comunidad, igual que para el puzzle-premio, fueron sumas de verificación en lugar de datos ([msg 983](https://groups.io/g/eternity2/message/983), [msg 1063](https://groups.io/g/eternity2/message/1063): el esquema CRC-16 de Owen de la semana del lanzamiento). Las peticiones de extenderlo a los puzzles-pista comenzaron en 2007 ([msg 3417](https://groups.io/g/eternity2/message/3417)), pero solo en 2009 Thomas (autor de E2_Manual) publicó sumas de verificación CRC-16, únicamente para el puzzle-pista 1, pidiendo a otros que las confirmaran y cubrieran las pistas 2–4 ([msg 6768](https://groups.io/g/eternity2/message/6768), [6769](https://groups.io/g/eternity2/message/6769)). **Nunca aparecieron en la lista confirmación ni sumas de verificación para las pistas 2, 3 o 4**: cualquiera que teclee hoy un juego-pista de segunda mano sigue sin tener forma pública de validarlo. Había también una suma de verificación a nivel de posiciones: un CRC de e2hints.txt para comprobar tus datos de *pista* sin publicarlos ([msg 1147](https://groups.io/g/eternity2/message/1147)). ## Posteridad ### Las pistas se vuelven folclore de la comunidad Una vez que los puzzles dejaron el comercio, las posiciones que vendían circularon en la lista como datos no oficiales: una lista pieza/posición en 2009 ([msg 6778](https://groups.io/g/eternity2/message/6778)), reapuntada cada vez que alguien preguntaba ([msg 8808](https://groups.io/g/eternity2/message/8808), [8809](https://groups.io/g/eternity2/message/8809)), reformulada con rotaciones en 2012 ([msg 9067](https://groups.io/g/eternity2/message/9067)). El propietario del grupo se negó a bendecir la publicación («¡Eso sería una violación de los derechos de autor del Sr. Moncton!», [msg 9210](https://groups.io/g/eternity2/message/9210)), pero los datos sobrevivieron a la objeción: en enero de 2021, Jef Bucas añadió una página de Pistas al visualizador de la comunidad ([msg 10082](https://groups.io/g/eternity2/message/10082)), la pieza 181 fue confirmada de primera mano por un miembro que había resuelto su puzzle-pista y recibido esa pista de Tomy ([msg 10085](https://groups.io/g/eternity2/message/10085)), y las rotaciones se recontrastaron una vez más en 2021 ([msg 10542](https://groups.io/g/eternity2/message/10542)). Las posiciones resultantes son las cuatro filas opcionales de [Hechos y cifras conocidos](/es/research/build/known-facts/). ### Casos de prueba para la teoría de complejos La segunda carrera de los puzzles-pista fue la de objetivos de calibración para la [teoría de complejos de Brendan Owen](/es/research/why/complex-theory/). En noviembre de 2010, apal1969 realizó recuentos exhaustivos (pista 3: exactamente 2.195.647.488 soluciones) y los comparó con las estimaciones de Peter McGavin derivadas de la teoría; la discrepancia inicial de 10² se atribuyó a que McGavin olvidó dividir por dos los recuentos de tipos de borde, y tras la corrección las estimaciones cayeron dentro de aproximadamente un orden de magnitud, exactamente la precisión que Owen reivindicaba para tableros pequeños ([msgs 8142–8172](https://groups.io/g/eternity2/message/8142); nota de precisión de Owen [8171](https://groups.io/g/eternity2/message/8171), la corrección [8172](https://groups.io/g/eternity2/message/8172)). McGavin depositó luego estimaciones de backtracker para todos los puzzles-pista en la base de datos del grupo ([msg 8901](https://groups.io/g/eternity2/message/8901)). Estos fueron los primeros de los [bancos de pruebas](/es/research/build/benchmarks/) exhaustivo-contra-estimado que acabaron por llevar a la comunidad a confiar en los números de la teoría a escala de E2. Ya en 2011, los puzzles mismos eran calentamientos para solucionadores: los cuatro caen en menos de un segundo ([msg 8773](https://groups.io/g/eternity2/message/8773), [8775](https://groups.io/g/eternity2/message/8775)). ### Juegos de piezas donantes para los «480» mixtos Por último, las piezas físicas encontraron un uso que los diseñadores nunca pretendieron. En 2014, Peter McGavin mostró «soluciones» 16×16 completas ensambladas a partir de un juego E2 más piezas de puzzle-pista ([msg 9309](https://groups.io/g/eternity2/message/9309), [9310](https://groups.io/g/eternity2/message/9310)), y en 2023 construyó un tablero completo 480/480 a partir de las piezas de **un juego E2, un juego Pista-1 y un juego Pista-2** ([msg 11169](https://groups.io/g/eternity2/message/11169)), en el desafío de máximas piezas distintas de Vlastislav W. ([msg 11167](https://groups.io/g/eternity2/message/11167)). Para ser perfectamente claros: **estos tableros no son soluciones de Eternity II**. Usan piezas que no están en el juego oficial de 256 piezas, y por eso las afirmaciones llamativas de «480» siempre deben cotejarse con la lista de piezas ([Récords y solucionadores](/es/research/records/)). ## Recuperados y resueltos: los cuatro Lo único que todos suponían perdido resulta recuperable, y no solo para los dos primeros. La comunidad retuvo los diseños de las piezas de los puzzles-pista por motivos de derechos de autor, y nadie publicó las disposiciones en la lista. Pero dos proyectos de solucionadores independientes los incluyeron de todos modos como ejemplos resueltos. El solucionador **SHORTER** de Armel Le Bail, un programa en Fortran publicado en cristal.org en agosto de 2007, entrega tres: un 6×6 de 36 piezas, un 12×6 de 72 piezas y el tablero completo de 256 piezas. El archivo de 256 piezas es el verdadero juego oficial de Eternity II, y así es como se verifica la procedencia: Le Bail leía datos genuinos de Tomy en el formato de eternity2.net. Los otros dos son el **puzzle-pista 1 y el puzzle-pista 2**, motivos incluidos. Las **pistas 3 y 4** aparecieron en una segunda fuente, mucho más reciente: [`Eternity2Puzzles.jl`](https://github.com/jwortmann/Eternity2Puzzles.jl) de Janos Wortmann, un paquete de Julia que lleva los cuatro puzzles-pista como simples archivos de piezas (`clue1.txt` … `clue4.txt`). Sus `clue1`/`clue2` son los dos mismos puzzles que empaquetó Le Bail: canonicalizamos cada uno en un multiconjunto de piezas invariante por rotación y con colores reetiquetados, y coinciden exactamente con las pistas 1 y 2 de Le Bail, pieza por pieza. Una fuente que reproduce los dos puzzles que ya podemos cotejar es una fuente digna de confianza para los dos que no podemos, de modo que sus pistas 3 y 4 se apoyan en la misma base. Los archivos que eternity2.net publicó él mismo, recuperados de la Wayback Machine, corroboran los tamaños y las posiciones en el tablero de las pistas 1 y 2, pero no los motivos. Disponen cada uno como un bloque en una cuadrícula 16×16, el 6×6 en las filas 5–10 y columnas 5–10, el 6×12 en las filas 5–10 y columnas 2–13, y colapsan cada borde interior a un único color de relleno. (El sitio nunca alojó archivos para las pistas 3 o 4, que se lanzaron después de su última captura.) Así, los archivos oficiales fijan *dónde* se situaban las pistas 1 y 2; los archivos de los solucionadores son el registro público de *qué* son las piezas, para los cuatro. Cada uno se resolvió desde cero para confirmar que son puzzles reales y coherentes. La resolución codifica «colocar cada pieza de modo que todos los bordes coincidan y el gris quede en el borde» como una instancia SAT y la entrega a un solucionador; una pasada aparte comprueba después la respuesta de forma independiente (cada pieza usada una vez, cada borde interno emparejado, el gris solo en el anillo exterior). Los cuatro cierran perfectamente: las pistas 1 y 3 en la totalidad de sus 60 bordes internos, las pistas 2 y 4 en la totalidad de los 126. Cada tablero resuelto se muestra en su propia sección más arriba ([Pista 1](#puzzle-pista-1-el-que-se-resuelve-a-mano), [Pista 2](#puzzle-pista-2-el-difícil), [Pista 3](#puzzle-pista-3-el-contado-exactamente), [Pista 4](#puzzle-pista-4-el-último)), dibujado con los verdaderos motivos de Eternity II. Cada puzzle ofrece dos descargas: las piezas como datos listos para solucionador (el mismo JSON de instancia publicado en el [conjunto de datos](/es/research/build/dataset/), bordes en orden arriba-derecha-abajo-izquierda, el color 0 el borde) y como un conjunto de SVG por pieza, del mismo modo que las piezas del puzzle principal se ofrecen en la [página del puzzle](/puzzle/). Una advertencia sobre los motivos. Las *piezas* son con certeza correctas: son los datos de borde recuperados, se cotejan entre las dos fuentes para las pistas 1 y 2, y cada una se resuelve en un tablero completo con bordes emparejados, algo que un juego de piezas erróneo no haría. Los *motivos* mostrados son los verdaderos glifos de Eternity II, asignados en orden a los números de color de cada pista; casi con certeza no son los motivos impresos exactos de Tomy para los puzzles-pista, que ninguna fuente pública registra. Así que lee los tableros y las descargas como las piezas correctas dibujadas en el propio arte de Eternity II, no como un facsímil de las piezas físicas. La recuperación completa, los datos de piezas de los cuatro y la resolución reproducible están en el [topic clue-puzzle-pieces](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/clue-puzzle-pieces). Esto no dice nada sobre los derechos de autor por los que se retuvieron las disposiciones; simplemente registra que ya eran públicas en los archivos de ejemplo de dos solucionadores, y las muestra resueltas. ## Lo que no está documentado públicamente Lagunas que un lector atento debería conocer: - **Las definiciones de las piezas de los puzzles-pista nunca se publicaron en la lista** (derechos de autor), y las únicas sumas de verificación de la comunidad cubren el puzzle-pista 1 y siguen sin confirmar ([msg 6769](https://groups.io/g/eternity2/message/6769)). Sobreviven de todos modos en los archivos de ejemplo de dos proyectos de solucionadores, las pistas 1 y 2 en SHORTER de Le Bail y las cuatro en `Eternity2Puzzles.jl` de Wortmann, cotejadas y resueltas más arriba. - **Qué puzzle revelaba qué posición.** El archivo nunca vincula limpiamente el puzzle-pista *n* a una casilla concreta entre C3, C14, N3, N14. Solo la pieza 181 tiene una atestación de primera mano puzzle-a-pista ([msg 10085](https://groups.io/g/eternity2/message/10085)), e incluso ese mensaje no dice qué puzzle numerado la produjo. - **Recuentos exactos de soluciones para las pistas 2 y 4.** Solo existen estimaciones y recuentos parciales ([msg 8142](https://groups.io/g/eternity2/message/8142), [10236](https://groups.io/g/eternity2/message/10236)). - **Cifras de producción y ventas.** Cuántos puzzles-pista se fabricaron o vendieron, y por qué la producción se detuvo a principios de 2009, nunca lo declaró Tomy; la historia del agotamiento se reconstruye a partir de las respuestas de los minoristas ([msg 7185](https://groups.io/g/eternity2/message/7185)). - **Los registros oficiales de las pistas.** Se ignora si la base de datos de envíos de Tomy y las respuestas-pista canónicas sobreviven en alguna parte; las posiciones descansan sobre los cotejos de la comunidad, no sobre una publicación oficial. ## Relacionado - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. --- # Construir tableros desde cero > Construir un tablero de alta puntuación a partir de una cuadrícula vacía en lugar de excavar con backtracking: la búsqueda en haz mantiene vivos los mejores tableros parciales y los hace crecer celda a celda. El caballo de batalla de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la amplitud por sí sola se atasca en las profundidades del interior. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/construct/ - Actualizado: 2026-07-22 --- Construir un tablero de alta puntuación a partir de una cuadrícula vacía en lugar de excavar con backtracking: la búsqueda en haz mantiene vivos los mejores tableros parciales y los hace crecer celda a celda. El caballo de batalla de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la amplitud por sí sola se atasca en las profundidades del interior. Las páginas siguientes proceden técnica por técnica: qué es cada una en una línea, qué alcanzó realmente en el tablero real de 16×16, dónde se detiene, y los laboratorios y mediciones que la respaldan. Dos constructores viven aquí por ahora: [la búsqueda en haz](/es/research/build/construct/beam-search/), el caballo de batalla celda a celda, y [la DP por columnas en bandas](/es/research/build/construct/band-column-dp/), que hace crecer el tablero por bandas de dos filas. Para abarcar todo el territorio de una vez, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Páginas de esta sección - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [DP por columnas en bandas](https://eternity2.dev/es/research/build/construct/band-column-dp/) — Cortar el tablero en bandas de dos filas, resolver cada banda a la perfección con una DP columna a columna bajo poda en haz, y encadenar las bandas de arriba abajo. Un tablero completo con 444 aristas apareadas de 480 en 35 segundos; toda la pérdida vive en las costuras verticales tardías. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # DP por columnas en bandas > Cortar el tablero en bandas de dos filas, resolver cada banda a la perfección con una DP columna a columna bajo poda en haz, y encadenar las bandas de arriba abajo. Un tablero completo con 444 aristas apareadas de 480 en 35 segundos; toda la pérdida vive en las costuras verticales tardías. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/construct/band-column-dp/ - Actualizado: 2026-07-22 - Temas: construction - Fuente: Zhou & Hansen, Beam-Stack Search: Integrating Backtracking with Beam Search (ICAPS 2005) — https://cdn.aaai.org/ICAPS/2005/ICAPS05-010.pdf --- La [búsqueda en haz a nivel de celda](/es/research/build/construct/beam-search/) hace crecer un tablero celda a celda. La DP por columnas en bandas cambia el grano del movimiento: se corta el tablero de 16×16 en bandas de dos filas, se resuelve cada banda a la perfección con una programación dinámica columna a columna bajo poda en haz, y se encadenan las bandas de arriba abajo, con cada banda nueva heredando la fila inferior de la anterior. Una banda aislada siempre se resuelve perfectamente. La cadena completa un tablero entero con 444 aristas apareadas de 480 en 35 segundos, y la totalidad de las 36 aristas que faltan se localiza, por un cálculo exacto, en las costuras verticales de la mitad baja: un fallo de horizonte voraz, no un accidente de inventario de piezas. Una salvedad gobierna todo lo que sigue. Cada número de esta página proviene de una sola ejecución determinista por configuración, sacada del cuaderno: un orden de construcción fijo, sin barridos de semillas. "Falla" significa siempre "falló bajo el haz y el presupuesto indicados", nunca "imposible". ## Cómo se desarrolla sobre un tablero Tratemos una banda de dos filas como una secuencia de columnas leída de izquierda a derecha. Un estado de la DP en la columna $j$ es (pieza superior y rotación, pieza inferior y rotación, conjunto de piezas ya usadas, puntuación acumulada). Una transición a la columna $j+1$ coloca un par superior/inferior nuevo y puede ganar como máximo 3 aristas: dos apareamientos horizontales contra la columna anterior y un apareamiento vertical dentro de la columna nueva. La DP exacta es exponencial en el conjunto de piezas usadas; la lista de estados se poda, pues, a los $K$ mejores por columna, la misma poda que usa el haz a nivel de celda, aplicada a un paso más grueso: una columna entera de banda por paso, dos piezas a la vez, lo que explota directamente la estructura 2D. Las celdas del borde (que exigen el color gris) recortan con fuerza los candidatos en el perímetro. El trabajo por banda es $O(n \cdot K \cdot |P|^2)$; para $n = 16$, $K = 10^4$, $|P| = 256$ eso da del orden de $10^{10}$ transiciones candidatas por banda: minutos en un motor compilado, horas en Python. Es aritmética de diseño, no una medición; fue lo que motivó escribir el solucionador en Rust. ## La aritmética de las bandas Un tablero $n \times n$ tiene $E = 2n(n-1)$ aristas internas: 480 para $n = 16$. Una banda de dos filas contiene como máximo $3n - 2$ aristas apareadas (46 para $n = 16$). Encadenando bandas que comparten una fila, cada banda después de la primera aporta $2n - 1$ aristas nuevas (31), y la suma telescopa exactamente: $$ (3n - 2) + (n - 2)(2n - 1) = 2n(n - 1) = E. $$ Así que si cada banda encadenada fuera perfecta, la cadena produciría un 480 completo. La descomposición no pierde nada en principio; la identidad contable es elemental e independiente de cualquier ejecución. La pega, y la tensión central de esta página: una banda resuelta a la perfección compromete su fila inferior, y esa elección concreta puede volver la banda siguiente infactible o subóptima. Bandas perfectas por separado no se componen en una cadena perfecta. ## Una banda es fácil Medido, una ejecución por configuración: la DP por columnas resolvió la primera banda hasta su máximo teórico en todos los tamaños probados, del 4×4 hasta el 16×16 real (46 de 46 en 68 s con haz 5 000; los tamaños menores tardaron de 0,1 a 12 s). Un hallazgo contraintuitivo merece su recuadro: más colores de arista hace la banda *más rápida*, no más lenta. En instancias de 8×8, 5 colores tardaron 6,5 s y 8 colores 1,6 s. Más colores significa restricciones más apretadas, por tanto menos transiciones factibles, y el haz se contrae. Es lo contrario de lo que experimentan los métodos de hash y muestreo. ## Encadenar las bandas: un tablero completo en 35 segundos Encadenar 15 bandas de arriba abajo con haz 100 000 completó un tablero entero de 256 piezas con **444 aristas apareadas de 480 en 35 s**. Convención de puntuación: este tablero ignora las cinco piezas pista oficiales (0 de 5 en su sitio); el 444 es, pues, un recuento de aristas apareadas sobre un tablero sin restricciones, incomparable con los récords que respetan las pistas. La variante que respeta las pistas, más abajo, alcanza un parcial de 240 celdas con 414 de 480 y las cinco pistas. Para las convenciones y las cifras vigentes, tanto de la comunidad como del cuaderno, véase la [página de récords](/es/research/records/). Las puntuaciones por banda cuentan la historia en una línea: las bandas 0 a 7 son todas perfectas, y luego un declive monótono. | Banda (de arriba abajo) | 0 a 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Puntuación (de 46) | 46 cada una | 45 | 45 | 43 | 42 | 40 | 36 | 35 | La anchura tiene aquí una zona útil estrecha, que extiende la historia de costes de la [página de búsqueda en haz](/es/research/build/construct/beam-search/): el haz 50 000 muere en la banda final sin ningún estado factible (240 celdas colocadas de 256); el haz 100 000 termina; el haz 500 000 es contraproducente, porque solo la ordenación por columna agota el presupuesto (interrumpido a mitad de la primera banda a los 138 s). La zona útil está cerca de $10^5$. Una ejecución por anchura; la frontera "50 000 falla, 100 000 termina" no se replicó con otros órdenes ni otros desempates. ## La pérdida vive en las costuras verticales Relacionar las puntuaciones de banda con la del tablero da una identidad exacta: las aristas apareadas del tablero igualan la suma de las puntuaciones de banda menos las aristas horizontales de las filas compartidas, que la cadena cuenta dos veces. En el tablero de 444, las puntuaciones de banda suman 654, y $654 - 444 = 210 = 14 \times 15$: la suma horizontal de las filas compartidas está en su máximo, es decir, **cada arista horizontal de cada fila compartida está apareada**. La totalidad de las 36 aristas que faltan se aloja en las costuras verticales entre las filas 8 a 15, más la fila inferior: | Costura (bajando) | 8/9 | 9/10 | 10/11 | 11/12 | 12/13 | 13/14 | banda final | | --- | --- | --- | --- | --- | --- | --- | --- | | Aristas perdidas | 1 | 1 | 3 | 4 | 6 | 10 | 11 | (La última cifra se reparte entre la última costura vertical y la fila inferior.) Es aritmética exacta sobre un tablero medido; la estructura que revela (horizontales gratis, verticales caras) es el mecanismo general. La cadena obtiene gratis las aristas horizontales de cada banda, porque viven dentro de la banda que se está optimizando, pero paga las aristas verticales con colores comprometidos una banda antes; a medida que el inventario de piezas se agota, los colores inferiores comprometidos dejan de casar con lo que las piezas restantes pueden suministrar. La ejecución que respeta las pistas vuelve contable el final de la partida. Comparar el multiconjunto de colores que la última fila *necesita* en sus aristas superiores (dictado por los fondos comprometidos de la fila anterior) con lo que las 16 piezas restantes pueden suministrar mostró 4 colores demandados pero ausentes y 5 suministrados pero inútiles: 5 celdas de la última fila con literalmente cero candidatos factibles. Ninguna búsqueda sobre la última fila arregla eso. La cadena necesita una restricción hacia atrás (el multiconjunto de colores inferiores comprometidos de cada fila debe seguir siendo respondible por las piezas restantes) que la construcción puramente descendente nunca ve. ## Un horizonte voraz, no un fondo difícil ¿Es el fondo del tablero intrínsecamente más duro? No: lanzada de arriba abajo, la cadena produce 7 bandas perfectas desde el borde superior, decae y falla *abajo*; lanzada de abajo arriba, produce 7 bandas perfectas desde el borde inferior, decae y falla *arriba*. Ambas direcciones se detienen a 16 celdas de un tablero completo (240 colocadas de 256), una ejecución por dirección. El fallo aterriza siempre en el borde más alejado del anclaje: cada borde impone su propio juego de restricciones, una cadena anclada satisface el borde cercano y deriva libremente respecto al lejano, y la deriva se acumula. El declive es una propiedad del compromiso voraz unidireccional, no de las filas del fondo. ¿Por qué no lanzar las dos direcciones y pegar? Casar ingenuamente una mitad superior y una mitad inferior independientes en la costura central exige que 16 colores coincidan; bajo un modelo de colores aleatorios eso tiene una probabilidad de alrededor de $(1/23)^{16} \approx 10^{-22}$. Un encuentro exige construcción conjunta, no dos ejecuciones independientes. Anclarse en el medio es peor, en la única configuración probada: partir de una banda central (sin borde en ninguna de las dos filas) no logró completar ni una sola banda con haz 5 000 en 120 s; no se probaron haces más anchos. Un recuento grueso dice por qué: la restricción de borde recorta los candidatos unas 12 veces (alrededor de 45 000 colocaciones de pares factibles por estado en el borde frente a alrededor de 490 000 en el interior). Los bordes son restricción gratis; el interior no ofrece al haz ningún agarre. ## Palancas: mirada hacia delante y reconstrucción de la mitad baja **Mirar una banda hacia delante.** Reordenar los estados del haz según $\alpha \cdot (\text{puntuación actual}) + \beta \cdot (\text{compatibilidad hacia delante})$, donde la compatibilidad hacia delante cuenta, para cada color inferior comprometido $c$, cuántas piezas restantes pueden aún responderle con su arista superior, en la forma log-suma $\sum_c \log(1 + \nu_c)$; $\alpha = 1$ y $\beta$ en $[0{,}01;\ 0{,}1]$ mantienen la puntuación dominante. Esto apunta exactamente a la pérdida de las costuras verticales de arriba: dejar de optimizar solo la banda en curso, proteger los colores que la banda siguiente necesitará. Efecto medido, ejecución única: +3 aristas en la cadena completa, de 444 a 447 (aristas apareadas, pistas no impuestas), con un coste despreciable (alrededor de 0,5 s por banda con haz $10^5$). **Reconstruir la mitad baja.** En el tablero de 444, las 8 filas superiores más su costura de interfaz sostienen 248 aristas perfectamente apareadas. Congelarlas y reconstruir solo las 8 filas inferiores (un conjunto fijo de 128 piezas sobrantes contra una interfaz fija de 16 colores) preserva esas 248 automáticamente, y la mitad reconstruida está acotada por arriba por 232 aristas internas: una reconstrucción perfecta sería literalmente un 480, e incluso una reconstrucción perfecta solo en las verticales superaría 460. La reconstrucción es el mismo problema que el solucionador de bandas ya resuelve (una cadena arrancada desde un vector fijo de colores superiores); el operador cuesta, pues, de 1 a 2 minutos. Es una cota sobre el operador, no una afirmación de alcanzabilidad. Medida, la reconstrucción voraz es un resultado nulo: reconstruir la mitad baja con la misma DP voraz cae de nuevo exactamente en 444 se trace donde se trace la línea de congelación (congelar hasta la fila 7: 444; hasta la fila 11: 444; solo la reconstrucción trivial de la última fila conserva la entrada de 447). La pérdida de las bandas tardías es un artefacto de horizonte voraz, no un accidente reparable de qué piezas quedaron: relanzar el mismo voraz sobre el sobrante desde cualquier fila de partida acaba en el mismo sitio. El +3 de la mirada hacia delante es la única ganancia algorítmica encontrada en esta familia. Alcance: solo se probó la reconstrucción voraz bajo haz; una resolución exacta de la mitad baja de 128 piezas (un problema de emparejamiento restringido) se propuso y nunca se lanzó, así que la cota de arriba queda intacta tras este negativo. ## Jugar con las pistas oficiales Imponer las cinco piezas pista oficiales exige reservar cada pieza pista desde el momento en que arranca la construcción. La versión ingenua dejó que una banda temprana gastara vorazmente una pieza que una celda pista necesitaba 10 filas más abajo, y murió allí (208 celdas de 256, 3 pistas de 5): una instancia limpia y concreta del [robo de piezas](/es/research/why/piece-theft/), donde una colocación localmente óptima gasta una pieza que una restricción lejana reclama. Con las piezas pista de aguas abajo reservadas desde el principio, la cadena alcanza **240 celdas de 256, las 5 pistas respetadas, 414 aristas apareadas de 480** (denominador del tablero completo, 16 celdas vacías) con haz 100 000. Ejecución única. Las piezas de esquina añaden una restricción de largo alcance del mismo tipo: cuáles 2 de las 4 piezas de esquina gasta la fila superior determina qué colores de esquina deberá producir la fila inferior 14 filas más tarde. Reservar o precomprometer las cuatro esquinas es la dirección natural de arreglo; no se lanzó en estas mediciones. ## Dónde se detiene La DP por columnas en bandas es una ruta rápida hacia un buen tablero: 444 aristas apareadas en 35 segundos, con cada arista horizontal de fila compartida apareada, allí donde el haz a nivel de celda alcanza la mitad de los 450 (aristas apareadas) en minutos. El techo es el propio compromiso unidireccional: cada banda paga sus costuras verticales con colores elegidos una banda antes y ninguna búsqueda local abajo puede reembolsarlos; por eso las ganancias más allá de esta meseta vinieron del [pulido por destrucción y reparación](/es/research/build/local-search/local-search-alns/) y no de más anchura. Las puertas abiertas que deja esta familia son concretas: una resolución exacta de la mitad baja con la parte superior congelada, la puntuación de mirada hacia delante aplicada en cada banda y no como remiendo, y una construcción bidireccional conjunta que se encuentre en el medio por diseño y no por suerte. ## Relacionado - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Búsqueda en haz > Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/construct/beam-search/ - Actualizado: 2026-07-22 - Temas: construction - Fuente: Zhou y Hansen, Beam-Stack Search: Integrating Backtracking with Beam Search (ICAPS 2005) — https://cdn.aaai.org/ICAPS/2005/ICAPS05-010.pdf - Fuente: Harvey y Ginsberg, Limited Discrepancy Search (IJCAI 1995) — https://www.ijcai.org/Proceedings/95-1/Papers/080.pdf - Fuente: Kool, van Hoof y Welling, Stochastic Beams and Where to Find Them (ICML 2019) — https://arxiv.org/abs/1903.06059 --- Un backtracker en profundidad se compromete con un único tablero parcial y excava. La búsqueda en haz, en cambio, toma precauciones: mantiene con vida los $K$ mejores tableros parciales a la vez, extiende cada uno de ellos una sola celda, puntúa todos los hijos y vuelve a conservar los $K$ mejores. La idea se remonta al sistema de reconocimiento de voz HARPY de Bruce Lowerre, en los años setenta; el [artículo sobre la beam-stack search](https://cdn.aaai.org/ICAPS/2005/ICAPS05-010.pdf) de Zhou y Hansen ofrece un buen tratamiento moderno de esta familia de métodos y de sus concesiones. ## Cómo se desarrolla sobre un tablero Fijemos un orden de recorrido sobre las 256 celdas. Un estado del haz es una colocación parcial, el conjunto de piezas ya gastadas y una puntuación de aristas apareadas. Extender un estado a la profundidad $d$ consiste en probar cada par (pieza, rotación) legal para la celda $d$ (legal respecto a los vecinos ya colocados y al inventario restante) y sumar a la puntuación el número de aristas recién apareadas. Se reúnen todos los hijos de los $K$ supervivientes, se ordena, se trunca a $K$, se repite 256 veces, y cada superviviente es entonces un tablero completo. Es el inventario lo que distingue este caso de la búsqueda en haz sobre un problema de restricciones genérico: cada pieza existe exactamente una vez, de modo que una colocación no es una simple elección local, sino una retirada de un presupuesto global. Ese detalle decide todo lo que sigue. ## Ver descender un haz El laboratorio de abajo hace descender un haz por un árbol sintético: factor de ramificación $b = 4$, profundidad $d = 14$, puntuaciones deterministas basadas en un hash, sin tablero, porque las patologías son más fáciles de *ver* cuando la instancia es lo bastante pequeña para dibujarla. Se plantan dos rasgos deliberadamente: las puntuaciones de los nodos son en parte heredables (un buen prefijo tiende a tener buenos hijos, que es precisamente lo que hace que un haz colapse sobre un solo prefijo), y unos pocos nodos **trampa** rinden una gran puntuación inmediata mientras envenenan discretamente a cada descendiente: un modelo sintético de dos líneas del [robo de piezas](/es/research/why/piece-theft/), donde una colocación que puntúa ahora gasta una pieza que el interior profundo necesitará más tarde. > **[Figure]** Interactivo: anchura del haz frente a supervivencia — interactive: BeamWidthLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso 1. **Profundidad 0.** El haz se reduce a la raíz. En cada tick, cada superviviente engendra sus $b = 4$ hijos, a lo sumo $K \cdot 4$ candidatos en el vivero. 2. **Puntuar, ordenar, truncar.** Los hijos reunidos se clasifican y solo los $K$ mejores sobreviven. Todo lo que queda por debajo del corte se elimina *para siempre*: un haz nunca retrocede, de modo que un buen prefijo podado a la profundidad 5 es inalcanzable a la profundidad 10. Aquí es donde se renuncia a la completitud. 3. **Observar el amontonamiento.** La posición horizontal de un punto codifica su prefijo de camino, de modo que ramas distintas viven en agrupaciones distintas. En unos pocos niveles la mayoría de los supervivientes comparten un mismo prefijo de alta puntuación: el contador de *prefijos distintos* cayendo hacia 1 es el colapso de la diversidad, el haz degenerando en goloso-con-contabilidad. 4. **Seguir la traza rosa.** Eso es $K = 1$, goloso puro. Cuando engulle una trampa ámbar (gran ganancia ahora, subárbol envenenado después), su curva de puntuación se aplana para siempre. Un haz más ancho sobrevive a la misma trampa solo mientras sus supervivientes siguen repartidos entre ramas; una vez colapsado, es igual de crédulo. 5. **Deslizar $K$ de 1 a 64.** La puntuación final sube y luego se aplana; cada duplicación de la anchura rinde menos, los mismos rendimientos aproximadamente logarítmicos que este proyecto midió sobre tableros reales. Fíjese en lo que el deslizador nunca cambia: el colapso sigue ocurriendo, solo que unos pocos niveles más tarde. ## Lo que cuesta La búsqueda en haz es una búsqueda exponencial a la que se le ha suprimido la exponencial por decreto: $$ \text{time} \;=\; O(K \cdot b \cdot d), \qquad \text{memory} \;=\; O(K \cdot d), $$ para una anchura $K$, un factor de ramificación $b$ y una profundidad $d$ (más una ordenación en $O(Kb \log Kb)$ por nivel). Ambas son lineales en $K$, que es todo el atractivo. El precio es la *incompletitud*: un haz no ofrece ninguna garantía de optimalidad, ningún certificado en caso de fracaso y ninguna forma de volver a un prefijo podado. Su único modo de fallo sistemático es el colapso que muestra el laboratorio: cuando los supervivientes se convierten en $K$ copias de un mismo prefijo, la anchura efectiva vale 1, sea cual sea el precio pagado. A la escala de Eternity II la aritmética es clemente, y es exactamente por eso que los haces son aquí el motor desde cero: $d = 256$ celdas, $b$ = el número de candidatos (pieza, rotación) legales por celda, unos pocos cientos al principio, decreciendo a medida que el inventario se vacía, de modo que incluso $K = 10^4$ cuesta del orden de $10^8$–$10^9$ evaluaciones de hijos por tablero completo: minutos en un portátil, incomparablemente más barato que cualquier cifra exhaustiva de la [página de callejones sin salida](/es/research/build/dead-ends/). Lo que realmente dice $O(K \cdot b \cdot d)$ no es «barato» sino «tan bueno como su función de puntuación»: el haz evalúa una fracción ínfima del árbol, y ningún score conocido predice qué prefijos de profundidad 100 aún se completan bien. La anchura se compra en moneda lineal; la clarividencia no está en venta. La frase «minutos en un portátil» tiene detrás una curva de coste medida. En un solo núcleo del motor de este proyecto (recorrido fila a fila, empates resueltos por una lotería sembrada entre puntuaciones exactamente iguales; todas las puntuaciones de aquí son aristas apareadas sobre 480): | Anchura $K$ | Tiempo por tablero completo | Puntuación bruta | | --- | --- | --- | | 2048 | unos 1,8 s | en torno a 449 | | 4096 | unos 2,3 s | 450 a 453 | | 8192 | unos 4,8 s | 452 a 453 | | 16384 | unos 10,4 s | 452 a 455 | Diez segundos por tablero a $K = 16384$ es lo que convierte un haz de constructor en fábrica de tableros; la sección sobre la diversidad vuelve a ello más abajo. ## La anchura rinde menos de lo que uno esperaría En $K = 1$ el haz es una construcción golosa pura, y el goloso con reinicios aleatorios tiene una cola de distribución brutalmente pesada: en el motor de este proyecto, decenas de miles de ejecuciones golosas aleatorias toparon en torno a 408 de 480, y la extrapolación de la cola situaba un 440 en miles de millones de reinicios. Ensanchar el haz es mucho mejor, y el cuaderno tiene ya la distribución en lugar de la tendencia. Con el desempate convertido en una lotería sembrada de forma explícita (recorrido fila a fila, empates resueltos solo entre puntuaciones exactamente iguales, aristas apareadas sobre 480 en todo momento), 32 semillas por anchura dieron mín / mediana / máx de 361 / 373 / 389 a $K = 1$, 436 / 442 / 446 a $K = 64$, 444 / 447 / 451 a $K = 512$ y 446 / 450 / 452 a $K = 2048$ (23 semillas en este último caso). Llevar la anchura al extremo mueve el techo solo un poco: 451 / 453 / 455 sobre 32 semillas a $K = 16384$, lo mismo a 32768, y 454 / 454,5 / 455 a $K = 131072$ (solo 4 corridas, muestra pequeña). Nada en toda esa malla superó 455: en este productor, la anchura por sí sola nunca cruzó las 455 aristas apareadas. (Medido en el motor de este proyecto, no reproducido de forma independiente; para situar estas cifras desde cero frente a los resultados de la comunidad, véase la página de [récords](/es/research/records/).) Los rendimientos son aproximadamente logarítmicos en promedio, y ni siquiera están garantizados como monótonos. En un banco de pruebas anterior (las cinco piezas pista fijadas, un presupuesto global de desapareamientos, orden de desempate barrido), $K = 512$ dio 415, $K = 2048$ dio 450 con un tablero completo, y $K = 4096$ recayó a 432: demasiado estrecho poda al futuro ganador, demasiado ancho inunda el frente de casi duplicados que comparten los mismos compromisos tempranos condenados. Una sola configuración en un solo banco, pero la misma curva en U reapareció de forma independiente en el estudio de deduplicación de más abajo; qué cuenta como duplicado importa tanto como la anchura. Un intento de cura para el problema de la falta de clarividencia merece admitirse: clasificar cada candidato mediante un único despliegue goloso resultó demasiado ruidoso para ayudar. A $K = 64$ puntuó 426 donde el haz desnudo puntuaba 446, a unas 170 veces el coste (una sola configuración, sin barrer). El techo plano de estas distribuciones es estructural, no un billete de lotería reencontrado. Tres semillas independientes de la misma configuración $K = 2048$ alcanzaron exactamente 452 aristas apareadas con las cinco piezas pista en su sitio, y los tres tableros solo coinciden dos a dos en unas 6 a 10 colocaciones de piezas de 256: el nivel de acuerdo de arreglos aleatorios sin relación que comparten las pistas. El trece por ciento de las semillas dio exactamente 452 y cerca de la mitad cae a dos puntos de distancia. Tableros sin relación convergiendo en un mismo número dice que el techo pertenece a la clase del productor, no a una familia de tableros concreta; y las corridas más anchas de arriba muestran que el techo de esta clase es en realidad 455, siendo la acumulación en 452 un artefacto de anchura. Hay una razón estructural por la que un haz puro no puede ser mucho más que «goloso, más ancho». Un estado de haz a la profundidad $d$ afronta exactamente las mismas restricciones de apareamiento de aristas y de inventario que un nodo de DFS a la profundidad $d$; mantener muchos estados con vida no relaja nada, y no se conoce para Eternity II ninguna función de puntuación que prediga de forma fiable qué prefijos de profundidad 100 aún se completan bien. Esta página concluía antes, a partir de ese argumento, que la anchura adicional del haz en lo esencial no hacía más que duplicar lo que los reinicios aleatorios de un backtracker ya proporcionan. Una medición cara a cara, a continuación, mostró que esa conclusión era errónea: la anchura paga exactamente cuando el fallo se siembra muy por encima de la profundidad donde aflora. ## El haz frente a la profundidad, a coste igual La comparación más limpia del cuaderno enfrenta tres formas de búsqueda sobre un mismo generador de candidatos y un mismo evaluador, con presupuesto de nodos igual, de modo que la única variable es qué hace cada búsqueda con los mismos movimientos. La puntuación es en aristas apareadas, con una tolerancia global fija de desapareamientos. Con unos 20 a 25 millones de nodos cada una, la búsqueda en profundidad se estancó a la profundidad 213 de 256 celdas con 368 aristas apareadas; la búsqueda de discrepancia limitada se estancó a la profundidad 203 con 349; el haz a $K = 2048$ alcanzó la profundidad 256, un tablero completo con 455 aristas apareadas. Con las cinco piezas pista fijadas y 20 millones de nodos, la profundidad se estancó a la profundidad 190 (322 aristas apareadas, sosteniendo solo tres de las cinco pistas), mientras que el haz completó el tablero con 450 de 480 y las cinco pistas en su sitio, en unos ocho segundos en un solo hilo. Y no es una lotería de semillas: ocho permutaciones del orden de desempate devolvieron una salida idéntica byte a byte. El mecanismo es la corrección prometida arriba. Una búsqueda en profundidad que se equivocó cuarenta celdas por encima de donde falla debe deshacer cada nivel intermedio antes de poder tocar el error temprano, y los nodos de ese hueco son exponencialmente numerosos. Los $K$ supervivientes del haz ya codifican elecciones superficiales distintas, conservadas lado a lado, de modo que una corrección superficial está disponible a coste lineal por nivel. La anchura no relaja ninguna restricción; lo que compra es un sustituto del retroceso profundo que una búsqueda en profundidad no puede permitirse. En este puzzle los compromisos fatales se toman muy por encima de la profundidad donde afloran, que es exactamente el régimen donde ese sustituto rinde. La búsqueda de discrepancia limitada se gana su propio resultado negativo. La [LDS de Harvey y Ginsberg](https://www.ijcai.org/Proceedings/95-1/Papers/080.pdf) revisita el camino goloso unas pocas desviaciones a la vez, y gana cuando una buena solución difiere del goloso en unos pocos lugares tempranos. Aquí nunca igualó a la profundidad pura en ningún presupuesto probado (profundidad 196 frente a 204 con medio millón de nodos, 203 frente a 213 con 20 millones) y fue de 10 a 30 veces más lenta por unidad de progreso. Eso se mantuvo en todas las configuraciones probadas (discrepancia máxima de 5 a 20, dos presupuestos de desapareamientos, con y sin las pistas), aunque siempre en este único banco y evaluador. La lectura: el fallo del presupuesto de piezas es difuso, muchas celdas tempranas dispersas deben haber salido todas bien, así que todas las capas de baja discrepancia en torno al camino goloso están condenadas juntas. Una nota de alcance. Las puntuaciones absolutas de esta comparación vienen de un banco deliberadamente simple; los productores de otras partes de esta página las superan. La afirmación es el orden relativo a coste de nodos igual (haz por delante de profundidad por delante de LDS), no los números. ## La diversidad es el verdadero mando Librado a sí mismo, un haz colapsa: en unas pocas docenas de celdas la mayoría de los supervivientes comparten un mismo prefijo de alta puntuación, y el haz degenera hacia un goloso dotado de contabilidad adicional. Los remedios habituales son la deduplicación de prefijos y el muestreo entre los $2K$ mejores en lugar de tomar los $K$ mejores, y los constructores de este proyecto emplean ambos. Pero la palanca de diversidad más potente que se encontró aquí no estaba en absoluto dentro del haz: era el orden de recorrido. Hacer correr el mismo haz bajo nueve órdenes de visita distintos ([GAUNTLET](/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/)) produjo dieciocho familias de tableros distintas allí donde dieciséis semillas de un solo orden habían producido una. El orden de recorrido corta, sin embargo, en los dos sentidos. Para un evaluador que cuenta apareamientos contra vecinos ya colocados, un orden simplemente domina en puntuación bruta: fila a fila batió a la espiral y al borde-primero por un margen estable de 4 a 6 aristas apareadas en cada anchura de $K = 2048$ a $K = 131072$ (medianas subiendo de 453 a 454,5 para fila a fila, frente a 448 a 450,5 para la espiral y 448 a 450 para el borde-primero). El mecanismo es la visibilidad. Pasadas la primera fila y la primera columna, el orden fila a fila compromete cada celda contra dos vecinos ya colocados; la espiral y el borde-primero atraviesan largos tramos donde una celda se puntúa contra cero o un vecino, así que sus apuestas tempranas están menos informadas, y ninguna anchura repara del todo una apuesta temprana menos informada. Los órdenes perdedores siguen ganándose su sitio: reubican el final difícil en otras regiones del tablero (se vuelve a ello en la sección del muro), lo que los convierte en fuente de población incluso con puntuación bruta más baja. El otro mando fecundo es el desempate. [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) rompe los empates de puntuación a favor de las piezas que son frecuentes en esa posición dentro de un corpus de tableros fuertes, elevando el techo desde cero en unas pocas aristas y alcanzando 460 tras el refinamiento (una cifra de cuaderno desde cero, convención de aristas apareadas sobre 480; véase la página de [récords](/es/research/records/) para situar ese número frente a los resultados de la comunidad). [LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/) rompe los empates a favor de las piezas que sirven demandas escasas, ganando una pequeña mejora en la mediana y una regularidad mucho mayor, para luego colapsar gravemente en cuanto la ley a priori pasa de desempate a objetivo. La lotería de desempate tiene sus propias aristas cortantes. Sortear *cuál* de los candidatos exactamente empatados sobrevive es diversidad casi gratis; ampliar qué cuenta como empate no lo es. Tratar como empatados a los candidatos a una arista apareada del mejor costó aproximadamente de 50 a 60 puntos en cada anchura probada, y a dos aristas, de 150 a 160 (medido hasta $K = 2048$; anchuras mayores sin probar). La señal golosa se diluye más deprisa de lo que la anchura la recupera. Y la lotería se agota. Por encima de unos pocos cientos de supervivientes, los empates exactos de puntuación prácticamente desaparecen, de modo que un haz con desempate aleatorio se vuelve determinista en la práctica, el mismo tablero con cada semilla (la comparación a coste igual de arriba vio lo mismo como salida idéntica byte a byte entre órdenes de desempate). Restaurar la diversidad a gran anchura significa perturbar las propias puntuaciones. Añadir ruido de Gumbel a la puntuación de cada candidato, el truco estándar para muestrear secuencias sin reemplazo ([Kool, van Hoof y Welling](https://arxiv.org/abs/1903.06059)), compra diversidad con una lista de precios explícita: a temperatura 0 el haz es determinista y alcanzó 460 aristas apareadas tras el refinamiento, el mismo tablero con cada semilla; a 0,1 construyó entre 446 y 453 con una estructura de esquinas genuinamente distinta por semilla; a 0,5, de 438 a 441; a 2,0 colapsó hacia 240 a 252 aproximadamente. Tres semillas por temperatura: fíese de la forma del compromiso antes que de las cifras exactas. La deduplicación, el otro remedio habitual, esconde una trampa que interactúa con la anchura. Con una clave gruesa (supervivientes deduplicados por el conjunto de piezas usadas), la curva de anchura salió en U en un barrido de una corrida por punto: 446 a $K = 64$, 453 a $K = 1024$, y luego caída a 449 a $K = 4096$, porque a gran anchura los casi duplicados que solo difieren en su historia reciente desplazan a prefijos genuinamente distintos. Una clave sensible al camino restauró ganancias monótonas y alcanzó 455 aristas apareadas a $K = 16384$ (unos 21 minutos en un solo hilo en aquella implementación temprana, alrededor de 10 MB de memoria). Una corrida por punto: una patología observada, no una ley; pero junto al punto dulce no monótono de arriba suman dos avistamientos del mismo modo de fallo. Qué cuenta como duplicado es una decisión de diseño de primer orden. Junte la lotería sembrada con la tabla de costes y el haz deja de ser un constructor de un solo tablero: es una fábrica de tableros fuertes sin relación entre sí. 160 semillas a $K = 16384$ dieron 19 tableros con 455 aristas apareadas, 27 con 454, 48 con 453, 46 con 452, 19 con 451 y uno con 450; los 94 tableros con 453 o más tenían las trece primeras filas distintas dos a dos, familias de tableros distintas y no variaciones de una sola. Eso son unos 1160 tableros por hora en una modesta ejecución paralela de cuatro vías, con aproximadamente una semilla de cada ocho alcanzando el techo de 455 y ninguna llegando a 456. La diversidad producida en masa es exactamente la entrada que pide el pulido posterior. ## El muro de profundidad Todas las variantes de haz probadas aquí se estancan de la misma manera. El borde y el primer interior se rellenan casi a la perfección; los desapareamientos se concentran en las últimas filas, donde las piezas que una celda necesita fueron gastadas mucho antes al servicio de celdas más fáciles: el problema del [robo de piezas](/es/research/why/piece-theft/). Un objetivo local goloso no puede ver ese presupuesto global, y duplicar $K$ solo retrasa el muro una o dos aristas. Los haces desde cero en este motor topan en la zona media de los 450; la distancia restante se compra con [pulido por destrucción y reparación](/es/research/build/local-search/local-search-alns/), no con más anchura. En este puzzle, la búsqueda en haz es una buena manera de alcanzar rápido la meseta, y de ninguna manera una forma de abandonarla. El mapa de dónde caen los desapareamientos es medible, y se mueve con el orden de recorrido. En los tableros fila a fila, las últimas filas cargan con el grueso del daño: en un tablero completo con 450 de 480 y las cinco pistas en su sitio, las filas 13 a 15 concentraban 21 de los 30 desapareamientos. Un orden en espiral reparte en cambio sus desapareamientos por las filas centrales, porque sus últimas celdas son el centro del tablero; el borde-primero los concentra en el anillo más interior. La ubicación del muro es una propiedad del orden de visita, no del puzzle. Elegir el orden puede incluso subir el techo una arista: un orden de recorrido en forma de peine, cuyos desapareamientos caen en franjas verticales en lugar de en las filas de abajo, produjo seis tableros brutos con 456 aristas apareadas en 120 semillas y aproximadamente el doble de la tasa habitual de 455, donde fila a fila no produjo ningún 456 en 160 semillas. (Puntuaciones brutas de constructor, convención de aristas apareadas; la página de [récords](/es/research/records/) las pone en contexto.) Dos observaciones del cuaderno afinan de qué está hecho el muro. Primera: el haz alcanza compleciones que un backtracker que permite a lo sumo un desapareamiento por celda no puede construir estructuralmente; el tablero de 450 de arriba lleva una celda con dos aristas desapareadas, y un hijo con doble desapareamiento puede sobrevivir en el top $K$ aunque ningún camino en profundidad con un solo desapareamiento por celda conduzca hasta ahí. Segunda: sobre el propio prefijo de 240 celdas del haz, un finalizador exacto por ramificación y acotación hizo peor (433 o 420 aristas apareadas, según cuánto prefijo se fijara) que la propia compleción del haz con 450; la anchura ya había explorado la cola mejor de lo que puede una búsqueda exacta limitada en profundidad, compleciones con doble desapareamiento incluidas. ## Relacionado - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [GAUNTLET](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) — Ejecutar la misma búsqueda en haz según nueve órdenes de recorrido distintos, para que aterrice en regiones diferentes en lugar de converger siempre a la misma. El orden en zigzag encontró un tablero 458 inédito. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [STAGED](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. - [LODESTONE](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/lodestone/) — Una brújula tenue para una búsqueda partida de cero: incitarla a comprometer las piezas raras pronto, allí donde se necesitan. No eleva el techo; hace que la búsqueda alcance de forma fiable la cima de su propio rango. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # El conjunto de datos > Un conjunto de datos público bajo licencia CC0 para Eternity II, en dos partes: catorce instancias de referencia para resolver, y un corpus de 7658 tableros fuertes distintos de los que aprender. Cada puntuación se recalcula a partir del propio tablero, y se verifica que el corpus sea realmente variado, en lugar de mil copias de un mismo tablero. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/dataset/ - Actualizado: 2026-07-16 - Temas: structure, learning - Fuente: El conjunto de datos (este repositorio): las instancias, el archivo zip del corpus de tableros fuertes, el README y el script de generación — https://github.com/raphael-anjou/eternity2/tree/main/research/datasets --- Cuando se trabaja en Eternity II, dos necesidades se repiten sin cesar: hacen falta instancias contra las que lanzar un solucionador y, si se quiere aprender de los tableros fuertes, hace falta un corpus de ellos. Este conjunto de datos reúne ambas cosas, liberado al dominio público bajo licencia [CC0](https://creativecommons.org/publicdomain/zero/1.0/) para que pueda reutilizarse con cualquier fin sin atribución. Consta de dos partes, ambas alojadas en el [directorio del conjunto de datos](https://github.com/raphael-anjou/eternity2/tree/main/research/datasets). ## Parte A: las instancias de referencia Catorce instancias sobre las que se ejecuta un solucionador, cada una en forma de un archivo JSON autónomo que contiene el conjunto de piezas, las pistas fijadas que hubiera y la puntuación máxima alcanzable. - **Diez instancias 16×16** (`e2-16x16-v00` … `v09`): el conjunto de piezas oficial de Eternity II con tres esquinas fijadas, en diez disposiciones de esquinas diferentes. Fijar las esquinas produce diez instancias distintas pero de igual dificultad a partir de un solo conjunto de piezas, lo que permite a un estudio comparar los motores sobre un eje de diversidad en lugar de sobre un tablero único. Los tres estudios de motores de este proyecto (el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/), el [estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/) y el [banco de pruebas mono-núcleo](/es/research/lab/experiments/single-core-benchmark/)) resuelven exactamente esas diez. Puntuación máxima: 480. - **Cuatro subpuzzles de pistas** (`e2-clue-clue1` … `clue4`): los tableros 6×6 y 12×6 más pequeños, procedentes del conjunto de pistas oficial del puzzle. Se sabe que cada uno admite una solución completa, lo que los convierte en un fixture de corrección rápido: un solucionador incapaz de cerrar un tablero de pistas tiene un fallo mucho antes de enfrentarse siquiera al puzzle completo. Cada celda se describe en el orden arriba, derecha, abajo, izquierda; el color 0 es el borde gris, y `pos` es el índice de celda en recorrido por filas. La forma de un archivo de instancia: ```json { "id": "e2-16x16-v00", "family": "official-16x16-pin3corners", "width": 16, "height": 16, "numColors": 22, "pieces": [[up, right, down, left], ...], "hints": [{"pos": 0, "piece": 0, "rot": 3}, ...], "maxScore": 480 } ``` ## Parte B: un corpus de tableros fuertes **7658 tableros distintos** con puntuaciones de 400 a 470, la materia prima de los métodos que [aprenden de los tableros fuertes](/es/research/lab/experiments/raphael-anjou/learning/): priors de posición, ordenación de movimientos aprendida, minería de antipatrones. Se distribuye como un archivo zip (`e2-strong-boards.zip`, unos 16 MB) que se descomprime en las mismas filas en formato CSV y en formato JSON-lines: ``` id,score,family,edges e2b-00001,469,f008,adcaaendadwe… (1024 lowercase letters) ``` El campo `edges` es el tablero en sí: 256 celdas por cuatro lados, en recorrido por filas, en el orden arriba-derecha-abajo-izquierda, `a` para el borde gris. Es exactamente la cadena que lee el visualizador [e2.bucas.name](https://e2.bucas.name), de modo que cualquier tablero se pega directamente en el visualizador. La `family` son las cuatro piezas de esquina del tablero, un indicador de en qué cuenca se sitúa; hay 28 familias distintas. La distribución de puntuaciones tiene un pico marcado en la franja baja de los 450, donde se concentra una gran cosecha por haz mono-núcleo, y luego se afina en una larga cola, con 38 tableros en 460 o más y el mejor en 470. > **[Interactive: CorpusScoreDistribution]** Rendered on the canonical page (link above); not shown in this markdown export. ## Cada puntuación se recalcula, nunca se da por buena Ninguna puntuación de este conjunto de datos se copia de un campo de origen. Cada una se recalcula a partir de la propia cadena de aristas del tablero, contando las adyacencias interiores concordantes. No es una mera formalidad: en los datos de origen un tablero llevaba una puntuación obsoleta, declarando 453 cuando sus aristas valen en realidad 456, y el recálculo a partir de las aristas lo corrige automáticamente. Vuelva a derivar usted mismo las puntuaciones a partir de las cadenas de aristas y obtendrá exactamente los números publicados. ## El corpus es variado, no redundante Un montón de varios miles de tableros solo merece publicarse si los tableros son realmente diferentes. Antes de difundir este comprobamos que no son simples perturbaciones de un mismo tablero, y no lo son: - Solo 13 de los 7671 tableros de origen eran duplicados exactos; el resto son distintos, lo que deja 7658. - El tablero *mediano* difiere de su vecino más próximo en 235 de sus 256 colocaciones de piezas. Casi ningún tablero se sitúa a menos de 10 colocaciones de otro, y solo el 1 % a menos de 25. Aunque la mayoría de los tableros comparten una banda de puntuaciones estrecha, son estructuralmente casi por completo diferentes. - Los tableros se reparten entre 28 familias de esquinas distintas en lugar de amontonarse en una sola. Así que el corpus es una muestra realmente variada del paisaje de los tableros fuertes. Eso importa para todo lo que lo explote: un prior aprendido a partir de miles de copias de un mismo tablero codificaría ese tablero, no la estructura de los buenos tableros en general. ## Cómo regenerarlo El [script de generación](https://github.com/raphael-anjou/eternity2/tree/main/research/datasets) regenera todo el conjunto de datos. Las instancias se ensamblan a partir de los archivos de variantes públicos; el corpus se deduplica, se vuelve a puntuar a partir de las aristas, se despoja de toda etiqueta de espacio de trabajo (rutas de origen, nombres internos de presets y de semillas, nombres de archivo) y se reindexa con identificadores neutros, de modo que lo que se distribuye se reduce al contenido de los tableros y a las puntuaciones verificadas, nada más. ## Relacionado - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. - [Números de referencia](https://eternity2.dev/es/research/reference/) — Recuentos exactos de cuántas maneras válidas hay de rellenar un bloque pequeño en una posición dada del tablero oficial de Eternity II, bajo reglas cada vez más restrictivas: números fiables para contrastar el código de emparejamiento de aristas y de restricciones de tu solucionador. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. --- # Callejones sin salida > Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/dead-ends/ - Actualizado: 2026-07-22 - Temas: search-space, learning, exact-methods - Fuente: Cierre de eternity2.net: 1,6 TFlops, 10^19 operaciones de CPU, ninguna solución (groups.io message 3511) — https://groups.io/g/eternity2/message/3511 - Fuente: Max sobre la propagación de probabilidades: la influencia de las restricciones se desvanece a unas dos celdas (groups.io message 6208) — https://groups.io/g/eternity2/message/6208 - Fuente: Markus Zajc: las macropiezas aceleran pero no reducen el dominio (groups.io message 5883) — https://groups.io/g/eternity2/message/5883 - Fuente: Markus Zajc evalúa la poda por oferta de borde: 0,0014 % menos pruebas, 8 % más lento (groups.io message 6060) — https://groups.io/g/eternity2/message/6060 - Fuente: Fu, Qiu, Zha: Generalize a Small Pre-trained Model to Arbitrarily Large TSP Instances (AAAI-21) — https://arxiv.org/abs/2012.10658 - Fuente: Rethinking Heatmap and MCTS for TSP (2024) — https://arxiv.org/abs/2411.09238 --- Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II. Ninguno es una mala idea en general; simplemente no resuelven este puzzle. Documentamos lo que encontramos para que inviertas tu tiempo en otra parte. Cada entrada abre su veredicto con una etiqueta de firmeza: **Demostrado** significa que un teorema o un cálculo exacto cierra la puerta; **Medido** significa que lo ejecutamos (o lo hizo la comunidad) y lo vimos fracasar; **Reportado** significa que otro investigador lo ejecutó y documentó el fracaso, y nosotros no lo hemos vuelto a ejecutar. Cuando el veredicto proviene de nuestras propias ejecuciones, la página «por qué» enlazada lleva el comando de reproducción exacto, y [ejecútalo tú mismo](/es/research/build/run-it-yourself/) detalla la puesta a punto; cuando la comunidad llegó allí primero, citamos el mensaje de archivo. ## Romper la simetría *Suponer que el tablero posee simetrías de rotación o de espejo y fijar algunas piezas para reducir la búsqueda.* **Demostrado.** El juego oficial se construyó sin piezas con simetría de rotación y sin duplicados, y la única pista central fija la orientación. No hay ninguna simetría global que romper, así que fijar esquinas solo hace una elección arbitraria, no una elección gratuita. [Por qué esto es un muro →](/es/research/why/rare-color-geography/) La ausencia va más allá de las rotaciones y los duplicados. También buscamos simetría por reetiquetado de colores: una enumeración exhaustiva de todas las permutaciones de colores que podrían enviar el juego de piezas sobre sí mismo (salvo rotación) encuentra solo la identidad, porque cada uno de los 22 colores interiores tiene un perfil de adyacencia único a través de las piezas. El grupo de simetría tiene tamaño uno; el generador rompió también todos los intercambios de colores. (Los colores interiores sí llevan una estructura que vale la pena conocer: caen en exactamente tres clases de frecuencia, 5 colores que aparecen 24 veces cada uno, 5 que aparecen 48 y 12 que aparecen 50, en total 960 semiaristas, dos veces las 480 aristas.) ## Comprobar invariantes sobre las celdas ya colocadas *Descomponer el juego de piezas según su estructura de reetiquetado de colores y podar la búsqueda con invariantes calculados sobre la parte del tablero ya colocada.* **Medido**, con un mecanismo cercano a una demostración. En un backtracker que solo coloca piezas concordantes, la región colocada satisface siempre cualquier restricción que mencione únicamente celdas colocadas: la búsqueda impone esos invariantes por construcción, de modo que un podador que inspecciona lo que ya está sobre el tablero nunca se dispara. Probamos tres variantes de la idea y ninguna podó una sola rama; no hay aceleraciones ni puntuaciones que reportar porque los podadores literalmente nunca se dispararon. Una variante con recorrido en espiral fue además peor, no mejor, porque perdía el buen ordenamiento de la región inicial. El alcance que conviene retener: esto refuta los invariantes estáticos sobre la región colocada bajo una búsqueda estrictamente concordante, no todo uso imaginable de la estructura de colores del juego de piezas. Una poda útil tiene que mirar lo que todavía puede venir, comprobaciones hacia adelante sobre los candidatos de las celdas sin colocar, o vivir dentro de una búsqueda que tolere discordancias. Compárese con la comprobación de oferta de borde más abajo: aquella se dispara demasiado tarde; estas no se disparan nunca. ## Basta con lanzarle más cómputo *Ejecutar el mismo solucionador SAT o de búsqueda en una máquina más grande, una GPU, una FPGA o hardware cuántico.* **Medido.** El muro no es la frecuencia de reloj, es qué tan bien está codificado el problema y cómo está conformado el espacio de búsqueda. Los solucionadores SAT sobre GPU dan, en el mejor caso, una pequeña aceleración constante; los recocidos cuánticos no muestran ninguna ventaja a la escala que esto necesitaría. El mismo algoritmo, más rápido, choca contra el mismo muro un poco antes. La comunidad ejecutó este experimento a gran escala: la grilla de eternity2.net lanzó 1,6 teraflops y más de $10^{19}$ operaciones de CPU sobre el puzzle, y luego cerró sin una solución ([msg 3511](https://groups.io/g/eternity2/message/3511)). Y la esperanza cuántica se ha vuelto a plantear con regularidad, de [2007](https://groups.io/g/eternity2/message/1446) a [2024](https://groups.io/g/eternity2/message/11407). El techo contra el que esto se mide es el récord vigente de 470/480; Blackwood, que lo estableció, informó de que los solucionadores SAT, las GPU y las cachés de 2×2 preresueltas no lo ayudaron a superarlo ([Récords y solucionadores](/es/research/records/)). [Por qué esto es un muro →](/es/research/why/prune-vs-speed/) ## Propagación por sondeo (survey propagation) *El método de paso de mensajes que resolvió enormes instancias SAT aleatorias al encontrar clústeres de soluciones.* **Demostrado.** Supone que el problema se parece localmente a un árbol. Eternity II es una grilla con un ciclo corto en cada bloque 2×2, lo que rompe esa suposición. En la práctica los mensajes se aplanan en lugar de afinarse, lo opuesto a lo que la hace funcionar en el SAT aleatorio. No hay éxitos publicados para ella en puzzles en grilla. La comunidad notó el aplanamiento pronto: en 2008, experimentos de propagación de probabilidades de piezas encontraron que la influencia de las restricciones desde las pistas y las esquinas parece «desvanecerse» a unas dos celdas de distancia ([msg 6208](https://groups.io/g/eternity2/message/6208)). En su lugar: la poda que sí rinde en esta grilla es exacta, no probabilística; la [consistencia de arco](/es/research/build/reduce/arc-consistency/) y el [filtro de emparejamiento all-different](/es/research/build/reduce/alldiff-regin/). Más tarde intentamos nosotros mismos el rescate obvio: paso de mensajes más una penalización lagrangiana por pieza destinada a restaurar la restricción de uso único, sobre un 4×4 generado. Medido, y no converge. La marginal de al menos una pieza colapsa a exactamente cero en todas partes, y una vez que una marginal llega a cero ningún multiplicador puede revivirla: la brecha de dualidad nunca se cierra, con el residuo estancado en torno a 1,2 a 1,7 a lo largo de más de 50 iteraciones externas en las tres configuraciones de amortiguación y paso que probamos (marginal mínima de pieza 0,00 en todas las configuraciones; máxima 2,2 a 2,3 donde debería valer 1). Es una sola instancia de juguete y tres configuraciones, un fracaso ya en el 4×4. El contraste con la nota sobre redes de tensores más abajo es la parte instructiva: el mismo truco lagrangiano funciona cuando el paso interno es una contracción exacta costosa y fracasa cuando es un paso de mensajes barato. La precisión de las marginales internas es todo el juego. ## Ordenar los movimientos por propagación de creencias *Ejecutar propagación de creencias sobre los colores y usar sus indicaciones por celda para decidir qué pieza probar primero.* **Medido.** Las indicaciones salen casi uniformes, así que apenas clasifican a los candidatos. Cuando la enfrentamos cara a cara, elegir el siguiente movimiento al azar rendía igual o mejor, porque un orden informado fijo tiende a repetir los mismos errores. [Por qué esto es un muro →](/es/research/why/no-forced-moves/) ## Ordenar los candidatos por flexibilidad futura *Preordenar cada lista de candidatos para probar primero las piezas cuyas aristas inferior y derecha abren más opciones aguas abajo: una heurística de orden de movimientos que no cuesta nada al resolver.* **Medido.** Sobre el puzzle oficial, un solo hilo, 10 segundos × 3 ejecuciones contra una base afinada: misma profundidad máxima (192), misma mejor puntuación (344 aristas concordantes), mismo patrón de visita de nodos, y el rendimiento cayó de 84 u 85 millones a 80 millones de nodos por segundo, en torno al 5 %. Un sondeo multihilo de 30 segundos puntuó 429 contra 444 de la base, pero es una sola semilla: muestra que el orden puede perturbar el resultado, no que perjudique de forma fiable. El mecanismo: el punto más profundo alcanzable lo fijaba el calendario de discordancias del solucionador, no el orden de movimientos, y las piezas «flexibles hacia el futuro» se correlacionan con las piezas populares que el orden existente ya prueba temprano, así que la ordenación no añade información; solo reorganiza la disposición en memoria y lo paga en localidad de caché. Alcance: es el veredicto para una ruta de calendario afinada sobre el puzzle oficial; el panorama podría diferir en calendarios sin muro de profundidad o en puzzles generados con distribuciones de colores uniformes. La misma lección que la entrada de propagación de creencias de arriba, desde un ángulo más barato: los órdenes estáticos informados no baten a los valores por defecto aquí. ## Conteo por redes de tensores *Tratar el tablero como una red de tensores y contraerla para contar o puntuar los coloreados consistentes en las fronteras.* **Demostrado.** Solo puede imponer que las aristas en contacto concuerden, no que cada pieza se use exactamente una vez. Ese punto ciego es enorme: cuenta del orden de $10^{90}$ coloreados consistentes en las fronteras frente a la aproximadamente única solución real del puzzle. El paso de mensajes local sencillamente no puede ver la regla global de una pieza por celda. [Por qué esto es un muro →](/es/research/why/entropy-area-law/) Una enmienda de trabajo de cuaderno posterior: el punto ciego puede remendarse, a pequeña escala. Añadir una penalización lagrangiana por pieza sobre la contracción recupera la unicidad lo bastante bien como para resolver por completo puzzles generados de 4×4 (un segundo) y 6×6 (cinco minutos), verificados con piezas únicas y totalmente concordantes. El muro de coste llega mucho antes del 16×16: el primer intento a escala completa agotó la memoria en torno a 3 GB y murió, y el truncamiento necesario para caber puede descartar demasiado como para que el remiendo conserve sentido. Es un intento único, así que la variante remendada queda sin validar a escala completa, no demostrada imposible; el veredicto Demostrado de arriba se refiere a la contracción simple. Imponer la unicidad mediante multiplicadores necesita marginales internas precisas, y la precisión al número de colores del 16×16 exige una dimensión de enlace cuya memoria y cómputo se disparan. ## Resolver primero los colores, colocar las piezas después *Reformular el tablero como un grafo de líneas sobre los colores, resolver un arreglo de adyacencias de colores que sea consistente en las aristas en todas partes, y luego esperar que ese arreglo sea más fácil de convertir en un teselado real que resolver directamente por piezas.* **Medido.** Es una idea limpia, explorada en la lista de 2023 a 2025: reducir el puzzle a qué color se encuentra con qué, resolver ese objeto más pequeño y usarlo como andamiaje. El problema es que el objeto más pequeño no es pequeño. Enumerar solo los arreglos de colores interiores para E2 deja unas $6.6\times10^{11}$ permutaciones, y el 17×17 se dispara a $2.97\times10^{13}$ ([msg 11182](https://groups.io/g/eternity2/message/11182)), y cada una de ellas todavía tiene que verificarse contra una asignación real de piezas, porque un arreglo consistente en colores no tiene por qué ser teselable en absoluto por las 256 piezas reales. Es el punto ciego de la red de tensores con otro disfraz: satisfacer las adyacencias de colores es necesario pero está lejos de ser suficiente, y la restricción de usar cada pieza una sola vez, la que hace el trabajo de verdad, es precisamente lo que la vista de solo colores descarta. El propio resumen del autor tras la enumeración fue que uno «pasaría mucho tiempo solo validando uno» de los arreglos contra todas sus permutaciones de colores internos. [Por qué esto es un muro →](/es/research/why/entropy-area-law/) ## Cotas por relajación *Resolver la relajación de programación lineal para obtener un techo ajustado de cuántas aristas puede hacer concordar un tablero.* **Medido.** La relajación permite que las piezas sean fraccionarias y se repartan entre celdas, lo que finge concordancias que ningún tablero real puede tener. El resultado es un techo en torno a 478 mientras que los mejores tableros reales rondan 458, una brecha demasiado grande para certificar nada. La restricción vinculante es la unicidad global de las piezas, que la relajación descarta. Las formulaciones de PL estaban sobre la mesa de la comunidad ya el primer verano, y ya entonces un 4×4 tardaba más de una hora en resolverse ([msg 1678](https://groups.io/g/eternity2/message/1678)). En su lugar: la página [relajaciones LP e ILP](/es/research/build/exact/lp-relaxations/) muestra lo que estas codificaciones aún pueden aportar (pruebas de imposibilidad y rellenos casi óptimos en subtableros), que es donde reside de verdad su valor. La versión entera tampoco es un rescate a escala completa. Con las 60 celdas del borde fijadas, pedimos a un solucionador MIP de código abierto (HiGHS, 4 hilos, límite de 30 minutos) un interior óptimo en enteros: unas 154 000 variables binarias de colocación y 13 000 filas de restricciones. Regresó sin encontrar ninguna colocación entera factible en absoluto, e incluso etiquetó erróneamente la asignación vacía como «óptima» con objetivo 0, un recordatorio de que hay que verificar los estados de los solucionadores. Acota ese resultado con firmeza: un solucionador, configuración por defecto, un presupuesto. No refuta la programación entera; desde entonces hemos visto que la elección de codificación y de solucionador lo cambia todo en instancias más pequeñas (un solucionador de la clase CP-SAT resuelve por completo, en menos de un segundo, instancias donde la misma pila LP/MIP fracasa). Una formulación genérica a escala completa simplemente excede lo que un solucionador convencional puede siquiera encontrar factible en media hora; los modelos enteros de región restringida y de corpus restringido sí funcionan, y ahí es donde estos solucionadores se ganan el pan. ## Bases de datos de patrones (la heurística del cubo de Rubik) *Precalcular, para cada pequeño parche de celdas, el número mínimo de correcciones de aristas que exige cualquier completación, y sumar esos costes por parche en una heurística admisible: la técnica que descifró el cubo de Rubik y el juego del 15.* **Demostrado.** En Eternity II la heurística lleva exactamente cero información, por cálculo directo y no por muestreo. El juego oficial tiene 22 colores interiores distintos y, a través de las 256 piezas con rotación, cada uno de los 22 está disponible en cada lado, así que cada arista interior potencial es individualmente concordable. La cota superior por arista sale por tanto en 480, el máximo, y la cota por parche 2×2 (225 parches × 4 aristas internas, corregida por sobreconteo) también vale exactamente 480. Ambas colapsan en el enunciado trivial de que las 480 aristas podrían concordar todas. Las bases de datos de patrones se ganan el pan cuando el objetivo es no aditivo, cuando el coste conjunto de un parche excede la suma de sus partes, como los conteos de movimientos del Rubik. El conteo de aristas concordantes de este puzzle es exactamente aditivo por arista, y la única estructura conjunta, cada pieza usada una vez, acopla las celdas globalmente, algo que ningún parche local puede ver. En su lugar: las [relajaciones LP e ILP](/es/research/build/exact/lp-relaxations/), que sí codifican la restricción global de unicidad, dominan estrictamente cualquier tabla de parches. ## Reducción de retículos (LLL) sobre las ecuaciones de colocación *Codificar la colocación como ecuaciones enteras 0/1, tomar el retículo núcleo, reducirlo (LLL o BKZ) y buscar la solución como un problema del vector más cercano: la maquinaria detrás de los célebres ataques a mochilas y programas enteros.* **Demostrado** (los argumentos centrales son estructurales; la sonda de escala es medida). Tres puertas se cierran por turno. Primero, la parte que un ataque de retículo maneja limpiamente, cada celda recibe una pieza y cada pieza una celda, es un sistema de asignación totalmente unimodular, resoluble en tiempo polinómico por el algoritmo húngaro; nuestros experimentos de recuperación (10 de 10 instancias plantadas de 2×2 y 3×3 recuperadas exactamente, siguiendo la reformulación de retículo núcleo de Aardal, Hurkens y Lenstra) muestran al método resolviendo un problema que nunca fue difícil. Segundo, la parte que sí es difícil, los colores enfrentados deben concordar, es una restricción condicional («bilineal») sin una inmersión fiel en igualdades lineales que no pase por una explosión combinatoria de variables auxiliares, lo que borra la ventaja del retículo. Tercero, el sistema de oferta de colores no es una mochila: cada coeficiente vale exactamente 1, así que los ataques clásicos de suma de subconjuntos de baja densidad (Lagarias y Odlyzko 1985; Coster y colegas 1992) ni siquiera aplican, y un ataque LLL sobre la inmersión de pesos unitarios degenera en enumeración pura. La sonda de escala coincide: el LLL exacto en enteros sobre solo el núcleo de asignación fácil tardó 0,35 s en 2×2 y 42,6 s en 3×3, y fue detenido pasados 175 s en 4×4 (dimensión del núcleo 993); el esqueleto completo del 16×16 rondaría las 262 000 variables. (Esos tiempos son de una implementación exacta en Python puro, un enunciado práctico más que asintótico; los argumentos estructurales cargan con el veredicto.) Los subretículos por color se reducen barato, menos de medio segundo, pero 12 de los 60 vectores más cortos examinados en 3×3 ya exigen que una pieza ocupe dos celdas: omiten exactamente las restricciones que importan. La dureza del puzzle vive en una forma de problema, emparejamiento bilineal más distinción global, de la que las herramientas de reducción de retículos no son nativas; el subproblema del que son nativas ya es polinómico. ## Aprender una heurística en tableros pequeños *Entrenar una red neuronal en puzzles pequeños y luego transferirla al 16×16 completo para guiar la búsqueda.* **Medido.** Entrenamos un modelo que clavaba los tableros pequeños y lo vimos derrumbarse en el real. Aprende de movimientos candidatos filtrados de una forma, y luego se le pregunta sobre movimientos filtrados de forma muy distinta, y los colores del puzzle completo nunca aparecieron en el entrenamiento. La destreza no cruza la brecha de tamaño y color. [Por qué esto es un muro →](/es/research/why/rigidity-wall/) ## Descenso de gradiente sobre un tablero blando *Hacer el tablero diferenciable: una matriz piezas-a-celdas doblemente estocástica por normalización de Sinkhorn más softmax de rotación por celda, maximizar la esperanza de aristas concordantes por descenso de gradiente con recocido de temperatura, y luego redondear a un tablero real.* **Medido.** La brecha de relajación es intrínseca. La puntuación blanda sube a 367/480, pero el mejor tablero redondeado marca 336 aristas concordantes (otras semillas 324 y 325, mejor de 4), y el redondeo empeora a medida que la temperatura se afila; una variante de paso hacia adelante duro es aún peor, 280. La prueba más fuerte fue también la más pequeña: restringido a las últimas dos o tres filas de un tablero nuestro de 459 sobre 480 (puntuación estricta, las cinco pistas colocadas), con el resto congelado, exactamente donde la re-resolución exacta gana con fiabilidad de una a tres aristas, el optimizador ni siquiera pudo reproducir la propia cola del tablero (41 contra las 49 concordancias de región del titular, sobre 8 reinicios en dos filas; 63 contra 76 en tres filas). Una sola campaña, pero la brecha en la región más fácil está un 15 a 20 % por debajo del titular, muy fuera del ruido. El mecanismo hace eco de las entradas del 480 falso y de las redes de tensores de esta página: el óptimo continuo es una superposición de muchos tableros mutuamente incompatibles, y la restricción que la relajación ablanda, cada pieza usada exactamente una vez, es precisamente la que carga la dureza; ablandarla finge concordancias que ninguna permutación real puede honrar. Es un tercer modo de fracaso en la familia del aprendizaje; véase [cuándo colapsa el aprendizaje](/es/research/build/learning/when-learning-collapses/). ## Enumerar primero los clústeres locales *Listar todo clúster 3×3 o 4×4 válido, y luego coser los clústeres entre sí en un tablero completo.* **Medido.** Los conteos se disparan antes de ayudar. Cuando lo intentamos, los clústeres válidos en torno a una sola región ya llegaban a las decenas de millones, y combinar cuatro esquinas alcanza el orden de $10^{12}$ tuplas disjuntas en piezas. Te quedas sin tiempo y sin disco mucho antes de que las restricciones poden nada. La idea no deja de redescubrirse. A finales de 2024, las «macropiezas» 2×2 volvieron a surgir, con unos 4 millones de bloques antes incluso de que entre la disjunción de piezas ([msg 11428](https://groups.io/g/eternity2/message/11428)), y los veteranos remitieron a años de trabajo 2×2 anterior presente en el archivo ([msg 11429](https://groups.io/g/eternity2/message/11429)). [Por qué esto es un muro →](/es/research/why/rigidity-wall/) ## Construir el tablero una fila perfecta a la vez *Construir fila a fila, usando emparejamiento bipartito exacto para elegir la mejor fila posible dadas las aristas de color que expone la fila anterior.* **Medido.** Cada fila es localmente óptima; el tablero muere igual. En nuestra prueba la construcción chocó contra un muro hacia la fila 10 de 16, con 294/480 aristas concordantes, y las filas 11 en adelante infactibles sin más: las primeras filas localmente óptimas consumen exactamente las piezas cuyos colores de arista necesitan las filas posteriores, y para la fila 10 la reserva restante ya no puede suministrar los colores requeridos en absoluto. Mantener en paralelo las 32 mejores secuencias de filas no ayuda; todos los candidatos punteros beben de las mismas piezas escasas y se agotan juntos en la misma fila. (Prueba de concepto de una sola ejecución; el programa dinámico codicioso es esencialmente determinista. Haces mucho mayores, 256 o 1 024, no se probaron, aunque el argumento de la reserva compartida predice el mismo muro.) El mecanismo en una línea: la optimalidad local no se compone, porque el recurso vinculante es la reserva compartida de piezas y un compromiso fila a fila la gasta de forma invisible. Lo que funciona en su lugar es la previsión conjunta entre filas: la [búsqueda en haz](/es/research/build/construct/beam-search/) de tablero completo que nuestros constructores usan de verdad. ## Construir desde ambos extremos y encontrarse en el medio *Hacer crecer el tablero de arriba hacia abajo y de abajo hacia arriba a la vez y unir las mitades en una fila central: cada mitad recibe la parte más fácil, anclada al borde.* **Medido.** La unión lo mata. Con haces superior e inferior independientes de anchura 32, la sola disjunción de piezas fracasó en más del 99,9 % de los emparejamientos: 0 pares válidos de 1 024. Una segunda variante garantizaba la disjunción relanzando un haz ascendente dedicado por cada estado superior, unas 8 veces el cómputo, y aun así produjo cero fusiones, porque la fila de encuentro exige una concordancia exacta de una secuencia de colores de 16 posiciones sobre un alfabeto de unos 22 colores, y con las piezas restantes restringidas el conjunto concordante es efectivamente vacío. Dos obstrucciones se apilan: las búsquedas independientes beben de la misma reserva de piezas prometedoras, e incluso mitades disjuntas deben acordar una fila entera de colores de interfaz que ningún lado optimizó. Construir desde ambos extremos no elimina la dificultad de la interfaz; reubica el muro de mitad de tablero en la fila de encuentro. Alcance: dos variantes con una sola anchura de haz; las uniones ablandadas (tolerar unas pocas discordancias de interfaz y luego reparar, o encontrarse en diagonal) nunca se ejecutaron, así que el veredicto cubre las versiones de unión exacta, no la construcción bidireccional en general. El primo en métodos exactos de esta idea tiene su propia página: [meet in the middle](/es/research/build/exact/meet-in-the-middle/). ## Cube and conquer *Dividir la instancia SAT en millones de subcasos (cubos), resolver cada uno de forma independiente y recombinar. La técnica que resolvió el número de Schur cinco y el problema de los tripletes pitagóricos.* **Reportado.** William Millilaw la probó exhaustivamente en mayo de 2026 y no despeja el tablero. En 16×16 la fase de cubos no particiona la instancia en nada tratable sin un preprocesamiento pesado, y el paso de conquista (un solucionador con anticipación sobre cada cubo) era en sí mismo más lento que ejecutar kissat directamente. El resultado limpio fue una frontera firme: el método funciona hasta alrededor de 8×8 y se detiene ahí. Se une a la larga estirpe de métodos exactos que chocan contra el mismo muro que la programación entera y la decisión SAT, sin un asidero para superarlo. En su lugar: [qué muro detiene a qué método](/es/research/why/walls-and-methods/) confronta cada ataque exacto con la barrera en la que muere, para ver por qué este siempre iba a detenerse ahí. ## Generar tableros con un transformer *Entrenar un modelo tipo GPT sobre un corpus de tableros, condicionarlo a una puntuación objetivo y hacer que emita tableros nuevos de alta puntuación que la búsqueda nunca encontró.* **Reportado.** William Millilaw recorrió el arco completo en mayo de 2026 y cada etapa falló por su propia razón. Un modelo de 51 millones de parámetros aprendió la gramática de un tablero (cada pieza usada una vez, 96 por ciento estructuralmente válido) pero no la física: sin condicionar, sus tableros promediaban unas 250 aristas concordantes, cerca del azar. Condicionar a una puntuación objetivo elevó el promedio, pero cada tablero que emitía en la parte alta del rango era una copia exacta, token por token, de un tablero comunitario memorizado, entre ellos el 469 de McGavin. Con apenas un par de decenas de tableros de élite distintos en el conjunto de entrenamiento frente a decenas de millones de parámetros, el modelo simplemente los había memorizado; la condición de puntuación se convirtió en una consulta de índice. Una pasada final de aprendizaje por refuerzo lo empeoró, no lo mejoró, porque la cola de élite se muestrea demasiado rara vez para dar un gradiente estable. La lección coincide con el resultado de la [transferencia desde tableros pequeños](/es/research/why/rigidity-wall/) de esta página: la imitación aprende la distribución que se le muestra y no puede inventar la estructura rara que un récord necesita. ## Construcción por colonia de hormigas (rastros de feromonas) *Una colonia de agentes construye cada uno un tablero completo de forma codiciosa-aleatoria; un campo de feromonas sobre las decisiones (celda, pieza, rotación) se refuerza a lo largo de los caminos de los mejores finalistas (sistema de hormigas max-min estándar: evaporación, depósitos de élite, recorte), con la esperanza de que los rastros concentren las construcciones futuras en regiones globalmente consistentes.* **Medido**, tres fracasos de profundidad. El techo autónomo fue de 296/480 aristas concordantes, el mejor sobre las configuraciones barridas (mejor configuración con una semilla, escala de prueba de concepto), por debajo incluso de una base simple de búsqueda ancha. Encender el aprendizaje por feromonas empeoró la colonia: la media de la población cayó de unos 265 a unos 252 en 40 iteraciones mientras un control de reinicios aleatorios sin feromonas se mantenía en torno a 265 y alcanzaba 289; ese control fue un cara a cara directo. Y el campo aprendido no lleva ninguna información sobre lo que hacen de verdad los buenos tableros: cotejado contra un tablero nuestro de 455 (aristas concordantes, las cinco pistas colocadas), el campo clasificó la elección del buen tablero en primer lugar en el 1,2 % de las celdas frente a una tasa de azar del 0,9 %, con un percentil medio de 0,502, estadísticamente indistinguible de una moneda al aire, así que ni siquiera puede servir de guía para una búsqueda mejor. El mecanismo es la atribución de mérito: con unos 600 candidatos legales por celda y buenas puntuaciones finales que surgen de vastos conjuntos intercambiables de elecciones tempranas, «esta decisión estaba en un buen camino» es ruido. La feromona amplifica a un ganador de lotería temprano arbitrario y la colonia converge prematuramente en una cuenca mediocre. ## Búsqueda de árbol Monte Carlo con un prior barato (el trasplante del TSP) *Un resultado de 2024 mostró que, para el problema del viajante, un MCTS fuerte con un prior sin parámetros iguala a los mapas de calor neuronales aprendidos ([arXiv:2411.09238](https://arxiv.org/abs/2411.09238)). Portar fielmente el motor subyacente ([Fu, Qiu y Zha, AAAI-21](https://arxiv.org/abs/2012.10658)), trasladando su movimiento de gira k-opt al análogo exacto en asignación, una reubicación cíclica de k piezas siempre factible.* **Medido**, dos negativos limpios. Como refinador: la fase de intercambios por pares es un motor de reparación sólido (tableros dañados de 452 aristas concordantes hasta 295 recuperan exactamente 452) pero nunca supera su punto de partida, y el movimiento estrella estilo k-opt es completamente inerte; a través de cada ejecución y de toda la rejilla de hiperparámetros (pesos de mezcla, longitud de ciclo, simulaciones por movimiento), unos 2 500 a 3 150 ciclos de reubicación muestreados por ejecución produjeron cero mejoras. Como productor desde cero: una variante constructiva de bandidos por celda, tras una optimización de la ruta caliente de 2,5 a 3,3× para hacer justa la comparación, rinde como un haz de anchura 512 a 1 024, mediblemente por debajo de un haz de anchura 2048 a igual tiempo de reloj (fracción media de resolución 0,596 contra 0,743 en nuestra escalera de puzzles generados; 0,644 contra 0,721 en los peldaños difíciles, 24 ejecuciones), y la brecha no se cierra con presupuesto. El resultado de cero ciclos mejorantes es estructural y no un fallo de ajuste, aunque solo se probó el porte fiel. El mecanismo: el k-opt del TSP funciona porque la cadena de movimientos sigue aristas de gira existentes, así que reconecta por construcción estructura mayormente compatible; un problema de colocación por concordancia de aristas no tiene gira que seguir, y reubicar una loseta entera perturba las concordancias de los cuatro lados a la vez. La mitad transferible del artículo, que búsqueda más prior barato puede sustituir a un modelo aprendido, se sostuvo; la búsqueda en sí tiene forma de TSP. En este puzzle, la [anchura de haz](/es/research/build/construct/beam-search/) bruta sigue siendo el mejor uso del mismo tiempo de reloj. ## Recombinar dos buenos tableros *Tomar dos tableros de alta puntuación, conservar las celdas en las que coinciden y usar el cruce por partición para empalmar las regiones en desacuerdo en un hijo al menos tan bueno como ambos padres. El operador genético con una garantía de tunelización en problemas pseudobooleanos.* **Reportado.** William Millilaw lo implementó y lo evaluó sobre pares de tableros que puntuaban 455 y más. Degenera. La restricción de permutación (una pieza no puede reutilizarse) obliga a las regiones en desacuerdo a fusionarse en un único componente en el momento en que las cierras bajo la unicidad de piezas, de modo que el operador colapsa en «elegir al mejor padre» en más del 99 por ciento de los pares. Los raros empalmes mejorantes tocaban techo en 469, la puntuación de los padres, nunca por encima. Es la misma lección que el [muro de rigidez](/es/research/why/rigidity-wall/) desde el lado de la recombinación: los buenos tableros se alojan todos en una única cuenca estrecha, así que mezclarlos produce más de lo mismo en lugar de algo nuevo. La versión de trasplante fracasa de la misma manera, desde el otro extremo. Tomamos un parcial nuestro de 442 aristas concordantes y un tablero terminado de 459 (puntuación estricta, las cinco pistas colocadas) e injertamos las colocaciones del donante sobre la mayor región de desacuerdo, 71 celdas: la puntuación cayó de 442 a 271. Injertar acumulativamente a través de las seis regiones mayores nunca volvió a subir de 271 (241 a 271 en las seis variantes). La reparación local en este puzzle recupera típicamente de cinco a diez aristas; el injerto cava un hoyo de unas 170. Un parcial y un donante, un ejemplo trabajado decisivo más que una constante universal, pero el mecanismo es genérico: una región injertada gana las concordancias internas de su donante y rompe aristas a todo lo largo de su frontera con las celdas intactas, y la frontera de una región es grande en relación con su interior, así que el daño de frontera domina. Repararlo significa reelegir también las celdas justo fuera de la costura, e iterar esa exigencia se expande hasta que «trasplantar una región» se ha convertido en «reconstruir medio tablero». Los buenos tableros no se descomponen en partes intercambiables. ## Ampliar el vocabulario de las discordancias *Todo solucionador de la familia de backtrackers poseedora de récords puede dejar a lo sumo una arista discordante por celda; por construcción su índice ni siquiera puede representar una celda que rompe dos veces. Sin embargo, los mejores tableros comunitarios producidos por búsqueda local sí contienen cuatro o cinco de esas celdas de doble rotura. Construir entonces la misma búsqueda sobre el espacio más ancho donde una celda puede cargar dos roturas, y cazar donde nadie más puede.* **Medido.** A igual tiempo de reloj, el vocabulario más ancho no gana nada. Un A/B emparejado de 54 rondas, 27 pares con semillas emparejadas a través de tres formas de calendario y dos direcciones de barrido a 600 segundos × 4 hilos por ronda, dio 20 empates, 4 victorias para el motor ancho y 3 para el clásico, cada diferencia dentro de ±3 aristas concordantes, con distribuciones mín/mediana/máx por forma idénticas (415/420/425 en ambos brazos para una forma). El motor ancho visitó de 0,87 a 0,94 veces los nodos para los mismos resultados. Un censo exhaustivo aparte, detrás de un prefijo de 208 celdas de un tablero comunitario de 464 (puntuación a cinco pistas; contexto en la [página de récords](/es/research/records/)), encontró exactamente cuatro completaciones con siete o menos discordancias totales: el propio 464 y tres variantes de una celda a 462 y 463, y ninguna usaba una celda de doble rotura. El mecanismo: el espacio ancho es explorable pero nunca forzado. Con el presupuesto de discordancias repartido por todo el tablero, la búsqueda casi nunca tiene dos unidades de margen restantes en una misma celda, así que gasta su presupuesto igual que el motor clásico; y en la región casi perfecta del final de partida, el estrato de doble rotura está vacío sin más. Las celdas de doble rotura conocidas de los tableros comunitarios están en mitad del tablero y las crearon movimientos de reparación de búsqueda local, no ningún recorrido en profundidad. Alcance: un empate a igual tiempo de reloj para una familia de motores sobre el puzzle oficial, no una prueba de que el estrato ancho esté vacío en todas partes; la hipótesis de partida, que la meseta comunitaria es un muro de representabilidad, queda degradada a conjetura sin sustento, no refutada. ## Decodificar las discordancias como una palabra de código corrupta *Ver un tablero perfecto como una palabra de código, cada arista interna un control de paridad, y un tablero de alta puntuación como esa palabra más un pequeño síndrome de error; si el patrón de error tiene estructura, la decodificación por síndrome o la propagación de creencias deberían localizarlo y limpiarlo barato.* **Medido**, sobre un tablero nuestro de 459 sobre 480 (puntuación estricta, las cinco pistas colocadas); esta entrada y la siguiente son dos lentes que tratan el patrón de discordancias como señal estructurada, y ninguna encontró señal alguna. El síndrome es tan poco estructurado como podría ser: las 21 discordancias involucran unas 21 parejas de colores distintas (solo dos parejas se repiten), repartidas en 13 fragmentos desconectados, y el conteo total de semiaristas de cada color es par, así que el suelo de paridad sobre las discordancias es cero; nada algebraico prohíbe un tablero perfecto ni fuerza estos errores. Decodificar, en consecuencia, no compra nada. Re-resolver exactamente las celdas del soporte de error (34 celdas dispersas, con arranque en caliente) se mantiene en 459 a través de 8 semillas y una resolución de 200 segundos, no mejor que la re-resolución de banda rectangular simple contra la que corría; crecer la región un salto la vuelve demasiado grande para re-resolverse bien (433); y sin arranque en caliente la región dispersa retrocede a 448. Un solo tablero estudiado, aunque el mecanismo sugiere que el cuadro es genérico: los atajos de decodificación exigen un error estructurado (colisiones repetidas, un coset de baja dimensión, un clúster reparable), y un síndrome máximamente disperso cuyos fragmentos solo se acoplan a través del inventario de piezas es exactamente el régimen donde la decodificación degenera en la misma búsqueda exhaustiva de cola que ya ejecutamos. Las discordancias son un presupuesto asignado globalmente, no un error local que invertir. ## Tratar las discordancias como defectos físicos *Modelar cada discordancia como un defecto topológico cargado en el campo de colores: los defectos deberían asentarse en sitios forzados por conservación, de interacción mínima, y las cargas opuestas deberían aniquilarse.* **Medido**, mismo tablero que la entrada anterior, y cada premisa falla. La posición predice la ubicación de las discordancias extremadamente bien: el índice de fila por sí solo separa aristas rotas de intactas con un AUC de 0,895, y las 21 discordancias están todas en las últimas filas rellenadas. Toda señal de color es ruido: AUC de rareza de color de 0,46 a 0,50, y las discordancias llevan colores comunes, no raros. El suelo de conservación de colores sobre la cola es aproximadamente cero; la parte superior congelada no empuja hacia abajo ninguna demanda de color que las piezas restantes no puedan suministrar, e incluso la cota de emparejamiento más afilada, consciente de las orientaciones, solo fuerza de 0 a 2 discordancias donde existen de 10 a 19. El espectro de cargas no tiene esencialmente ningún par de signos opuestos, así que no hay nada que aniquilar. Un objetivo de repulsión de defectos añadido a la re-resolución exacta de la cola cambia qué solución desempatada sale, pero no el techo; la última fila es demostrablemente óptima dadas las filas de arriba. (Un barrido de resolución de región en frío se detuvo tras una sola semilla, en 441, una vez claro el veredicto; toma ese número como una ilustración de semilla única.) El hallazgo que vale la pena conservar: las discordancias no son en absoluto defectos en un campo de colores. Son pura frustración de orientación combinatoria, producto del agotamiento de piezas en la región que se rellena al final; la contabilidad de colores cuadra, y lo que se rompe es la restricción conjunta de cuatro lados sobre todas las piezas restantes a la vez. Ninguna reducción de corte único, por color o de energía por pares la captura. La geometría de dónde caen las roturas tiene su propia página: [geometría de las discordancias](/es/research/why/mismatch-geometry/). ## Forzar un borde diverso y luego rellenar *El borde es un subpuzzle más pequeño. Resolver primero muchos marcos válidos distintos, bajo la teoría de que la variedad en el marco siembra variedad en todo el tablero.* **Reportado.** William Millilaw lo intentó y encontró la premisa al revés. El borde es la parte fácil: desde cero ya es variado y rápido de colocar. El recurso escaso es el relleno interior, donde las piezas escasean y las discordancias se concentran. Forzar la diversidad del marco gasta esfuerzo donde no hay escasez y no compra nada donde sí la hay. Es un tema recurrente también en los propios experimentos de este proyecto: el marco vale sorprendentemente poco ([STAGED](/es/research/lab/experiments/raphael-anjou/pipelines/staged/) mide exactamente cuán poco), y el daño de la fase final cae en las esquinas interiores ([MOSAIC](/es/research/lab/experiments/raphael-anjou/pipelines/mosaic/)). Medimos la premisa nosotros mismos, desde dos direcciones. Primero, el catálogo de bordes: una búsqueda acotada en tiempo (120 segundos, explícitamente no exhaustiva; el conteo verdadero se desconoce) produjo 75 173 anillos de borde completos e internamente válidos. Al dar al solucionador una muestra de 500 marcos fijados, el 47 % agotó la búsqueda en menos de 200 milisegundos bajo propagación básica, y prácticamente todos fueron rechazados de plano en cuanto la propagación completa corrió contra las piezas pista oficiales. Un anillo que se cierra sobre sí mismo solo satisface la concordancia por pares alrededor del contorno; la factibilidad conjunta con las pistas y la restricción interior de usar cada pieza una vez es una condición mucho más fuerte, y prácticamente ninguno de los anillos catalogados la cumple. Segundo, bordes perfectos como semillas. Generamos 5 000 bordes perfectos distintos con piezas únicas por programación dinámica (las 60 celdas del borde colocadas, cada arista del borde concordante), muestreamos 100 de forma uniforme, y dimos a cada uno el mismo pipeline: un relleno interior de 60 segundos por propagación de restricciones, y luego un pulido de 60 segundos por búsqueda local. Mejor puntuación de todo el lote: 436/480 aristas concordantes; cerca de la mitad de los arranques quedó entre 420 y 427, un cuarto entre 380 y 419, y ninguno por encima de 437. Los tableros de la clase 455 a 460 de la misma época (puntuación estricta, las cinco pistas colocadas) salieron todos de un productor en profundidad que no fija el borde primero. El pulido usó una sola semilla y 60 segundos por arranque, así que esto es un filtro barato, no una refutación exhaustiva: bajo un pulido corto a igual presupuesto, ninguno de los 100 arranques borde-primero quedó a menos de 20 aristas de lo que alcanza la búsqueda directa. Un borde perfecto sobrecompromete el interior; el relleno optimiza después dentro del perfil de colores interior que el borde permite, y esa familia toca techo muy por debajo de las mejores cuencas. ## Construir un 480 falso y repararlo *Partir de un tablero con cada arista concordante permitiendo piezas duplicadas, y luego cambiar con avidez las piezas reales una a una, con la esperanza de mantener la puntuación en 480.* **Reportado.** William Millilaw lo ejecutó y colapsa en un juego de golpear al topo: cada pieza real que fuerzas a entrar rompe aristas en otro sitio, y la reparación nunca converge, tocando techo en torno a 463. La razón es la lección que subyace a toda esta página. La barrera para el 480 no es que las aristas sean difíciles de hacer concordar; un tablero falso con piezas repetidas las hace concordar todas con facilidad. La barrera es la restricción global de que cada una de las 256 piezas se use exactamente una vez, y eso es justamente lo que la construcción del 480 falso descarta. El muro es informacional, no una cuestión de reparación local de aristas. En su lugar: el [muro de rigidez](/es/research/why/rigidity-wall/) explica por qué la reparación local no puede cruzar esta última brecha, partas del tablero que partas. ## Sembrar la reparación con el prefijo profundo de un solucionador exacto *Usar un backtracker exacto de propagación de restricciones para construir un prefijo consistente muy profundo, fijarlo, y entregarlo a la búsqueda de reparación local como ventaja inicial.* **Medido**, una sola configuración; acótalo en consecuencia. El truco de fijado sí profundiza la búsqueda exacta en sí; entre rondas llevó al solucionador de la profundidad 27 a la 152, de la puntuación 23 a 297 aristas concordantes, un amplificador de profundidad real, y esa mitad positiva sigue siendo útil cuando se cazan soluciones exactas en lugar de puntuaciones altas (véanse las [páginas de backtracking](/es/research/build/backtracking/)). Pero como buscador de puntuación se vuelve en contra: la reparación desde el parcial fijado de 297/480 (184 celdas fijas) terminó en 424/480 aristas concordantes, frente a una mediana de 430 a 450 (mejor 451) de la reparación en frío simple en el lote de comparación de 16 semillas de la misma época. Ese brazo sembrado fue una sola semilla, un calendario y un preajuste de reparación, así que léelo como «esta configuración rindió por debajo de todos los arranques en frío del lote de comparación», no como una refutación de toda siembra por prefijo exacto. El mecanismo es la misma lección de partir del objeto equivocado que la entrada del 480 falso de arriba: un solucionador exacto en modo primera-solución optimiza consistencia, no puntuación. Devuelve el primer prefijo profundo factible que encuentra, no uno bueno; «profundo y consistente» no es «cerca de bueno», y el fijado hace el error permanente, porque la búsqueda de reparación no puede deshacer las celdas heredadas y nunca habría construido ese esqueleto por sí misma. ## Empezar por el centro y crecer hacia afuera *El centro tiene la mayor libertad de rotación: empezar ahí y dejar que las restricciones se acumulen mientras creces hacia el borde.* **Medido**, y la intuición está al revés. Cara a cara sobre puzzles generados de 5×5 a 8×8 contra los órdenes fila-a-fila y borde-primero, el centro-hacia-afuera perdió cada una de las seis configuraciones: típicamente de 10 a 100 veces más lento, fracasó de plano en cuatro de las seis dentro de presupuestos donde borde-primero terminaba (un 5×5 atascado en la profundidad 22 de 25 tras 2 millones de nodos en un puzzle que borde-primero resolvía en 2 000 nodos), y fue unas 60 veces más lento en uno que sí resolvió; el caso 8×8 fue el peor de los tres órdenes probados. Medido sobre puzzles generados pequeños con los órdenes de barrido de un solo solucionador, pero la dirección y la magnitud fueron uniformes en los seis casos. El mecanismo: la libertad es la enemiga de la propagación. El borde suministra restricciones duras e inmediatas (las aristas grises); el centro no suministra ninguna, así que una búsqueda centro-hacia-afuera se compromete con colores arbitrarios sin manera de detectar pronto la infactibilidad. Más libertad significa menos poda, no una búsqueda más rápida. En su lugar: la página del [orden de relleno](/es/research/build/backtracking/fill-order/) cubre los órdenes que sí ayudan. ## Codificar las estrategias humanas *Marco primero, crecimiento compacto de regiones alrededor de las pistas, celda más restringida primero, backtracking disciplinado, y un pilotaje deliberado de «gasta tus discordancias con sabiduría»: programar cómo piensan los mejores solucionadores humanos.* **Medido**, y nada de eso sobrevive. Un marco perfecto se encuentra en milisegundos y no compra tracción alguna (ninguna de las cinco pistas toca el borde). El verdadero asesino es el agotamiento de piezas, y es invariante al orden: a lo largo de una construcción, el número medio de piezas sin usar que encajan perfectamente en una celda colapsa de 3,5 en las primeras filas a 2,6, 2,0, 1,6 y 1,4 hasta 0,4 en la fila final, así que una discordancia queda casi siempre forzada al final, esté donde esté el final. Tres órdenes de relleno humanos corrieron con 6 semillas cada uno (aristas concordantes): fila a fila 392, espiral desde el centro 382, crecimiento anclado a las pistas 359. Cada orden descarga sus discordancias sobre lo que rellena al final (la espiral sobre el anillo exterior; el anclado a las pistas las unta por todas partes, y puntúa peor), y un desempate de «preservar los colores comunes para después» empeoró todos los órdenes. Una sola trayectoria guiada toca techo hacia 392, unas 67 aristas por debajo de lo que un haz ancho alcanza en el mismo hardware. El mecanismo: el déficit que produce las discordancias es un hecho de inventario global y conservado; el orden elige qué celdas lo heredan, nunca si existe. Y la única facultad humana que ayudaría de verdad, seguir miles de hipótesis en paralelo con anticipación global, es exactamente lo que ya es la [búsqueda en haz](/es/research/build/construct/beam-search/). Véase también [por qué no hay movimientos forzados](/es/research/why/no-forced-moves/). ## Precalcular macropiezas 2×2 (o mayores) *Resolver cada bloque 2×2 una vez, almacenar los válidos y colocar cuatro celdas a la vez para que la búsqueda sea más corta.* **Medido.** Markus Zajc lo trabajó a fondo en 2008: construir las macropiezas solo desplaza el trabajo, no lo elimina. Cambias un conjunto pequeño de piezas individuales por un conjunto muy grande de bloques 2×2, así que colocar un bloque es más rápido pero el número de tableros parciales distintos no cambia, todavía del orden de $10^{40}$ donde necesita ser $10^{4}$. Una aceleración de 10× o 100× en un árbol fuera de alcance sigue estando fuera de alcance ([msg 5883](https://groups.io/g/eternity2/message/5883)). Las macropiezas son una ganancia real de factor constante para un solucionador rápido, y por eso el [terreno de juego del orden de bloques](/playground/paths/) las admite, solo que no son una reducción de dominio, y únicamente una reducción de dominio movería la aguja. El techo contra el que esto se mide es el récord vigente de 470/480: Blackwood informó de que las cachés de 2×2 preresueltas no lo ayudaron a superarlo ([Récords y solucionadores](/es/research/records/)). En su lugar: la única palanca gratuita que sí encoge el árbol es el [orden de relleno](/es/research/build/backtracking/fill-order/). ## Conducir el backtracker en anillos concéntricos *Conducir el backtracker con calendario de la familia poseedora de récords hacia adentro en anillos concéntricos, bajo la teoría de que una geometría en capas casa con donde las roturas quieren asentarse.* **Medido.** Choca contra un muro de profundidad estructural que más tiempo no mueve. Una ejecución de una hora sobre el puzzle oficial visitó 3,4 miles de millones de nodos con la colocación más profunda atascada en un muro a profundidad 80: el muro estaba en 80 a los cinco minutos y ganó una celda en el resto de la hora. Una ejecución de dos horas terminó en el mismo 382/480 de aristas concordantes que la de cinco minutos. Un calendario emparejado con un orden, una ejecución por presupuesto: el veredicto es que este emparejamiento fracasa, no que los órdenes en capas estén refutados en general. El mecanismo: el plan de relajación del solucionador con calendario, dónde tiene permitido gastar sus discordancias, está afinado para un barrido fila a fila; una geometría de anillos impuesta desde fuera combate al calendario en lugar de ayudarlo, y la búsqueda se atasca a una profundidad fija sea cual sea el presupuesto. El [orden de relleno](/es/research/build/backtracking/fill-order/) importa, pero tiene que co-diseñarse con el calendario de discordancias, no atornillarse encima. ## Compartir una tabla de transposición entre trabajadores paralelos *Los motores de ajedrez comparten una tabla de transposición entre hilos; hacer lo mismo aquí, hasheando cada frontera explorada para que ningún trabajador re-explore un subárbol que otro ya agotó.* **Medido**, y la construcción se canceló sobre la base de la medición, que es la manera barata de matar una idea. Ocho trabajadores corrieron 15 segundos cada uno sobre el puzzle oficial con un solucionador idéntico, con solo el orden de candidatos barajado por trabajador: cada trabajador colocó unas 214 celdas en su tablero más profundo (profundidades máximas de 192 a 235 entre los ocho), pero el acuerdo por pares entre los tableros más profundos de dos trabajadores cualesquiera promedió 1,8 celdas (máximo 5), una fracción de acuerdo del 0,8 %. Una sola medición de ocho trabajadores, pero frente al 50 % o más que una tabla compartida necesitaría para rentar, el tamaño del efecto no deja ambigüedad. El mecanismo: la búsqueda es extremadamente dependiente del camino; la primera pieza probada a profundidad k remodela lo disponible a profundidad k+1, componiéndose a lo largo de toda la trayectoria, así que trabajadores con órdenes distintos nunca reconvergen en el mismo tablero parcial. Una tabla de deduplicación solo renta si los caminos reconvergen como las aperturas de ajedrez se embudan hacia medios juegos compartidos, y esta búsqueda no tiene tal embudo. El reverso es buena noticia: los trabajadores paralelos cubren de verdad territorios distintos, y por eso el paralelismo simple sin coordinación escala (ocho hilos alcanzaron profundidad 235 y 427 aristas concordantes en 30 segundos donde un hilo alcanzaba 192 y 344); la [resolución distribuida](/es/research/build/faster/distributed-solving/) se apoya exactamente en eso. ## Poda por oferta de borde (la prueba «lollypop») *Antes de recursar, contar la demanda restante de colores de borde frente a las piezas todavía disponibles; si la oferta no puede satisfacer la demanda, cortar la rama temprano.* **Medido.** Markus Zajc implementó esta prueba de oferta-frente-a-demanda como complemento de su solucionador de restricciones y la evaluó en el 8×8: cortaba alrededor del 0,0014 % de las pruebas mientras añadía un 8 % al tiempo de ejecución, una pérdida neta clara. La razón es instructiva: en casi toda rama donde la comprobación de oferta de borde habría fracasado, la propagación de restricciones ordinaria *ya* ha fracasado un paso o dos antes, así que la contabilidad extra paga por un corte que el solucionador estaba a punto de hacer gratis ([msg 6060](https://groups.io/g/eternity2/message/6060)). Una regla de poda solo ayuda si se dispara antes de las comprobaciones que ya ejecutas, no después. En su lugar: la idea de oferta-frente-a-demanda rinde cuando se funde en la propagación que se dispara primero, el [filtro de emparejamiento all-different](/es/research/build/reduce/alldiff-regin/). Diecisiete años después reejecutamos la misma idea en nuestro propio motor, sobre todos los colores en lugar de solo el borde: llevar la cuenta de cuántas aristas de pieza de cada color quedan sin colocar, y cortar la rama cuando una celda de la frontera demanda un color cuya oferta está agotada. Puzzle oficial, un solo hilo, una ejecución de 10 segundos: la base visitó 630 millones de nodos a 63 millones de nodos por segundo; con la comprobación, 388 millones a 39 millones, en torno a un 40 % menos de rendimiento para la misma profundidad máxima (192) y la misma mejor puntuación (344 aristas concordantes). Cero poda adicional, y la razón es ahora precisa: un índice de candidatos indexado por (color superior, color izquierdo) ya *es* este propagador. Si colocar una pieza agotara un color que una celda próxima demanda, la cubeta de candidatos de esa celda queda simplemente vacía un paso después y la búsqueda retrocede de todos modos; la comprobación explícita paga en cada nodo por un corte que el índice hace gratis. Una variante dinámica de presupuestos por color no rinde mejor sobre un backtracker estricto: para cada color, llevar la cuenta de cuántas de sus semiaristas están ya permanentemente discordantes, y podar todo tablero parcial que ya no pueda alcanzar la puntuación objetivo para ese color. A través de 15 instantáneas profundas de estados de búsqueda reales (profundidades 195 a 212 de 256 celdas) se disparó cero veces: un solucionador que nunca coloca una pieza discordante solo crea parciales que todavía no pueden violar el presupuesto, y para cuando el presupuesto mordería, la propagación ordinaria ya cortó la rama. (Sobre una búsqueda tolerante a discordancias la comprobación queda aquí sin probar.) Una no-lección vecina: ordenar todos los candidatos globalmente por un peso de rareza de color, el mismo orden en cada celda, no es una heurística informada en absoluto; equivale a un reetiquetado fijo de las piezas y no añade información. ## La prueba de cierre euleriano del borde *Un anillo de borde válido debe trazar un ciclo euleriano en el grafo cuyos vértices son los colores de arista del borde y cuyas aristas son las piezas del borde: una condición necesaria limpia, propuesta en la lista de correo ya en 2007. Comprobarla durante la búsqueda y podar los bordes que ya no pueden cerrarse.* **Medido**, cero poder de poda sobre el puzzle oficial. Probada a cinco profundidades de búsqueda con 200 000 ensayos cada una, un millón de bordes parciales en total: la condición euleriana nunca se disparó sobre una configuración que la propagación ordinaria no hubiera matado ya. La condición es necesaria pero vacua sobre el juego de piezas real, y la razón es un hecho de diseño: el juego oficial se generó con sus colores raros colocados únicamente en el anillo del borde, dos por pieza de borde, y esa estructura hace el cierre euleriano automático para cualquier borde parcial que se acerque siquiera a un anillo completo. Las configuraciones que la prueba rechazaría mueren mucho antes bajo una propagación estándar de tipo consistencia de arco. La misma lección de familia que la prueba lollypop de arriba: una poda solo ayuda si se dispara antes de las comprobaciones que ya ejecutas. ## Poda por patrones prohibidos durante la búsqueda *Demostramos que un conjunto de combinaciones de piezas 2×2 no puede aparecer en ningún tablero totalmente concordante. El siguiente paso obvio: comprobar cada parche 2×2 completado durante la búsqueda en profundidad y podar cuando esté prohibido.* **Demostrado** vacuo por construcción, y luego verificado empíricamente: a través de 24 tableros y 225 parches cada uno, 5 400 parches completados, cero estaban prohibidos, exactamente como predice el argumento. La prueba de patrones prohibidos pregunta si cuatro piezas pueden concordar internamente bajo alguna rotación; pero una búsqueda estrictamente concordante solo completa un 2×2 después de haber hecho concordar ya sus cuatro aristas internas, así que cada parche que completa es factible por construcción y la comprobación no puede dispararse nunca. El poder discriminante del teorema es sobre subconjuntos de piezas, lo que exigiría una integración de comprobación hacia adelante que pruebe los parches antes de que sus celdas se rellenen, y en un barrido fila a fila la versión barata de esa comprobación ya la hace implícitamente el índice de candidatos. El teorema en sí sigue siendo cierto y útil en otros lugares: véanse los [patrones prohibidos](/es/research/why/forbidden-patterns/). La misma moraleja final que la entrada lollypop: una poda que se dispara después de tus comprobaciones existentes vale exactamente nada. ## Qué tienen en común todos los callejones sin salida La brecha entre el mejor tablero conocido y una solución completa no parece una optimización que falta. Los buenos tableros están localmente congelados y globalmente restringidos de maneras que los arreglos locales, el hardware más rápido y las relajaciones estándar no tocan. Llegar al final parece necesitar una idea de otra índole, no más de lo mismo. Una convergencia tardía merece quedar registrada. Cuatro lentes probadas de forma independiente en la misma temporada, la decodificación de palabras de código, la física de defectos, el descenso de gradiente sobre un tablero blando y la estrategia humana codificada, redescubrieron cada una el mismo hecho desde una dirección distinta: el obstáculo es la distinción global de las piezas y el agotamiento del inventario, no la concordancia local de aristas. Cuando cuatro formalismos sin relación chocan contra el mismo muro, el muro es probablemente lo que hay que estudiar. Ver [por qué una computadora más rápida no ayuda](/es/research/why/prune-vs-speed/). ## Relacionado - [Ejecútalo tú mismo](https://eternity2.dev/es/research/build/run-it-yourself/) — Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha, recompilar el motor WebAssembly y reproducir las cifras. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Problemas abiertos](https://eternity2.dev/es/research/open-problems/) — La frontera abierta de Eternity II reunida en un solo lugar: cada ángulo que todavía merece un intento, el muro que ataca, qué se ha probado y dónde se detuvo, y si es un objetivo accesible para principiantes o uno difícil y bien cartografiado. --- # Métodos exactos > Solucionadores capaces de demostrar: codificaciones SAT y CSP, programación entera y sus relajaciones, cobertura exacta, encuentro en el medio y mapas de proyección iterados. Los métodos completos se atascan en el tablero completo, pero sus veredictos se ganan su lugar como pruebas de imposibilidad en subtableros. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/ - Actualizado: 2026-07-13 --- Solucionadores capaces de demostrar: codificaciones SAT y CSP, programación entera y sus relajaciones, cobertura exacta, encuentro en el medio y mapas de proyección iterados. Los métodos completos se atascan en el tablero completo, pero sus veredictos se ganan su lugar como pruebas de imposibilidad en subtableros. Las páginas siguientes van técnica por técnica: qué es cada una en una línea, qué alcanzó realmente en el tablero real de 16×16, dónde se detiene, y los laboratorios y mediciones que lo respaldan. Para abarcar todo el territorio de una vez, empieza con [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Páginas de esta sección - [Cobertura exacta y enlaces danzantes](https://eternity2.dev/es/research/build/exact/exact-cover-dlx/) — Eternity II se formula limpiamente como un problema de cobertura exacta, y el algoritmo X de Knuth con enlaces danzantes es la máquina clásica para ellos. Dónde brilla de verdad (tableros pequeños, conteo exhaustivo) y las dos razones por las que no vence al 16×16: un árbol de búsqueda que nunca se reduce, y ningún crédito parcial. - [Encuentro en el medio](https://eternity2.dev/es/research/build/exact/meet-in-the-middle/) — Enumerar dos mitades de un problema y unirlas en una interfaz compartida, intercambiando memoria por un exponente reducido a la mitad. El truco clásico de Horowitz–Sahni, qué aspecto tiene sobre bandas del tablero, y qué midió el experimento BANDSAW de este proyecto, incluido el método unilateral que lo superó. - [La cola como problema exacto en sí mismo](https://eternity2.dev/es/research/build/exact/exact-tail-endgame/) — Un tablero parcial fuerte es una región superior que el productor trabajó más una banda inferior de filas sin terminar. Se congela la parte alta, se entrega la cola a un solucionador de restricciones exacto y se lee qué mitad fija el techo: la estructura del productor o el final de partida abaratado. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - [Relajaciones LP y PLE: media pieza en todas partes](https://eternity2.dev/es/research/build/exact/lp-relaxations/) — Escribe Eternity II como un programa entero, abandona la integralidad, y un solucionador lineal alcanza error cero en segundos, con un 30 % de una pieza y un 20 % de otra compartiendo una esquina. Dieciocho años de campañas comunitarias midieron dónde termina la comodidad fraccionaria: una meseta de 420–440 aristas en cuanto las piezas deben ser enteras, un muro PLE ya en el 8×8, y un récord académico de 461 en una hora. Lo que enseña el camino del optimizador, y dónde el LP sigue ganándose su lugar. - [Aplicaciones iteradas y divide-and-concur](https://eternity2.dev/es/research/build/exact/iterated-maps/) — El ataque de los físicos a la satisfacción de restricciones: dividir el puzzle en dos conjuntos de restricciones cada uno fácil de proyectar, y luego iterar una aplicación cuyos puntos fijos son las soluciones. El método de Veit Elser llegó a la portada de PNAS y, sin embargo, en la lista de Eternity II sigue siendo un camino admirado, probado una vez y nunca recorrido hasta el final. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # Cobertura exacta y enlaces danzantes > Eternity II se formula limpiamente como un problema de cobertura exacta, y el algoritmo X de Knuth con enlaces danzantes es la máquina clásica para ellos. Dónde brilla de verdad (tableros pequeños, conteo exhaustivo) y las dos razones por las que no vence al 16×16: un árbol de búsqueda que nunca se reduce, y ningún crédito parcial. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/exact-cover-dlx/ - Actualizado: 2026-07-02 - Temas: exact-methods - Fuente: Knuth 2000, "Dancing Links" (arXiv cs/0011047) — https://arxiv.org/abs/cs/0011047 - Fuente: El algoritmo X de Knuth (Wikipedia) — https://en.wikipedia.org/wiki/Knuth%27s_Algorithm_X - Fuente: Cobertura exacta (Wikipedia) — https://en.wikipedia.org/wiki/Exact_cover --- Algunos rompecabezas hay que forzarlos para que encajen en un formalismo; Eternity II cae en la cobertura exacta casi por sí solo. Un problema de cobertura exacta plantea lo siguiente: dado un conjunto de elementos y una colección de opciones, cada una de las cuales cubre algunos elementos, hay que elegir opciones de modo que cada elemento quede cubierto *exactamente una vez*. Los teselados con pentominós, el sudoku y el problema de las n reinas son los clientes de manual, y el emparejamiento de bordes es el vecino de al lado. ## El tablero como cobertura exacta Tomemos 512 elementos: uno por celda («la celda $c$ está rellena») y uno por pieza («la pieza $p$ está usada»). Cada opción es una colocación concreta, la pieza $p$ en la celda $c$ con la rotación $r$, que cubre exactamente dos elementos, su celda y su pieza. Una selección de opciones que cubra cada elemento exactamente una vez es precisamente un tablero con todas las celdas rellenas y cada pieza usada una vez. Lo que la cobertura exacta pura no sabe expresar es que los bordes en contacto deben concordar. La propia extensión de Knuth se encarga de ello: XCC, cobertura exacta con colores, donde los elementos secundarios (aquí, uno por cada arista interior de la cuadrícula) llevan un color, y dos opciones solo pueden compartir un elemento secundario si le asignan el mismo color. Una solución XCC completa es entonces exactamente un tablero Eternity II perfecto. La codificación es fiel: nada del rompecabezas se aproxima por el camino. ## El algoritmo X, y por qué danzan los enlaces El algoritmo X de Knuth resuelve la cobertura exacta mediante ensayo y error disciplinado: elegir el elemento con menos opciones restantes (la regla de «fallar primero»), probar cada opción que lo cubre, retirar todo lo que esa opción vuelve imposible, y recurrir; ante un fallo, restaurar y probar la siguiente. Los enlaces danzantes (DLX) son la estructura de datos que hace elegante el paso de restauración. La matriz de opciones reside en listas doblemente enlazadas circulares, y retirar un elemento son dos escrituras de punteros, `left.right = right; right.left = left`, lo que deja intactos los propios punteros del nodo retirado. Deshacer el retiro son esas mismas dos escrituras a la inversa. El backtracking se convierte en cirugía de punteros sin copia alguna, y la memoria tocada es exactamente proporcional al trabajo realizado. Es uno de los algoritmos más elegantes de la caja de herramientas combinatoria, y el artículo de Knuth es un verdadero placer de leer. ## Mira danzar los enlaces Aquí está la búsqueda completa sobre la instancia exacta que Knuth usa en el artículo: siete elementos A–G, seis opciones R1–R6, exactamente una solución. Recórrela paso a paso y observa los tres movimientos que componen todo el algoritmo: elegir la columna más vacía, cubrirla (columnas y filas se desprenden del retículo) y, ante un fallo, descubrir en orden inverso (los mismos enlaces se vuelven a unir). El callejón sin salida en la columna E es el momento que merece ir despacio: todo lo que la decisión errónea retiró vuelve exactamente en el orden opuesto, con dos escrituras de punteros por enlace. > **[Figure]** Interactivo: cubrir y descubrir con enlaces danzantes — interactive: DancingLinksLab. Rendered on the canonical page (link above); not shown in this markdown export. Fíjate en lo que nunca ocurre: ninguna copia, ninguna reconstrucción, ningún barrido para averiguar qué restaurar. Los nodos retirados conservan sus propios punteros mientras están desprendidos, y ese es todo el truco, así que deshacer una cobertura es tan barato como hacerla. ## Paso a paso El mismo recorrido, en palabras. La matriz es R1 \{C,E,F\}, R2 \{A,D,G\}, R3 \{B,C,F\}, R4 \{A,D\}, R5 \{B,G\}, R6 \{D,E,G\}: 1. **Elegir la columna A.** Dos opciones vivas, empatadas para el mínimo; «fallar primero» dice ramificar sobre el elemento más restringido. Probar su primera opción, R2 \{A,D,G\}: cubrir las columnas A, D y G. Toda fila que las toque (R2, R4, R5, R6) se desprende. 2. **Recurrir.** Solo sobreviven R1 y R3. La columna B tiene ahora una única opción viva, así que elegirla, probar R3 \{B,C,F\}: cubrir B, C, F, lo que desprende R1. 3. **Callejón sin salida.** La columna E sigue sin cubrir y ninguna opción viva la cubre. Esta rama no puede completarse jamás, así que ni siquiera se intenta una búsqueda más profunda. 4. **La danza.** Descubrir F, C, B, luego G, D, A, en orden exactamente inverso, cada restauración la imagen especular del retiro. La matriz está bit a bit de vuelta en su estado inicial, sin haber sido guardada en ningún sitio. 5. **Probar la otra opción de A, R4 \{A,D\}.** Cubrir A, D. La columna E tiene ahora exactamente una opción viva, R1 \{C,E,F\}: cubrir C, E, F. A la columna B le queda una opción, R5 \{B,G\}: cubrir B, G. 6. **No queda ninguna columna**, cada elemento cubierto exactamente una vez. Solución: R1 + R4 + R5, hallada a profundidad 3 con un solo callejón sin salida. La búsqueda se desanda entonces por completo, verifica que no existe ninguna otra rama, e informa de exactamente una solución, y esa certeza de exhaustividad es todo el producto. ## Lo que cuesta El balance tiene dos líneas muy distintas: - **El problema es NP-completo.** La cobertura exacta figura en la lista original de Karp de 1972, así que no se conoce ningún algoritmo polinómico para ella, y el algoritmo X es exponencial en el peor caso: es una búsqueda por backtracking completa, y su árbol puede crecer como el producto de la ramificación en cada nivel. - **Lo barato es la estructura de datos.** DLX hace que cada retiro de enlace y cada restauración sean $O(1)$: dos escrituras de punteros, con un deshacer exacto, de modo que el tiempo total es $O(1)$ por enlace tocado, proporcional al árbol que la búsqueda explora realmente. Los enlaces danzantes compran un soberbio factor constante y coste de restauración nulo; no reducen el árbol ni un solo nodo. A la escala de Eternity II: la propia matriz XCC es perfectamente manejable, con 512 elementos primarios (256 celdas + 256 piezas), 480 elementos secundarios para las aristas interiores y sus 22 colores, y a lo sumo $256 \times 256 \times 4 = 262{,}144$ opciones antes de la poda por simetría y por borde. Construirla son minutos de trabajo. El árbol que hay encima es el muro: sin [ningún movimiento forzado](/es/research/why/no-forced-moves/) la ramificación se mantiene ancha hasta el fondo, sobre un espacio habitualmente estimado en torno a $10^{100}$, y $O(1)$ por nodo multiplicado por un número astronómico de nodos sigue siendo astronómico. Ese es el sentido preciso en que DLX es la herramienta correcta para tableros pequeños y el arma equivocada para el 16×16. ## Dónde brilla DLX es la herramienta correcta cuando quieres *todas* las soluciones, o un conteo, o una prueba de unicidad, sobre instancias lo bastante pequeñas para agotarlas. En tableros pequeños de emparejamiento de bordes hace exactamente eso: enumeración completa con excelentes factores constantes, ninguna solución perdida, ningún estado repetido. Contar los teselados completos de regiones del tamaño de una pista, verificar que un minirrompecabezas generado tiene solución única, cotejar los conteos exhaustivos de otro solucionador: ese es su terreno de juego, y ahí nada heurístico compite. Una nota de proyecto salida de la trinchera, ofrecida como advertencia más que como resultado: una implementación XCC hecha desde cero se validó aquí sin problemas en las n reinas y en tableros triviales, y luego pasó días rota en todo lo que fuera más grande, porque la interacción entre la purificación guiada por colores y la restauración cubrir/descubrir es genuinamente sutil. Si la construyes, sigue al pie de la letra el algoritmo publicado por Knuth; los días perdidos arriba fueron cosa de este proyecto. ## Por qué no vence al 16×16 Dos muros independientes, cualquiera de los cuales bastaría. **El árbol es el mismo árbol.** La cobertura exacta redescribe la búsqueda; no la reduce. La elección de elemento «fallar primero» es un buen orden de variables, pero [ningún movimiento está jamás forzado](/es/research/why/no-forced-moves/) en este rompecabezas: el elemento menos cubierto sigue ofreciendo docenas de opciones vivas muy adentro de la búsqueda, así que la ramificación se mantiene enorme hasta el fondo, sobre un espacio habitualmente estimado en torno a $10^{100}$ tableros. Un motor DLX recorre ese árbol por completo o no de forma útil en absoluto; y su bucle interno de persecución de punteros está limitado por la memoria, un orden de magnitud por detrás de los motores de arreglos ajustados a la caché que usan los [mejores backtrackers con récord](/es/research/lab/experiments/joshua-blackwood/solver/). **Ningún crédito parcial.** DLX responde una sola pregunta: cubierto exactamente, o no. Toda la economía de Eternity II se sustenta en puntuaciones parciales (467, 469, 470) y en búsquedas que toleran deliberadamente unas cuantas aristas mal emparejadas para llegar allí. La cobertura exacta no tiene ningún modo nativo de dejar una arista sin emparejar y pagar una penalización; relajarla hasta ese punto significa reconstruirla como una ramificación y acotación, momento en que la elegancia que la justificaba se ha esfumado. ## Veredicto Guarda DLX en el estante por lo que es: el instrumento exhaustivo. Conteo, pruebas de unicidad, verdad de terreno sobre tableros pequeños: imbatible, y digno del cuidado de implementación que exige. Como ataque al rompecabezas completo es un [callejón sin salida](/es/research/build/dead-ends/), por razones estructurales que ningún factor constante corregirá: el árbol que debe agotar es astronómico, y el juego de las puntuaciones parciales que juega todo método con récord es uno en el que no puede entrar. ## Relacionado - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # La cola como problema exacto en sí mismo > Un tablero parcial fuerte es una región superior que el productor trabajó más una banda inferior de filas sin terminar. Se congela la parte alta, se entrega la cola a un solucionador de restricciones exacto y se lee qué mitad fija el techo: la estructura del productor o el final de partida abaratado. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/exact-tail-endgame/ - Actualizado: 2026-07-23 - Temas: exact-methods, construction - Reproducir: `just research-exact-tail-endgame` - Fuente: Solucionador CP-SAT de Google OR-Tools (el motor exacto usado para el modelo de cola) — https://developers.google.com/optimization/cp/cp_solver - Fuente: Problema de asignación (Wikipedia), la relajación lineal que la cola no es — https://en.wikipedia.org/wiki/Assignment_problem --- Un tablero parcial fuerte son dos cosas pegadas: una región superior que el productor trabajó a fondo y una banda inferior de unas pocas filas sin terminar. Cuando un tablero así se queda por debajo de un puntaje objetivo, la pregunta natural es cuál mitad tiene la culpa. ¿El techo lo fija la estructura superior del productor o el final de partida de las últimas filas que el productor remató a bajo costo? Esta página trata ese final de partida como su propia optimización exacta, desacoplada del productor, y usa la respuesta como instrumento: congelar la parte alta, resolver la cola hasta (o hacia) el óptimo y leer si la resolución exacta compra algo que el productor dejó sobre la mesa. Cada puntaje de abajo sigue la misma convención: aristas interiores emparejadas excluyendo el borde, de modo que un tablero 16×16 completo llega como máximo a 480, y las cinco piezas pista oficiales quedan fijadas en su lugar y nunca se mueven. Esa última cláusula mantiene justa la comparación, así que va incorporada al modelo en vez de comprobarse después. ## La cola como pequeño problema exacto Fijemos un tablero completo producido por un rellenador voraz en orden fila por fila con semilla (la misma familia de productores que el [estudio de finalizabilidad](/es/research/lab/experiments/raphael-anjou/frostline/), adaptado para respetar las cinco pistas de modo que cada tablero emitido sea válido en pistas por construcción). Se congelan las filas $0$ a $15-R$; las $R$ filas de abajo forman la banda de cola, menos cualquier celda con una pista, que queda congelada. Las piezas propias de la cola, las que el productor colocó allí, son el fondo a permutar. La cola se entrega entonces a un modelo CP-SAT: - una (pieza, rotación) legal en el borde por celda libre, tomada del fondo propio de la cola, con un AllDifferent para que ninguna pieza se use dos veces; - variables de color por lado canalizadas desde la elección (pieza, rotación) mediante tablas de lados Element; - restricciones duras para el borde (gris exactamente en las aristas hacia el borde) y para cada adyacencia que la cola toca; - un booleano de emparejamiento en cada arista tocada por la cola, con el objetivo maximizando su suma. Esto no es una asignación lineal. El costo de una celda se divide entre las aristas que dan al techo congelado (que dependen solo de la elección de esa celda) y las aristas que dan a otra celda libre (un producto de dos decisiones). Los términos libre-libre son genuinamente bilineales, de modo que un emparejamiento bipartito al estilo húngaro no puede representar la cola con exactitud; solo tarifa la frontera congelada. Lo que hace tratable la cola de todos modos es el tamaño, no la linealidad: a una o dos filas el solucionador de restricciones la cierra directamente, donde un emparejamiento simple sería ciego a la mitad del objetivo. El mismo modelado aparece en las notas del proyecto sobre [codificaciones SAT y CSP](/es/research/build/exact/sat-csp-encodings/); aquí apunta a un subtablero en vez de al rompecabezas entero. ## El presupuesto de rupturas entrantes El productor rellena fila por fila y carga a cada celda un presupuesto solo sobre sus aristas *entrantes*: en orden fila por fila, las aristas entrantes de una celda son su arriba y su izquierda. Escribiendo $\mathrm{conf}(c)$ para el número de esas dos que no emparejan, el productor trabaja en el régimen $\mathrm{conf}(c)\le 1$: a lo sumo una ruptura entrante por celda. El modelo exacto refleja esto con exactitud mediante un tope por celda, y barrer el tope es el segundo eje del experimento: - **tope $=1$** reproduce el propio mundo del productor, $\le 1$ ruptura por celda. Toda celda que el modelo exacto rellena es una celda que el productor podría, en principio, haber construido. - **tope $=2$** admite una *doble* ruptura entrante en una celda: dos desacuerdos llegando a la vez. Es una colocación que el productor $\le 1$ ruptura nunca puede hacer, así que cualquier punto que compre es un punto estructuralmente fuera del alcance del productor. La brecha entre los dos topes es el precio, en aristas emparejadas, de la única jugada que el productor no puede hacer. ## Qué compra la cola exacta Para cada semilla de productor el modelo se corre a una fila (cola de 16 celdas) y dos filas (cola de 32 celdas), a ambos topes. La cantidad estelar es el delta, $\text{puntaje exacto} - \text{puntaje productor}$, sobre el techo congelado idéntico. Por construcción la resolución exacta domina la cola voraz, así que el delta nunca es negativo; su interés está en si es *estrictamente positivo* (el productor dejó puntos en la cola) o *cero* (el productor ya era óptimo en la cola), y en cómo varía esa respuesta entre semillas. A una fila el modelo alcanza un óptimo probado cada vez que es factible, en unas pocas centésimas de segundo. Cada tablero emitido se revalúa con independencia del solucionador, y la comprobación va de punta a punta: el blob de aristas de la URL del visor se decodifica de vuelta a una cuadrícula de colores y sus emparejamientos interiores se recuentan desde cero, y ese recuento concuerda con el puntaje que reporta el solucionador (para el tablero de una fila de la primera semilla, $385$ se vuelve a decodificar como $385$). El juego de piezas también se revisa distinto y las cinco pistas se revisan en su lugar. Unas pocas semillas muestran toda la historia en miniatura: > **[Figure]** Cola de una fila (16 celdas), óptimo probado, cuatro semillas de productor — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. Tres regímenes coexisten en un mismo banco de pruebas, y son exactamente los regímenes que el cuaderno fuente describía por separado: - **Cola limitante** (semilla 1). La cola voraz deja $6$ aristas emparejadas sobre la mesa que la resolución exacta recupera, sin necesidad de una ruptura doble. Aquí la restricción limitante es de veras el final de partida, y el productor lo resolvió por debajo. - **Cola ajustada** (semilla 2, tope $=1$). La resolución exacta iguala al productor: delta $0$. La cola propia del productor ya era óptima bajo su regla $\le 1$ ruptura, así que no hay nada que recuperar, y el techo vive en la estructura superior, no en la cola. Subir el tope a $2$ halla entonces exactamente un punto más, y es precisamente una ruptura doble entrante, la única palanca que el productor no puede accionar. - **Ruptura doble portante** (semilla 3, tope $=1$). La más fuerte de todas: el productor $\le 1$ ruptura no puede completar esta cola *a ningún puntaje*, así que tope $=1$ es infactible. Solo una ruptura doble entrante admite un relleno siquiera, y tope $=2$ alcanza entonces un óptimo probado. La ruptura doble no es un extra aquí; es la diferencia entre un completado y ninguno. En todo el barrido de 24 semillas a una fila, el reparto es el resultado: a tope $=1$, $18$ semillas son de cola limitante (delta estrictamente positivo), $1$ de cola ajustada (delta cero) y $5$ derechamente infactibles (no existe completado $\le 1$ ruptura de la cola). Los puntos recuperados van de $0$ a $8$ aristas emparejadas, mediana $4$, media de unos $3{,}9$. Subir el tope a $2$ vuelve factibles las $24$ semillas y todas de cola limitante, con deltas de $1$ a $9$, mediana $4{,}5$, media de unos $4{,}8$: la jugada de ruptura doble desbloquea a la vez las cinco semillas atascadas y agrega un punto o dos casi en todas las demás. Que la cola sea la restricción limitante es una propiedad del tablero individual, no un absoluto. A dos filas la cola crece a 32 celdas y el modelo ya no prueba la optimalidad dentro del presupuesto de tiempo: devuelve incumbentes factibles a unos $45$ s cada uno. Los deltas ahí son mayores pero son *cotas inferiores*, ya que puede existir un completado mejor que el solucionador no certificó. > **[Figure]** Cola de dos filas (32 celdas), factible no probada óptima, cuatro semillas — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. ## Qué zanja, y qué no Leída como instrumento, la cola exacta responde con nitidez a la pregunta «¿cuál mitad?» en este banco de pruebas: a veces la cola (delta estrictamente positivo, el final de partida estaba subresolto), a veces la parte alta (delta cero, la cola ya estaba ajustada). La respuesta depende del productor, que es justo la cuestión. Un mismo puntaje de tablero puede esconder uno u otro régimen, y el diagnóstico barato para distinguirlos es si el solucionador exacto cierra la brecha de optimalidad. Cuando lo hace y el delta es cero, la cola está ajustada y ningún finalizador ayudará; cuando el delta es positivo, el finalizador heurístico del productor dejó aristas emparejadas sin reclamar. El tope de ruptura doble afina esto: al menos una semilla aquí no tiene *ningún* completado de su cola construible por el productor, así que la capacidad del solucionador exacto de colocar una ruptura doble entrante es portante y no cosmética. Lo que esta corrida a pequeña escala no zanja es el récord. El productor aquí es un rellenador voraz simple cuyos tableros se sitúan entre mediados de los 360 y finales de los 370, muy por debajo de los productores de pista de récord que usó el resultado fuente, así que hacer cola exacta aquí no puede *mover un récord*: el titular a nivel de récord del cuaderno, una cola exacta venciendo a un finalizador heurístico por una arista emparejada en un tablero mucho más fuerte, está ligado a ese productor más fuerte y no se reproduce aquí. Lo que se reproduce es el mecanismo y la forma del efecto: la banda inferior es un genuino pequeño problema exacto, la resolución exacta nunca pierde contra la cola propia del productor y a menudo la vence, el tope de ruptura doble compra puntos reales y a veces portantes, y que la cola sea la restricción limitante depende del tablero. Los números de dos filas son cotas inferiores, no óptimos probados, y deben leerse así. Para situar cualquiera de estos puntajes de aristas emparejadas frente a los mejores resultados de la comunidad, obtenidos con presupuestos de cómputo mucho mayores, véase la [página de récords](/es/research/records/). El emparejamiento al que apunta esta página, un productor fuerte rematado por un solucionador de últimas filas *exacto* en vez de heurístico, es también el siguiente paso natural para los [productores por haz](/es/research/build/construct/beam-search/) del proyecto: el finalizador, no el productor, es donde el método exacto se gana su lugar. ## Reproducir El plan, el script CP-SAT y la tabla de resultados registrada viven con el [tema de reproducción](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/exact-tail-endgame). Un solo comando regenera todo el barrido: ```sh just research-exact-tail-endgame ``` Produce `results/tailforge.json`: un registro por (semilla, filas, tope) con el puntaje productor, el puntaje exacto, el delta, el estado CP-SAT y una bandera de reverificación independiente, más un resumen por configuración de la distribución de deltas entre semillas. Las resoluciones de una fila son exactas y reproducen sus óptimos probados al reejecutar; las resoluciones de dos filas son incumbentes factibles por semilla cuyos deltas exactos están ligados al linaje, así que reproducen el signo y la forma en vez de la cifra exacta. ## Relacionado - [Leer el futuro de una fila en sus piezas sobrantes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/frostline/) — Una energía libre de propagación de creencias, calculada sobre las piezas sobrantes de la última fila, predice el rango del mejor final posible. La señal no es un proxy del puntaje bruto, sobrevive a un cambio de productor y muere más allá de una fila. - [Encuentro en el medio](https://eternity2.dev/es/research/build/exact/meet-in-the-middle/) — Enumerar dos mitades de un problema y unirlas en una interfaz compartida, intercambiando memoria por un exponente reducido a la mitad. El truco clásico de Horowitz–Sahni, qué aspecto tiene sobre bandas del tablero, y qué midió el experimento BANDSAW de este proyecto, incluido el método unilateral que lo superó. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Aplicaciones iteradas y divide-and-concur > El ataque de los físicos a la satisfacción de restricciones: dividir el puzzle en dos conjuntos de restricciones cada uno fácil de proyectar, y luego iterar una aplicación cuyos puntos fijos son las soluciones. El método de Veit Elser llegó a la portada de PNAS y, sin embargo, en la lista de Eternity II sigue siendo un camino admirado, probado una vez y nunca recorrido hasta el final. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/iterated-maps/ - Actualizado: 2026-07-02 - Temas: exact-methods, learning - Fuente: Elser, Rankenburg & Thibault, Searching with iterated maps (PNAS 104:418, 2007) — https://doi.org/10.1073/pnas.0606359104 - Fuente: Gravel & Elser, Divide and concur: a general approach to constraint satisfaction (Phys. Rev. E 78, 036706, 2008) — https://doi.org/10.1103/PhysRevE.78.036706 - Fuente: Gravel & Elser, Divide and concur: open preprint (arXiv:0801.0222) — https://arxiv.org/abs/0801.0222 - Fuente: Aragón Artacho, Borwein & Tam, Recent results on Douglas–Rachford methods for combinatorial optimization problems (arXiv:1305.2657) — https://arxiv.org/abs/1305.2657 - Fuente: JSA formaliza el problema dual y presenta el trabajo de Elser a la lista (mensaje groups.io 9347) — https://groups.io/g/eternity2/message/9347 - Fuente: JSA sobre los artículos de divide-and-concur y la cuestión abierta del escalado (mensaje groups.io 9350) — https://groups.io/g/eternity2/message/9350 - Fuente: La prueba de Dima: un simple hill-climber vence a la difference map en el propio benchmark del artículo (mensaje groups.io 9351) — https://groups.io/g/eternity2/message/9351 - Fuente: Las diapositivas ICCOPT-MOPTA 2007 de Elser subidas a los archivos del grupo, «Eternity II mencionado en las 3 últimas diapositivas» (mensaje groups.io 9349) — https://groups.io/g/eternity2/message/9349 - Fuente: Código fuente de Veit Elser, con un puzzle de ejemplo 5×5, compartido en los archivos del grupo (mensaje groups.io 9362) — https://groups.io/g/eternity2/message/9362 - Fuente: El resumen de JSA de 2015: las versiones pequeñas del modelo resueltas, la grande no (mensaje groups.io 9442) — https://groups.io/g/eternity2/message/9442 - Fuente: El boceto del traslado primal–dual de Dima con emparejamiento húngaro (mensaje groups.io 9445) — https://groups.io/g/eternity2/message/9445 - Fuente: El precedente del intercambio de aristas SRD: resolvió 8×8, nunca llegó al 10×10 (mensaje groups.io 9447) — https://groups.io/g/eternity2/message/9447 - Fuente: Douglas–Rachford nombrado en la lista, a través de la nota de Wikipedia sobre TetraVex (mensaje groups.io 11592) — https://groups.io/g/eternity2/message/11592 - Fuente: JSA vincula Douglas–Rachford de nuevo con la estirpe de Elser (mensaje groups.io 11594) — https://groups.io/g/eternity2/message/11594 --- Hasta ahora, cada método de este estante trata Eternity II como una búsqueda discreta: colocar, comprobar, retroceder. La comunidad de físicos propuso algo más extraño. El grupo de Veit Elser en Cornell reformuló la satisfacción de restricciones como geometría, un punto que rebota entre dos conjuntos en un espacio de alta dimensión, y cabalgó un mismo esquema de iteración desde la recuperación de fase por rayos X hasta el Sudoku, el 3-SAT y el plegamiento de proteínas, llevando el método a la portada de PNAS ([Elser, Rankenburg & Thibault, 2007](https://doi.org/10.1073/pnas.0606359104)). Los puzzles de emparejamiento de aristas son casi el ejemplo de manual de la formulación, y la portada de aquel número de PNAS mostraba precisamente uno, como señaló el miembro que llevó el trabajo a la lista ([mensaje groups.io 9347](https://groups.io/g/eternity2/message/9347)). Esta página explica el método como es debido, porque es realmente llamativo y realmente distinto de todo lo demás del catálogo. Luego relata lo que la comunidad de Eternity II hizo efectivamente con él: un arrebato de interés en 2014–2015, una prueba empírica, un archivo compartido del propio código de Elser y ninguna campaña. Es un camino conocido, aquí poco transitado. ## Dos conjuntos fáciles, una intersección difícil Sumergimos un estado del tablero como un punto $x$ en un espacio euclídeo, digamos un vector real con una coordenada por cada terna (celda, pieza, rotación), donde un tablero legal es una asignación 0/1. Definamos ahora dos conjuntos de restricciones: - $C_1$, **piezas usadas una vez**: cada celda contiene exactamente una pieza-rotación, y cada pieza se usa exactamente una vez. Los colores de las aristas se ignoran. - $C_2$, **aristas concordantes**: cada par de aristas en contacto coincide en color, y el borde es gris. El inventario de piezas se ignora, de modo que las celdas pueden contener mezclas fraccionarias o piezas duplicadas. Un Eternity II resuelto es exactamente un punto de $C_1 \cap C_2$. El truco que hace útil la formulación es que cada conjunto *por sí solo* es fácil de proyectar. Dado un $x$ arbitrario, se puede calcular a bajo coste el punto más cercano del conjunto: - $P_1(x)$, la asignación de piezas válida más cercana, es un problema de emparejamiento bipartito: asignar 256 piezas a 256 celdas para maximizar la afinidad total. El algoritmo húngaro lo resuelve exactamente en tiempo polinómico, el mismo motor de asignación que impulsa el paso de rerelleno de la [búsqueda local](/es/research/build/local-search/local-search-alns/). - $P_2(x)$, el coloreado consistente en aristas más cercano, se descompone arista por arista: cada unión interior simplemente promedia sus dos lados hacia el acuerdo. Puramente local, vergonzosamente paralelo. Cada proyección es un problema resuelto. Toda la dificultad de Eternity II reside enteramente en la *intersección*, y el esquema ingenuo, la alternancia de proyecciones $x \mapsto P_1(P_2(x))$, fracasa exactamente como cabría esperar: converge hacia un par de puntos, uno en cada conjunto, localmente tan cercanos como sea posible y globalmente erróneos. Un mínimo local, disfrazado de proyección. Esta visión de dos caras llegó a la lista con independencia de Elser. Ya en 2008, antminder proponía cortar las piezas en triángulos de arista y buscar en el dominio de los rombos coloreados ([mensaje 6184](https://groups.io/g/eternity2/message/6184)), y JSA reconoció de inmediato en ello el *problema dual* ([mensaje 6185](https://groups.io/g/eternity2/message/6185)): Eternity II son 256 piezas a disponer para que 480 aristas concuerden, o 480 cuadrados de arista coloreados a disponer para que generen las 256 piezas correctas. Resolver significa hacer que ambas descripciones sean verdaderas a la vez. ## La difference map La respuesta de Elser a la trampa del mínimo local no es alternar proyecciones, sino iterar una *difference map*. En la forma publicada, con el parámetro fijado en $\beta = 1$, un paso se escribe $$ x \;\mapsto\; D(x) \;=\; x \;+\; P_1\!\big(2P_2(x) - x\big) \;-\; P_2(x), $$ y la familia de $\beta$ general interpola en torno a esto mediante puntos «estimados» internos $f_i(x)$ construidos a partir de las proyecciones ([PNAS 2007](https://doi.org/10.1073/pnas.0606359104)). Tres propiedades hacen todo el trabajo: 1. **Punto fijo = solución.** Si $D(x^\ast) = x^\ast$, entonces $P_1(2P_2(x^\ast) - x^\ast) = P_2(x^\ast)$: el mismo punto pertenece a ambos conjuntos. La solución se lee como $P_2(x^\ast)$, no como $x^\ast$ en sí mismo: el iterado es un *buscador*, no un tablero. La terminación se detecta cuando el desplazamiento $\Delta = \lVert D(x) - x \rVert$ cae por debajo de un umbral, y el candidato se verifica entonces exactamente. 2. **Ninguna función de coste.** La aplicación no desciende nada. Eso suena a defecto y es justo el punto: un hill-climber se queda atascado allí donde su función de puntuación presenta un óptimo local, pero la difference map no tiene puntuación alguna que la halague para hacerla quedarse. Lejos de los puntos fijos sigue moviéndose, en la práctica de forma caótica, de modo que las configuraciones casi óptimas que atrapan a la [búsqueda local](/es/research/build/local-search/local-search-alns/) son lugares que visita y abandona. Este es el «efecto túnel» que los físicos apreciaban. 3. **El iterado vive fuera de ambos conjuntos.** $x$ no necesita satisfacer ninguna de las dos restricciones mientras busca. Como los tableros fraccionarios de la [relajación LP](/es/research/build/exact/lp-relaxations/), explora una superposición de tableros. A diferencia del LP, no tiene objetivo que optimizar ni óptimo en el que estancarse: sus únicos lugares de reposo son las soluciones. Para $\beta = 1$ la difference map coincide con la **iteración de Douglas–Rachford**, un método de proyección que los analistas convexos estudian desde los años 1950; la convergencia es demostrable cuando ambos conjuntos son convexos, y totalmente no garantizada aquí, donde $C_1$ es una dispersión de puntos de permutación. La lista de Eternity II solo aprendió el nombre de la familia en 2025, cuando Wyatt Carpenter encontró que Wikipedia acreditaba «el algoritmo de Douglas–Rachford» para resolver TetraVex y lo señaló como una vía posiblemente prometedora que nadie había planteado ([mensaje 11592](https://groups.io/g/eternity2/message/11592)); JSA cerró el círculo, remitiendo al hilo de Elser de 2014–2016 y presentando Douglas–Rachford como la visión por descomposición $f(x) + g(x)$ del mismo ataque ([mensaje 11594](https://groups.io/g/eternity2/message/11594)). La literatura de optimización había adoptado en efecto el método para exactamente esta familia de puzzles ([Aragón Artacho, Borwein & Tam](https://arxiv.org/abs/1305.2657)). ## Divide and concur: el truco de las réplicas La imagen de dos conjuntos anterior necesitaba una proyección global ($P_1$ es un único emparejamiento grande). El artículo siguiente de Gravel y Elser, [*Divide and concur*](https://doi.org/10.1103/PhysRevE.78.036706) ([preprint abierto](https://arxiv.org/abs/0801.0222)), hace la construcción mecánica para *cualquier* CSP. Se da a cada restricción su propia **réplica** privada de cada variable que toca: - La proyección **divide** satisface cada restricción de forma independiente sobre sus propias réplicas. Cada restricción es ahora un pequeño problema local (para Eternity II: una arista, dos lados de pieza), trivialmente proyectable. - La proyección **concur** obliga a todas las réplicas de una misma variable a concordar, reemplazando cada una por su promedio, la proyección más barata imaginable. Ejecuta la difference map entre *divide* y *concur* y obtienes un solucionador de CSP general cuyo trabajo por iteración es enteramente local, con el paso de promediado desempeñando el papel de la comunicación. Gravel y Elser lo midieron en 3-SAT, donde escalaba de forma comparable a WalkSAT, y lo usaron para mejorar empaquetamientos de esferas conocidos. Cuando el método llegó a la lista, Dima reconoció de inmediato la estructura procedente de su propio campo: el esquema de promediado de réplicas es un pariente cercano de la propagación de creencias sobre el grafo de restricciones, una conexión que los propios autores establecen ([mensaje 9348](https://groups.io/g/eternity2/message/9348)). Para los lectores de este wiki el aire de familia va más allá: una búsqueda por paso de mensajes sobre un grafo que no es localmente arbóreo en ningún sitio (cada bloque 2×2 es un ciclo) es exactamente el escenario donde los métodos emparentados de la página [callejones sin salida](/es/research/build/dead-ends/) (propagación por encuesta, ordenamiento de jugadas por propagación de creencias) se aplanaron y murieron. ## Lo que muestra realmente el archivo El registro, íntegro, porque es corto. - **2008, un rechazo de pasada.** La primera mención del método en la lista es Don Milne enumerando la «difference map» entre las técnicas de optimización que juzgaba incapaces de resolver CSP complejos: solo brillan cuando las soluciones son densas, y Eternity II fue [diseñado para tener casi exactamente una](/es/research/why/complex-theory/) ([mensaje 5479](https://groups.io/g/eternity2/message/5479)). - **2014, la verdadera introducción.** El diagrama de la retícula de aristas del puzzle propuesto por un miembro llevó a JSA a enunciar el problema dual y a presentar el trabajo de Elser: la difference map «va y viene entre los dos problemas duales» ([mensaje 9347](https://groups.io/g/eternity2/message/9347)), con referencias al artículo de PNAS y al artículo de divide-and-concur de Physical Review ([mensaje 9350](https://groups.io/g/eternity2/message/9350)). Las propias diapositivas ICCOPT-MOPTA 2007 de Elser, que mencionan Eternity II en sus tres últimas diapositivas, se subieron a los archivos del grupo ([mensaje 9349](https://groups.io/g/eternity2/message/9349)). - **2014, la única prueba empírica.** Dima leyó el artículo de PNAS, le gustó y lo comprobó: escribió un simple hill-climber para el propio benchmark de 3-coloreado de grafos del artículo y resolvió la instancia $N=16$ en segundos, donde la Tabla 2 del artículo asigna a la difference map del orden de diez minutos. «Así que esto me hace preguntarme si es realmente todo lo que se dice que es» ([mensaje 9351](https://groups.io/g/eternity2/message/9351)), aun considerando que la idea de dos caras piezas-contra-aristas merecía explorarse para E2. - **2015, código y una promesa.** Alguien obtuvo el código fuente del propio Elser, con un ejemplo trabajado de emparejamiento de aristas 5×5, y lo compartió en los archivos del grupo ([mensaje 9362](https://groups.io/g/eternity2/message/9362)). En el hilo «New Approach?» de aquel verano, JSA recapituló la posición del método: «ha resuelto versiones pequeñas del modelo de Eternity II», y si hubiera resuelto la grande «nos habríamos enterado» ([mensaje 9442](https://groups.io/g/eternity2/message/9442)). Juraj Pivovarov pidió una difference map concreta escrita explícitamente para Eternity II ([mensaje 9443](https://groups.io/g/eternity2/message/9443)); JSA prometió un breve escrito ([mensaje 9446](https://groups.io/g/eternity2/message/9446)) que nunca aparece en el archivo. En el mismo hilo Dima esbozó explícitamente el traslado primal–dual (llevar una solución de coloreado de aristas a la asignación de piezas más cercana con el algoritmo húngaro, y de vuelta) e informó de que su propio recocido del lado dual se estancaba en 48/49 fichas correctas en el 7×7 de Brendan Owen ([mensaje 9445](https://groups.io/g/eternity2/message/9445)), mientras que Mike Pringle recordaba el primo casero de la lista, el enfoque de intercambio de aristas SRD de 2007: capaz del 8×8, nunca del 10×10 ([mensaje 9447](https://groups.io/g/eternity2/message/9447)). - **2025, un nombre y un encogimiento de hombros.** El hilo de Douglas–Rachford ([mensaje 11592](https://groups.io/g/eternity2/message/11592)) suscitó una sola evaluación rápida, útil para la teoría, «pero poco más» ([mensaje 11593](https://groups.io/g/eternity2/message/11593)), y la reflexión de JSA de que, en un puzzle construido para ser óptimamente difícil, esperaría que el número de iteraciones fuera «del orden de» el número de nodos de un backtracker de todos modos ([mensaje 11594](https://groups.io/g/eternity2/message/11594)). Ese es el registro entero: ningún miembro informó jamás de haber ejecutado la difference map o divide-and-concur en el puzzle completo de 480 aristas, ni siquiera en la escalera de benchmarks 10×10. La literatura revisada por pares tiene una forma parecida. El grupo de Elser publicó los éxitos del método en coloreado, SAT, empaquetamiento y plegamiento, y reservó Eternity II para charlas, ilustraciones de portada y código de ejemplo. Nadie ha publicado un resultado de difference map sobre el puzzle completo, positivo o negativo. > **¿Por qué tan poca acogida?** > > En parte por el calendario (el hilo de 2014 cayó en los años más tranquilos del archivo) y en parte por el dato de Dima, que le quitó el brillo deprisa. Pero la razón más profunda es la que Don Milne dio en 2008 y JSA repitió en 2025: los métodos estocásticos continuos rinden cuando las soluciones son abundantes en relación con el espacio, y Eternity II se asienta en el [pico de dificultad diseñado](/es/research/why/complex-theory/) donde no lo son. El método es famoso *porque* el emparejamiento de aristas lo ilustra de maravilla, no porque resuelva el emparejamiento de aristas a gran escala. ## Cómo sería un intento hoy La brecha entre «discutido» y «medido» es lo bastante estrecha como para que una sola persona pudiera cerrarla. Un intento moderno consistiría en: 1. **Fijar el embebido.** Vectores one-hot por celda sobre 1024 pieza-rotaciones (la versión de dos conjuntos), o réplicas divide-and-concur por restricción de arista. Este es el paso que Juraj pidió en 2015 y que nadie escribió para E2; el código 5x5 compartido por Elser ([mensaje 9362](https://groups.io/g/eternity2/message/9362)) es la plantilla de partida natural. 2. **Implementar las dos proyecciones.** El acuerdo de aristas es un promedio local; la validez de piezas es una resolución húngara por iteración (256 celdas x 1024 candidatos), o puro promediado de réplicas en la forma divide-and-concur. 3. **Subir la escalera de benchmarks.** Ejecutar contra la [colección de puzzles de Brendan Owen](/es/research/build/benchmarks/), el mismo 7×7 donde el recocido dual de Dima llegó a 48/49, luego 8×8, 9×9, 10×10, con un hill-climber simple y un backtracker guiado por reinicios como controles, trazando iteraciones-hasta-solución frente a la dificultad de la instancia. 4. **Reportar la curva, no la anécdota.** La salida interesante es el exponente de escalado: los propios artículos de Elser reportan números de iteraciones que crecen abruptamente con la dificultad de la instancia, y la cuestión abierta que JSA planteó en 2014, ¿cómo escala a instancias de clase E2? ([mensaje 9350](https://groups.io/g/eternity2/message/9350)), nunca ha sido respondida con un gráfico. El mejor caso realista no es un puzzle resuelto. Es un método caracterizado: o bien una curva de escalado que cruce la del backtracker en algún punto interesante, lo que sería una noticia, o bien una entrada negativa limpia para el registro de [callejones sin salida](/es/research/build/dead-ends/), lo que también es un progreso. ## Lo que cuesta - **Por iteración: dos proyecciones.** La proyección de aristas es lineal en el número de aristas. La proyección de piezas es la cara: una resolución de asignación exacta es $O(n^3)$ en el algoritmo húngaro, y con $n = 256$ celdas eso son millones de operaciones por *iteración*, frente a las [decenas de millones de colocaciones por segundo](/es/research/build/faster/solver-engineering/) de un backtracker afinado. Divide-and-concur cambia esto por puro promediado local, al precio de un estado replicado mucho mayor. - **Ninguna garantía de convergencia.** La teoría de convergencia de Douglas–Rachford es convexa; ambos conjuntos de Eternity II son dispersión combinatoria. En instancias factibles la aplicación suele encontrar puntos fijos en la práctica (ese es el contenido empírico de los artículos), pero nada acota el número de iteraciones, y en este puzzle la expectativa de JSA es que iguale el número de nodos del backtracking ([mensaje 11594](https://groups.io/g/eternity2/message/11594)). - **Punto fijo = solución, y nada menos.** El método no tiene salida parcial útil: hasta que $\Delta \to 0$ tienes un punto errante en un espacio fraccionario, no un tablero puntuado. No hay ningún premio de consolación de 460 aristas por el camino, lo que importa en el único puzzle donde la [escalera de récords](/es/research/records/) se denomina en puntuaciones parciales. - **El marcador.** Una prueba de la comunidad, perdida frente a un hill-climber en el propio benchmark del método ([mensaje 9351](https://groups.io/g/eternity2/message/9351)); modelos pequeños de emparejamiento de aristas resueltos en los materiales de Elser; el puzzle completo intacto. Elegante, con principios, aquí no demostrado y, algo inusual para este wiki, todavía no medido en vez de medido-y-enterrado. ## Relacionado - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Relajaciones LP y PLE: media pieza en todas partes](https://eternity2.dev/es/research/build/exact/lp-relaxations/) — Escribe Eternity II como un programa entero, abandona la integralidad, y un solucionador lineal alcanza error cero en segundos, con un 30 % de una pieza y un 20 % de otra compartiendo una esquina. Dieciocho años de campañas comunitarias midieron dónde termina la comodidad fraccionaria: una meseta de 420–440 aristas en cuanto las piezas deben ser enteras, un muro PLE ya en el 8×8, y un récord académico de 461 en una hora. Lo que enseña el camino del optimizador, y dónde el LP sigue ganándose su lugar. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. --- # Relajaciones LP y PLE: media pieza en todas partes > Escribe Eternity II como un programa entero, abandona la integralidad, y un solucionador lineal alcanza error cero en segundos, con un 30 % de una pieza y un 20 % de otra compartiendo una esquina. Dieciocho años de campañas comunitarias midieron dónde termina la comodidad fraccionaria: una meseta de 420–440 aristas en cuanto las piezas deben ser enteras, un muro PLE ya en el 8×8, y un récord académico de 461 en una hora. Lo que enseña el camino del optimizador, y dónde el LP sigue ganándose su lugar. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/lp-relaxations/ - Actualizado: 2026-07-22 - Temas: exact-methods - Fuente: La formulación de clique máximo: 262 144 vértices de colocación, encontrar un clique de 256 (groups.io message 627, 2007) — https://groups.io/g/eternity2/message/627 - Fuente: Conjuntos de rotación resueltos por PLE (glpsol) en unos 5 segundos cada uno (groups.io message 3320, 2007) — https://groups.io/g/eternity2/message/3320 - Fuente: Informe de estado LP de Vlasta: 160 254 binarias; la PLE «aplicable solo a puzzles 8×8» (groups.io message 5602, 2008) — https://groups.io/g/eternity2/message/5602 - Fuente: La formulación de ascenso continuo de Andrew y la estimación de 800 000 días (groups.io message 5304, 2008) — https://groups.io/g/eternity2/message/5304 - Fuente: El LP de 50 000 variables de Benjamin y su esquina fraccionaria: 30 % pieza 1, 20 % pieza 2 (groups.io message 6905, 2009) — https://groups.io/g/eternity2/message/6905 - Fuente: Recuento de restricciones de Benjamin (7 952 ecuaciones) y el truco de integralidad cuadrática (groups.io messages 6910/6913, 2009) — https://groups.io/g/eternity2/message/6913 - Fuente: Andrew sobre el solucionador implícito: «cada pieza está en todas partes», Newton–Raphson sobre 250 000 pesos (groups.io message 6911, 2009) — https://groups.io/g/eternity2/message/6911 - Fuente: El programa entero binario AMPL/CPLEX de Timmermans: 272 704 variables, 24 566 ecuaciones (groups.io message 6728, 2009) — https://groups.io/g/eternity2/message/6728 - Fuente: La «solución» 12×12 en dominio real con un 5,3 % de infactibilidad (groups.io message 6745, 2009) — https://groups.io/g/eternity2/message/6745 - Fuente: Retrospectiva de Munjak: asignación con restricciones laterales, 200–224 piezas, sin backtracking (groups.io message 8791, 2011) — https://groups.io/g/eternity2/message/8791 - Fuente: Wauters: la línea académica, 461/480 aristas coincidentes en una hora (groups.io message 9023, 2012) — https://groups.io/g/eternity2/message/9023 - Fuente: Wauters: conjuntos de rotación por MILP en milisegundos (groups.io message 9071, 2012) — https://groups.io/g/eternity2/message/9071 - Fuente: El artículo MILP + Max-Clique llega a la lista (groups.io message 9683, 2017) — https://groups.io/g/eternity2/message/9683 - Fuente: Salassa, Vancroonenburg, Wauters, Della Croce & Vanden Berghe, MILP and Max-Clique based heuristics for the Eternity II puzzle (arXiv:1709.00252, 2017) — https://arxiv.org/abs/1709.00252 - Fuente: Wauters, Vancroonenburg & Vanden Berghe, A guide-and-observe hyper-heuristic approach to the Eternity II puzzle (JMMA, 2012) — https://link.springer.com/article/10.1007/s10852-012-9178-4 - Fuente: La PLE moderna de Garvie: una instancia 10×10 de 6 colores resuelta en unos 19 minutos (groups.io message 11502, 2025) — https://groups.io/g/eternity2/message/11502 --- Hay tres caminos clásicos hacia Eternity II. El backtracking recorre el árbol. Los [codificaciones SAT y CSP](/es/research/build/exact/sat-csp-encodings/) entregan la lógica a un solucionador industrial. El tercer camino pertenece a los optimizadores: escribir el puzzle como un programa entero (variables, restricciones lineales, un objetivo) y llamar a CPLEX. Es el camino que toda persona de investigación operativa prueba primero, porque viene con una jugada que los otros dos no tienen: la *relajación*. Elimina el requisito de que las variables sean números enteros y el programa entero, NP-difícil, se convierte en un programa lineal, resoluble en tiempo polinómico. Resuelve la versión fácil, confía en que la respuesta sea casi entera, repara el resto. La comunidad recorrió este camino una y otra vez entre 2007 y 2025, con solucionadores que iban desde `glpsol` hasta CPLEX pasando por Newton–Raphson hechos a mano, y el resultado se midió con precisión suficiente para merecer una página: la relajación se resuelve rápido y reporta un tablero casi perfecto, hecho de fracciones de piezas. Fuerza las piezas a ser enteras y la puntuación se desploma sobre una meseta en torno a 420–440 de 480 aristas. La brecha entre el óptimo fraccionario y el entero no es un tecnicismo. Es exactamente el lugar donde vive el puzzle. ## La formulación Una variable binaria por colocación, exactamente como en la codificación SAT: sea $x_{c,p,r} \in \{0,1\}$ el significado «la pieza $p$ ocupa la celda $c$ con rotación $r$». Dos familias de restricciones de asignación y una contabilidad por costura dan el modelo completo: $$ \begin{aligned} \max \;\; & \sum_{s} y_s && \text{(matched seams)} \\ \text{s.t.} \;\; & \sum_{p,\,r} x_{c,p,r} = 1 && \forall\, \text{cell } c \\ & \sum_{c,\,r} x_{c,p,r} = 1 && \forall\, \text{piece } p \\ & y_s \,\le\, \sum_{k} \min\!\big( f_{s,k}^{1},\, f_{s,k}^{2} \big) && \forall\, \text{seam } s \end{aligned} $$ donde $f_{s,k}^{i}$ es el flujo de color, el peso total de las colocaciones en el lado $i$ de la costura $s$ que muestran el color $k$ a través de ella, $f_{s,k}^{i} = \sum_{(p,r)\,\text{showing}\,k} x_{c_i,p,r}$. El $\min$ se linealiza con una variable auxiliar por costura y color; para la versión de *factibilidad* se exige en cambio un flujo de color igual a ambos lados de cada costura. Los modelos de la comunidad aterrizan exactamente donde la aritmética dice que deberían. El LP de Benjamin de 2009 tenía ~50 000 variables (colocaciones podadas a posiciones válidas) y 7 952 ecuaciones: 256 por celda, 256 por pieza, y $60 \times 5 + 420 \times 17 = 7{,}440$ restricciones de equilibrio color-costura ([message 6910](https://groups.io/g/eternity2/message/6910)). El modelo de Vlasta de 2008 cargaba 160 254 binarias ([message 5602](https://groups.io/g/eternity2/message/5602)); el programa binario AMPL/CPLEX de Jimmy Timmermans, 272 704 variables y 24 566 ecuaciones ([message 6728](https://groups.io/g/eternity2/message/6728)). Günter Stertenbrink ya había planteado la forma de grafo equivalente en 2007: hacer de las 262 144 colocaciones vértices, unir los pares compatibles, y pedir un clique de tamaño 256 ([message 627](https://groups.io/g/eternity2/message/627)), la formulación a la que la literatura académica volvió una década más tarde. ## Relájalo, y se resuelve en segundos La relajación no exige más que una edición: reemplazar $x_{c,p,r} \in \{0,1\}$ por $0 \le x_{c,p,r} \le 1$. Ese único cambio hace que el problema cruce la frontera más importante de la optimización. El programa entero es NP-difícil: la programación entera 0–1 es uno de los 21 problemas completos originales de Karp. El programa lineal es resoluble en tiempo polinómico (elipsoide, puntos interiores), y en la práctica el símplex despacha estos tamaños de modelo casi al instante. Benjamin lo midió: su sistema de 50 000 variables alcanzó un error inferior a 0,01 en unos diez segundos ([message 6913](https://groups.io/g/eternity2/message/6913)). Dos propiedades hacen que la relajación sea genuinamente útil, no solo rápida. Toda solución entera es también una fraccionaria, así que el óptimo del LP es una *cota*: ningún tablero real puede puntuar nunca más de lo que dice la relajación. Y los solucionadores LP devuelven certificados (valores duales, pruebas de infactibilidad) que los métodos sin variables enteras no ofrecen. Toda la cuestión es cuánta de esa velocidad sobrevive al viaje de vuelta hacia las piezas enteras. ## El tablero fraccionario Así es como se ve realmente el óptimo del LP, en palabras de quien lo calculó. El sistema de Benjamin «convergió relativamente rápido a error cero» (un tablero perfecto, hasta donde las restricciones podían ver), y la esquina superior izquierda contenía «30 % pieza 1, 20 % pieza 2, 10 % pieza 3, 40 % pieza 4» ([message 6905](https://groups.io/g/eternity2/message/6905)). El experimento paralelo de Andrew llevaba la misma idea como un ascenso iterado sobre una malla de pesos 256×256×4: «cada pieza está en todas partes» ([message 6911](https://groups.io/g/eternity2/message/6911)). La relajación está contenta porque una superposición puede cubrirse. Un cuarto de una pieza de arista azul más tres cuartos de una de arista rosa presenta una mezcla que a la vez coincide en parte con un vecino azul y con uno rosa, una coincidencia que ningún tablero físico puede realizar. Las restricciones lineales saben poner precio a cuánta parte de cada pieza va dónde; no pueden expresar «exactamente una de estas es real», porque *una-de-varias* no es un hecho lineal. Hace falta una restricción cuadrática (o una de integralidad) para decirlo. Benjamin usó $(\sum v_i)^2 - \sum v_i^2 = 0$, que fuerza a cero todas las variables de un grupo salvo una ([message 6913](https://groups.io/g/eternity2/message/6913)), y en el momento en que la añadió, la convergencia murió: el sistema «se estanca en valores más altos que se parecen a resultados del tipo 420-440 / 480 aristas correctas» ([message 6905](https://groups.io/g/eternity2/message/6905)). Hay una teoría limpia bajo la observación. Las dos familias de asignación por sí solas definen un politopo cuyos vértices son todos enteros (eso es Birkhoff–von Neumann, y es exactamente por lo que el algoritmo húngaro resuelve la asignación pura en tiempo polinómico). Añade las restricciones de costura y esa propiedad de integralidad queda destruida: el politopo adquiere vértices fraccionarios, y el óptimo del LP se posa sobre uno de ellos. La retrospectiva de David Munjak comprime esto en una línea, listando entre sus enfoques probados «Problema de asignación (soluciones enteras)» seguido de «Problema de asignación con restricciones laterales (soluciones no necesariamente enteras)» ([message 8791](https://groups.io/g/eternity2/message/8791)). Las restricciones laterales (las aristas, el puzzle de verdad) son precisamente lo que rompe la garantía. Eternity II es un problema de asignación fácil soldado a un acoplamiento difícil, y la relajación optimiza discretamente solo la mitad fácil. ### La versión de dos piezas Toda la brecha cabe en dos celdas. Toma dos celdas adyacentes y dos piezas, una entera de color 1, otra entera de color 2. Cualquier disposición con piezas enteras puntúa 0: la costura siempre ve el color 1 contra el color 2. El LP puntúa exactamente 1,0: pon media pieza de cada una en cada celda, y las variables de coincidencia linealizadas de la costura recogen 0,5 de crédito por el color 1 más 0,5 por el color 2, con el óptimo fraccionario posado precisamente en el punto 50/50. Lo verificamos a mano y con un solucionador LP (el programa entero devuelve 0, la relajación devuelve 1,0). Es la esquina de «30 % pieza 1» de Benjamin reducida a su álgebra mínima, y aísla el mecanismo: las variables de costura *premian* activamente las asignaciones fraccionarias por celda, así que el LP prefiere las superposiciones. El ejemplo también afila la historia de Birkhoff–von Neumann. En ese óptimo fraccionario las restricciones de asignación se satisfacen exactamente; nada del politopo de asignación se fuerza. Es solo el objetivo de costura en mínimo-de-sumas lo que arrastra el óptimo fuera de los vértices enteros. La mitad de asignación del modelo nunca fue el problema. ## La meseta medida Cada pocos años alguien nuevo recorría el camino, con mejores solucionadores y más memoria, y chocaba con los mismos tres muros: la PLE completa es irresoluble más allá de tamaños de juguete; el LP es resoluble y fraccionario; redondear o restringir hacia la integralidad aterriza en los 400 y pico. Las campañas, en orden: | Año | Quién | Modelo | Dónde se detuvo | Msg | | --- | --- | --- | --- | --- | | 2007 | Günter Stertenbrink | Clique máximo, 262 144 vértices | Solo formulación; nunca escaló | [166](https://groups.io/g/eternity2/message/166), [627](https://groups.io/g/eternity2/message/627) | | 2007 | dmitri_ulitski | PLE (glpsol) sobre conjuntos de rotación | Resuelto en ~5 s por conjunto; el subproblema es fácil | [3320](https://groups.io/g/eternity2/message/3320) | | 2008 | Vlasta | PLE, 160 254 binarias | «Aplicable solo a puzzles 8x8»; pasó a SAT, alcanzó 428 | [5602](https://groups.io/g/eternity2/message/5602) | | 2008–09 | Andrew (bozmo2004) | Ascenso continuo, Newton–Raphson sobre ~250k pesos | ~800 000 días proyectados con su prototipo VBA | [5304](https://groups.io/g/eternity2/message/5304), [6911](https://groups.io/g/eternity2/message/6911) | | 2009 | Benjamin (okifinoki) | LP, ~50 000 vars, 7 952 restricciones | Error cero en ~10 s, fraccionario; forzado a entero: se estanca en 420–440/480 | [6905](https://groups.io/g/eternity2/message/6905), [6913](https://groups.io/g/eternity2/message/6913) | | 2009–10 | Jimmy Timmermans | Ideales tóricos; BIP AMPL/CPLEX, 272 704 y luego 153k vars | Límite de 32k variables de Singular; un 12x12 «resuelto» con un 5,3 % de infactibilidad (converge, la integralidad no) | [6716](https://groups.io/g/eternity2/message/6716), [6728](https://groups.io/g/eternity2/message/6728), [6745](https://groups.io/g/eternity2/message/6745), [8077](https://groups.io/g/eternity2/message/8077) | | 2010 | Vlasta | MILP (164 256 booleanos) convertido a SAT | 8x8 en ~1 min; a la par con los backtrackers, sin ir más allá | [7858](https://groups.io/g/eternity2/message/7858) | | 2008–10 | David Munjak | Asignación con restricciones laterales, valores fraccionarios como probabilidades | 200–224 piezas colocadas, luego un callejón sin salida detectado; nunca hizo backtracking | [8791](https://groups.io/g/eternity2/message/8791) | | 2012 | Grupo Wauters | Hiperheurística (revisada por pares) | 461/480 en una hora (la línea académica) | [9023](https://groups.io/g/eternity2/message/9023) | | 2012 | Tony Wauters | MILP para conjuntos de rotación | Milisegundos; de nuevo, el subproblema fácil | [9071](https://groups.io/g/eternity2/message/9071) | | 2017 | Salassa, Vancroonenburg, Wauters et al. | Formulaciones MILP + Max-Clique | «Computacionalmente intratable para instancias de tamaño medio y grande»; recicladas como descomposiciones heurísticas | [9683](https://groups.io/g/eternity2/message/9683), [arXiv](https://arxiv.org/abs/1709.00252) | | 2025 | Marcus Garvie | PLE moderna | 10x10 con 6 colores en ~19 min; el E2 completo fuera de alcance | [11502](https://groups.io/g/eternity2/message/11502) | Tres lecturas de la tabla. Primero, fíjate en dónde la PLE *gana*: los conjuntos de rotación, donde fijas solo la orientación de cada pieza de modo que los recuentos de aristas direccionales se equilibran, cayeron ante `glpsol` en cinco segundos en 2007 y ante CPLEX en milisegundos en 2012. Cuando la estructura entera es genuinamente fácil, el solucionador lo dice de inmediato; el silencio del puzzle completo es un veredicto, no un problema de herramientas. Segundo, los números de la meseta coinciden a través de maquinarias totalmente distintas: los 420–440 de Benjamin por LP penalizado, las 200–224 piezas colocadas sin desajuste de Munjak por asignación iterada, los 461 del grupo Wauters con una hora de reparación metaheurística por encima. Todo lo que tiene forma de optimizador aterriza en la misma banda de los 400 y pico que la [búsqueda local](/es/research/build/local-search/local-search-alns/) simple alcanza sin ningún LP en absoluto. Tercero, el artículo de 2017, el tratamiento académico más sólido, con tanto una formulación MILP como una de Max-Clique, concede la intratabilidad en su resumen y pivota hacia usar las formulaciones *dentro* de heurísticas. Los propios constructores del camino pusieron la señal de desvío. El lado de la cota de la historia tiene la misma forma y vive en el [registro de callejones sin salida](/es/research/build/dead-ends/): los techos LP medidos de este proyecto se sitúan entre 477 y 479 mientras que los tableros que los sostienen rondan 458, una brecha demasiado ancha para certificar nada, por exactamente la razón de cobertura fraccionaria de arriba. La anatomía de esas cotas tiene su propia sección más abajo. Un hecho de la literatura merece un sitio junto a la tabla. El tratamiento académico más sólido, el artículo MILP + Max-Clique de 2017, solo resuelve instancias enteras hasta aproximadamente 7×7 u 8×8 y nunca reporta una cota de relajación LP para la instancia 16×16 ([arXiv:1709.00252](https://arxiv.org/abs/1709.00252)). Hasta donde llega el registro público, nadie ha publicado una cota LP o MILP válida por debajo de 480 para el Eternity II completo. Los valores de 477 a 479 medidos más abajo son *condicionales* (asumen un borde fijado), así que la pregunta incondicional sigue abierta: probar cualquier cota válida por debajo de 480 mediante relajación convexa sería algo nuevo. ## Replantear el puzzle sobre los lados de las piezas Probamos una relajación propia, construida desde el otro extremo del modelo. En lugar de preguntar qué pieza ocupa qué celda, se listan los 1 024 lados de pieza (256 piezas, 4 lados cada una) y se pregunta qué lados se emparejan: dos lados solo pueden encontrarse si sus colores coinciden, y un tablero terminado es un emparejamiento de los 960 lados no-borde en las 480 costuras interiores. Ese recuento es exacto por construcción: las 4 piezas de esquina aportan 2 lados no-borde cada una, las 56 piezas de borde aportan 3, las 196 interiores aportan 4, y $8 + 168 + 784 = 960 = 480 \times 2$. La instancia no tiene holgura alguna; cada lado no-borde debe encontrar pareja. El LP sobre este grafo de emparejamiento cuenta su historia en tres pasos. Congela cada pieza en una orientación fija y la cota vale 307,00, entera e igual a un recuento en forma cerrada, pero inválida para el puzzle real porque prohíbe las rotaciones. Deja que los lados se emparejen libremente a través de las rotaciones (21 636 variables de emparejamiento, una restricción de grado por lado) y el LP alcanza exactamente 480,00, con 132 emparejamientos fraccionarios; añadir presupuestos de emparejamiento por pieza no cambia nada. Añade la coherencia de rotación, una variable de rotación relajada por pieza acoplada a los emparejamientos para que los lados emparejados de una pieza acuerden una sola orientación (262 900 variables, unas 503 000 restricciones, minutos de solucionador): sigue en 480,00, ahora con todos los emparejamientos fraccionarios y ni una sola pieza con rotación entera. El LP mantiene 480 factible poniendo cada pieza parcialmente en sus cuatro rotaciones a la vez, el gemelo a nivel de lados de la esquina con «30 % pieza 1» de arriba. Así que el libro de cuentas de los colores cuadra perfectamente en cada nivel de la relajación que pudimos permitirnos, y una cota que se clava en el máximo es un resultado negativo de un tipo concreto y útil: localiza la dureza. Nada en «qué lados pueden emparejarse con cuáles» obstruye un 480. La obstrucción vive por entero en lo que estas relajaciones no ven, que cada pieza ocupa una celda entera y que el emparejamiento debe tenderse plano como una malla 16×16. El mismo veredicto que el modelo celda-pieza, alcanzado desde la dirección opuesta. Tres mediciones posteriores cierran del todo la cuestión del suministro. Primero, la cota de conteo más simple de todas, cada color $c$ con $m_c$ medias aristas permite como mucho $\lfloor m_c/2 \rfloor$ costuras emparejadas, se evalúa sobre el juego de piezas real en $5 \cdot 12 + 5 \cdot 24 + 12 \cdot 25 = 480$ exactamente, porque cada uno de los 22 recuentos de color es par. El presupuesto global de colores es vacuo *por construcción del puzzle*; cualquier argumento de escasez tiene que ser local o condicional. Segundo, las rotaciones enteras no restauran la obstrucción. Dale a cada pieza una única variable entera de rotación y pregunta al modelo de suministro por color si los compromisos de rotación bastan por sí solos para bloquear el 480: no bastan. El óptimo LP es 480,0 y, esta vez resuelto también a optimalidad entera, el óptimo entero es igualmente 480,0: para cada color existe una asignación de rotaciones enteras que pone sus aristas en los lados correctos para gastar todo el presupuesto $\lfloor N_k/2 \rfloor$. Eso añade un cuarto peldaño a la escalera de arriba (rotaciones fijas 307, emparejamiento libre 480,00 fraccionario, coherencia de rotación 480,00 fraccionario, y ahora incluso las rotaciones enteras dejan el 480 factible a nivel de suministro). La flexibilidad de rotación nunca es la restricción activa; la obstrucción es posicional, qué celda, junto a qué celda. Tercero, la vista de suministro ni siquiera sabe ordenar tableros parciales. Un LP de costuras acotado por el suministro por color (0,1 segundos por borde) devuelve 480 para los seis bordes que le dimos, tanto el borde que sostiene el tablero comunitario de 469 aristas (aristas coincidentes, puntuado fuera de la convención estricta de cinco pistas; las convenciones están en [la página de récords](/es/research/records/)) como cinco bordes recién generados. Como discriminador de calidad de borde, el LP a nivel de suministro es inútil; el LP posicional, por celda, de la sección siguiente los separa de forma demostrada. ## Condicionar la cota a un borde La cota incondicional se clava en el techo, así que la condicionamos. Fija un borde completo (las 60 piezas del perímetro) y resuelve la relajación LP sobre las 196 celdas interiores: el óptimo es una cota superior válida *para ese borde*. Una nota de convención antes de los números: cada puntuación de esta sección son aristas coincidentes sobre 480 en el 16×16 canónico con las cinco pistas oficiales fijadas, y los tableros medidos son los mejores de este proyecto en el momento de la medición, no récords; los mejores comunitarios están más arriba, con todo el contexto en [la página de récords](/es/research/records/). La primera sorpresa es cuántos bordes distintos comparten un mismo techo. Cuatro tableros de nuestro archivo, con cuatro bordes distintos, que puntúan 458, 457, 455 y 454 aristas coincidentes, devuelven todos exactamente la misma cota LP condicional: **478**. Y dos de esos bordes no guardan relación estructural con los demás: un tablero de 457 comparte con el de 458 las cuatro filas superiores completas (56 piezas), pero los tableros de 454 y 455 solo comparten con él 8 o 9 colocaciones de 256, alrededor del 3 %. La cota es, pues, un invariante grueso que tableros genuinamente distintos tienen en común, no la huella de una familia de soluciones. La búsqueda local confirma que los propios tableros están atascados: empujones sobre los tres tableros no-458 (8, 4 y 4 semillas a diez minutos cada una) los subieron +0, +0 y +1; cada cuenca yace en su propio óptimo local muy por debajo del techo compartido de 478. Dos mediciones menores esbozan el paisaje alrededor de ese techo. El borde del tablero de 458 se comporta como un máximo local de la propia cota: las 13 perturbaciones aleatorias de borde que probamos (5 intercambios simples y 8 permutaciones de tres piezas, una sola semilla RNG) bajaron todas la cota condicional, entre 2 y 5,5 puntos. Trece ensayos de una sola semilla son un boceto, no un teorema. Y proyectar el borde del tablero comunitario de 469 aristas a la convención de cinco pistas (superponer las cinco pistas, recolocar las piezas desplazadas) *baja* su techo condicional a 477, un punto por debajo del borde de nuestro tablero de 458: un indicio estructural, no una prueba, de que el techo con cinco pistas podría estar por debajo del techo sin pistas. ### Dónde vive la brecha Con un borde fijado, la cota se descompone sobre los tres tipos de costura: 60 costuras del anillo del borde (totalmente determinadas por el borde), 56 costuras borde-interior y 364 costuras interior-interior, con un máximo combinatorio de $60 + 56 + 364 = 480$. Muchos bordes distintos presentan el mismo multiconjunto de demandas de color hacia el interior, y por eso tantos comparten un mismo valor LP. En el borde del tablero de 458, la descomposición se lee $478 = 60 + 54{,}02 + 363{,}98$. Léela despacio: la parte interior-interior es esencialmente *ajustada*, el LP concede solo 0,02 de las 364 costuras interiores; toda la pérdida contra el máximo se asienta en la costura borde-interior. El veredicto del LP sobre este borde: 2 de sus 56 costuras hacia el interior son estructuralmente inemparejables por cualquier completado interior. El propio tablero deja 4 sin emparejar, así que como mucho 2 son teóricamente reparables, una subida máxima dentro del borde de +2, hasta 460. Probamos ese margen una vez: una re-resolución entera exacta liberando 84 celdas (el perímetro inferior más las cinco filas interiores inferiores; 30 minutos, un solucionador, una ejecución) devolvió delta 0. O el +2 no es factible en enteros, o necesita una ventana mayor. Un segundo borde intercambia en sentido contrario: su descomposición es $477 = 60 + 54{,}17 + 362{,}83$, algo más de margen borde-interior pero alrededor de 1,15 costuras interiores menos. Ningún color domina por sí solo ninguna de las dos brechas; el acoplamiento es difuso. Llegar a 480 exige las dos partes al máximo a la vez, y ningún borde medido tiene ambas. De las mismas tablas cae un microhecho del diseño de colores del puzzle: los cinco colores raros (24 medias aristas cada uno) aportan exactamente 0 a la parte interior-interior, porque solo aparecen en los lados interiores de las piezas de borde; un emparejamiento interior-interior de color raro es imposible por taxonomía de piezas. ### Una firma, no un predictor El techo condicional más alto de nuestro archivo es **479**, a uno de la perfección, y descansa sobre un tablero que solo puntúa 457. Su borde salió de apenas un minuto de búsqueda local, frente a horas detrás de los bordes de 478. Y sin embargo ocho semillas independientes de búsqueda local a una hora cada una se estancan todas en 457, y una re-resolución entera exacta de la unión de todos sus grupos de fallos (28 celdas liberadas) prueba que no existe mejora local: delta 0 en 0,46 segundos. Las tres descomposiciones se alinean como $478 = 60 + 54{,}02 + 363{,}98$, $477 = 60 + 54{,}17 + 362{,}83$ y $479 = 60 + 55{,}48 + 363{,}52$, y la brecha LP-entero por tablero se lee 20, 20 y 22: casi constante en todos los bordes probados (479 es también el techo más alto visto en 18 LP condicionales sobre bordes diversos). La cota condicional *ordena* los bordes por estructura, pero no predice qué borde da el mejor tablero de piezas enteras; el borde con techo 479 está bloqueado en enteros más abajo que el de techo 478. El mecanismo es el de la página: el margen extra es holgura de cobertura fraccionaria, y un techo más alto solo significa que el libro de cuentas de colores está *más cerca* de cuadrar, no que algún tablero entero lo realice. Una conjetura merece escribirse como conjetura: el borde de un tablero perfecto debe tener cota condicional exactamente 480, ambas partes al máximo a la vez, y el borde de 479 muestra que el LP se queda a uno de esa condición necesaria. Una última cautela al leer estas descomposiciones: las asignaciones LP por color **no** son cotas por color. En el tablero de 458, el recuento entero real de un color (21) supera el suelo de su asignación LP (20,89, que redondea hacia abajo a 20). El óptimo LP es una asignación conjunta entre colores; leer sus filas por color como techos individuales es un error de categoría. La anatomía completa en ese tablero: el total LP de costuras interiores es 363,96 frente a 346 costuras realmente emparejadas, una brecha interior de 17,96, de la cual 5,96 es holgura fraccionaria y 12 es el LP asignando colores de una manera que ningún tablero de piezas enteras puede. ## Comprar la brecha: tres intentos medidos La respuesta de manual a un LP flojo es apretarlo: elevar los términos bilineales, añadir planos de corte, subir por la jerarquía de relajaciones. Probamos uno de cada y medimos. Ninguno cerró la brecha, y dos de los fracasos son lo bastante instructivos como para ser la lección. **La elevación de McCormick: válida en teoría, inabordable a tamaño real.** El remedio estándar para productos de variables es una variable auxiliar por costura y por par de colocaciones compatibles, emparedada por $z \le x_1$, $z \le x_2$ y $z \ge x_1 + x_2 - 1$. En instancias pequeñas nuestra implementación reproduce la cota estándar: un 6×6 necesita 22 000 variables de par y 2,5 segundos, un 8×8 de 4 colores 300 000 y 60 segundos. El escalado se detiene justo después: un 8×8 de 6 colores y un 10×10 de 6 colores (1,25 millones de variables de par) agotaron ambos los 60 segundos en nuestro solucionador LP, y el puzzle completo necesitaría del orden de 5 a 20 millones de variables de par con unas tres restricciones cada una, más allá de lo que ese solucionador maneja. Los dos atajos obvios produjeron cotas *inválidas*, en direcciones opuestas, y cada uno se refuta con aritmética pura. Restringir las variables de par a colocaciones con masa LP superior a 0,05 infracuenta y devuelve 402, por debajo de un tablero factible conocido de 458; una cota superior por debajo de un punto factible es una prueba de invalidez. Mantener a la vez las variables de par y las variables de costura originales cuenta doble y devuelve 479,58, *por encima* del 478 sin elevar; añadir restricciones solo puede bajar un óptimo LP, así que ese también se refuta solo. El patrón correcto, generar como planos de corte las desigualdades de McCormick violadas con costes reducidos exactos, exige un acceso al solucionador de más bajo nivel que el que construimos: no probado, no imposible. **Planos de corte sobre la escasez de color: válidos o vacuos, nunca ambos.** Implementamos branch-and-cut con una sola familia de cortes, cortes de clique de suministro sobre el grafo de conflicto de colores («si un conjunto de costuras está forzado al color $k$, como mucho $\lfloor \text{suministro}_k/2 \rfloor$ de ellas pueden coincidir»), en un solo hilo y una sola configuración; el veredicto de abajo es sobre esta familia de cortes, no sobre todos los cortes. Los LP de cola sin cortes, sobre uno de nuestros tableros de 459 aristas (aristas coincidentes, convención de cinco pistas), son válidos pero flojos en un 4 a 22 %: liberar las últimas 1, 2, 3 y 4 filas da cotas LP de 27, 58, 90 y 124 frente a 26, 49, 74 y 104 conseguidos, sin certificar nunca nada. El corte tal cual está enunciado es peor que flojo, es inválido: en la cola de una fila empuja el LP a 20, *por debajo* del 26 factible, así que la desigualdad cortó el óptimo verdadero (las medias aristas del color $k$ también se consumen fuera del conjunto forzado, y por los otros tres lados de cada pieza). Toda contabilidad lo bastante floja para ser válida volvió a caer en la cota vacua sin cortes. El hilo conductor encaja con el resto de la página: la dureza del puzzle es la distinción global, cada pieza usada exactamente una vez, no la escasez local de color, y los cliques del grafo de conflicto de colores son minúsculos y poco informativos. **Un nivel más arriba en la jerarquía: el SDP está igual de ciego.** El peldaño por encima del LP es la elevación semidefinida de nivel 1 (Shor) de la formulación cuadrática, válida por construcción: toda solución verdadera sigue siendo factible con el mismo valor objetivo. La construimos exactamente sobre instancias 3×3 plantadas con óptimos certificados de 12, 11 y 11 sobre 12. En las dos instancias no triviales el SDP certifica 12,000: no ve una obstrucción de tamaño unidad que un conteo elemental (5 medias aristas de un color permiten como mucho 2 coincidencias) resuelve al instante. Un control LP McCormick válido devuelve el mismo 12,000, así que la ceguera ya está presente en el nivel lineal; la restricción semidefinida positiva no añade nada aquí. Y el coste explota de inmediato: la elevación completa consciente de las rotaciones con solo 9 celdas (324 variables, un bloque semidefinido de 325×325) falló en tres intentos independientes bajo un presupuesto mononúcleo de 280 segundos. Si la elevación conjunta con las rotaciones recuperaría el ajuste es una pregunta abierta, no refutada. Son hallazgos computacionales sobre instancias diminutas con un solo solucionador SDP, no teoremas. ## Lo que cuesta - **El LP: polinómico, genuinamente rápido.** Los métodos de puntos interiores resuelven programas lineales en tiempo polinómico; en modelos de este tamaño (50k–270k variables, de miles a cientos de miles de restricciones) los solucionadores modernos terminan en segundos a minutos. Es el único objeto genuinamente barato de la página. - **La PLE: NP-difícil, y no de forma abstracta.** La ramificación y acotación es backtracking con una cota LP en cada nodo: exponencial en el peor caso, y una instancia [construida en el pico de dureza](/es/research/why/phase-transition/) está diseñada para realizar ese peor caso. La forma medida del coste: un solucionador que maneja el 8×8 (64 piezas) no devuelve nada en el 16×16, porque el árbol bajo la raíz se eleva al cuadrado, no se duplica. - **La brecha de integralidad es la moneda real.** Todo el valor del método es la distancia entre el óptimo del LP y la mejor solución entera. Aquí esa distancia es de aproximadamente 478 frente a 458-y-estancándose: la relajación gasta su presupuesto polinómico respondiendo a una pregunta sobre un puzzle distinto, fraccionario. Los planos de corte existen para reducir la brecha; nadie ha reportado cortes que le cierren ni una muesca en el E2, incluidos nuestros tres intentos medidos de arriba, y la estructura por costura que finge coincidencias regenera la holgura en todas partes. - **La ramificación y acotación poda con la cota que tiene.** Un nodo se corta solo cuando su cota LP cae por debajo del incumbente. Con la cota flotando ~20 aristas por encima de cualquier cosa real, casi nada se poda: el análogo exacto de las cláusulas aprendidas anchas e inútiles en [CDCL](/es/research/build/exact/sat-csp-encodings/), un camino más allá. ## Para qué sirven todavía el LP y el MIP La conclusión justa es una reubicación, no un rechazo, la misma a la que llega la [página SAT](/es/research/build/exact/sat-csp-encodings/) para el CDCL. - **Cotas, enunciadas con sus barras de error.** La relajación *es* un techo válido, calculado en tiempo polinómico; solo que aquí es flojo. La [entrada de callejones sin salida](/es/research/build/dead-ends/) registra el veredicto para que nadie lo vuelva a deducir esperando un certificado. - **Una cautela: no toda relajación es una cota.** Una «relajación» barata y tentadora, rellenar el tablero celda a celda con la pieza localmente mejor *permitiendo reutilizar piezas*, no es un techo válido de ninguna clase: es una heurística voraz cuyo punto fijo depende del tablero de partida. Desde uno de nuestros tableros de 457 aristas (aristas coincidentes, convención de cinco pistas) converge a 461; desde uno de 456, a 461; desde uno de 440, hasta 469. El uso válido es como *indicador de margen*: cuando la puntuación voraz relajada iguala la del propio tablero, el tablero queda probado como máximo local estricto incluso con la unicidad de piezas relajada, un certificado de callejón sin salida más fuerte que las pruebas por operadores. En ese tablero de 457, la brecha de +4 quedó probada incerrable por cualquier cadena de permutaciones hasta longitud 11 (40 millones de permutaciones, cero mejoras). La regla: solo los valores derivados de LP o MIP son techos; las puntuaciones voraces relajadas son diagnósticos. - **Subproblemas de asignación, donde la integralidad es gratis.** Dentro de los bucles de reparación, rellenar $k$ agujeros no adyacentes dos a dos es un puro problema de asignación $k \times k$: politopo de Birkhoff, vértices enteros, algoritmo húngaro en $O(k^3)$. Ese es el vecindario Eternity II de Schaus, y es el único lugar de este wiki donde la maquinaria del optimizador corre a plena potencia: véase [búsqueda local y ALNS](/es/research/build/local-search/local-search-alns/). - **Subproblemas enteros fáciles, despachados al instante.** Los conjuntos de rotación por MILP en milisegundos ([message 9071](https://groups.io/g/eternity2/message/9071)) son el patrón: cuando una subpregunta tiene estructura tratable, un solucionador MIP es la forma fiable más rápida de zanjarla, incluido zanjar que la respuesta no ayuda. - **La infactibilidad como teorema.** Una PLE que vuelve infactible sobre una región fijada prueba la misma imposibilidad que una llamada SAT UNSAT: la moneda-certificado detrás del [muro de rigidez](/es/research/why/rigidity-wall/). Este proyecto acuña esos certificados con SAT, que es más rápido en esta codificación; un solucionador MIP es una segunda casa de moneda legítima, y el colocador de Munjak usó exactamente esa señal, «identificando un problema que impediría colocar las 256 piezas» ([message 8791](https://groups.io/g/eternity2/message/8791)). - **Formulaciones como generadores de vecindarios.** La contribución duradera del artículo de 2017 es metodológica: métodos constructivos basados en MILP que siembran una búsqueda local de vecindarios múltiples, más nuevas instancias de referencia difíciles para la comunidad ([arXiv:1709.00252](https://arxiv.org/abs/1709.00252)). La formulación sobrevive como una *pieza*, dentro de una heurística que se apropia del problema de integralidad en lugar de relajarlo. - **La formulación es el algoritmo.** Medimos dos codificaciones MIP de la misma tarea, recombinar un pequeño corpus de buenos tableros en uno mejor, y se comportan como la noche y el día (un solo solucionador, CBC, ejecuciones únicas). La codificación A, «cada celda elige un tablero fuente», arrastra variables de costura cuadráticas en el tamaño del corpus: va bien con 4 o 5 tableros (óptimo entero encontrado en 17 a 86 segundos), pero con 9 tableros (unas 50 000 variables de costura y 100 000 restricciones) el solucionador no encontró ninguna solución entera factible en 30 minutos, y su cota LP de 1 094, más del doble del techo de 480, no significaba nada. La codificación B, «libera una región, una variable por celda-pieza-rotación, fija el resto», es de 10 a 50 veces más pequeña (unas 800 variables), se resuelve en menos de un minuto, y su LP queda ajustado contra el óptimo entero: *prueba* la optimalidad local en lugar de adivinarla. El mecanismo: las variables de la codificación A no llevan ningún significado geométrico que el LP pueda explotar, las mezclas fraccionarias de tableros cobran un crédito que ningún redondeo conserva, mientras que las variables de la codificación B son colocaciones, así que su politopo se queda cerca de la envolvente entera. El artículo de 2017 reciclando sus formulaciones dentro de heurísticas es la misma lección vista desde el otro lado. El camino del optimizador, recorrido hasta el final, enseña un hecho limpio sobre Eternity II: el puzzle es exactamente la restricción de integralidad. Todo lo lineal en él, los flujos, los equilibrios, el esqueleto de asignación, es polinómico y quedó resuelto ya en 2009, a error cero, en diez segundos. Lo que queda es el requisito de que cada pieza esté en algún sitio *entera*, una vez. El alegre tablero fraccionario de la relajación es la imagen más nítida que nadie ha dibujado de cómo se ve el 99 % fácil sin el 1 % difícil. ## Relacionado - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - [All-different, el filtro por matching de Régin](https://eternity2.dev/es/research/build/reduce/alldiff-regin/) — Ninguna pieza puede usarse dos veces: una sola restricción all-different global sobre 256 celdas. Jean-Charles Régin mostró en 1994 cómo un matching bipartito la filtra por completo en tiempo polinómico; su variante por color es el propagador más potente jamás medido sobre el edge matching, con una reserva clara sobre las búsquedas tolerantes a desajustes. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Encuentro en el medio > Enumerar dos mitades de un problema y unirlas en una interfaz compartida, intercambiando memoria por un exponente reducido a la mitad. El truco clásico de Horowitz–Sahni, qué aspecto tiene sobre bandas del tablero, y qué midió el experimento BANDSAW de este proyecto, incluido el método unilateral que lo superó. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/meet-in-the-middle/ - Actualizado: 2026-07-22 - Temas: exact-methods - Fuente: Horowitz & Sahni 1974, "Computing Partitions with Applications to the Knapsack Problem" (JACM), el origen clásico — https://doi.org/10.1145/321812.321823 - Fuente: Ataque de encuentro en el medio (Wikipedia), la rama criptoanalítica de la misma idea — https://en.wikipedia.org/wiki/Meet-in-the-middle_attack - Fuente: Búsqueda bidireccional (Wikipedia) — https://en.wikipedia.org/wiki/Bidirectional_search - Fuente: Ngo, Porat, Ré & Rudra, "Worst-case Optimal Join Algorithms" (JACM 2018), por qué las uniones por pares pierden en consultas cíclicas — https://doi.org/10.1145/3180143 - Fuente: Algoritmo de unión óptima en el peor caso (Wikipedia, en inglés) — https://en.wikipedia.org/wiki/Worst-case_optimal_join_algorithm --- El encuentro en el medio es el truco más antiguo para recortar exponentes en la búsqueda combinatoria: en lugar de explorar un árbol de profundidad $n$, se exploran dos árboles de profundidad $n/2$ y se unen sus hojas en una interfaz compartida. Ellis Horowitz y Sartaj Sahni lo introdujeron en 1974 para el problema de la mochila, convirtiendo un tiempo $O(2^n)$ en un tiempo $O(2^{n/2})$, al precio de almacenar los $2^{n/2}$ resultados de una mitad en una tabla indexada de modo que la otra mitad pueda consultarlos allí. La misma idea reaparece como el ataque de encuentro en el medio en criptoanálisis (por qué el DES doble apenas aporta nada frente al DES simple) y como la búsqueda bidireccional en el cálculo de rutas. El patrón es siempre el mismo: dos enumeraciones baratas más una unión, en lugar de una única enumeración imposible. ## Qué aspecto tiene sobre el tablero Eternity II ofrece un corte natural: una costura horizontal. Tomemos una banda de filas por completar; dividámosla en una mitad superior y una mitad inferior. Enumeremos todas las formas de rellenar la mitad superior, indexadas por dos cosas: el conjunto exacto de piezas que consumió, y el vector de colores de arista que deja colgando en la costura. Enumeremos la mitad inferior de forma simétrica. Luego unamos: cualquier par superior/inferior cuyos colores de costura coincidan y cuyos conjuntos de piezas sean disjuntos forma un relleno completo, hallado sin haber recorrido jamás el árbol de la banda entera. La cláusula de disjunción es el dolor propio de E2, y no es opcional. En la mochila, las dos mitades son independientes por construcción; aquí extraen de un único pool de piezas compartido, de modo que las mitades superiores deben agruparse por su huella exacta de pool y cada grupo unirse únicamente contra mitades inferiores construidas a partir de las piezas complementarias. Descuide esa contabilidad y la unión producirá alegremente tableros fantasma que usan una pieza dos veces. Acertar con la contabilidad exacta de pools complementarios fue una lección de corrección ganada a pulso en el experimento del proyecto que figura más abajo. ## El compromiso El compromiso de manual es tiempo a cambio de memoria: el exponente se reduce a la mitad, y la enumeración de una mitad debe conservarse en una tabla hash. Sobre el tablero, el estado de interfaz es una fila de colores de arista (16 celdas de ancho en el puzzle completo) más la huella de pool, de modo que el espacio de claves de la tabla crece rápido con el ancho de la banda, y es la memoria, no el tiempo, la que suele constituir el primer muro. La unión en sí es barata (hashing); todo depende de cuántas entradas debe almacenar cada lado y de con qué frecuencia coinciden realmente las firmas de costura. La objeción obvia es "basta con hashear con más astucia": encoger la clave fusionando colores que se comportan igual. Una comprobación de cuaderno la zanja en negativo. Fusionar dos colores solo es lícito si son intercambiables frente a cada color opuesto, lo que equivale a una simetría global de reetiquetado de colores sobre todo el juego de piezas; la verificación directa contra el fichero de piezas muestra que no existe ningún automorfismo semejante. Los 22 colores caen en clases de frecuencia desiguales (5 colores con 24 semiaristas, 5 con 48, 12 con 50), y ningún par de colores comparte a la vez oferta y estructura de incidencia. La única relajación lícita es proyectar la firma de costura sobre su *multiconjunto* de colores y usarlo como prefiltro, lo que encoge los cubos en torno a un factor $k!$ para una costura de longitud $k$: un alivio polinómico, nunca exponencial. Las claves gordas siguen gordas. ## Sentir la raíz cuadrada Los números fijan el compromiso de una manera que la prosa no puede. El laboratorio de abajo tiene dos vistas. *El compromiso* coloca las tres facturas una junto a otra en una escala logarítmica a medida que se hace crecer el problema: tiempo unilateral $2^n$, tiempo MITM $2 \cdot 2^{n/2}$, memoria MITM $2^{n/2}$ entradas de tabla. *La unión* hace pasar una microinstancia completa ($n = 10$, dos mitades de $2^5 = 32$ candidatos cada una) por la fase de almacenamiento y la fase de sondeo, para que puedas ver de dónde viene la velocidad y a dónde se va la memoria. > **[Figure]** Interactivo: el coste en memoria del encuentro en el medio — interactive: MitmCostLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso 1. **Arrastra $n$ en la vista del compromiso.** Cada $+2$ en el deslizador *cuadruplica* la barra roja unilateral pero solo *duplica* las dos barras MITM. Esa diferencia de un factor dos en la tasa de crecimiento es todo el truco: el exponente se reduce a la mitad, así que en escala logarítmica las barras MITM suben con la mitad de la pendiente. 2. **Observa cómo llega la barra de memoria.** Hacia $n \approx 60$ la tabla (a unos optimistas 16 bytes por entrada) supera a una máquina de 16 GiB, mientras que la barra de *tiempo* MITM sigue holgada. La memoria golpea el muro primero: el mismo orden de sucesos que registró BANDSAW, donde las entradas reales llevan una huella de pool y un vector de costura y son mucho más pesadas que 16 bytes. 3. **Cambia a la vista de la unión.** La mitad izquierda enumera sus 32 candidatos y almacena cada uno en una tabla hash indexada por su firma de costura (una de 48). Esta es la fase que paga la factura de memoria: el contador bajo *memoria de la tabla* es la factura que va llegando, entrada por entrada. 4. **La fase de sondeo.** Los 32 candidatos de la mitad derecha llegan uno por tick, y cada uno realiza exactamente una consulta. Un cubo vacío descarta toda una familia de combinaciones en un solo paso; uno ocupado produce una solución unida por cada compañero almacenado, hallada sin recorrer el árbol entero. 5. **Lee el recuento final.** $2 \cdot 32 = 64$ pasos de enumeración más $32$ entradas almacenadas reemplazan a $2^{10} = 1{,}024$ recorridos completos. En Eternity II se cumple la misma aritmética, con la salvedad de que una unión solo cuenta si los colores de costura coinciden *y* los pools de piezas son disjuntos, que es para lo que sirve la contabilidad por agrupación según la huella mencionada más arriba. ## Cuánto cuesta La contabilidad clásica de Horowitz–Sahni, para un problema de $n$ elecciones binarias: $$ \underbrace{O(2^n)\ \text{time},\ O(n)\ \text{space}}_{\text{one-sided enumeration}} \quad\longrightarrow\quad \underbrace{O(2^{n/2})\ \text{time},\ O(2^{n/2})\ \text{space}}_{\text{meet in the middle}} $$ (más un factor $\log$ si las mitades se ordenan en vez de hashearse). Nótese qué se conserva: el *producto* del tiempo y el espacio se mantiene en torno a $2^n$. El encuentro en el medio nunca destruye la exponencial; parte una factura impagable en dos más pequeñas, y ambas deben saldarse. La raíz cuadrada del tiempo de ejecución se compra con una factura de memoria exponencial, razón por la cual el método gana exactamente cuando $2^{n/2}$ entradas todavía caben en RAM y pierde en el instante en que dejan de caber. En Eternity II, el modelo limpio de $n$ elecciones necesita dos correcciones. Primero, la interfaz no es un solo número sino un estado ancho (un vector de costura de hasta 16 colores de arista más la huella exacta del pool de piezas), de modo que las claves de la tabla son grandes, las entradas pesadas, y el muro de memoria llega mucho antes del punto de cruce del manual. Segundo, las mitades están acopladas a través del pool de piezas compartido, de modo que la unión no es un acceso hash gratuito sino un acceso hash *filtrado por pools complementarios*. BANDSAW midió la consecuencia: dentro de presupuestos pequeños de discordancia ambos lados siguen siendo enumerables y el método es exacto, pero cada unidad extra de presupuesto infla ambos árboles en torno a un factor veinte, y cerca del horizonte el proyecto pagó por millones de mitades superiores almacenadas cuyos cubos ninguna mitad inferior sondeó jamás con éxito. ## Una fórmula de coste para las mitades El acoplamiento puede ponerse en cifras, no solo insinuarse. Un cálculo de cuaderno da el número esperado de rellenos válidos de una región de área $a$ con interfaz de longitud $k$ (para regiones que no tocan ningún borde del tablero): $$ T(a,k)\;=\;\frac{256!}{(256-a)!}\cdot 4^a\cdot p^{\,2a-k/2}, $$ donde $p = 0{,}048177$ es la probabilidad de que dos semiaristas tomadas al azar compartan color bajo la distribución real de frecuencias de colores: alrededor de un 6 % por encima del ingenuo $1/22 \approx 0{,}0455$, una inflación que las frecuencias desiguales imponen por Cauchy–Schwarz. El factorial descendente cuenta las elecciones ordenadas de piezas, $4^a$ las rotaciones, y el exponente $2a - k/2$ es exacto: una identidad de doble conteo da a toda región sin borde de área $a$ y perímetro $k$ exactamente $2a - k/2$ aristas interiores, cada una facturada como una coincidencia independiente. La fórmula se validó contra conteos exhaustivos en instancias plantadas de 10×10 a 12×12: exacta (razón 1,000) cuando la región no tiene aristas interiores, con un error del 3 al 20 % para una o dos aristas interiores, y el error se encoge al crecer el número de colores (razón 0,806 con 6 colores, subiendo a 1,010 con 22), la dirección que predice el agotamiento de un pool finito. Las regiones con cuatro o más aristas interiores ya quedan fuera de la verificación por fuerza bruta incluso en un juguete 12×12; el conteo predicho para una región de 9 celdas ronda $6 \times 10^{11}$. Así que la validación a pequeña escala es una medición, mientras que extrapolar la fórmula a regiones grandes es cosa de modelo, y todo lo que sigue debe leerse con esa etiqueta puesta. ## Por qué ningún tamaño de corte gana Démosle a la fórmula la optimización completa: elegir el área de región $a$, concederle el perímetro mínimo alcanzable (una cota clásica sobre poliominós, de Harary y Harborth en 1976, da $k_{\min} = 2\lceil 2\sqrt{a}\rceil$), y minimizar la factura total de tamaño de tabla más salida de la unión. El barrido no encuentra ningún punto dulce interior: el coste sube de forma monótona con el área de la región, con el coste en $\log_{10}$ pasando de 3,0 en $a=1$ a 16,4 en $a=16$, 48,7 en $a=64$, 61,5 en $a=128$. El óptimo es la "región" degenerada de una sola celda, es decir, la propagación de restricciones ordinaria, celda a celda. El mecanismo merece enunciarse sin rodeos. El encuentro en el medio clásico gana porque las dos mitades enumeran universos *independientes* cuyo producto reconstruye el espacio completo a coste de raíz cuadrada por lado. Aquí ambas mitades extraen de un único pool compartido de 256 piezas bajo una restricción global de disjunción: la base combinatoria es un factorial descendente cuyo coste marginal por celda *sube* con el área, ambos lados pagan la factura superlineal a la vez, y el ahorro de raíz cuadrada nunca se materializa. Esto es lo que dice el cálculo, validado en tableros plantados pequeños; es un veredicto computado sobre un modelo, no una medición al tamaño del tablero completo. También fracasa un atajo tentador. Anclar la región en una esquina, para que dos de sus lados sean borde libre del tablero, suena a perímetro gratis; es al revés. Una celda que toca el borde es una restricción dura adicional, no un regalo: solo las piezas que llevan físicamente el color del borde son elegibles ahí, un pool restringido de a lo sumo 60 de las 256 piezas (4 piezas de esquina más 56 piezas de borde). El reconteo con las clases restringidas, verificado por conteo directo contra el fichero de piezas, factura las regiones ancladas en esquina estrictamente peor de lo que sugiere el modelo ingenuo. El borde encoge el pool elegible más deprisa de lo que elimina restricciones de coincidencia. ## ¿Y cuatro cuadrantes? Si dos mitades fracasan, el siguiente reflejo son cuatro cuadrantes 8×8. Eso empeora las cosas, y la razón conecta con un rincón precioso de la teoría de bases de datos. Cuatro cuadrantes forman una unión en 4-ciclo: cada uno comparte una interfaz de 8 aristas con dos vecinos, el escenario de manual donde la teoría de uniones óptimas en el peor caso muestra que cualquier plan que materialice primero una unión por pares queda dominado. El mismo cálculo de cuaderno factura un plan de cuadrantes materializados en torno a $10^{80}$ filas intermedias frente a unas $10^{62}$ del corte simple en dos sobre la misma área, porque el producto por pares se hincha antes de que las restricciones cruzadas de los otros dos cuadrantes puedan podarlo, y ningún orden de unión puede salvarlo (de nuevo, una cifra de modelo a estas escalas). La única manera de alcanzar el tamaño de salida teóricamente óptimo es un algoritmo de unión óptima en el peor caso, uno que interseca simultáneamente todas las restricciones sobre cada variable. En una malla bidimensional, eso es exactamente lo que ya hace el backtracking ordinario con propagación de restricciones, celda a celda. El encuentro en el medio a varias vías se desploma de vuelta en la búsqueda unilateral que pretendía batir. ## Qué midió BANDSAW Este proyecto llevó la idea hasta el final, con rigor, en el [experimento BANDSAW](/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/): la mejor completación exacta de una banda, unión por encuentro en el medio con contabilidad exacta de pools, profundización iterativa sobre el presupuesto de discordancia, todo validado en un banco de pruebas 10×10 contra la fuerza bruta. Tres hallazgos, medidos sobre el motor de este proyecto y no replicados de forma independiente: - **Funciona, pero solo cerca de la perfección.** Dentro de presupuestos pequeños de discordancia el método es exacto y asequible. Pero cada unidad de presupuesto de discordancia infla los árboles de enumeración en torno a un factor veinte, de modo que el régimen donde la exactitud sigue siendo pagable se disuelve al cabo de un puñado de defectos permitidos. - **Un método unilateral lo superó.** Armado con las mismas tablas de cotas inferiores exactas (cotas de sufijo min-plus calculadas columna por columna), un simple branch-and-bound con profundización iterativa demostró la optimalidad en unos 12 segundos en un peldaño donde la unión bidireccional no terminó. El MITM paga la enumeración completa de *ambas* mitades incluso cuando bastaría un único óptimo más una prueba de agotamiento; cerca del horizonte de decidibilidad su unión casi nunca se disparó: millones de mitades superiores almacenadas, cero mitades inferiores concordantes, ambas facturas pagadas por nada. - **Los productos duraderos fueron las cotas.** Lo que sobrevivió al experimento no fue la unión sino las tablas de cotas inferiores admisibles y los certificados de presupuesto exactos que estas habilitan, instrumentos ahora usados en otros lugares. La conclusión registrada fue tajante: ningún despliegue del encuentro en el medio al tamaño del tablero completo. ## Las costuras aparecen incluso en construcciones unilaterales Una medición de cuaderno posterior le da a la historia de la costura una coda inesperada: la interfaz carga con la dificultad incluso cuando nadie une nada. En tableros fuertes construidos en dos fases (las filas superiores rellenadas de izquierda a derecha, luego las filas restantes rellenadas como columnas verticales), las discordancias se concentran casi por completo en la costura horizontal donde se encuentran los dos regímenes de relleno. En el mejor de esos tableros, contando aristas coincidentes sobre 480 con las cinco piezas pista oficiales colocadas, 13 de las 23 roturas totales estaban en la única primera fila de la región rellenada por columnas; dos tableros hermanos con 456 sobre 480 (24 roturas cada uno) mostraban la misma concentración en banda. Es una observación de un solo pipeline, tres tableros de una misma familia de productores, pero el mecanismo se lee con claridad: cada fase optimiza localmente su propio frente y empuja la deuda hacia la interfaz entre ambas, el mismo fenómeno que esta página describe para las uniones bilaterales, asomando dentro de un constructor unilateral. El mismo estudio dejó un diagnóstico barato de dónde pagan los métodos exactos. Re-resolver exactamente una región congelada de 32 celdas del tablero de 457 aristas (el resto del tablero fijado, las piezas pista fijadas) *demostró* la región ya óptima en 21 segundos, y un barrido de re-resolución con 9 semillas devolvió resultados idénticos con varianza cero: cero margen, nada que ganar. Liberar en cambio una banda de 48 celdas que cruza la costura volvió factible pero no demostrada óptima, y re-resolver con semillas distintas muestreaba incumbentes distintos; en un barrido de 40 semillas, un sorteo mejoró el tablero en 2 aristas coincidentes, hasta 459 sobre 480 bajo la misma convención, verificado de forma independiente por tres vías, en unos 200 segundos. Ampliar la banda liberada a 64 celdas se pasó de largo: dentro del mismo presupuesto, el mejor incumbente del solver aterrizó por debajo de la puntuación de partida, en 455. (Ese 459 igualó la mejor puntuación del cuaderno con este pipeline en aquel momento; para situar tales puntuaciones frente a los resultados comunitarios logrados con presupuestos de cómputo mucho mayores, véase la [página de récords](/es/research/records/).) La palanca escondida ahí: cuando el solver exacto cierra la brecha de optimalidad, la región está apretada y ningún método ayudará; cuando no puede, su incumbente es en la práctica un boleto de lotería y volver a sortear es la jugada. "¿Demostró el solver la optimalidad?" es un mapa gratuito de dónde vive el margen. ## Límites, y qué queda abierto La lección general coincide con la literatura clásica: el encuentro en el medio gana cuando la interfaz es estrecha, las mitades son verdaderamente independientes, y basta una respuesta de resuelto/no resuelto. Eternity II pone a prueba las tres condiciones: la costura porta un vector de colores ancho, el pool de piezas compartido acopla las mitades, y la partida por el récord se juega a crédito parcial, lo que vuelve a inflar ambos árboles. El primo *heurístico* también se ha probado ya, y la unión nunca se disparó. El diseño del cuaderno (un haz de tableros parciales creciendo hacia abajo desde las filas superiores, un segundo haz creciendo hacia arriba desde las filas inferiores, los pares unidos en una fila central) se ejecutó en dos variantes. Con haces independientes a anchura 32, 0 de los 1 024 pares candidatos eran válidos: ambos haces gravitan hacia las mismas piezas prometedoras, así que el requisito de disjunción de piezas fracasa casi siempre. Con haces dependientes (para cada estado superior, relanzar el haz inferior restringido a las piezas no usadas, a unas 8 veces el cómputo), la disjunción queda garantizada por construcción, y aun así no emergió ningún tablero completo: la interfaz de 16 colores en la fila de encuentro casi nunca coincide exactamente. Se comporta como una restricción de emparejamiento bipartito completo en la fila de encuentro, el mismo muro que detiene la búsqueda unilateral fila a fila, solo que trasladado a la costura. El alcance de ese negativo importa. Cubre una sola familia de configuraciones: dos variantes, un único diseño de fila de encuentro, anchuras de haz hasta unas 300, y una interfaz exacta (las 16 aristas deben coincidir todas). Una interfaz *blanda*, que tolere unas pocas discordancias en la costura y las repare después, se diseñó pero nunca se ejecutó, y una costura vertical (por columnas) nunca se probó. El estado medido es, pues, este: el haz bidireccional de interfaz exacta fracasa a anchuras practicables, y el primo de interfaz blanda es la parte que sigue abierta. ## Relacionado - [BANDSAW](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Resolver exactamente una banda de filas encontrándose en el medio, para hallar el verdadero mejor final y medir hasta qué punto puede decidirse por anticipado una fin de partida. - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - [Cobertura exacta y enlaces danzantes](https://eternity2.dev/es/research/build/exact/exact-cover-dlx/) — Eternity II se formula limpiamente como un problema de cobertura exacta, y el algoritmo X de Knuth con enlaces danzantes es la máquina clásica para ellos. Dónde brilla de verdad (tableros pequeños, conteo exhaustivo) y las dos razones por las que no vence al 16×16: un árbol de búsqueda que nunca se reduce, y ningún crédito parcial. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Codificaciones SAT y CSP > Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/exact/sat-csp-encodings/ - Actualizado: 2026-07-02 - Temas: exact-methods - Fuente: Heule, Solving edge-matching problems with satisfiability solvers (2008) — https://www.cs.cmu.edu/~mheule/publications/eternity.pdf - Fuente: Ansótegui, Béjar, Fernàndez & Mateu, Edge Matching Puzzles as Hard SAT/CSP Benchmarks (CP 2008) — https://link.springer.com/chapter/10.1007/978-3-540-85958-1_39 - Fuente: Ansótegui, Béjar, Fernàndez & Mateu, On the hardness of solving edge matching puzzles as SAT or CSP problems (Constraints, Springer) — https://link.springer.com/article/10.1007/s10601-012-9128-9 - Fuente: Ansótegui, Béjar, Fernàndez & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge (CCIA 2008) — https://repositori.udl.cat/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/download --- Los solucionadores SAT modernos resuelven problemas industriales con millones de variables, así que el movimiento evidente es escribir Eternity II como cláusulas y dejar que CDCL excave. La gente lleva haciendo exactamente este movimiento desde 2008. Las codificaciones son limpias y las tallas pequeñas caen al instante; el puzzle completo, en cambio, no se inmuta. Entender por qué es una lección sobre de qué se alimenta realmente la búsqueda guiada por conflictos. ## La codificación La codificación directa introduce una variable $x_{c,p,r}$ para «la pieza $p$ ocupa la celda $c$ con la rotación $r$», y luego tres familias de restricciones: cada celda alberga exactamente un emplazamiento, cada pieza se usa como mucho una vez, y dos emplazamientos que discrepan a lo largo de una arista compartida se excluyen mutuamente. El mismo modelo se lee con naturalidad como un CSP: una variable por celda, los emplazamientos como valores del dominio, un *alldifferent* sobre las piezas, y restricciones de tabla sobre las celdas adyacentes. Esa formulación es la que los artículos de referencia estudian junto a la forma clausal. La forma clausal directa explota rápido, porque las cláusulas de discrepancia de arista, tomadas de dos en dos, se multiplican. El [artículo de 2008](https://www.cs.cmu.edu/~mheule/publications/eternity.pdf) de Marijn Heule mostró el remedio estándar: introducir variables auxiliares para el color mostrado en cada costura interna, de modo que un emplazamiento implique sus cuatro colores de costura y la discrepancia se excluya una vez por costura en lugar de una vez por par. Con codificaciones compactas, ruptura de simetría y ajuste fino del solucionador, Heule resolvió instancias de emparejamiento de aristas mucho más allá de lo que alcanzaba la codificación ingenua. Aun así, las CNF del puzzle completo 16×16 construidas por la comunidad llegan a alrededor de cien mil variables y cientos de millones de cláusulas (según se reporta en la [lista de correo comunitaria](https://groups.io/g/eternity2)). Se cargan sin problema, y permanecen totalmente sin resolver. ## Tomarle la medida Los números de catorce dígitos dejan de significar nada en un texto, así que más vale medirlos. El explorador de abajo calcula ambas codificaciones en vivo a partir de la derivación anterior. Desliza el tamaño del tablero a través del techo del SAT puro de la comunidad, en 10×10, y hasta el 16×16 completo, y observa las barras en escala logarítmica. Debajo, una instancia de seis cláusulas muestra la otra mitad de la historia: la cascada de propagación unitaria de la que se alimenta el aprendizaje de cláusulas de CDCL, y que este puzzle deja hambrienta. > **[Figure]** Interactivo: explosión del tamaño de las codificaciones SAT/CSP — interactive: EncodingSizeLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso Deriva los tamaños una vez a mano; dejan de ser folclore. 1. **Variables de emplazamiento.** $p = n^2$ piezas, $4$ rotaciones, $n^2$ celdas: $x_{c,p,r}$ da $n^2 \cdot p \cdot 4 = 4n^4$ variables. En $n = 16$ eso son $262{,}144$ emplazamientos en bruto; podar los imposibles (las piezas de borde solo se asientan en el perímetro, las esquinas solo en las esquinas) reduce esto a las «alrededor de cien mil variables» que realmente cargan las CNF comunitarias. 2. **Restricciones de celda y de pieza.** Cada celda alberga exactamente un emplazamiento: una cláusula larga más, de dos en dos, $\binom{4n^2}{2}$ exclusiones por celda. Cada pieza se usa como mucho una vez: otras $\binom{4n^2}{2}$ por pieza. El «como mucho uno» por pares es cuadrático; esto es lo que las codificaciones compactas (secuencial, commander) reducen a $O(4n^2)$ cláusulas cada una, al precio de variables auxiliares. 3. **Las cláusulas de conflicto directas: la explosión.** El tablero tiene $2n(n-1)$ costuras internas. Para cada costura, cada par de emplazamientos que discrepa a través de ella recibe una cláusula binaria: alrededor de $(4n^2)^2 (1 - 1/c)$ pares por costura si los colores fueran uniformes. En $n = 16$, $c = 17$: $480 \times 1024^2 \times \tfrac{16}{17} \approx 4.7 \times 10^8$ cláusulas, los «cientos de millones» reportados para las CNF del tablero completo, recuperados desde primeros principios. 4. **El truco de costura de Heule.** Nombrar el color de cada costura: $2n(n-1) \cdot c$ variables auxiliares ($8{,}160$ a tamaño completo). Ahora cada emplazamiento *implica* sus cuatro colores de costura (como mucho $16n^4$ cláusulas binarias) y la discrepancia queda prohibida una vez por costura, no una vez por par: $\binom{c}{2}$ cláusulas por costura, unas $65{,}000$ en total. La maquinaria de conflictos se colapsa en tres órdenes de magnitud. Eso es exactamente por qué las instancias de Heule alcanzaron tamaños que la codificación ingenua nunca rozó, y por qué el techo sigue estando cerca de 10×10 y no de 16×16: el tamaño nunca fue el único problema. ## Lo que cuesta - **El solucionador, en el peor caso: exponencial.** SAT es NP-completo, y CDCL es un procedimiento basado en resolución: en familias con cotas inferiores de resolución exponenciales, *ninguna* de sus ejecuciones puede ser subexponencial. Su éxito industrial es una afirmación sobre la estructura típica, no sobre el coste en el peor caso, y una instancia construida en el pico de dureza está tan lejos de lo típico como es posible. - **Propagación unitaria: barata por diseño.** Con dos literales vigilados por cláusula, una cláusula solo se examina cuando uno de sus dos vigías queda falsificado, y cada visita cuesta $O(\text{longitud de la cláusula})$ para encontrar un nuevo vigía. La propagación es la razón por la que CDCL puede permitirse millones de decisiones por segundo incluso en CNF enormes; cargar Eternity II nunca fue el problema. - **Análisis de conflicto: pagar en proporción al grafo de implicación.** Cada conflicto se analiza recorriendo el grafo de implicación hacia atrás hasta un corte (primer-UIP), con un coste de tiempo lineal en el grafo recorrido, y produce una cláusula aprendida cuyo poder de poda depende de ser *corta*. Ese es el paso que este puzzle deja hambriento: las cadenas de implicación planas vuelven trivial el recorrido y ancha la cláusula aprendida. Tarifa completa, sin producto. - **El lado CSP tiene la misma forma.** Imponer la [consistencia de arco](/es/research/build/reduce/arc-consistency/) sobre las restricciones de tabla es polinómico por nodo, y el filtro GAC *alldifferent* de Régin ejecuta un emparejamiento bipartito en $O(m\sqrt{n})$ por llamada (véase la [página alldifferent](/es/research/build/reduce/alldiff-regin/)). Propagación polinómica sobre un árbol de búsqueda exponencial: fuerte localmente, impotente globalmente. - **Donde el balance cuadra.** En el tablero completo, el comportamiento del peor caso es el comportamiento observado. En subproblemas fijados, la misma maquinaria devuelve UNSAT en menos de dos segundos: un teorema de imposibilidad por consulta, al precio de una búsqueda en base de datos. Los costes no cambiaron; la pregunta, sí. ## Lo que mostraron los benchmarks publicados El estudio sistemático se debe a Ansótegui, Béjar, Fernàndez y Mateu, en un [artículo de CP 2008](https://link.springer.com/chapter/10.1007/978-3-540-85958-1_39) y una [versión de revista ampliada en Constraints](https://link.springer.com/article/10.1007/s10601-012-9128-9), acompañados de un artículo que pregunta, textualmente, [cuán difícil es realmente el puzzle comercial](https://repositori.udl.cat/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/download). Su conclusión estrella: los puzzles de emparejamiento de aristas generalizados son excelentes benchmarks SAT/CSP precisamente porque la dificultad es ajustable: al variar el número de colores, el tiempo de resolución sube hasta un pico agudo donde las soluciones son escasas pero reales. Los recuentos de colores de Eternity II se sitúan en ese pico, por diseño; la [página sobre la transición de fase](/es/research/why/phase-transition/) lo recorre en detalle. En la práctica, los solucionadores completos despachan los tableros pequeños en segundos y luego chocan con un acantilado exponencial; los experimentos comunitarios a lo largo de los años sitúan el techo práctico del SAT puro sobre las instancias de estilo Eternity en torno a la escala 10×10, muy por debajo de 16×16. Consulta la [página de artículos](/es/research/papers/) para el rastro completo de la literatura. ## Por qué CDCL se atasca en el tablero completo CDCL obtiene su poder del aprendizaje de cláusulas: cuando la propagación se topa con un conflicto, el solucionador recorre el grafo de implicación hacia atrás hasta un pequeño conjunto de decisiones que lo causaron, y registra esa combinación como prohibida. La cláusula aprendida es corta y general cuando los conflictos nacen de largas cadenas de propagación unitaria. Eternity II deja hambriento a ese mecanismo. El análisis por este proyecto de su propio motor CSP (matizado en consecuencia: medido aquí, no replicado de forma independiente) halló que la estructura de implicación es casi plana (una eliminación de dominio se remonta a un único emplazamiento vecino, no a una cadena profunda), de modo que el análisis de conflicto casi no tiene nada que comprimir, y los [no-goods](/es/research/build/reduce/nogood-learning/) aprendidos salen anchos y específicos en lugar de cortos y generales. Peor aún, los conflictos surgen tarde: con una propagación fuerte en marcha, los vaciados de dominio prácticamente nunca ocurrían antes de la profundidad 50, con la mediana bien adentro del tablero. Una cláusula ancha sobre una configuración profunda y específica no poda casi nada más. Añade una instancia deliberadamente ajustada al pico de dureza, y el puzzle completo se acerca a un peor caso para la búsqueda guiada por conflictos. ## Dónde los veredictos exactos siguen pagando Nada de esto vuelve inútiles las codificaciones; las reubica. La respuesta UNSAT de un solucionador completo es un teorema, y en subproblemas esos teoremas salen baratos. El uso más productivo del SAT en este proyecto (con el mismo matiz de arriba) es como *oráculo sobre regiones*: fijar la mayor parte de un tablero fuerte, liberar un vecindario de sus discrepancias restantes, y pedir una completación totalmente emparejada. La respuesta vuelve UNSAT, típicamente en menos de dos segundos, y prueba que ninguna reordenación local de esa región puede jamás terminar el tablero, que es la maquinaria detrás del [muro de rigidez](/es/research/why/rigidity-wall/). El mismo truco criba anillos de borde enteros: fijar un borde candidato, liberar las 191 celdas interiores, y un UNSAT en menos de un segundo certifica que ese borde nunca podrá sostener un interior perfecto. Y dentro de un motor de búsqueda CSP, la misma idea en miniatura (registrar no-goods duros en los fallos de propagación para no volver a entrar jamás en un callejón sin salida estructural) es correcta por construcción y barata de verificar con literales vigilados al estilo SAT. Esa es la división del trabajo: como solucionador frontal del puzzle completo, CDCL está superado; como generador rápido de certificados de imposibilidad para piezas de él, nada más se le acerca. ## Relacionado - [MOSAIC](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/mosaic/) — Dividir el tablero en pequeños bloques, resolver cada uno hasta el óptimo demostrado y volver a pegarlos, pagando las costuras en lugar de prohibirlas. Partiendo de cero, sin ningún récord que copiar, el método alcanza 448. - [Artículos](https://eternity2.dev/es/research/papers/) — La literatura académica sobre Eternity II y los puzzles de emparejamiento de aristas, extraída de las notas de investigación del proyecto y de la lista de lecturas de la comunidad, y ordenada según lo útil que resulta realmente cada artículo si tu objetivo es escribir un solucionador. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. --- # Ir más rápido > Rendimiento en bruto: el oficio por debajo del algoritmo (tablas de consulta, estructuras dimensionadas para la caché, código generado) y la distribución del trabajo entre muchas máquinas. Es lo que decide si un nodo cuesta 26 ciclos o 2600, y es la demostración más clara de que la velocidad por sí sola no mueve el muro. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/faster/ - Actualizado: 2026-07-13 --- Rendimiento en bruto: el oficio por debajo del algoritmo (tablas de consulta, estructuras dimensionadas para la caché, código generado) y la distribución del trabajo entre muchas máquinas. Es lo que decide si un nodo cuesta 26 ciclos o 2600, y es la demostración más clara de que la velocidad por sí sola no mueve el muro. Las páginas siguientes proceden técnica por técnica: qué es cada una en una línea, qué alcanzó realmente sobre el verdadero tablero 16×16, dónde se detiene, y los laboratorios y mediciones que la respaldan. Para abarcar todo el territorio de una sola vez, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). Dos puntos de entrada si quieres el argumento de principio a fin. [La ingeniería de solucionadores](/es/research/build/faster/solver-engineering/) es el registro de veinte años de la comunidad - cada técnica de oficio, qué costó, qué rindió - y fija las tres cosas distintas que la gente llama «rápido» para que los números dejen de resbalar. Para una demostración concreta de primera mano, el [experimento del backtracker JIT](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) lleva Rust portable, peldaño a peldaño, hasta la velocidad del C más afinado a mano de la comunidad - a la par en tableros difíciles y realistas - y luego muestra por qué ni siquiera eso [mueve el muro](/es/research/lab/experiments/raphael-anjou/going-fast/). ## Páginas de esta sección - [Ingeniería de solucionadores: el oficio bajo el algoritmo](https://eternity2.dev/es/research/build/faster/solver-engineering/) — Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - [Resolver de forma distribuida: enjambres, sindicatos y granjas de núcleos](https://eternity2.dev/es/research/build/faster/distributed-solving/) — Cada pocos años, la comunidad lanzaba más ordenadores contra Eternity II: salvapantallas BOINC, sindicatos con reparto de premio, clústeres de PlayStation, granjas de placas únicas rescatadas. Lo que compraron 10^19 operaciones, cómo se particiona realmente una búsqueda en profundidad, y la única tarea para la que la distribución resultó ser buena. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # Resolver de forma distribuida: enjambres, sindicatos y granjas de núcleos > Cada pocos años, la comunidad lanzaba más ordenadores contra Eternity II: salvapantallas BOINC, sindicatos con reparto de premio, clústeres de PlayStation, granjas de placas únicas rescatadas. Lo que compraron 10^19 operaciones, cómo se particiona realmente una búsqueda en profundidad, y la única tarea para la que la distribución resultó ser buena. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/faster/distributed-solving/ - Actualizado: 2026-07-02 - Temas: speed, backtracking - Fuente: eternity2.net se lanza en BOINC, y los escépticos responden (groups.io message 756) — https://groups.io/g/eternity2/message/756 - Fuente: El balance de cierre: 1,6 TFlops, más de 10^19 operaciones, mediados de los 460 (groups.io message 3511) — https://groups.io/g/eternity2/message/3511 - Fuente: El Eternity 2 Syndicate: partes del premio proporcionales a las colocaciones (groups.io message 3021) — https://groups.io/g/eternity2/message/3021 - Fuente: Verhaard publica eii con términos de premio 50-50 (groups.io message 5940) — https://groups.io/g/eternity2/message/5940 - Fuente: El clúster de François Galea y sus PlayStation 3 (groups.io message 6918) — https://groups.io/g/eternity2/message/6918 - Fuente: La lista de filas superiores del 10×10: 4.318.956 filas por reservar (groups.io message 9164) — https://groups.io/g/eternity2/message/9164 - Fuente: La granja de filas de más de 400 núcleos de McGavin resuelve el 10×10 (groups.io message 9688) — https://groups.io/g/eternity2/message/9688 - Fuente: El 469: unos días sobre unos doscientos núcleos (groups.io message 10045) — https://groups.io/g/eternity2/message/10045 - Fuente: El wrapper_blackwood de Jef Bucas, un servidor de tareas para estudios paramétricos — https://github.com/jfbucas/wrapper_blackwood --- La idea llegó antes que el propio puzzle. En mayo de 2007, dos meses antes de que Eternity II saliera a la venta, la lista de correo barajó un esfuerzo comunitario al estilo SETI@home, y la respuesta de Brendan Owen fue la primera formulación clara de la tesis que los siguientes quince años no dejarían de confirmar: existen conjuntos de piezas que "serán imposibles con los algoritmos de backtracking actuales", por más máquinas que reclutes ([groups.io message 222](https://groups.io/g/eternity2/message/222), [message 226](https://groups.io/g/eternity2/message/226)). La comunidad construyó los proyectos distribuidos de todos modos, más de una vez y en dos formas distintas. Ambas merecen entenderse, porque una de ellas resultó ser genuinamente útil. La historia social (el auge y la caída de eternity2.net, la política del concurso a su alrededor) vive en [las páginas de historia](/es/research/community/hunt/); esta página es la vista de sistemas. ## Enjambres de voluntarios La primera forma es la multitud: desconocidos descargan un cliente, donan ciclos y se reparten cualquier premio por contrato. **eternity2.net** fue el buque insignia. Dave Clark, autor de un solucionador distribuido de Eternity I, lo lanzó sobre la infraestructura BOINC de Berkeley el mismo mes en que se distribuyó el puzzle, julio de 2007 ([message 756](https://groups.io/g/eternity2/message/756)). En el lanzamiento, los escépticos decían que sin avances algorítmicos ni siquiera 100.000 máquinas tenían prácticamente ninguna posibilidad ([message 763](https://groups.io/g/eternity2/message/763)); la multitud vino de todos modos. En seis semanas superaba los 1.300 miembros registrados; 160 de ellos estaban en EE. UU., donde el puzzle aún no se había puesto a la venta ([message 2122](https://groups.io/g/eternity2/message/2122), [message 2132](https://groups.io/g/eternity2/message/2132)). El proyecto envió a Tomy una parcial de 462 aristas, y luego una de 463 ([message 2663](https://groups.io/g/eternity2/message/2663)), la cifra que sirvió de techo público de la comunidad durante más de un año. Cinco meses tras el lanzamiento, Clark lo cerró y publicó el balance: más de 1,6 TFlops de cómputo agregado, más de 10¹⁹ operaciones de CPU, mejores puntuaciones "en torno a mediados de los 460", y su propio veredicto de que una solución por fuerza bruta "siempre iba a ser claramente imposible" ([message 3511](https://groups.io/g/eternity2/message/3511)). Al retirarse, liberó el código de su solucionador de investigación ([message 3716](https://groups.io/g/eternity2/message/3716)), y sus formatos de archivo se convirtieron en el estándar de intercambio de la comunidad. **El Eternity 2 Syndicate** añadió la letra pequeña. Lanzado en octubre de 2007 en eternity2syndicate.co.uk, sus miembros ejecutaban un backtracker rápido sobre un espacio de búsqueda particionado (la misma arquitectura que eternity2.net) pero con un contrato explícito: el dinero del premio repartido en proporción a las colocaciones aportadas. En una semana informaba de ~20 máquinas con una media de 300 millones de colocaciones por segundo; pronto 40 miembros ejecutaban 50 instancias del solucionador, con estadísticas de progreso exclusivas para miembros ([message 3021](https://groups.io/g/eternity2/message/3021), [message 3078](https://groups.io/g/eternity2/message/3078), [message 3105](https://groups.io/g/eternity2/message/3105)). Un sitio francés de resolución distribuida funcionaba en paralelo; Clark celebró la "competencia" ([message 1254](https://groups.io/g/eternity2/message/1254)). En mayo de 2008 llegó la versión a microescala: el "E2@home" de e2dude, una sola persona que reivindicaba puntuaciones por encima de 460 por semana y por PC y reclutaba voluntarios a cambio de una parte del premio menor de 10.000 $ ([message 5474](https://groups.io/g/eternity2/message/5474)). Ninguno de estos enjambres batió un récord. La única campaña de voluntarios que ganó dinero invirtió la receta: en lugar de un cliente débil en muchas máquinas, Louis Verhaard publicó el *solucionador más potente que existía*, eii, para que cualquiera lo ejecutara, con el premio repartido 50-50 entre él y el usuario con mejor puntuación ([message 5940](https://groups.io/g/eternity2/message/5940)). Las máquinas de la comunidad encontraron su 467 más de cuarenta veces ([message 6275](https://groups.io/g/eternity2/message/6275)), y ganó el único premio que Eternity II llegó a pagar. [La página de eii](/es/research/lab/experiments/louis-verhaard/eii/) cuenta esa historia completa; la lección para esta página es contundente: el algoritmo era el activo, y la multitud no era más que su multiplicador. ## Flotas en propiedad La segunda forma es más discreta y sobrevivió a la primera: un investigador, muchas máquinas que controla personalmente, apuntando a un objetivo *finito*. **El clúster de François Galea.** En 2009, Galea informó de haber resuelto exactamente el banco de pruebas 10×9 de Brendan Owen (93 días sobre un clúster de 7 nodos de Pentium 4 dobles) y de tener el 10×10 en marcha desde ~110 días sobre un clúster de tres PlayStation 3, aún sin resolver (istarinz había abandonado el mismo 10×10 tras un mes en un Xeon de cuatro núcleos) ([message 6918](https://groups.io/g/eternity2/message/6918)). Este es el ejemplo limpio más antiguo del buen caso de uso: el 10×9 tiene un árbol conocible y finito, así que más núcleos compran una fecha de finalización real en lugar de un billete de lotería. **[La granja rescatada de Peter McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/).** McGavin construyó su flota con lo que fuera barato: ~20 núcleos en casa, tres ODROID XU4, veinticinco Orange Pi Lite de 12 $ (más de 130 núcleos), y luego servidores de trabajo prestados para 400+ en total. Ese pico era intermitente, no sostenido: el trabajo estuvo "repartido a lo largo de unos 4 años y usando de forma intermitente hasta unos 400 núcleos a la vez" ([message 9804](https://groups.io/g/eternity2/message/9804)), los servidores prestados solo durante el último mes más o menos, y según su propia nota los núcleos de servidor "son hyperthreads, hablando con propiedad" ([message 9753](https://groups.io/g/eternity2/message/9753)) mientras que las placas ARM funcionan a alrededor de un tercio de un núcleo de PC. En 2017 esa granja resolvió el set_1 10×10 de Brendan, el banco de pruebas comunal de la comunidad, de una década de antigüedad: ~2×10¹⁷ nodos, unos 180 núcleos-año, menos del 0,5 % del árbol completo, "sin métodos nuevos, solo persistencia sistemática y la ley de los grandes números" ([message 9686](https://groups.io/g/eternity2/message/9686), [message 9688](https://groups.io/g/eternity2/message/9688)). Tres años después apuntó "unos un par de cientos" de núcleos al solucionador recién publicado de Joshua Blackwood durante unos días y consiguió el 469, entonces el récord absoluto en el puzzle real ([message 10045](https://groups.io/g/eternity2/message/10045)). La nube hizo apariciones fugaces: Amazon EC2 se sugirió ya en 2010 ([message 8106](https://groups.io/g/eternity2/message/8106)), y David Barr probó su programa de búsqueda en AWS Lambda en 2016 ([message 9642](https://groups.io/g/eternity2/message/9642)). Pero las flotas alquiladas nunca desplazaron a las propias; la economía de un puzzle sin plazo favorece el hardware que puedes dejar funcionando durante años. ## El censo | Esfuerzo | Modelo | Escala | Resultado | Fuente | | --- | --- | --- | --- | --- | | eternity2.net (Dave Clark, 2007) | Enjambre de voluntarios (BOINC) | 1.300+ miembros, 1,6 TFlops | 462–463 enviados; >10¹⁹ ops; cerrado tras 5 meses | [756](https://groups.io/g/eternity2/message/756), [3511](https://groups.io/g/eternity2/message/3511) | | Sitio distribuido francés (royale_zerezo, 2007) | Enjambre de voluntarios | desconocido | Se apagó sin resultado | [1253](https://groups.io/g/eternity2/message/1253) | | Eternity 2 Syndicate (Amos, 2007) | Enjambre de voluntarios + contrato de premio | ~40 miembros, 50 instancias, ~300M colocaciones/s | Sin récord; se apagó con el sitio | [3021](https://groups.io/g/eternity2/message/3021), [3078](https://groups.io/g/eternity2/message/3078), [3105](https://groups.io/g/eternity2/message/3105) | | E2@home (e2dude, 2008) | Microsindicato | Unos pocos voluntarios | Reivindica más de 460; sin récord verificado | [5474](https://groups.io/g/eternity2/message/5474) | | Publicación de eii (Verhaard, 2008–09) | Binario publicado, reparto de premio 50-50 | PC de la comunidad | 467 encontrado 40+ veces; el único premio jamás pagado | [5940](https://groups.io/g/eternity2/message/5940), [6275](https://groups.io/g/eternity2/message/6275) | | Clúster + PS3 de Galea (2009) | Flota en propiedad | 14 CPU + 3 PlayStation 3 | 10x9 resuelto exactamente en 93 días; 10x10 sin resolver | [6918](https://groups.io/g/eternity2/message/6918) | | Reservas de filas superiores (2013) | Protocolo de lista de correo | Un puñado de miembros | 4.318.956 filas listadas; solución conocida verificada; se disipó | [9164](https://groups.io/g/eternity2/message/9164), [9177](https://groups.io/g/eternity2/message/9177) | | Granja de filas de McGavin (2016–17) | Flota en propiedad (rescatada) | 400+ núcleos en el pico, intermitente durante ~4 años (muchos son hyperthreads) | set_1 10×10 de Brendan resuelto, ~180 núcleos-año | [9688](https://groups.io/g/eternity2/message/9688), [9804](https://groups.io/g/eternity2/message/9804) | | McGavin sobre el solucionador de Blackwood (2020) | Flota en propiedad | "unos un par de cientos" de núcleos, unos días | 469/480, el récord de su época | [10045](https://groups.io/g/eternity2/message/10045) | | wrapper_blackwood (Bucas, 2021–) | Servidor de tareas + clientes por núcleo | Un trabajador por núcleo | Mapas de parámetros, no récords | [repo](https://github.com/jfbucas/wrapper_blackwood) | ## ¿Cómo se particiona una búsqueda en profundidad? El backtracking parece secuencial, pero se distribuye de maravilla: fija un prefijo de la búsqueda y cada subárbol por debajo de él es una tarea independiente que no necesita comunicación alguna. La comunidad usó tres recetas concretas. **Bandas de prefijos.** Trocear el espacio de las primeras colocaciones en rangos y entregar cada rango a un trabajador. Esto es lo que hicieron eternity2.net y el Syndicate, el "espacio de búsqueda particionado" del [message 3021](https://groups.io/g/eternity2/message/3021), y es la forma más débil, porque en el puzzle completo cada banda es igual de desesperada. **Listas de primeras filas.** Enumerar todas las compleciones legales de la primera fila, y luego tratar cada fila como una tarea: un backtracking acotado sobre el resto del tablero. En 2013, por sugerencia de McGavin, Martin (capiman) enumeró las 4.318.956 filas superiores legales del set 1 10×10 de Brendan y publicó la lista ([message 9164](https://groups.io/g/eternity2/message/9164)). McGavin recorrió hasta el final la fila que contenía la solución conocida, la fila 1.407.888, en 15.310 segundos, encontrando exactamente esa solución ([message 9167](https://groups.io/g/eternity2/message/9167)), y Michel Gaillard "reservó" las entradas 1000002–1000035 publicando en la lista ([message 9177](https://groups.io/g/eternity2/message/9177)). Aquel esfuerzo de 2013 se disipó; el de 2017 añadió el ingrediente que faltaba: la *clasificación*. McGavin puntuó ~20 millones de permutaciones de primera fila según su probabilidad, en el sentido de la [teoría del complejo](/es/research/why/complex-theory/), de solución por nodo del árbol de búsqueda y puso en la granja primero las mejores filas. La solución llegó en la búsqueda de fila ~92.907 frente a una predicción de una por cada ~70.000 ([message 9688](https://groups.io/g/eternity2/message/9688)). La clasificación marcaba la diferencia entre una lotería y un calendario. Las tareas tienen un valor tremendamente desigual; un buen modelo estático de qué rebanadas son prometedoras vale más que cualquier cantidad de hardware adicional. **Barridos de parámetros.** La variante moderna distribuye *configuraciones* en lugar de subárboles. El [wrapper_blackwood](https://github.com/jfbucas/wrapper_blackwood) de Jef Bucas es un pequeño servidor Python que reparte tareas por HTTP, donde cada tarea es una variación de los parámetros del [solucionador de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/); los clientes (un trabajador por núcleo) generan el código fuente C# a partir de plantillas con esa variación incorporada, lo compilan, lo ejecutan e informan. La salida no es un récord sino un mapa: qué tríos de colores y qué calendarios de cuotas alcanzan la profundidad, agregados a lo largo de cientos de ejecuciones. ## Coordinación y confianza La maquinaria de coordinación era llamativamente informal. El protocolo de reserva de 2013 se basaba en el honor: reivindicabas un rango de filas publicando un mensaje ([message 9177](https://groups.io/g/eternity2/message/9177)), y funcionaba porque los participantes se contaban con los dedos de una mano. La verificación, en cambio, se tomaba en serio, y siempre era el mismo método: el recálculo independiente. Cuando McGavin verificó la fila 1.407.888, apal1969 volvió a ejecutar la misma fila con código distinto y la confirmó con 6,77×10¹¹ nodos ([message 9168](https://groups.io/g/eternity2/message/9168)); cuando el 10×10 cayó en 2017, Martin validó la solución de forma independiente ([message 9725](https://groups.io/g/eternity2/message/9725)); los tableros récord se publicaban con la lista completa de piezas y se comprobaban en el visor en línea de Jef Bucas ([message 10045](https://groups.io/g/eternity2/message/10045)). Nada entraba en el registro de la comunidad por la sola palabra de alguien. El verdadero problema de coordinación de la era de los enjambres era económico, y el concurso lo empeoraba: las inscripciones al premio podían quedar descalificadas si se publicaban, así que eternity2.net dejó de publicar las puntuaciones por encima de 463: un proyecto distribuido incapaz de decir a sus propios voluntarios lo que habían encontrado ([message 3511](https://groups.io/g/eternity2/message/3511)). Los contratos de reparto de premio (las partes proporcionales a las colocaciones del Syndicate, el 50-50 de eii, la parte del premio menor de E2@home) eran intentos de impedir que los voluntarios se guardaran un hallazgo para sí mismos, y de mantenerlos motivados, dentro de ese secreto forzoso. Cuando el concurso murió, el problema se evaporó: los esfuerzos modernos publican todo, y la confianza descansa en la reproducibilidad en lugar de en contratos. ## Lo que compraron 10^19 operaciones Nada, y la comunidad sabía por qué antes de empezar. Las propias estimaciones de árbol del grupo, convergiendo desde implementaciones independientes en 2008, situaban la búsqueda completa en aproximadamente 2,2×10⁴³ nodos por solución, del orden de 10²⁷ núcleos-año ([message 5193](https://groups.io/g/eternity2/message/5193), [message 5197](https://groups.io/g/eternity2/message/5197)). Frente a eso, el total acumulado de 10¹⁹ operaciones de eternity2.net es alrededor de 10⁻²⁴ del trabajo de una sola solución: multiplicar tu flota por mil, o por un millón, no mueve un número así en absoluto. Owen lo dijo dos meses antes de que saliera el puzzle ([message 226](https://groups.io/g/eternity2/message/226)); la carta de cierre de Clark lo concedía casi con las mismas palabras ([message 3511](https://groups.io/g/eternity2/message/3511)). El punto más profundo es aquel al que este wiki no deja de volver: el hardware multiplica una búsqueda, mientras que la poda la *reconfigura*. [Poda contra velocidad](/es/research/why/prune-vs-speed/) desarrolla el argumento general, y [la teoría del complejo](/es/research/why/complex-theory/) aporta la aritmética exacta de por qué el árbol del puzzle completo empequeñece cualquier flota concebible. Todo esfuerzo distribuido sobre el puzzle completo confirmó el argumento de conteo; ninguno lo mermó. ## Para qué sirve realmente la distribución Los esfuerzos que funcionaron comparten una propiedad: el objetivo era finito y las matemáticas lo decían de antemano. - **Resolución exhaustiva en la frontera de la viabilidad.** El 10×9 de Galea y el 10×10 de McGavin son árboles de ~10¹⁵–10¹⁷ nodos: monstruosos para una sola máquina, tratables para una flota. La distribución convirtió "algún día" en 93 días y 180 núcleos-año respectivamente. - **Medición.** El 10×10 de McGavin sirvió también como la validación más sólida que [la teoría del complejo](/es/research/why/complex-theory/) haya recibido jamás: la solución llegó según el calendario predicho, y los histogramas de nodos publicados coincidían con el modelo ([message 9688](https://groups.io/g/eternity2/message/9688)). Una granja de núcleos es un buen instrumento para medir una teoría. - **Estudios paramétricos.** wrapper_blackwood es la plantilla moderna: cuando la pregunta es "¿cuál de estas mil configuraciones busca más profundo?", las tareas son verificables, acotadas e independientes, que es exactamente lo que la distribución busca. - **Récords solo aguas abajo de un algoritmo.** El 469 vino de ~200 núcleos ejecutando un solucionador que ya era, por sí solo, de clase récord ([message 10045](https://groups.io/g/eternity2/message/10045)). Los núcleos multiplicaron el algoritmo de Blackwood; en ningún momento de este archivo lo sustituyeron. > **El resumen en una línea** > > Quince años de cómputo colectivo, destilados: las multitudes sin un algoritmo no compraron nada; las flotas apuntadas a objetivos finitos y bien modelados compraron exactamente lo que el modelo prometía. El multiplicador es real; solo multiplica lo que ya tienes. ## Relacionado - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - [El eii de Verhaard: el solucionador que ganó el único premio](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/eii/) — El motor detrás del 467, la única puntuación de Eternity II jamás premiada, reconstruido a partir de los propios mensajes de Louis Verhaard en la lista de correo: poda prospectiva, órdenes de relleno en peine, deslizamiento de arista condicionado por la profundidad, un calendario de deslizamiento ajustado por cadena de Markov. Y por qué su propio binario Win32, sin código fuente, no puede compilarse ni ejecutarse en esta máquina en absoluto. - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. --- # Ingeniería de solucionadores: el oficio bajo el algoritmo > Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/faster/solver-engineering/ - Actualizado: 2026-07-22 - Temas: speed - Fuente: El hilo de Lebel diseccionado: el solucionador C++ de referencia de la época puesto al descubierto (groups.io message 1704, 2007) — https://groups.io/g/eternity2/message/1704 - Fuente: El hash perfecto mínimo de 1024 claves de Nathan que reemplaza un arreglo de un millón de entradas (groups.io message 1831) — https://groups.io/g/eternity2/message/1831 - Fuente: La receta de optimización de Mike Field: «La fuerza bruta no funciona» (groups.io message 3098) — https://groups.io/g/eternity2/message/3098 - Fuente: El presupuesto por ciclo de Field: 75 M tiles/s, ~26 ciclos, la mitad detenida en memoria (groups.io message 9003) — https://groups.io/g/eternity2/message/9003 - Fuente: Instrucciones de extracción de bits BMI/BMI2: de 78 a 90 M colocaciones/s (groups.io message 9796) — https://groups.io/g/eternity2/message/9796 - Fuente: Los resultados negativos de Blackwood: solo las heurísticas rindieron alguna vez (groups.io message 10056) — https://groups.io/g/eternity2/message/10056 - Fuente: Qué es un «nodo»: el hilo sobre la convención de conteo (groups.io message 3843, 2008) — https://groups.io/g/eternity2/message/3843 - Fuente: La convención de piezas por segundo fijada (groups.io message 9739, 2017) — https://groups.io/g/eternity2/message/9739 - Fuente: Cifras modernas en un solo núcleo: 72,7 M/s en C++, 68,4 M/s en Rust (groups.io message 11633, 2025) — https://groups.io/g/eternity2/message/11633 - Fuente: El manual de compilación de McGavin: versiones de clang, flags nativos, PGO (groups.io message 11751, 2026) — https://groups.io/g/eternity2/message/11751 - Fuente: The Rust Performance Book: configuración de build (LTO, codegen units, PGO) — https://nnethercote.github.io/perf-book/build-configuration.html - Fuente: Optimización guiada por perfiles en rustc (documentación oficial) — https://doc.rust-lang.org/beta/rustc/profile-guided-optimization.html - Fuente: Optimizar programas Rust con PGO y BOLT mediante cargo-pgo (Beranek, 2023) — https://kobzol.github.io/rust/cargo/2023/07/28/rust-cargo-pgo.html - Fuente: Microarquitectura del Apple M1: líneas de caché de 128 bytes, 128 KB de L1d (7-cpu.com) — https://www.7-cpu.com/cpu/Apple_M1.html --- Reduce cualquier solucionador récord a su esqueleto y encontrarás el mismo bucle: colocar una pieza, comprobar las aristas, retroceder cuando te atascas. El algoritmo quedó fijado en 2007. Aquello en lo que la comunidad ha competido realmente durante veinte años es la capa *por debajo* del algoritmo: el oficio que decide si visitar un nodo de ese árbol cuesta unos 26 ciclos de reloj, como Mike Field midió en su propio motor ([message 9003](https://groups.io/g/eternity2/message/9003)), o cien veces eso en un intérprete ingenuo. Mismo árbol, misma búsqueda, dos órdenes de magnitud de diferencia en colocaciones por segundo. Esta página reúne ese oficio, técnica por técnica, cada una con su fuente primaria en el archivo de la lista de correo. La cronología de cómo un motor las acumuló durante dos décadas se cuenta en la [página de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/); la anatomía del motor detrás de los tableros récord está en la [página de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/). Aquí está el estante del que ambos se surten. ## Tablas de consulta de candidatos: el truco universal Todo backtracker rápido comparte una idea portante: nunca *buscar* piezas candidatas, sino consultarlas. Fija el [orden de relleno](/es/research/build/backtracking/fill-order/) (un recorrido por filas, por lo general), y cada celda expone exactamente dos restricciones conocidas cuando llega su turno, el color de su arista norte y el color de su arista oeste. Así que precalculas una tabla indexada por ese par de colores, y encontrar todas las piezas que pueden ocupar legalmente la celda actual se convierte en un único acceso a memoria. La receta de Field de 2007 la ponía la primera en la lista, junto con su corolario: un orden de búsqueda **fijo** es lo que hace posible la clave de dos aristas en primer lugar, y colocar una pieza entonces solo actualiza sus vecinas sur y este ([message 3098](https://groups.io/g/eternity2/message/3098)). El mismo diseño se diseccionaba ese mismo año en torno al solucionador C++ público de Marc Lebel, el backtracker rápido de referencia de la época, en el hilo que hace también las veces del primer seminario de ingeniería de la comunidad ([message 1704](https://groups.io/g/eternity2/message/1704)). La receta de 2007 esconde una tercera forma de tabla fácil de pasar por alto: para la celda justo encima o al lado de una *pieza pista obligatoria*, se indexa la consulta por tres aristas (norte, sur, oeste), de modo que los candidatos quedan pre-filtrados contra el color fijo de la pista, sin pérdida alguna de completitud ([message 3098](https://groups.io/g/eternity2/message/3098)). Redescubrí por qué importa dos décadas después, en mi propio cuaderno: en un tablero con pistas, las celdas alrededor de una pista resultaron ser un sumidero de rendimiento, con hilos batiendo ~85 M colocaciones por segundo contra el muro de la pista durante veinte minutos; el remedio era exactamente la tabla de tres aristas de Field. El archivo ya contenía la respuesta. Todo lo demás en esta página es un refinamiento de esa tabla: hacerla más pequeña, densificar sus entradas o desenrollar el código a su alrededor. ## Hash perfecto mínimo: la tabla, encogida a la medida La tabla de consulta tiene un problema de tamaño en cuanto la indexas por más de dos aristas. En el hilo de Lebel, Nathan describió la versión de fuerza bruta: un arreglo de 4 dimensiones indexado por los cuatro colores de arista, `combo4[32][32][32][32]`. Un millón de entradas, en su mayoría ceros, fallos de caché garantizados. Su solución adoptó el generador de hash perfecto mínimo (el de Bob Jenkins) hacia el que otro miembro había orientado a la lista. Dado que las 256 piezas en 4 rotaciones producen solo 1024 cuádruples de aristas distintos, un hash perfecto mínimo hace corresponder la clave empaquetada de 32 bits a una tabla de 1024 entradas sin colisiones: «lo bastante pequeña para caber en el caché la mayor parte del tiempo», con un sobrecoste de hash casi nulo, y las claves ausentes simplemente leen un conteo de cero ([message 1831](https://groups.io/g/eternity2/message/1831)). Un millón de entradas reducidas a mil, únicamente para que el conjunto de trabajo viva en L1. Él trazó la frontera él mismo: la tabla de cuatro aristas solo se gana el sustento cuando el orden de relleno puede dejar huecos; un solucionador de recorrido estricto por líneas nunca la necesita. ## Empaquetado de bits y dimensionado de structs: el caché, el verdadero adversario El presupuesto de ciclos de Field explica por qué tanto de este oficio trata de la disposición en memoria: a 75 M tiles por segundo por núcleo, más de la mitad del tiempo estaba detenido en el acceso a memoria, no en el cálculo ([message 9003](https://groups.io/g/eternity2/message/9003)). La respuesta es hacer que cada byte que la búsqueda toca cuente. Empaqueta los cuatro lados de una pieza en un único entero ([message 3098](https://groups.io/g/eternity2/message/3098)). Mantén el conjunto de piezas usadas como una palabra de 64 bits por grupo y cortocircuita todo un bucle de candidatos con una única comprobación de máscara, una optimización que Arnaud Carré y Adam Miles descubrieron haber implementado de forma independiente, línea por línea ([message 9808](https://groups.io/g/eternity2/message/9808), [message 9809](https://groups.io/g/eternity2/message/9809)). Dimensiona la entrada de la tabla de candidatos para que toda la tabla quepa en el caché. Ese es exactamente el diseño de la struct `RotatedPiece` de seis bytes de Blackwood, ya contada en [la página de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/): número de pieza, rotación, los dos lados expuestos, un conteo de rupturas y un conteo heurístico, y nada más. Estos trucos siguen componiéndose en 2026. En un motor en profundidad por lo demás idéntico, en mi cuaderno, tres microcambios exactamente de esta familia sumaron **+27 %** (92 a 93 M frente a 72 a 73 M colocaciones por segundo, estable en presupuestos de 3, 5, 10 y 15 segundos; un motor, un puzzle, una máquina, así que léase como una forma, no como una constante universal). Uno: **listas de candidatos terminadas en centinela**, rematando cada cubo con un valor imposible para que el recorrido cueste una carga y una comparación en vez de un contador de límites, liberando un registro. Dos: el conjunto de piezas usadas como **palabras de bitset u64** en lugar de un byte por pieza; mismos bytes, pero la comprobación es un único AND y todo el conjunto cabe en una o dos líneas de caché. Tres: un **único cursor de reanudación** por profundidad en lugar de un par inicio/fin, que reduce a la mitad la contabilidad del retroceso. Y el oficio no es exclusivo de los backtrackers: en un solucionador de propagación de restricciones que mantiene dominios de candidatos completos por celda, pasar esos dominios a palabras de bitset u64 convirtió la revisión de arco-consistencia en un puñado de operaciones sobre palabras y rindió +48 a +101 % según la mezcla de propagadores, con trabajo posterior de disposición (una tabla de rotaciones precalculada, consulta de pieza en O(1), deshacer basado en arena) que compuso hasta ~4,6× en el perfil más ligero. Lecturas de rendimiento con semilla única, y un solucionador de propagación hace mucho más trabajo por nodo que los caminantes rápidos de esta página: llévese los cocientes, no los números absolutos. La lección viaja entera: la representación del dominio *es* el motor. ## Bipiezas y metateselas: precomponer, y pagar en memoria Si una consulta te da las piezas candidatas, ¿por qué no precomponer pares en «bipiezas» 1×2 y colocar dos celdas por nodo? Medido sobre el código de Lebel en agosto de 2007, funcionaba: alrededor de un 20–30 % más rápido ([message 1734](https://groups.io/g/eternity2/message/1734)). Pero el trueque es duro y el archivo documenta ambas caras. Al pasar a bloques 2×2, un miembro midió aproximadamente 4,2× *más lento* y rechazó de plano las piezas más grandes ([message 1730](https://groups.io/g/eternity2/message/1730)). Ninguna sorpresa una vez contadas las tablas: cerca de 4 millones de combinaciones 2×2 interiores distintas ([message 3044](https://groups.io/g/eternity2/message/3044)). Louis Verhaard reportó que las bipiezas ayudaban «solo muy marginalmente» en su propio backtracker rápido ([message 3061](https://groups.io/g/eternity2/message/3061)). Y en 2008 la lista zanjó la cuestión teórica subyacente: un solucionador de metateselas visita esencialmente la misma frontera de restricciones que un solucionador 1×1 («sincronizados cada 4 piezas»), de modo que la ganancia es a nivel de implementación, nunca una reducción del espacio de búsqueda ([message 5842](https://groups.io/g/eternity2/message/5842), [message 5899](https://groups.io/g/eternity2/message/5899)). La precomposición es una aceleración que se paga con memoria, y más allá del 1×2 el precio se vuelve negativo. ## Generación de código: escribir el programa que escribe el solucionador Las últimas indirecciones del bucle interno («¿en qué celda estoy?, ¿cuáles son sus vecinas?») se pueden eliminar sencillamente no teniendo bucle. La receta de Field: *generar* procedimentalmente código monolítico en línea recta, un bloque por celda, cada bloque conociendo sus propias vecinas como constantes; su código generado se compilaba en unas 33 instrucciones por celda ([message 3098](https://groups.io/g/eternity2/message/3098)). La idea se propagó rápido: ya a mediados de 2008, istarinz generaba un solucionador C no recursivo por puzzle y por camino de relleno, compilado con el compilador de Intel ([message 5480](https://groups.io/g/eternity2/message/5480), [message 5438](https://groups.io/g/eternity2/message/5438)), en la misma temporada en que la lista comparaba notas sobre backtrackers no recursivos en general ([message 4683](https://groups.io/g/eternity2/message/4683)). El `body.c` de Peter McGavin es esta idea acumulada durante veinte años: bloques etiquetados como `cell_9_2_next:`, cadenas de `goto` que regresan a la celda anterior al agotarse, el fichero entero regenerado para cada puzzle y cada conjunto de pistas ([message 11337](https://groups.io/g/eternity2/message/11337), [message 11782](https://groups.io/g/eternity2/message/11782)). Y funciona entre lenguajes: libblackwood de Jef Bucas, un generador en Python que emite C, hizo el algoritmo C# de Blackwood aproximadamente el doble de rápido en la misma máquina ([message 10065](https://groups.io/g/eternity2/message/10065), [message 10078](https://groups.io/g/eternity2/message/10078)). ## Realidades del compilador: el último 20 %, no los 10²⁰ que faltan Por debajo del código fuente todavía queda rendimiento por cosechar, en instrucciones y flags más que en ideas. Adam Miles llevó su solucionador de 78 a 90 millones de colocaciones por segundo con las instrucciones de extracción de bits `bextr` de BMI y `pext` de BMI2, a la vez que señalaba que se estaba volviendo «cada vez más difícil» llegar más lejos ([message 9796](https://groups.io/g/eternity2/message/9796)). El manual de McGavin de 2026 es el folclore acumulado: prueba clang, icc e icx frente a gcc; prueba *versiones* (clang-15 le gana a clang-19 en sus placas ARM); añade `-march=native` y `-mtune=native`; usa optimización guiada por perfiles. Ninguno de estos consejos es una bala de plata ([message 11751](https://groups.io/g/eternity2/message/11751)). Su truco de contador del mismo mensaje es el género en miniatura: el contador de colocaciones de 64 bits se alimenta de un registro de 16 bits que se desborda, sumando `0x10000` cada vez, porque cronometró ambas formas hace años en hardware de 32 bits y el truco ganó. El mismo realismo se aplica al hardware. El multithreading escala de la manera obvia: los solucionadores multinúcleo rebasaron los 100 M colocaciones/s en 2008 ([message 5804](https://groups.io/g/eternity2/message/5804)), y un solo Core i7 alcanzó los 558 M/s aquel diciembre ([message 6212](https://groups.io/g/eternity2/message/6212)). El progreso en un solo núcleo, en cambio, se detuvo en gran medida. Al publicar su tabla de 2025 de nueve combinaciones CPU/compilador (38–84 M colocaciones/s), McGavin señaló que las velocidades en las CPU más recientes «son solo un poco más rápidas» que en su Phenom II de 2010 ([message 11643](https://groups.io/g/eternity2/message/11643)). Los motores chocaron contra el muro de memoria de Field hace quince años y desde entonces se apoyan en él. ## Lo que cuesta un nodo en 2026: la anatomía, medida El presupuesto de ciclos de Field abría esta página desde 2007. Aquí está la versión rehecha desde mi propio cuaderno, sobre un núcleo de rendimiento de un Apple M1 (líneas de caché de 128 bytes, 128 KB de caché de datos L1; [las tablas de latencia del M1](https://www.7-cpu.com/cpu/Apple_M1.html) son la versión moderna de las cifras contra las que peleaba Field). Un nodo de mi backtracker Rust sin poda cuesta **unos 90 a 145 ciclos**: lecturas limpias, sin contención, dadas como un rango porque una máquina cargada empujaba el mismo binario muy por encima. La sorpresa es adónde se van los ciclos. La aritmética de comprobación de aristas es prácticamente gratis. El nodo lo domina **el barrido de las piezas ya usadas fuera de la lista de candidatos**: unas 6,7 lecturas de candidatos por nodo, de las cuales unas 5,9 (88 %) se rechazan únicamente porque la pieza ya está en el tablero. Cada rechazo es una carga L1 más una ramificación dependiente de los datos; todo el bucle de rechazo cabe en diez instrucciones y una única carga. Tres instrumentos contrastados sitúan el piso de instrucciones retiradas en unas 75 a 90 instrucciones por nodo, lo que, a la tasa de emisión pico del núcleo, serían más o menos 12 a 15 ciclos. Los 90 a 145 medidos se sitúan 7 a 10× por encima de ese piso, y la brecha tiene un solo nombre: **la mala predicción de ramificación** en la comprobación de pieza usada, cuyo resultado depende de qué piezas ha colocado la búsqueda y por tanto no puede predecirse. En 2007 el muro era la memoria; Field midió la mitad de sus ciclos detenidos en cargas ([message 9003](https://groups.io/g/eternity2/message/9003)). En los amplios núcleos de ejecución fuera de orden de los años 2020, con cachés L1 generosos, el muro se ha desplazado hacia la entropía de ramificación. Una medición más completa la anatomía. Activar una poda de factibilidad correcta, del tipo que ejecutan los motores de récord, multiplica el coste del nodo por unos 13 a 24×, hasta **unos 2.180 ciclos por nodo**: la prueba de la poda se invoca unas 8 veces por nodo y, al rechazar candidatos, fuerza el recorrido unas 10× más adentro en la lista (las lecturas de candidatos saltan de 6,7 a 67,6 por nodo). Y sigue siendo abrumadoramente rentable, porque la poda compra órdenes de magnitud menos nodos hasta la misma profundidad. Ese es [el argumento poda contra velocidad](/es/research/why/prune-vs-speed/) capturado en una sola tabla de costes: el motor corre deliberadamente ~15× más lento por nodo porque nodos × coste-por-nodo es el producto que importa. (Metodología: los conteos de nodos son idénticos al bit de una ejecución a otra, la disciplina de suma de verificación descrita más abajo; las cifras de rendimiento son medianas sobre 7 repeticiones; una máquina, un régimen de tablero, así que acótese cada número en consecuencia.) ### Cuánto puede comprar una reescritura: una respuesta verificada por equivalencia Con la anatomía en mano, la pregunta siguiente es qué recupera una reescritura. Reconstruí el núcleo caliente de colocación de seis maneras en un laboratorio aislado: entradas de candidatos empaquetadas, precarga por software, división de bucle estricto/relajado, encauzamiento por software, tablas auxiliares compactadas, y combinaciones, bajo una regla dura: el cronometraje de una variante solo cuenta si reproduce **el conteo de nodos exacto, la profundidad máxima y un hash de trayectoria rodante** del motor de producción, plegado sobre cada confirmación (profundidad, pieza, rotación). Ese candado es el hermano mayor de la suma de verificación por conteo de nodos de la comunidad (es también como [el experimento en Rust portable](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) de más abajo verifica sus peldaños); ninguna aceleración nacida de una semántica alterada en silencio puede colarse por él. Cada número de aquí lo pasó. El total de una reescritura escalar de semántica exacta: **1,2 a 1,4× robusto, unos 1,8× en pico** en la región más favorable. No 10×. El resultado portante es un negativo. Las dos optimizaciones de caché «obvias» resultaron casi nulas: empaquetar los colores en la entrada de candidato, para matar dos recolecciones de tabla, rindió 1,0 a 1,2× y a veces regresó; encoger las tablas auxiliares de 64 KB a una forma de 1 KB residente en L1 rindió a lo sumo 1,26×. Eso es prueba por lo nulo de que las cargas ya se servían desde caché. El coste residual es la ramificación de pieza usada que se predice mal, y toda variante que preserve la trayectoria exacta de la búsqueda debe mantener esa ramificación. Las únicas variantes que ayudaron reestructuraron el flujo de control *alrededor* de ella (división de bucle, encauzamiento por software), razón por la que topan en 1,2 a 1,4× y no se acumulan: atacan el mismo residuo. Un primer intento de flujo de candidatos basado en bitset sobre este diseño midió 16 a 25 % *más lento*, con el mismo alcance. La escapatoria del procesamiento por lotes también tuvo su juicio: fusionar dos celdas horizontalmente adyacentes en un paso «dominó», verificado como productor de conjuntos de compleciones idénticos, exhaustivamente, hasta una ramificación de 3.171 vías. Rindió 1,05 a 1,13× en un régimen donde el 74 % de las celdas podían fusionar, y fue neto neutro (0,96 a 1,03×) en el régimen en que corre realmente la búsqueda de tipo récord, donde solo el 27 % fusiona. El mecanismo explica el techo: el lote amortiza la cáscara del bucle por celda, cerca del 7 % de un nodo, pero el recorrido dominante filtrado por piezas usadas es irreducible por celda; la segunda celda recorre igualmente su propio cubo contra el conjunto usado vivo, algo que ninguna tabla de pares estática puede codificar. La aritmética esbozada dice que bloques más grandes chocan contra el mismo muro, aunque esa extrapolación queda sin probar más allá de los pares. Todo esto vale para un diseño de motor, un juego de instrucciones, un régimen de puzzle; la formulación justa es que **para este diseño en este hardware, el techo escalar ronda 1,5 a 2×**, y el muro tiene nombre. Si un flujo de candidatos SIMD sin mala predicción puede ir más lejos es una dirección abierta, no un resultado. ## Disciplina de medición: ¿qué es un «nodo», exactamente? Una cultura de ingeniería vale tanto como sus bancos de prueba, y el archivo tuvo que construir esa disciplina a las malas. En enero de 2008, comparar afirmaciones de velocidad forzó la pregunta de definición: Txibilis contaba un nodo como cada pieza *válida* comprometida en el tablero, sin anticipación ([message 3843](https://groups.io/g/eternity2/message/3843)); otros contaban colocaciones intentadas, o pasos, y el hilo concluyó que quizá no exista una métrica en la que todos coincidan ([message 3946](https://groups.io/g/eternity2/message/3946)). La pregunta volvió en 2017 y recibió la respuesta estándar: las «piezas por segundo» de la comunidad cuentan las piezas *colocadas* por segundo, al estilo del ajedrez ([message 9739](https://groups.io/g/eternity2/message/9739), [message 9740](https://groups.io/g/eternity2/message/9740)). La objeción estándar la acompañaba: la métrica favorece los órdenes de relleno por recorrido de líneas y no dice nada sobre la cobertura del espacio de búsqueda por unidad de tiempo ([message 9746](https://groups.io/g/eternity2/message/9746)). Dos consecuencias prácticas. Primera: nunca compares las cifras de M/s de dos solucionadores sin comprobar qué cuentan; un solucionador «más rápido» puede simplemente tener una definición más generosa. Segunda, el hábito positivo que surgió de ahí: publicar **conteos de nodos junto a los tiempos**. Un backtracker determinista que recorre un árbol fijo debe contar los mismos nodos en cualquier máquina, de modo que los conteos exactos de nodos se convirtieron en las sumas de verificación de la comunidad, la forma en que los portes, reescrituras y hardware nuevo prueban que recorren el mismo árbol antes de que su velocidad signifique nada. Hay una tercera confusión que conviene nombrar de una vez por todas, porque reaparece cuando estos números llegan a un público más amplio. «Rápido» apunta a tres cantidades sin relación, y ninguna se convierte en otra: - **Colocaciones por segundo** (o piezas/s o nodos/s) - cuán rápido *avanza* la búsqueda. Es lo que mide cada cifra de esta página, y depende del tablero tanto como del motor. El C de McGavin hace ~287 M en un tablero fácil pero ~105 M en uno difícil; un [motor en Rust portable en este sitio](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) alcanza ~110 M en el mismo tablero difícil - empate allí - y ~122 M en el fácil. - **Aristas casadas sobre 480** - cuán *bueno* es un tablero. Es el eje donde viven los [récords](/es/research/records/) (el techo es 470). Es independiente de la velocidad de recorrido: un motor lento suele encontrar un tablero mejor que uno rápido. - **Colocaciones agregadas por segundo** - un total de *flota*, muchas máquinas sumadas. El «~300 M/s» que a veces se atribuye a un solo motor es en realidad el [enjambre del Eternity 2 Syndicate](/es/research/build/faster/distributed-solving/), unas veinte máquinas sumadas, no un núcleo. Un número alto en el primer eje no dice nada del segundo, y el tercero no es en absoluto una velocidad de motor. Cuando este sitio cita un rendimiento, siempre es colocaciones/s en un núcleo salvo que se diga otra cosa; donde el *compromiso* entre gastar el presupuesto de un solucionador en velocidad o en criterio es el tema, ese argumento vive en [ir rápido](/es/research/lab/experiments/raphael-anjou/going-fast/). ### Perfilar, luego optimizar: las predicciones pierden contra los flamegraphs La disciplina se prolonga por debajo del banco de prueba, hasta el propio bucle de optimización. Una pasada de perfilado sobre mi solucionador de fuerte propagación (un perfilador por muestreo con resolución de tramas en línea) entregó siete correcciones dirigidas por flamegraph que valieron **+22 a 27 %** en total, cada una medida por su cuenta: fusionar una comprobación de vacuidad en el bucle de bitset dio +27,5 % en el perfil más ligero, reemplazar una lista de trabajo materializada por un recorrido de bitmap sobre pila +7 %, una reconstrucción de contador por popcount +4,3 %. Mientras tanto, **cinco optimizaciones predichas estáticamente quedaron refutadas por el mismo perfil**: cada una una ganancia de manual de 1 a 5 % sobre el papel (indicaciones de inline, reutilización de instantánea, elevación de dispatch, reordenamiento de struct, un desenrollado manual), cada una o bien ausente de las 200 primeras muestras o bien medida como neutra, porque el compilador ya las hacía. Una corrección era pura higiene de medición: la propia llamada de cronometraje pesaba **12,4 %** del tiempo de ejecución a una tasa de comprobación de plazo de 1 de cada 64, y bajarla a 1 de cada 4096 lo recuperó todo, el patrón de la comprobación de plazo enmascarada en su forma más pura. La aritmética de caché sin perfil engaña de la misma manera, en ambos sentidos. Reemplazar una tabla de consulta plana de 1 MB por una compacta de 16 KB residente en L1, acreditada con ~20 % por la aritmética de latencias, midió **0 %** con una ligera regresión (tres ejecuciones de 10 segundos): las claves realmente tocadas se agrupaban y ya estaban calientes en caché. `panic = "abort"` midió igualmente nulo una vez que el bucle caliente se quedó sin aristas de pánico. Estos son porcentajes de semilla única, máquina única, propios de un motor; el patrón duradero es que cerca de la mitad de las predicciones estáticas de experto estaban equivocadas, en cada sentido, y que el flamegraph arbitró cada disputa. Medir, no modelar. ## El estante de un vistazo | Técnica | Lo que cuesta | Lo que rindió | Fuente | | --- | --- | --- | --- | | Tablas de candidatos por posición (clave de dos aristas) | memoria para las tablas; un orden de relleno fijo | los candidatos en un solo acceso a memoria, la base que comparte todo solucionador rápido | [3098](https://groups.io/g/eternity2/message/3098) | | Hash perfecto mínimo | construcción de hash fuera de línea | tabla de un millón de entradas → 1024 entradas, residente en caché | [1831](https://groups.io/g/eternity2/message/1831) | | Empaquetado de bits, structs a medida del caché | contorsiones de código | menos detenciones donde >50 % del tiempo es memoria; cortocircuitos por máscara de 64 bits | [9003](https://groups.io/g/eternity2/message/9003), [9808](https://groups.io/g/eternity2/message/9808) | | Bipiezas (precomposición 1×2) | las tablas crecen rápido; sin reducción del espacio de búsqueda | +20–30 % en 1×2; ~4,2× *más lento* en 2×2 | [1734](https://groups.io/g/eternity2/message/1734), [5899](https://groups.io/g/eternity2/message/5899) | | Generación de código (código en línea recta por celda) | un pipeline de compilación; regenerar por puzzle | ~33 instrucciones/celda (2007); ~2× gracias al C de libblackwood (2020) | [3098](https://groups.io/g/eternity2/message/3098), [10065](https://groups.io/g/eternity2/message/10065) | | Instrucciones de extracción de bits BMI/BMI2 | portabilidad | 78 → 90 M colocaciones/s | [9796](https://groups.io/g/eternity2/message/9796) | | Comparativa de compiladores, flags nativos, PGO | ensayo y error, por máquina | ganancias «significativas» pero sin cuantificar, de un solo dígito porcentual a decenas | [11751](https://groups.io/g/eternity2/message/11751) | | Trucos de contador (alimentación por desbordamiento de 16 bits) | oscuridad | medible solo en hardware de la era de 32 bits | [11751](https://groups.io/g/eternity2/message/11751) | ## Veinte años, de ~1× a 4× por núcleo Ahora tomemos distancia. La receta de Field de 2007 ya hacía 60–80 millones de colocaciones por segundo por núcleo ([message 3098](https://groups.io/g/eternity2/message/3098)). Veinte años de oficio desde entonces han ensanchado ese rango en lugar de multiplicarlo de manera uniforme. Sobre código portable la ganancia es modesta, aunque las dos cifras de 2025 no son del mismo puzzle: 72,7 M/s de un solucionador C++ afinado en un tablero 8×8 y 68,4 M/s de un descendiente en Rust del de Blackwood en 16×16 en 2025 ([message 11633](https://groups.io/g/eternity2/message/11633), [message 11634](https://groups.io/g/eternity2/message/11634)), apenas por encima de la base de 2007. El ~4× solo aparece con C generado por celda en el hardware más reciente: alrededor de 225–295 M/s para el de McGavin en puzzles pequeños ([message 11751](https://groups.io/g/eternity2/message/11751) señala que el ritmo se reduce a la mitad aproximadamente en 16×16, el tamaño que E2 realmente tiene; [message 11750](https://groups.io/g/eternity2/message/11750)), así que mezcla una ganancia de generación de código con una ganancia de hardware, no oficio a secas. A lo largo de esos mismos veinte años, el récord se movió tres aristas: de 467 a 470. Mi propio cuaderno reprodujo ese registro de veinte años en una tarde. El primer solucionador de este sitio era de fuerte propagación y caminaba unas 370 k colocaciones por segundo; el motor de récord en C generado de la comunidad hace unos 295 M sobre hardware comparable, una brecha de 800×. Portar la *forma* del motor C a un Rust inclinado a lo seguro (tablas de candidatos planas sensibles al borde, un bitset de piezas usadas de cuatro palabras, listas de candidatos terminadas en centinela, banderas precalculadas por profundidad) cerró unos 180× de ella en un día: 65 a 68 M colocaciones por segundo en un solo hilo, mediana 67 M sobre 4 semillas con cerca de 5 % de dispersión, en una máquina, aterrizando en ~22 % del motor C antes de cualquier especialización por celda. En esa etapa el porte no se había verificado como recorriendo el árbol idéntico, así que léase como un resultado de forma de rendimiento y no como un porte verificado; la comparación verificada es el experimento de más abajo. Pero la lección ya se sostiene: cada técnica de ese porte figura en el estante de esta página, el estante aplicado en conjunto *es* el factor cien, y la brecha era de arquitectura, no de lenguaje. (Esos 65 a 68 M son el motor de este cuaderno; los 68,4 M en Rust de la comunidad citados arriba son otro programa, una coincidencia de rangos.) Un [experimento de 2026 en este sitio](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) separa esas dos ganancias directamente. Toma un backtracker en *Rust portable y seguro* y aplica el mismo oficio - código generado por celda, celdas empaquetadas, conjunto usado en arreglo de bytes, fusión de celdas - y luego lo mide frente al C de McGavin en una máquina, mismo tablero, ambos sin pantalla, uno tras otro. Manteniendo el hardware fijo, el motor portable **iguala al C en tableros difíciles y profundos** (≈105 a 110 M nodos de búsqueda/s cada uno) mientras que el C sigue siendo ~2,3× más rápido en los fáciles y poco ramificados (≈287 M frente a ≈122 M) - cada peldaño verificado como recorriendo el árbol idéntico. La lección corta por ambos lados: el oficio de generación de código es real y reproducible en un lenguaje moderno - bastante para igualar al C afinado a mano donde la búsqueda es difícil - *y* sigue siendo solo el factor constante que esta página describe. El mismo motor, apuntado al rompecabezas real, se estanca en los 300 altos sobre 480, justo donde la velocidad sola te deja. Dos mediciones de cuaderno más cierran la contabilidad. Primera, el factor constante pillado en el acto: una ganancia de +25 % de rendimiento en un solo hilo procedente de código generado por profundidad **no cambió la calidad de tablero alcanzada** con un presupuesto multihilo fijo de 5 minutos. Parciales idénticos en 444 aristas casadas sobre 480, y las mismas 450 a 451 aristas casadas tras una pasada de reparación, estables sobre 3 semillas con cerca de 0,5 % de dispersión (una máquina, un punto de presupuesto; convención de aristas casadas, y véase [la página de récords](/es/research/records/) para situar cualquier cifra de ese tipo frente a las de la comunidad). La búsqueda converge en la misma trayectoria; caminar más rápido solo la alcanza antes. Segunda, la advertencia multihilo que 2008 nunca tuvo que afrontar: en un chip de 8 núcleos con un sistema de memoria compartido, 4 hilos corrían a 52 M colocaciones por segundo cada uno mientras que 8 hilos caían a 22 M cada uno, un agregado casi plano, y ambos alcanzaban la misma puntuación con el mismo presupuesto. El multithreading escala de la manera obvia hasta que el sistema de memoria se satura. Los practicantes lo dijeron ellos mismos. Joshua Blackwood, catalogando sus callejones sin salida tras el 469 ([solucionadores SAT](/es/research/build/exact/sat-csp-encodings/), [GPU](/es/research/build/hardware/gpu-solving/), bloques 2×2 en caché, todos medidos y descartados), constató que solo refinar las *heurísticas* rindió alguna vez, con otro ~2× ([message 10056](https://groups.io/g/eternity2/message/10056)). Y cuando el hilo de velocidad de 2025 se apagó, Razvan escribió su epitafio: por rápido que podamos comprobar, «no haremos ni una mella» en el espacio de búsqueda de E2 ([message 11657](https://groups.io/g/eternity2/message/11657)). El oficio de esta página es real, medible y vale la pena aprenderlo; es lo que permite que una granja de aficionados recorra 10¹⁷ nodos. Pero un factor constante es un factor constante. [Por qué encoger el árbol le gana a acelerar el recorrido](/es/research/why/prune-vs-speed/) es la aritmética de esa frase; esta página es su registro de ingeniería. ## Relacionado - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [El backtracker JIT: Rust portable a la par del C afinado a mano en tableros difíciles](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profundidad, seguro y portable, especializado en tiempo de ejecución al emitir y compilar Rust propio de cada rompecabezas, llevado de 43 a 123 millones de nodos de búsqueda por segundo en un núcleo. Medido con justicia frente al C de Peter McGavin en la misma máquina: un empate en tableros difíciles y profundos como el Eternity II real, y alrededor del 44 % de su velocidad en los fáciles. Cada peldaño recorre el árbol idéntico; toda la ganancia es código, no algoritmo. --- # Los formatos de tablero y de puzzle, puestos por escrito > Todos los formatos en los que un tablero o un puzzle de Eternity II circula en este sitio y en la comunidad: la cadena de letras board_edges y la lista de pistas hints, e2pieces.txt, el CSV de puzzle, el JSON Puzzle del sitio, y la URL de visor, con las reglas exactas a nivel de byte (cómo se codifica el borde gris en cada uno) y, sobre todo, qué puede y qué no puede recuperar cada formato. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/formats/ - Actualizado: 2026-07-16 - Fuente: La capa IO canónica que define estos formatos (e2-io: el único formato de tablero, derivado en todas partes) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/common/crates/e2-io --- Un tablero es algo simple: 256 piezas, cada una con cuatro aristas coloreadas, cada una colocada en una celda con una rotación. Pero la comunidad lo ha puesto por escrito de una docena de maneras a lo largo de diecinueve años, y esas maneras nunca coinciden del todo. Una cadena de letras, una cadena de dígitos, una URL, un CSV, un JSON. Dicen lo mismo en alfabetos distintos, y en el momento en que mueves un tablero de una herramienta a otra tropiezas con la costura. Esta página es la costura, puesta por escrito: todos los formatos en los que un tablero o un puzzle circula aquí, con las reglas a nivel de byte, incluido el único detalle que muerde a todo el mundo, **cómo codifica cada formato el borde gris**, y, para cada uno, una nota clara sobre qué puede y qué no puede recuperar. Si solo te llevas una cosa: pega cualquier tablero en el [conversor de formatos](/convert/) y lee los demás directamente. > **Una entrada, una salida** > > El contrato IO es simétrico y reducido. **Entrada:** una instancia de puzzle en JSON (el esquema `Puzzle` del sitio, abajo); cada algoritmo se invoca con `--puzzle .json`. **Salida:** un documento de tablero en JSON (el `BoardDoc`, abajo), que lleva como campo una URL [eternity2.dev](/viewer/) lista para abrir. Eso es todo: puzzle-JSON de entrada, tablero-JSON de salida, ambos archivos únicos y autodescriptivos. Todo lo demás en esta página es o bien una *entrada* heredada que las herramientas siguen aceptando (CSV, `board_edges` pelado), o bien un formato *derivado* que el [conversor](/convert/) sabe darte. Ya no hay una separación `.url`-aquí, `.json`-allá, dos-archivos-a-veces. ## El vocabulario Un **color** es un entero pequeño. `0` es el borde gris exterior; los colores interiores van de `1..=22` para el puzzle oficial (22 es exactamente cuántos motivos existen). Un **cuádruple de aristas** es el conjunto de los cuatro colores de una celda en orden **URDL** (arriba, derecha, abajo, izquierda), leyendo la pieza *tal como está colocada y rotada*, no como una pieza de catálogo. Una celda está o bien llena (un cuádruple real) o bien vacía; una celda vacía se escribe como si fuera toda borde, `[0, 0, 0, 0]`. Un hecho se deriva de «tal como está colocada», y es la fuente de la mayor parte de la confusión entre formatos: un tablero lleva aristas **rotadas**, no un número de rotación. Pero no es una pérdida. Las piezas de Eternity II son **todas distintas salvo rotación** (el conjunto oficial lo es, y cualquier generador fiel lo mantiene), así que el cuádruple de aristas de una celda identifica exactamente una pieza, y la rotación es el giro que lleva el cuádruple de catálogo de esa pieza sobre el colocado. Aparear el cuádruple contra el conjunto recupera **ambos**: la identidad y la rotación. Así que las aristas son el tablero entero: lo renderizan, lo puntúan y nombran cada pieza y su orientación. El único caso en que se quedan cortas es un conjunto artificial con dos piezas que comparten un patrón de aristas salvo rotación, algo que el Eternity II real nunca tiene, y ahí un canal de número de pieza desambigua. Esa es la única razón de ser de `board_pieces`. ## board_edges: la cadena de letras La lingua franca. Cuatro letras minúsculas por celda, fila por fila, URDL, con `letter = 'a' + colour`. Así el borde es **`a`**, el color interior 1 es `b`, hasta el color 22 = `w`. Una celda vacía es **`aaaa`**, indistinguible de una pieza real toda borde, lo cual nunca ocurre en un tablero legal, de modo que la ambigüedad es inofensiva. El tablero oficial 16×16 tiene `256 × 4 = 1024` letras. ```text adca beaa … cell 0 = [0,3,2,0], cell 1 = [1,4,0,0], … ``` - **Borde:** la letra `a` (color 0). - **Recupera:** todo del tablero, el renderizado completo, la puntuación exacta y, como las piezas son distintas salvo rotación, la identidad de cada pieza y su rotación por apareo contra el conjunto. - **No puede recuperar:** qué celdas se *dieron como pistas* en vez de resolverse; eso es una propiedad del puzzle, no del tablero, y viaja en `hints`. Un matiz poco frecuente: algunas herramientas permutan qué glifo dibuja cada letra (`motifs_order`). Los órdenes `marie` y `jblackwood` son idénticos entre sí; `jef` es una permutación distinta. El conversor y el visor los retraducen al alfabeto por defecto a la entrada, así que nunca tienes que pensar en ello; pero si ves un tablero cuyos colores parecen revueltos, un `motifs_order` sin traducir es la causa. ## hints: las celdas-pista Un tablero y las pistas de las que surge tienen su lugar en el mismo sitio, direccionadas de la misma forma. `hints` lista las celdas-pista fijadas, cada una como `pos.rot`, el índice de celda en orden fila por fila y el cuarto de vuelta horario, unidas por `-`. Cinco pistas oficiales ocupan unos treinta caracteres. ```text hints=34.1-45.2-135.0-210.3-221.0 ``` La pieza de cada celda-pista ya se conoce por `board_edges`, así que una pista solo necesita su posición y su orientación, nunca un identificador de pieza. Es la misma forma `(celda, rotación)` que emplea todo formato duradero para una pieza fijada: el `x,y,rotación` del CSV, el `{pos, rot}` del JSON del sitio. - **Recupera:** qué celdas son pistas, para que el visor las marque y un solucionador parta de ellas. Ausente significa «sin pistas», un tablero resuelto o parcial normal. - **Se combina con:** `board_edges`. Juntos llevan un *puzzle-con-pistas* entero en un solo enlace, algo que un tablero desnudo nunca podría. ## board_pieces: el canal de interoperabilidad Algunas herramientas de la comunidad, en particular los enlaces e2.bucas.name, llevan un canal de piezas explícito: tres dígitos decimales por celda, el número de pieza **en base 1**, `000` para una celda vacía (el tablero oficial tiene `256 × 3 = 768` dígitos). Lo **leemos** cuando está presente, pero nunca necesitamos emitirlo, porque `board_edges` ya nombra cada pieza en un conjunto de piezas distintas. ```text 001 005 007 … piece 1 at cell 0, piece 5 at cell 1, … ``` - **Borde / vacío:** `000`. - **Recupera:** la identidad de pieza directamente (y la rotación, apareada contra el conjunto), lo mismo que las aristas recuperan por sí solas en un tablero real. - **Por sí solo:** inútil sin las aristas; es una capa superpuesta, no un tablero. Su único uso irremplazable es un conjunto artificial con piezas que se repiten salvo rotación, donde las aristas solas son ambiguas. ## e2pieces.txt: las piezas tal como están colocadas El formato de intercambio más antiguo, puesto por escrito por la comunidad en 2007 (ver el [censo de la caja de herramientas](/es/research/build/tooling/)). Una línea por celda **llena**, en orden de lectura, cuatro enteros de arista separados por espacios en orden URDL. ```text 0 3 2 0 1 4 0 0 … ``` - **Borde:** el entero `0`. - **Recupera:** renderizado y puntuación, igual que `board_edges`; son los mismos datos en decimal. Lista las piezas **tal como están colocadas y rotadas**, así que *no* es un catálogo canónico a rotación 0, y un tablero solo no puede devolverlo a ese estado. ## Puzzle CSV: lo que leen los motores autónomos El formato que consumen el C de McGavin y el C# de Blackwood, y la forma en que se escriben los archivos `variant_NN.csv` del banco de pruebas. Una cabecera de tamaño, luego una fila por pieza: `top,right,bottom,left` seguido opcionalmente de `x,y,rotation` para una pista fijada. ```text 16 1111111111111111,0000000000000001,0000000000000010,1111111111111111,0,0,0 … ``` Cada color es una **palabra binaria de 16 bits rellenada con ceros**. Y aquí está el detalle que hace tropezar a todo el mundo, y la razón de ser de esta página: > **En el CSV, el borde es todo unos** > > En el CSV de puzzle, el borde gris es **`1111111111111111`**, todo unos, la palabra de 16 bits `65535`, y *no* todo ceros. Los colores interiores son su entero pequeño en binario, así que el color 1 es `0000000000000001`. Un lector remapea la palabra `65535` de vuelta al id interior `0`. Esto es lo contrario de todos los demás formatos de esta página, donde el borde es el valor *bajo* (`a`, `0`, `000`). Es una elección de centinela heredada, conservada por compatibilidad a nivel de byte con los motores que lo leen. - **Borde:** la palabra todo unos `1111111111111111` (65535). - **Recupera:** el puzzle completo, piezas y pistas. Es un formato de *puzzle* (el conjunto de piezas), no solo un tablero colocado. ## JSON del sitio (`Puzzle`): la entrada canónica El único formato con el que se alimenta cada algoritmo: `--puzzle variant_NN.json`. El motor del sitio, los estudios DFS/repair y el banco de pruebas monocore leen todos el *mismo* esquema (compatible a nivel de byte con el tipo `Puzzle` del web), de modo que cada experimento corre sobre las mismas instancias. Lleva el conjunto de piezas a rotación 0 y las pistas fijadas de forma explícita, que es lo que lo convierte en una entrada desde la que un solucionador puede arrancar, en lugar de un tablero que ya ha rellenado. ```json { "name": "e2_official_variant00_pin3corners", "width": 16, "height": 16, "numColors": 22, "pieces": [[0,1,2,0], [0,0,3,1], …], "hints": [{ "pos": 34, "piece": 118, "rot": 2 }, …] } ``` - **Borde:** el color `0`, como entero en los cuádruples de `pieces`. - **Recupera:** todo lo que concierne a la *instancia*: las piezas canónicas a rotación 0, el número de colores, y cada pista fijada con su rotación exacta. Es el único formato que lleva la rotación y el orden de catálogo por construcción, porque describe el puzzle, no una colocación sobre él. ## El JSON de tablero canónico (`BoardDoc`): la única salida Lo que cada solucionador de este sitio escribe ahora: un `.json` autodescriptivo por tablero. Pliega el tablero, su puntuación, su hash de contenido, ambas cadenas de letras y la URL del visor en un único documento, de modo que una herramienta aguas abajo no necesita nada más. ```json { "name": "…", "size": 16, "score": 466, "breaks": 14, "board": [3, 16, 24, …], "board_hash": 2059303548241384230, "board_edges": "abda…", "board_pieces": "001005…", "url": "https://eternity2.dev/viewer?puzzle=…&puzzle_size=16&board_edges=…" } ``` `board` es el vector de colocación **`piece*4 + rot`** en orden fila por fila (`-1` para una celda vacía), la misma codificación por la que el `Puzzle` del sitio hace su ida y vuelta. `breaks` vale `max_score − score` (las aristas interiores no apareadas; en un tablero lleno, el número de roturas). `board_hash` es un hash FNV-1a de la rejilla de colocación, el cerrojo bit a bit que responde a «¿produjeron estas dos ejecuciones el mismo tablero?». - **Borde:** como en `board_edges` (`a`) y `board_pieces` (`000`); el vector `board` usa `-1` para el vacío. - **Recupera:** todo lo que un tablero puede llevar: renderizado, puntuación, identidad y rotación (vía `board_pieces` y `board`), además de la procedencia (`name`, `board_hash`) y una vista en un clic (`url`). ## Las URL de visor Dos URL, mismo tablero, dos anfitriones. **eternity2.dev, el enlace canónico.** El formato que emite cada algoritmo aquí. El tablero viaja entero en `board_edges`; cualquier pista fijada viaja en `hints`. Tableros cuadrados, así que un único `puzzle_size` (el visor también lee los `board_w`/`board_h` de bucas), y cada valor permanece en el rango URL-seguro, de modo que el enlace no necesita ningún encodeo por porcentaje: ```text https://eternity2.dev/viewer?puzzle=NAME&puzzle_size=16&board_edges=…&hints=135.0-210.1 ``` `hints` se omite en un tablero sin pistas. Como las aristas llevan la identidad de las piezas, aquí no hay canal de piezas: el tablero y sus pistas caben en estos dos campos. **e2.bucas.name, el visor comunitario.** El original de Jef Bucas, el visor cuyo formato de URL *se convirtió* en todo este vocabulario (la [caja de herramientas](/es/research/build/tooling/) cuenta esa historia). Plenamente soportado como entrada, y disponible como salida derivada usando su par `board_w`/`board_h` y un fragmento `#`. Lo emitimos solo con aristas (bucas recupera las piezas a partir de las aristas para un conjunto distinto); los enlaces bucas de otras herramientas suelen llevar además un canal `board_pieces`, que leemos en la entrada: ```text https://e2.bucas.name/#puzzle=NAME&board_w=16&board_h=16&board_edges=… ``` El [visor](/viewer/) lee cualquiera de los dos de forma transparente; el [conversor](/convert/) te da ambos. La forma eternity2.dev es canónica aquí solo porque abre el visor de *este* sitio, con su puntuación, su capa de pistas y su verificación del conjunto de piezas; la forma bucas sigue siendo el original compartido de la comunidad, acreditado en consecuencia. ## Moverse entre ellos
| Formato | Borde | ¿Lleva rotación? | ¿Lleva identidad? | Es un… | | --- | --- | --- | --- | --- | | `board_edges` | `a` | sí (por apareo) | sí (por apareo) | tablero colocado | | `hints` | n/a | sí (`pos.rot`) | vía aristas | juego de pistas | | `board_pieces` | `000` | con las aristas | sí | capa superpuesta | | `e2pieces.txt` | `0` | sí (por apareo) | sí (por apareo) | tablero colocado | | Puzzle CSV | `1111…1` (todo unos) | solo pistas | sí (piezas) | puzzle | | JSON del sitio | `0` | sí | sí | puzzle | | JSON `BoardDoc` | `a` / `000` / `-1` | sí | sí | tablero colocado | | URL eternity2.dev | `a` | sí (por apareo) | sí (por apareo) | enlace a un tablero | | URL bucas | `a` | con las piezas | con las piezas | enlace a un tablero |
Cada conversión de esa tabla está a un pegado de distancia en el [conversor de formatos](/convert/): suelta una URL, una cadena `board_edges` pelada o un bloque de parámetros, y lee de vuelta la URL eternity2.dev, el JSON canónico, el CSV, `board_pieces`, `e2pieces.txt` y la URL bucas, con una vista previa en vivo y la puntuación, para que veas que el archivo es correcto antes de fiarte de él. ## Relacionado - [La caja de herramientas de la comunidad, 2007-2026](https://eternity2.dev/es/research/build/tooling/) — Diecinueve años de software comunitario para Eternity II (interfaces de colocación manual, editores, solucionadores públicos, generadores y visualizadores), más la capa más discreta que los hizo interoperar: e2pieces.txt, las sumas de comprobación CRC-16 y el formato tablero-en-una-URL que se convirtió en la lingua franca. Un censo de referencia, con cada herramienta rastreada hasta el mensaje que la anunció. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - [El conjunto de datos](https://eternity2.dev/es/research/build/dataset/) — Un conjunto de datos público bajo licencia CC0 para Eternity II, en dos partes: catorce instancias de referencia para resolver, y un corpus de 7658 tableros fuertes distintos de los que aprender. Cada puntuación se recalcula a partir del propio tablero, y se verifica que el corpus sea realmente variado, en lugar de mil copias de un mismo tablero. --- # GPU y hardware > Lanzar silicio contra el muro: portes a GPU, pipelines FPGA, barridos distribuidos y la eterna propuesta cuántica. Este es el balance de lo que cada uno aportó realmente, y por qué el muro que encuentran es la memoria y la estructura, no la aritmética. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/hardware/ - Actualizado: 2026-07-13 --- Lanzar silicio contra el muro: portes a GPU, pipelines FPGA, barridos distribuidos y la eterna propuesta cuántica. Este es el balance de lo que cada uno aportó realmente, y por qué el muro que encuentran es la memoria y la estructura, no la aritmética. Las páginas siguientes avanzan técnica por técnica: qué es cada una en una línea, qué alcanzó realmente en el tablero 16×16 real, dónde se detiene, y los laboratorios y mediciones que la respaldan. Para abarcar todo el territorio de una sola vez, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Páginas de esta sección - [Resolver en GPU: el muro es la memoria, no el cálculo](https://eternity2.dev/es/research/build/hardware/gpu-solving/) — Eternity II parece la carga de trabajo perfecta para GPU: millones de subárboles independientes, masivamente paralelos. Dieciocho años de intentos de la comunidad midieron una realidad muy distinta: ramificación divergente, estado por hilo que desborda la memoria rápida y un bucle de colocación que ya estaba limitado por la memoria en las CPU. Lo que las GPU realmente entregaron, y la única carga de trabajo donde brillan de verdad. - [Resolución en FPGA: cartografiada, pero nunca recorrida](https://eternity2.dev/es/research/build/hardware/fpga-solving/) — Si el bucle de colocación está limitado por la latencia de memoria, un FPGA parece la respuesta exacta: alojar las tablas de consulta en la block RAM embarcada, a un ciclo de distancia, y encauzar en pipeline decenas de pequeños backtrackers en un mismo chip. La comunidad cartografió esta ruta en detalle. Michael Field diseñó el solucionador, proyectó cinco mil millones de colocaciones por segundo y por chip, y ejecutó un prototipo sobre silicio real. Luego la ruta nunca se recorrió hasta el final. El expediente completo, y por qué. - [Enfoques cuánticos: dos aceleraciones a su precio real](https://eternity2.dev/es/research/build/hardware/quantum/) — El ordenador cuántico es el deus ex machina más antiguo de la lista, invocado en el primer mes del puzzle y cada pocos años desde entonces. Hay exactamente dos historias reales que contar: la aceleración cuadrática de Grover y el recocido sobre una codificación QUBO. Esta página cuenta ambas como es debido, hace la aritmética frente a los números reales de Eternity II, y reporta el registro completo de la comunidad: diecinueve años de comentarios al margen, un intento de embedding sin terminar, cero ejecuciones. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # Resolución en FPGA: cartografiada, pero nunca recorrida > Si el bucle de colocación está limitado por la latencia de memoria, un FPGA parece la respuesta exacta: alojar las tablas de consulta en la block RAM embarcada, a un ciclo de distancia, y encauzar en pipeline decenas de pequeños backtrackers en un mismo chip. La comunidad cartografió esta ruta en detalle. Michael Field diseñó el solucionador, proyectó cinco mil millones de colocaciones por segundo y por chip, y ejecutó un prototipo sobre silicio real. Luego la ruta nunca se recorrió hasta el final. El expediente completo, y por qué. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/hardware/fpga-solving/ - Actualizado: 2026-07-02 - Temas: speed, hardware - Fuente: La primera propuesta FPGA: la cobertura exacta en hardware (groups.io message 2623, 2007) — https://groups.io/g/eternity2/message/2623 - Fuente: El plan Altera de Bob Cousins para Eternity I y el cuello de botella de las comunicaciones (groups.io message 3259, 2007) — https://groups.io/g/eternity2/message/3259 - Fuente: El VHDL de intercambio de aristas de Mike Pringle: el primer HDL realmente escrito (groups.io message 5493, 2008) — https://groups.io/g/eternity2/message/5493 - Fuente: 'E2 in hardware...', el intercambio sobre viabilidad de 2010 (groups.io message 8063) — https://groups.io/g/eternity2/message/8063 - Fuente: El análisis de memoria de Field: 'these problems also carry over to FPGAs' (groups.io message 9003, 2011) — https://groups.io/g/eternity2/message/9003 - Fuente: El diseño de 2014: restricción uniforme al 15×15, ~4 KB de tablas, 5 G colocaciones/s/chip proyectados (groups.io message 9226) — https://groups.io/g/eternity2/message/9226 - Fuente: Las tablas de consulta, bit a bit (groups.io message 9228, 2014) — https://groups.io/g/eternity2/message/9228 - Fuente: El rediseño hiper-encauzado tras el fallo de ancho de banda de memoria (groups.io message 9232, 2014) — https://groups.io/g/eternity2/message/9232 - Fuente: Primer ensayo sobre silicio real: un thread, un LED (groups.io message 9236, 2014) — https://groups.io/g/eternity2/message/9236 - Fuente: El fallo de simetría corregido; el hardware recorre el árbol completo del benchmark (groups.io message 9237, 2014) — https://groups.io/g/eternity2/message/9237 - Fuente: La retrospectiva del propio Field: 'a fun deadend' (groups.io message 10649, 2022) — https://groups.io/g/eternity2/message/10649 - Fuente: El único intento FPGA académico, ReConFig 2011 (ieeexplore 6044826; discutido en el message 10651) — https://ieeexplore.ieee.org/document/6044826 --- La [página GPU](/es/research/build/hardware/gpu-solving/) termina en un muro: un backtracker de Eternity II no está limitado por el cómputo, es una cadena de pequeñas lecturas de memoria dependientes, y el análisis de Mike Field en 2011 mostraba que ambas ramas GPU (cooperar o trabajar en solitario) terminan en el bus de memoria externo ([message 9003](https://groups.io/g/eternity2/message/9003)). Un FPGA es la única pieza de silicio que parece responder precisamente a esa objeción. No hay jerarquía de caché que fallar: las tablas de consulta viven en la block RAM embarcada, a un ciclo de reloj, en decenas de pequeñas memorias independientes que pueden leerse todas *en el mismo ciclo*. Los desplazamientos de bits y las máscaras que cuestan instrucciones en una CPU salen gratis como cableado. Y en lugar de un único núcleo grande y rápido, se depositan muchos pequeños y lentos, cada uno un backtracker completo con sus propias tablas. La comunidad vio esta ruta temprano y la cartografió a fondo. Un miembro diseñó el solucionador, publicó la ruta de datos, proyectó cinco mil millones de colocaciones por segundo y por chip, y ejecutó un prototipo sobre hardware real. Luego, y esta página existe para decirlo con claridad, nadie recorrió nunca la ruta hasta el final. Ninguna ejecución FPGA sobre Eternity II completo se reportó jamás, en diecinueve años de archivo. Lo interesante es que las razones también constan en el expediente, en las propias palabras del diseñador. ## Por qué los FPGA responden al muro exacto con que chocan los GPU Recordemos la bifurcación surgida del análisis de Field (contada por completo en la [página GPU](/es/research/build/hardware/gpu-solving/)): los buscadores paralelos o bien comparten información, lo que exige un ancho de banda de sincronización del que el tejido lógico no dispone, o bien trabajan de forma independiente, lo que exige un estado por trabajador que rebasa los ~8 KB de memoria rápida que recibe una vía de GPU, volcándolo todo a un único bus externo compartido. Su mensaje de 2011 aplicaba el mismo argumento a los FPGA acto seguido: "either need to store too much information, pass too much information around or it choke[s] on memory bandwidth" ([message 9003](https://groups.io/g/eternity2/message/9003)). Pero la versión FPGA del argumento tiene una escapatoria que la versión GPU no tiene. En una GPU, el presupuesto de memoria rápida por trabajador lo fija el fabricante. En un FPGA, *tú* dibujas el mapa de memoria: si consigues reducir todo el universo de un backtracker (tablas de candidatos, estado del tablero, conjunto de piezas usadas) lo bastante pequeño, puedes instanciarlo enteramente en block RAM, replicarlo cincuenta veces, y ningún trabajador tocará jamás la memoria externa. El muro de ancho de banda no se escala; se elimina. Toda la historia FPGA de este archivo es la persecución de ese "si": hacer el estado del solucionador lo bastante pequeño y *uniforme* como para que se vuelva hardware. A un miembro le costó seis años de reflexión de fondo llegar ahí, y la respuesta exigió cambiar el problema. ## Los bocetos: 2007–2012 Los FPGA entran en el archivo a las pocas semanas del propio puzzle. En agosto de 2007, psykowally, renunciando a un enésimo brute-forcer por software, fantaseaba con hacerlo "in FPGA or something" mientras suponía que eso solo "take off a few factors" ([message 2022](https://groups.io/g/eternity2/message/2022)), una conjetura que los siete años siguientes no dejarían de confirmar. En septiembre, Dieter Gehrke preguntaba si alguien había considerado la cobertura exacta en hardware, señalando una implementación FPGA académica ([message 2623](https://groups.io/g/eternity2/message/2623)). Nadie lo había hecho. El hilo de la encuesta de noviembre de 2007 ("purpose built electronics" recabó exactamente un voto, como señaló su único votante) produjo la primera verdadera conversación de ingeniería. Bob Cousins ya había comprado un kit de evaluación Altera *para Eternity I*, planificado un acelerador FPGA para un backtracker por software, y lo había abandonado: incluso a 10 millones de posiciones por segundo en hardware, el cuello de botella era la comunicación con el PC ([message 3259](https://groups.io/g/eternity2/message/3259)). Glen Dudley puso el dedo en por qué el backtracking desperdicia silicio: coloca 200 piezas, retrocede cinco, y el equivalente a 195 celdas de hardware dedicado queda inactivo ese ciclo ([message 3260](https://groups.io/g/eternity2/message/3260)). Otro miembro anunció que "just started" un diseño VHDL y buscaba colaboradores ([message 3266](https://groups.io/g/eternity2/message/3266)), y no se volvió a saber de él sobre el tema. Un tercero alineó las cifras que despejan la euforia: cambiar el reloj de un núcleo de PC por el paralelismo de un FPGA cuesta de 10 a 1000× de entrada, y saldrías "better off... just using multiple computers" ([message 3268](https://groups.io/g/eternity2/message/3268)). El SAT-en-hardware recibió el mismo triaje en 2008: millones de términos de cláusula no caben en la lógica del mayor FPGA ([message 4723](https://groups.io/g/eternity2/message/4723)). Una sola persona escribió realmente HDL. En mayo de 2008, Mike Pringle describió un buscador local por intercambio de aristas cuya función de aptitud (contar las piezas válidas y únicas que implica la asignación de aristas actual) estaba diseñada para *intercambiar y puntuar en un solo reloj*. "I have the VHDL done for this but I ran out of FPGA resources on the evaluation board I have for anything over 8×8" ([message 5493](https://groups.io/g/eternity2/message/5493)). Primer HDL del expediente, primer muro de recursos del expediente, mismo mensaje. Luego llegó el protagonista. En octubre de 2010, Michael Field, el ingeniero cuyo presupuesto de 26 ciclos por colocación ancla la [página de ingeniería de solucionadores](/es/research/build/faster/solver-engineering/), abrió un hilo titulado "E2 in hardware...", habiendo empezado a juguetear con placas FPGA Digilent. Su primera estimación sobria: un backtracker por hardware correría "roughly as fast as a PC's cpu core"; el verdadero premio sería la verificación de restricciones masivamente paralela, la consistencia de arco evaluada en cada paso ([message 8063](https://groups.io/g/eternity2/message/8063)). La respuesta coste/beneficio de Martin (capiman) se sostuvo: un backtracker por hardware solo iguala a uno de los cuatro núcleos que ya tienes en tu PC, así que solo los usos de lógica paralela son interesantes, y los ~2.816 bits de estado de tablero que requiere un tejido de consistencia de arco completo podrían no caber en el mayor FPGA del mercado ([message 8064](https://groups.io/g/eternity2/message/8064)). Field bosquejó un tejido de 256 celdas con 18 bits de patrón por lado y un bus de solicitud de piezas, y remató con la frase que podría servir de epígrafe a toda esta página: "no matter what it won't be a silver bullet" ([message 8065](https://groups.io/g/eternity2/message/8065)). Para 2012 había concluido que los FPGA eran "next to useless for implementing an E2 back-tracker": el bucle de realimentación entre tablero y bolsa es demasiado estrecho, de modo que "the clock speed of a CPU wins", y se preguntaba en cambio por usar el tejido para generar conjuntos de rotaciones que una CPU verificara ([message 9069](https://groups.io/g/eternity2/message/9069)). ## El diseño de Field en 2014: comprar uniformidad, pagarla en generalidad El 7 de febrero de 2014, Field publicó "Solving Eternity II in FPGA hardware": el problema había "been sitting in my subconscious, slowly chewing over it for about 6 years. Last night I had a bit of an eureka moment" ([message 9226](https://groups.io/g/eternity2/message/9226)). Su antiguo solucionador por software de clase récord no podía convertirse en hardware por dos razones que nombró con precisión: necesitaba una tabla de consulta de ~6 MB (17x17x17x17x15 entradas de 32 bits) con acceso verdaderamente aleatorio, y el bucle colocar-verificar-retroceder casi no tiene paralelismo de grano fino. El eureka fue *relajar el problema* hasta que la ruta de datos se volviera uniforme: - **Hacer backtracking solo sobre el 15×15 superior izquierdo** (nunca la columna derecha ni la fila inferior), y no usar piezas pista. - Rellenar de arriba-izquierda a abajo-derecha, de modo que la consulta de candidatos de **cada** celda se indexe de la misma manera: por los colores de sus aristas superior e izquierda. Sin casos particulares, sin tablas por celda, un circuito idéntico, en todas partes. Esa uniformidad hizo colapsar el problema de memoria. Toda la estructura de consulta cabía en unos **4.096 bytes de ROM** más ~1 KB de estado por solucionador ([message 9226](https://groups.io/g/eternity2/message/9226)): una tabla de tiles de 1024 entradas, de 18 bits de ancho (número de tile, patrón derecho, patrón inferior, ordenados por patrones superior/izquierdo) más un índice de 324 entradas que da el inicio y el recuento de cada par de colores ([message 9228](https://groups.io/g/eternity2/message/9228)). En hardware, señalaba, los desplazamientos y las máscaras son cableado gratuito, las dos tablas residen en BRAM distintas, así que ambas consultas ocurren en paralelo, y la lectura-escritura en el mismo ciclo de la block RAM ofrece un test-and-set atómico sobre el bit de pieza usada: todo el tráfico de memoria del bucle interno, a un ciclo de distancia. Compara esos 4 KB con el ">8 KB por thread" fatal de la [página GPU](/es/research/build/hardware/gpu-solving/): así es como se ve eliminar el muro de ancho de banda. La proyección: alrededor de **50 instancias de solucionador en un Zynq 7020 a ~200 MHz**, cada colocación/retirada promediando ~2 ciclos, "up to 5 billion tile placements per second per chip" ([message 9226](https://groups.io/g/eternity2/message/9226)). Para escala, los mejores núcleos de CPU de la época hacían de 70 a 115 millones. ## Lo que realmente se ejecutó El mes siguiente es la puesta en marcha de hardware mejor documentada del archivo, y cada paso merece registrarse porque cada uno cedió un poco de la proyección. - **20 de febrero.** La simulación coloca sus primeros tiles; la síntesis anuncia >109 MHz en un Spartan-6 LX9 usando ~10% de su lógica; cerca de 50M colocaciones/s por instancia al principio de un puzzle, degradándose a medida que más piezas están en uso y se gastan ciclos en saltárselas ([message 9231](https://groups.io/g/eternity2/message/9231)). - **25 de febrero.** La primera baja en el expediente: el diseño "didn't pan out, I had memory bandwidth issues during a 'tile lift'" (retirar una pieza necesita dos escrituras a la vez, y un puerto de BRAM es un puerto de BRAM). El arreglo es elegante: un **hiper-pipeline** de cuatro etapas, cuatro backtrackers independientes que comparten en el tiempo una única ruta de datos, de modo que el acceso a memoria de cada etapa ocurre en su propio ciclo. Timing: 132.363 MHz; coste por núcleo de 96 registros y 334 LUT; una estimación de 10 núcleos en el pequeño LX9 o 50 en un LX45, "around 5,000M 'actions' per second" ([message 9232](https://groups.io/g/eternity2/message/9232)). - **1 de marzo: silicio real.** Arnaud Carré había suministrado un benchmark 16×16 de 29 colores que su solucionador CPU afinado recorre por completo en 34,75 s a 114,5M recursiones/s sobre un núcleo i7-3770K ([message 9234](https://groups.io/g/eternity2/message/9234)). Field lo cargó en hardware real a 200 MHz, con la salida limitada, por ahora, a un único LED que se enciende mientras cualquier thread corre. El LED se apagó tras 1 min 21 s; su cálculo de servilleta situaba cada thread en aproximadamente un tercio de un thread i7, y un build de cuatro núcleos, dieciséis threads, en su placa alimentada por USB en ~800M comprobaciones/s. Publicó el diseño en su sitio ([message 9236](https://groups.io/g/eternity2/message/9236)). Dos días después encontró el fallo en esa comparación y revisó la cifra a la baja, a 1/8; el número corregido está más abajo. - **3 de marzo: el fallo de simetría.** Comparar recuentos con Arnaud reveló que el tile fijo superior izquierdo de Field hacía un cuarto del trabajo del benchmark. Corregido, un thread de hardware recorre el árbol entero en 199 segundos, "about an 1/8th of the speed of Arnaud's i7 solver running on one core", pero 24 threads caben en una placa de menos de 100 $, y un pipeline de 8 etapas debería permitir 48. El hardware encontró e imprimió las cuatro soluciones, marcas de tiempo y tableros en el mensaje ([message 9237](https://groups.io/g/eternity2/message/9237)). Y ahí es donde el expediente se detiene. El pipeline de 8 etapas, los 48 threads, el portado a Zynq, la ejecución del puzzle completo: ninguno de ellos aparece jamás en el archivo. mulisak preguntó cómo empezar y Field respondió con enlaces a cadenas de herramientas y su propio libro gratuito sobre FPGA ([message 9245](https://groups.io/g/eternity2/message/9245)); el 1 de abril mulisak propuso "e2coin", una criptomoneda cuya prueba de trabajo sería el apareamiento de aristas, argumentando que E2 es "CPU friendly - GPU unfriendly - but... FPGA friendly" ([message 9260](https://groups.io/g/eternity2/message/9260)); el hilo derivó hacia benchmarks de CPU, y el hardware enmudeció. ## Por qué nada llegó a puerto **Nada llegó a puerto, y el diseñador dijo por qué.** En enero de 2022, Jef Bucas preguntó si alguien tenía acceso a un artículo de IEEE sobre FPGA y Eternity II, y la respuesta de Field es la retrospectiva sobre la que se construye esta página: "The E2 problem is correctly sized to make an FPGA solver hard :)". Por la realimentación estrecha entre tablero y bolsa, "couldn't get faster than a single core on a low-end PC (~75M tiles per sec)", y la memoria de las tablas de consulta "is high enough that you quickly exhaust on-chip RAM if you are trying multiple instances. It was a fun deadend for me" ([message 10649](https://groups.io/g/eternity2/message/10649)). Léelo contra la proyección: la cifra de 5 G/s suponía cincuenta instancias, y la propia BRAM que hacía rápida una instancia es la que topaba cuántas instancias caben. Los propios informes de síntesis del prototipo lo habían anticipado: un solo núcleo del tamaño del benchmark ya reclamaba 23 de los 64 bloques de RAM del LX9 ([message 9236](https://groups.io/g/eternity2/message/9236)). **La economía tampoco cuadró jamás.** El único miembro que probó ambos mundos, valy, recordaba la placa de Field con cariño ("he was crunching 15 Mn/s on an FPGA platform. Perf/W maybe unbeatable", [message 9588](https://groups.io/g/eternity2/message/9588)), y luego describía el coste: el trabajo en FPGA es "soooo slow to compile... code... debug... You need to be an expert or have plenty of spare time and motivation. I've tried once, that was my hardest programming experience" ([message 9590](https://groups.io/g/eternity2/message/9590)). Meses de puesta en marcha de HDL compraron lo que el [registro de ingeniería de solucionadores](/es/research/build/faster/solver-engineering/) obtiene de un flag de compilador. Esa asimetría, no ningún muro técnico aislado, es por qué cada hilo FPGA del archivo termina en silencio: el "FPGA custom engine in 2022" prometido por un miembro en 2021 ([message 10581](https://groups.io/g/eternity2/message/10581)) es el último de la estirpe, y él tampoco resurgió jamás. **El único intento llevado a término fue académico, y rindió menos que el software.** El artículo que pidió Bucas, "Exploitation of Parallel Search Space Evaluation with FPGAs in Combinatorial Problems: The Eternity II Case" (ReConFig 2011, [ieeexplore 6044826](https://ieeexplore.ieee.org/document/6044826)), es el único sistema FPGA de Eternity II terminado y publicado en todo el expediente. Su conclusión, tal como la leyó la lista: "After three months, the best available solution contained 187/196 center pieces" ([message 10651](https://groups.io/g/eternity2/message/10651)), muy por debajo de lo que producían las heurísticas de software contemporáneas. El veredicto de Bucas fue el de la comunidad: "a bit disappointed by the results in term of speed... I would expect more from a 'dedicated' HW" ([message 10655](https://groups.io/g/eternity2/message/10655)). ## El expediente, de un vistazo | Quién | Cuándo | Qué pasó | Msg | | --- | --- | --- | --- | | psykowally | 2007 | Primera mención de un FPGA; conjetura "a few factors" de aceleración | [2022](https://groups.io/g/eternity2/message/2022) | | Dieter Gehrke | 2007 | Propone cobertura exacta en hardware FPGA; sin interesados | [2623](https://groups.io/g/eternity2/message/2623) | | Bob Cousins | 2007 | Plan de acelerador Altera de la era E1, abandonado por el cuello de las comms con el PC; idea híbrida | [3259](https://groups.io/g/eternity2/message/3259) | | jp_yahoo | 2007 | Inicia un diseño VHDL, busca colaboradores; nunca se vuelve a saber | [3266](https://groups.io/g/eternity2/message/3266) | | Mike Pringle | 2008 | Búsqueda local por intercambio de aristas, VHDL escrito; sin recursos más allá del 8x8 | [5493](https://groups.io/g/eternity2/message/5493) | | Field & Martin | 2010 | Intercambio sobre viabilidad: un backtracker de hardware solo iguala a un núcleo de CPU | [8063](https://groups.io/g/eternity2/message/8063), [8064](https://groups.io/g/eternity2/message/8064) | | Mike Field | 2011–12 | El análisis de memoria "carries over to FPGAs"; veredicto "next to useless" para el backtracking | [9003](https://groups.io/g/eternity2/message/9003), [9069](https://groups.io/g/eternity2/message/9069) | | Mike Field | 2014 | El diseño: 15x15 uniforme, tablas de 4 KB, 50 instancias @ 200 MHz, 5 G/s/chip proyectados | [9226](https://groups.io/g/eternity2/message/9226), [9228](https://groups.io/g/eternity2/message/9228) | | Mike Field | 2014 | Construido y medido: prototipo hiper-encauzado recorre un benchmark 16×16 sobre silicio; 1 thread ≈ 1/8 de núcleo i7 (su propia corrección de un 1/3 inicial) | [9237](https://groups.io/g/eternity2/message/9237) | | mulisak | 2014 | e2coin: E2 como prueba de trabajo FPGA-friendly; publicado el 1 de abril, sin eco | [9260](https://groups.io/g/eternity2/message/9260) | | equipo académico | 2011 | Único sistema FPGA terminado; 3 meses → 187/196 piezas del centro | [10651](https://groups.io/g/eternity2/message/10651) | | Brahim Hamadicharef | 2021 | Anuncia un "FPGA custom engine in 2022"; nunca se vuelve a mencionar | [10581](https://groups.io/g/eternity2/message/10581) | | Mike Field | 2022 | La retrospectiva: "a fun deadend", el agotamiento de la BRAM topa las instancias | [10649](https://groups.io/g/eternity2/message/10649) | ## La aritmética que sigue mordiendo Concédele a la proyección todo lo que pidió. Digamos que el chip de 50 núcleos, 200 MHz, se hubiera entregado a sus plenas **5×10⁹ colocaciones/s**, y digamos que llenaras un rack con dos mil de ellos: **10¹³ colocaciones por segundo**, más que la flota combinada de toda la comunidad haya alineado jamás. Un año son ~3×10⁷ segundos, así que el rack recorre ~3×10²⁰ nodos al año. El árbol de búsqueda del puzzle completo es, en su meseta, del orden de **10⁴⁵ tableros parciales de ancho** ([teoría de la complejidad](/es/research/why/complex-theory/) hace esta medición como es debido). La división: unos **10²⁴ rack-años**. Cada orden de magnitud que gana el hardware desplaza ese exponente en uno, y faltan veinticuatro. Es la misma frase con que termina la página GPU, porque es la misma matemática: el hardware es un divisor constante, y el muro de E2 es exponencial. [Por qué un ordenador más rápido no ayuda](/es/research/why/prune-vs-speed/) hace el argumento general; el capítulo FPGA es simplemente su estudio de caso más nítido, porque aquí incluso los números *proyectados* (por no hablar de los medidos) conceden el punto antes de que la división empiece. ## Qué apuntaría hoy un intento sobre FPGA El mapa sigue sobre la mesa, y partes de él han envejecido bien. La propia advertencia de Field en 2022 corta ahora en sentido contrario: "cheaper FPGAs are now much larger" ([message 10649](https://groups.io/g/eternity2/message/10649)): una pieza moderna de gama media lleva megabytes de block RAM donde su Spartan-6 tenía kilobytes, así que el techo de número de instancias que mató la proyección de 2014 se ha levantado de verdad. Pero la lista de objetivos que resiste el escrutinio es la misma a la que llega la [página GPU](/es/research/build/hardware/gpu-solving/): - **No la búsqueda.** Un intento de récord necesita heurísticas, reinicios, y la libertad de cambiar el orden de relleno a mitad de campaña, todo lo que Field cedió para hacer uniforme la ruta de datos. La relajación al 15×15 que hizo el hardware posible es exactamente lo que un cazador de récords no puede aceptar. - **Enumeración y verificación.** Los barridos exhaustivos de forma fija (re-verificación de censo, conteo de filas y bloques, sub-puzzles acotados) son uniformes por construcción: la propiedad que Field tuvo que comprar, estas cargas de trabajo la obtienen gratis. Su prototipo ya demostró el acto esencial, recorrer un árbol de benchmark 16×16 completo sobre silicio y encontrar exactamente sus cuatro soluciones ([message 9237](https://groups.io/g/eternity2/message/9237)). - **Colocaciones por vatio.** El nicho que nadie disputó: el "perf/W maybe unbeatable" de valy ([message 9588](https://groups.io/g/eternity2/message/9588)) sigue en pie para cualquiera que ejecute un censo de fondo de años donde el presupuesto es la factura de electricidad, no la tasa de colocaciones. La ruta, dicho de otro modo, lleva a alguna parte, solo que no a 480. Fue cartografiada por alguien que conocía tanto el software como el silicio mejor que nadie en la lista, recorrida una salida hacia abajo, y cuidadosamente señalizada en el regreso: un callejón sin salida divertido, correctamente dimensionado para serlo. ## Relacionado - [Resolver en GPU: el muro es la memoria, no el cálculo](https://eternity2.dev/es/research/build/hardware/gpu-solving/) — Eternity II parece la carga de trabajo perfecta para GPU: millones de subárboles independientes, masivamente paralelos. Dieciocho años de intentos de la comunidad midieron una realidad muy distinta: ramificación divergente, estado por hilo que desborda la memoria rápida y un bucle de colocación que ya estaba limitado por la memoria en las CPU. Lo que las GPU realmente entregaron, y la única carga de trabajo donde brillan de verdad. - [Ingeniería de solucionadores: el oficio bajo el algoritmo](https://eternity2.dev/es/research/build/faster/solver-engineering/) — Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. --- # Resolver en GPU: el muro es la memoria, no el cálculo > Eternity II parece la carga de trabajo perfecta para GPU: millones de subárboles independientes, masivamente paralelos. Dieciocho años de intentos de la comunidad midieron una realidad muy distinta: ramificación divergente, estado por hilo que desborda la memoria rápida y un bucle de colocación que ya estaba limitado por la memoria en las CPU. Lo que las GPU realmente entregaron, y la única carga de trabajo donde brillan de verdad. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/hardware/gpu-solving/ - Actualizado: 2026-07-02 - Temas: speed, hardware - Fuente: La primera propuesta de solucionador en GPU: «quizás 4 o 5 veces» (groups.io mensaje 351, 2007) — https://groups.io/g/eternity2/message/351 - Fuente: La pregunta sobre CUDA y un solucionador CSP en GLSL en marcha (groups.io mensaje 5407, 2008) — https://groups.io/g/eternity2/message/5407 - Fuente: «¿Alguien usa OpenCL para E2?», la primera discusión sobre OpenCL (groups.io mensaje 7653, 2010) — https://groups.io/g/eternity2/message/7653 - Fuente: El análisis de ancho de banda de memoria de Mike Field, el argumento negativo definitivo (groups.io mensaje 9003, 2011) — https://groups.io/g/eternity2/message/9003 - Fuente: El solucionador OpenCL funcional de David Barr (groups.io mensaje 9360, 2015) — https://groups.io/g/eternity2/message/9360 - Fuente: El solucionador de Barr publicado como código abierto (github.com/david3x3x3/eternity2) — https://github.com/david3x3x3/eternity2 - Fuente: El solucionador de cómputo DirectX 12 de Adam Miles en una Xbox One X (groups.io mensaje 9811, 2018) — https://groups.io/g/eternity2/message/9811 - Fuente: El resultado: el 9×9 conjunto 1 reverificado exhaustivamente en 25 h 24 min (groups.io mensaje 9822, 2018) — https://groups.io/g/eternity2/message/9822 - Fuente: Miles sobre el verdadero problema del paralelismo: mantener ocupado a cada procesador (groups.io mensaje 9984, 2020) — https://groups.io/g/eternity2/message/9984 - Fuente: El balance de Blackwood: GPU medida durante la campaña del récord, pero no conservada (groups.io mensaje 10056, 2020) — https://groups.io/g/eternity2/message/10056 - Fuente: La RTX 4090 alquilada de Barr: 3,17 mil millones de colocaciones/s en un 10×10, limitada por la memoria en el puzzle completo (groups.io mensaje 11598, 2025) — https://groups.io/g/eternity2/message/11598 --- Sobre el papel, Eternity II es el problema perfecto para GPU. Fija las dos primeras filas del tablero y obtienes millones de subárboles completamente independientes; nada de lo que aprende un subárbol importa a ningún otro. «Masivamente paralelo» es el término de manual, y una GPU moderna ofrece decenas de miles de vías paralelas y teraflops de cálculo que saturar. La comunidad lo vio de inmediato (la primera propuesta de solucionador en GPU data de junio de 2007, semanas antes incluso de que el puzzle saliera a la venta) y no dejó de verlo durante dieciocho años, en un hilo literalmente titulado «Graphic cards as CPU's?» que resurgió en 2010, 2011 y 2019. La respuesta medida, en cada implementación real, es que los teraflops no son el recurso que importa. Un backtracker de Eternity II se pasa la vida haciendo consultas de tablas minúsculas y ramificando según los resultados: una carga de trabajo que *ya* estaba bloqueada esperando accesos a memoria en las CPU, y que las GPU empeoran de dos maneras concretas y bien conocidas. Esta página traza el argumento a través de las personas que lo formularon: el [balance de callejones sin salida](/es/research/build/dead-ends/) recoge el veredicto en un párrafo; aquí está el porqué. ## Por qué parece perfecto La idea llegó antes que el hardware. En junio de 2007, Simon Chapple planteó la resolución por fuerza bruta en las tarjetas 8800 de Nvidia, y un miembro que publicaba como James supuso que una GPU podría hacer un solucionador «quizás 4 o 5 veces» más rápido ([mensaje 351](https://groups.io/g/eternity2/message/351), [mensaje 355](https://groups.io/g/eternity2/message/355)). Esa suposición resultaría estar más cerca de la verdad de lo que sugerían las proporciones de teraflops. (Ese mismo año, el primer hilo «GPU» de la lista trataba en realidad sobre una *Gnutella* Processing Unit, lo cual es [computación distribuida](/es/research/build/faster/distributed-solving/) y no gráficos ([mensaje 3020](https://groups.io/g/eternity2/message/3020)).) En mayo de 2008 llegó la pregunta sobre CUDA (¿alguien ha probado a ejecutar backtrackers en 96 a 128 núcleos de GPU?), respondida por un miembro que estaba «casi terminando» un solucionador CSP basado en GLSL y prefería GLSL por sus menores exigencias de hardware ([mensaje 5407](https://groups.io/g/eternity2/message/5407), [mensaje 5409](https://groups.io/g/eternity2/message/5409)). De ese solucionador nunca se volvió a saber. En 2010 Thomas planteó la primera pregunta sobre OpenCL en la forma más citable del archivo: ahora poseía hardware capaz de más de 10¹² operaciones por segundo, «pero por desgracia me falta un programa adecuado que pueda usarlo» ([mensaje 7653](https://groups.io/g/eternity2/message/7653)). Esa frase es todo el tema en miniatura. Las operaciones por segundo eran reales. El programa adecuado era la parte difícil, y las razones por las que siguió siendo difícil se diagnosticaron con precisión un año más tarde. ## El análisis de Field: la bifurcación sin buena rama En noviembre de 2011, en ese mismo hilo recurrente, Mike Field, cuyo propio presupuesto de motor al nivel de ciclos ancla la [página de ingeniería de solucionadores](/es/research/build/faster/solver-engineering/), publicó el análisis negativo definitivo del archivo ([mensaje 9003](https://groups.io/g/eternity2/message/9003), corrección de errata en [mensaje 9004](https://groups.io/g/eternity2/message/9004)). Su punto de partida era una medición, no una opinión: su backtracker colocaba 75 millones de piezas por segundo y por núcleo en un AMD a 2 GHz (unos 26 ciclos de reloj por pieza), y el recuento bruto de instrucciones equivalía aproximadamente a la mitad, de modo que **más del 50 % del tiempo el código estaba bloqueado esperando accesos a memoria**. El bucle interno de un solucionador de Eternity II no es cálculo. Es una cadena de pequeñas lecturas dependientes: tabla de candidatos, datos de las piezas, estado del tablero, ramificación. A partir de ahí, Field planteó una bifurcación. Proyecta la búsqueda sobre una GPU y cada procesador de flujo o bien coopera con sus vecinos, o bien trabaja solo: - **Si cooperan**, necesitan compartir información constantemente, y el ancho de banda de sincronización que eso requiere es precisamente lo que las GPU no proporcionan. No hay ninguna «barra cruzada enorme» entre los procesadores de flujo; el tejido se construyó para píxeles que no se hablan entre sí. - **Si trabajan solos** (digamos, 1024 backtrackers independientes), entonces cada uno necesita su propia definición del problema y su propio estado de búsqueda: las tablas de piezas, el tablero, el código para procesarlos. Ese paquete es pequeño según los estándares de CPU y aun así **demasiado grande para los ~8 KB de memoria local rápida que recibe cada procesador de flujo**. El estado se desborda hacia la memoria externa de la GPU, y ahora cada solucionador del chip hace cola por el mismo bus de memoria. Cualquiera de las dos ramas termina en el mismo muro: el ancho de banda de la memoria externa. Y Field añadió el matiz que hace ese muro inusualmente terco para este puzzle: casi todas las variables que toca un solucionador de E2 caben en 16 bits, así que lo que la búsqueda necesita son más *transacciones* de memoria a frecuencias más altas, no buses más anchos: «un bus de memoria de 128 bits será apenas más rápido que uno de 16 bits». Ensanchar la manguera no sirve de nada cuando se bebe a sorbos por una pajita. Su conclusión abarcaba las [FPGA](/es/research/build/hardware/fpga-solving/) con el mismo argumento, y no veía que ninguna de esas opciones ganara un orden de magnitud sobre un núcleo de CPU. Su consejo práctico: «consíguete un AMD Hex core de doble zócalo... y ten mucha, mucha suerte» ([mensaje 9003](https://groups.io/g/eternity2/message/9003)). Nada de lo medido desde entonces ha refutado esto. Es el ancla de la que cuelga el resto de la página. ## El segundo muro: la divergencia, o el ejército ocioso El argumento de Field trata sobre dónde viven los bytes. El otro muro trata sobre cómo ejecutan las GPU: las vías corren en grupos sincronizados, y un grupo avanza a la velocidad de la vía que aún tenga trabajo. El backtracking es el flujo de control más divergente que se pueda imaginar. Dos búsquedas que parten de prefijos adyacentes acaban en estados de tablero completamente distintos en unas pocas colocaciones, una retrocediendo a profundidad 40 mientras su vecina avanza a profundidad 55. Adam Miles, un ingeniero de gráficos que de hecho había construido el solucionador en GPU más rápido del archivo (más abajo), expuso el problema desde la experiencia: lo difícil es «mantener a cada procesador haciendo algo útil en cada ciclo de reloj» (algunos hilos simplemente se quedan sin piezas candidatas y esperan), y como nadie tiene un algoritmo demostrablemente mejor que la fuerza bruta, «el tiempo dedicado a comunicar es tiempo no dedicado a calcular» ([mensaje 9984](https://groups.io/g/eternity2/message/9984)). David Barr chocó con el mismo muro a nivel de granularidad de planificación en 2025: reparte la búsqueda entre los trabajadores y algunos subárboles tardan mucho más que otros, de modo que una ejecución termina con «un número decreciente de trabajadores activos» acaparando toda la GPU mientras miles de vías permanecen ociosas ([mensaje 11598](https://groups.io/g/eternity2/message/11598)). Los subárboles masivamente paralelos son reales; simplemente son masivamente *desiguales*. ## Lo que se construyó de todos modos La comunidad no se detuvo en el análisis; construyó los solucionadores y publicó las cifras, por lo que esta página puede informar de ambas direcciones con mediciones. **El solucionador OpenCL de David Barr (2015).** El primer solucionador en GPU funcional y publicado: PyOpenCL, ejecutándose en una Radeon HD 7870. Registró por completo una fila de la lista de primeras filas del 10×10 de Martin (la fila que contiene la solución conocida) en 3 h 46 min, con el trabajo dividido en 1620 partes ([mensaje 9360](https://groups.io/g/eternity2/message/9360), [mensaje 9364](https://groups.io/g/eternity2/message/9364)); su referencia de CPU era de 120 M colocaciones/s en los 8 núcleos de un FX-8120 ([mensaje 9366](https://groups.io/g/eternity2/message/9366)). Publicó el código fuente en [github.com/david3x3x3/eternity2](https://github.com/david3x3x3/eternity2) ([mensaje 9367](https://groups.io/g/eternity2/message/9367)), uno de los pocos solucionadores de E2 de código abierto de su época. **El solucionador DirectX 12 de Adam Miles (2018).** Tras aparcar un solucionador AVX2 casi terminado por no valer la pena ([mensaje 9811](https://groups.io/g/eternity2/message/9811)), Miles escribió compute shaders de DX12 y los ejecutó en una Xbox One X, una pieza de 6 teraflops. El diseño de su kernel es un caso de estudio de cómo trabajar *con* los dos muros en lugar de fingir que no existen: una «preresolución» en anchura enumera cada solución parcial de las primeras 14 a 18 piezas en la propia GPU (3,3 millones de prefijos de dos filas para el 7×7; 155,8 millones de prefijos de 16 piezas para el 9×9), cada uno empaquetado en 20 bytes (una máscara de piezas usadas de 96 bits más doce colores de arista de 5 bits) antes de que un barrido masivamente paralelo termine cada prefijo ([mensaje 9814](https://groups.io/g/eternity2/message/9814), [mensaje 9819](https://groups.io/g/eternity2/message/9819)). Estado uniforme, estado minúsculo, sin diafonía. El 7×7 conjunto 1 de Brendan cayó de 74 a 25 y a 14 segundos frente a una referencia de CPU optimizada de 529 segundos; el 8×8 tardó 248 segundos. El solucionador OpenCL de Barr en una GTX 1060 ejecutó el mismo 7×7 en 73 segundos, y ambos intercambiaron notas de kernel que trazaban exactamente por qué los teraflops decepcionan ([mensaje 9818](https://groups.io/g/eternity2/message/9818)). Miles reescribió el solucionador una vez más en 2020 sobre hardware de gama alta que aún no podía nombrar ([mensaje 9994](https://groups.io/g/eternity2/message/9994), [mensaje 9998](https://groups.io/g/eternity2/message/9998)). **Joshua Blackwood (2020).** El autor de los tableros récord midió un port a GPU durante la campaña que produjo la familia 468-470, junto con solucionadores SAT y bloques 2×2 en caché («medí todo lo que hice»), y no conservó ninguno. Solo las heurísticas refinadas llegaron a rendir, por otro factor de unas 2x ([mensaje 10056](https://groups.io/g/eternity2/message/10056)). El catálogo completo de lo que descartó está en la [página de callejones sin salida](/es/research/build/dead-ends/). **David Barr, de nuevo (2025).** El dato moderno: su buscador en profundidad en Python/OpenCL sobre una RTX 4090 alquilada (vast.ai, 0,25 a 0,34 $/hora) registra unas **3,17 mil millones de colocaciones por segundo** en el 10×10 de Brendan; en sus propias palabras, sin embargo, el código actual «no funciona bien con el puzzle Eternity completo debido a las limitaciones de memoria» ([mensaje 11598](https://groups.io/g/eternity2/message/11598)). Catorce años después del mensaje de Field, la mejor cifra de GPU del archivo sigue viniendo con la salvedad de Field adjunta. ## Los intentos, de un vistazo | Quién | Hardware | Qué ocurrió | Msg | | --- | --- | --- | --- | | Simon Chapple y James (2007) | Nvidia 8800 (propuesta) | Primera propuesta de GPU; se estimó «quizás 4 o 5 veces» más rápido; nunca se construyó | [351](https://groups.io/g/eternity2/message/351), [355](https://groups.io/g/eternity2/message/355) | | knucklefinger (2008) | Shaders GLSL | «Casi terminando» un solucionador CSP en GLSL; nunca se publicaron resultados | [5407](https://groups.io/g/eternity2/message/5407), [5409](https://groups.io/g/eternity2/message/5409) | | Thomas / trans.spam (2010) | sin especificar, >10¹² op/s | Primera pregunta sobre OpenCL; se iniciaron experimentos, ninguno reportó de vuelta | [7653](https://groups.io/g/eternity2/message/7653), [7656](https://groups.io/g/eternity2/message/7656) | | valy / 21valy (2011) | tarjeta de 80 SP, luego Radeon 5770 | Subpuzzle de juguete 4x4 portado a OpenCL: 4 s en C monohilo frente a 60 s en la GPU; código compartido | [8982](https://groups.io/g/eternity2/message/8982), [8994](https://groups.io/g/eternity2/message/8994) | | Mike Field (2011) | (análisis) | El argumento negativo: la cooperación necesita un ancho de banda del que las GPU carecen; la independencia necesita >8 KB de estado por hilo; ningún orden de magnitud disponible | [9003](https://groups.io/g/eternity2/message/9003), [9004](https://groups.io/g/eternity2/message/9004) | | David Barr (2015) | Radeon HD 7870, PyOpenCL | Primer solucionador en GPU funcional publicado; una primera fila de 10x10 registrada por completo en 3 h 46 min; código abierto | [9360](https://groups.io/g/eternity2/message/9360), [9367](https://groups.io/g/eternity2/message/9367) | | Adam Miles (2018) | Xbox One X, cómputo DX12 | 7x7 conjunto 1 en 14 s (CPU: 529 s); 9x9 conjunto 1 reverificado exhaustivamente en 25 h 24 min, exactamente las 2 soluciones conocidas | [9811](https://groups.io/g/eternity2/message/9811), [9822](https://groups.io/g/eternity2/message/9822) | | David Barr (2018) | GTX 1060, OpenCL | 7x7 conjunto 1 en 73 s; notas de diseño de kernel intercambiadas con Miles | [9818](https://groups.io/g/eternity2/message/9818) | | Adam Miles (2020) | GPU de gama alta sin anunciar | Reescritura con «bastante más velocidad»; explícito en que el 16×16 completo queda fuera de alcance | [9994](https://groups.io/g/eternity2/message/9994), [9996](https://groups.io/g/eternity2/message/9996), [9998](https://groups.io/g/eternity2/message/9998) | | Joshua Blackwood (2020) | GPU sin especificar | Medida durante la campaña del récord 468-470; no conservada, solo rindieron las heurísticas | [10056](https://groups.io/g/eternity2/message/10056) | | David Barr (2025) | RTX 4090 alquilada (vast.ai) | ~3,17 mil M colocaciones/s en el 10x10 de Brendan a ~0,30 $/h; el E2 completo falla por límites de memoria | [11598](https://groups.io/g/eternity2/message/11598) | ## Lo que dicen realmente las cifras Pon los 3,17 mil millones de colocaciones por segundo de Barr junto a las cifras de CPU de la comunidad, aproximadamente 70 a 90 M/s para un solo núcleo bien afinado y 225 a 295 M/s para el C generado de [McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) en el hardware más reciente (el balance completo está en la [página de ingeniería de solucionadores](/es/research/build/faster/solver-engineering/)), y el mejor resultado de GPU equivale a algún punto entre diez y cuarenta núcleos de CPU. Es una constante real y útil. También es *solo* una constante, comprada en un puzzle pequeño donde el estado por hilo se mantiene minúsculo, y que se degrada hacia el análisis de Field precisamente cuando el tablero crece hasta las 256 piezas reales. La suposición de James en 2007, «4 o 5 veces», falló; la proporción de teraflops, un factor de mil, falló por mucho más, y en la dirección contraria. Un factor constante tiene aquí un significado preciso: [por qué un ordenador más rápido no ayuda](/es/research/why/prune-vs-speed/) hace la aritmética, y la [página de callejones sin salida](/es/research/build/dead-ends/) consigna el veredicto: el mismo algoritmo, más rápido, choca con el mismo muro un poco antes. ## Dónde brillan de verdad las GPU aquí Ahora la otra mitad del balance. El 25 de febrero de 2018, la Xbox One X de Miles terminó de recorrer el árbol de búsqueda **entero** del 9×9 conjunto 1 de Brendan en 25 horas y 24 minutos, encontrando exactamente 2 soluciones, al 22 % y al 32 % de la búsqueda, tras lo cual la máquina pasó diecisiete horas más demostrando que no había otras ([mensaje 9822](https://groups.io/g/eternity2/message/9822)). Eso confirmó de forma independiente el censo de McGavin de 2014, con un algoritmo distinto, un lenguaje distinto y un silicio radicalmente distinto. Es uno de los resultados de verificación más sólidos del archivo. Fíjate en qué lo hizo funcionar. La enumeración exhaustiva de un árbol de forma fija es uniforme: cada vía ejecuta el mismo bucle poco profundo sobre prefijos del mismo tamaño, el estado cabe en el empaquetado de 20 bytes de Miles, nadie necesita hablar y a nadie le importa que algunas vías terminen antes porque el objetivo es el árbol entero, no una rama afortunada. Toda propiedad que rompe la *búsqueda* en GPU está ausente de la *verificación* en GPU. Así que el consejo de cierre se escribe solo, y no es ni esperanza ni desesperación. Una GPU no encontrará la solución: tres profesionales de la era del récord lo midieron de forma independiente, y el argumento del porqué se sostiene desde 2011. Pero si tu carga de trabajo es reverificar un censo, enumerar filas o bloques, o barrer exhaustivamente un subpuzzle acotado (forma fija, estado pequeño, trabajo uniforme), una 4090 alquilada a treinta centavos la hora es el cómputo más barato que jamás se ha medido para este problema. Apunta la GPU a lo que es: no un buscador más profundo, sino un contador muy rápido. ## Relacionado - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Ingeniería de solucionadores: el oficio bajo el algoritmo](https://eternity2.dev/es/research/build/faster/solver-engineering/) — Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. --- # Enfoques cuánticos: dos aceleraciones a su precio real > El ordenador cuántico es el deus ex machina más antiguo de la lista, invocado en el primer mes del puzzle y cada pocos años desde entonces. Hay exactamente dos historias reales que contar: la aceleración cuadrática de Grover y el recocido sobre una codificación QUBO. Esta página cuenta ambas como es debido, hace la aritmética frente a los números reales de Eternity II, y reporta el registro completo de la comunidad: diecinueve años de comentarios al margen, un intento de embedding sin terminar, cero ejecuciones. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/hardware/quantum/ - Actualizado: 2026-07-02 - Temas: hardware, exact-methods - Fuente: Grover, A fast quantum mechanical algorithm for database search (arXiv:quant-ph/9605043, 1996) — https://arxiv.org/abs/quant-ph/9605043 - Fuente: Bennett, Bernstein, Brassard & Vazirani, Strengths and weaknesses of quantum computing: el límite cuadrático (arXiv:quant-ph/9701001) — https://arxiv.org/abs/quant-ph/9701001 - Fuente: Montanaro, Quantum walk speedup of backtracking algorithms (arXiv:1509.02374) — https://arxiv.org/abs/1509.02374 - Fuente: Lucas, Ising formulations of many NP problems (arXiv:1302.5843, 2014) — https://arxiv.org/abs/1302.5843 - Fuente: Bengtsson et al., QAOA resuelve pequeñas instancias de exact-cover en dos qubits superconductores (arXiv:1912.10495) — https://arxiv.org/abs/1912.10495 - Fuente: Ambainis, Quantum search algorithms, la reseña que Alan publicó en la lista (arXiv:quant-ph/0504012) — https://arxiv.org/abs/quant-ph/0504012 - Fuente: Aaronson & Ambainis, Quantum search of spatial regions (arXiv:quant-ph/0303041) — https://arxiv.org/abs/quant-ph/0303041 - Fuente: El hilo de 2007 «Quantum computing» se abre (groups.io message 1446) — https://groups.io/g/eternity2/message/1446 - Fuente: Max lee a Deutsch: la aceleración cuántica para E2 «sería muy moderada» (groups.io message 6484, 2009) — https://groups.io/g/eternity2/message/6484 - Fuente: D-Wave se nombra por primera vez en la lista (groups.io message 7796, 2010) — https://groups.io/g/eternity2/message/7796 - Fuente: La aritmética Grover de McGavin: 3,4x10^40 nodos, raíz cuadrada, 135 qubits (groups.io message 10258, 2021) — https://groups.io/g/eternity2/message/10258 - Fuente: McGavin plantea la pregunta abierta (groups.io message 10260, 2021) — https://groups.io/g/eternity2/message/10260 - Fuente: mulisak, «¡que la computación cuántica nos salve!»: QAOA sobre exact cover (groups.io message 10791, 2022) — https://groups.io/g/eternity2/message/10791 - Fuente: Recocido cuántico y el tiempo comunitario gratuito de D-Wave sugeridos (groups.io message 11175, 2023) — https://groups.io/g/eternity2/message/11175 - Fuente: El intento D-Wave DQM de Patrick Poitras choca con el muro de la conectividad (groups.io message 11176, 2023) — https://groups.io/g/eternity2/message/11176 - Fuente: mulisak dimensiona el modelo de circuito: se necesitan 3.000+ qubits, existen ~150 (groups.io message 11813, 2026) — https://groups.io/g/eternity2/message/11813 --- El ordenador cuántico entró en el archivo de Eternity II en el primer mes del puzzle. En mayo de 2007, semanas antes de que la mayoría de los miembros hubieran escrito un solucionador, uno propuso fundar el «Homebrew Quantum Computer Club» ([message 263](https://groups.io/g/eternity2/message/263)). Era una broma, y la primera aparición de una figura que rondaría la lista durante diecinueve años: la máquina del futuro que disuelve el problema entero. Se la ha invocado como fantasía, como sátira, como deseo en la carta a los Reyes Magos, y de vez en cuando como una genuina pregunta técnica. Lo que nunca ha sido, en ningún lugar del registro, es *usada*: ningún miembro ha reportado jamás haber ejecutado hardware o simulador cuántico alguno contra ninguna instancia de Eternity II, de ningún tamaño. Ese escaso registro merece una página de todos modos, por dos razones. Primero, hay exactamente dos historias cuánticas reales relevantes para E2, la búsqueda de Grover y el recocido sobre una codificación de Ising, y ambas pueden contarse con aritmética real, de un modo que los dispersos comentarios al margen de la lista nunca llegaron a ensamblar del todo. Segundo, la aritmética es esclarecedora: la computación cuántica ofrece la aceleración más potente que cualquier física promete actualmente para la búsqueda ciega, y evaluar E2 frente a ella muestra con nitidez *por qué* este puzzle resiste: los mismos muros que cartografían las [páginas de estructura](/es/research/why/complex-theory/), vistos desde el otro lado. ## Historia uno: Grover, la raíz cuadrada [El algoritmo de Grover](https://arxiv.org/abs/quant-ph/9605043) es el resultado estrella de la búsqueda cuántica. Dadas $N$ posibilidades y un test de caja negra para «¿es esta una solución?», un ordenador cuántico encuentra una solución en unas $\tfrac{\pi}{4}\sqrt{N}$ evaluaciones del test, allí donde una máquina clásica necesita del orden de $N$. Dos cláusulas en letra pequeña importan aquí: - **La aceleración es cuadrática, y eso es un teorema, no una cota inferior por batir.** Para la búsqueda de caja negra, [Bennett, Bernstein, Brassard y Vazirani](https://arxiv.org/abs/quant-ph/9701001) demostraron que la raíz cuadrada es óptima: ningún algoritmo cuántico hace mejor sin explotar la estructura del problema. *No* se sabe que los ordenadores cuánticos resuelvan problemas NP-completos en tiempo polinómico; sobre la búsqueda no estructurada dividen el exponente a la mitad, punto y final. - **Con $M$ soluciones el coste es $\sqrt{N/M}$.** Las soluciones abundantes ayudan a la búsqueda cuántica exactamente como ayudan a la búsqueda clásica. Eternity II fue [diseñado para tener esencialmente una](/es/research/why/complex-theory/). El diseño adversario que mata de hambre a los solucionadores clásicos también mata de hambre a Grover. Ahora la aritmética, frente a los números reales de E2. **Frente al espacio bruto.** El recuento ingenuo de configuraciones (cada pieza en cualquier sitio, en cualquier rotación) es el famoso $\sim 10^{557}$ ([hechos conocidos](/es/research/build/known-facts/)). Grover lo convierte en $$ \sqrt{10^{557}} \;\approx\; 10^{278.5} $$ llamadas secuenciales al oráculo. Reducir 557 a la mitad deja 278: un número al que le da igual si tu máquina hace una operación por segundo o por tiempo de Planck. Nada más hay que decir sobre la versión no estructurada. **Frente al árbol estructurado.** La comparación justa no es el espacio bruto sino el árbol que un buen backtracker recorre realmente, y la comunidad hizo esta aritmética por sí misma, en el único intercambio genuinamente técnico sobre Grover del archivo. En octubre de 2021, a partir de la estimación de Akos de que un barrido completo del espacio de búsqueda necesita como mínimo $3.4\times10^{40}$ operaciones, [Peter McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) preguntó si Grover podía buscar ese árbol en $\sqrt{3.4\times10^{40}} \approx 1.8\times10^{20}$ operaciones en una máquina con $\log_2(3.4\times10^{40}) = 135$ qubits ([message 10258](https://groups.io/g/eternity2/message/10258)), y la reformuló con cuidado dos mensajes después: «¿Podría Grover u otro algoritmo cuántico buscar el árbol de E2 en O(sqrt(N)) operaciones?» ([message 10260](https://groups.io/g/eternity2/message/10260)). Nadie en la lista respondió. La literatura sí: sí, casi. [El backtracking cuántico de Montanaro](https://arxiv.org/abs/1509.02374) recorre un árbol de backtracking clásico de $T$ nodos en aproximadamente $\sqrt{T}$ (por factores polinómicos) pasos cuánticos, estructura y poda incluidas. Toma el propio número de este wiki para la anchura de la meseta del árbol, unos $10^{45}$ tableros parciales ([teoría de la complejidad](/es/research/why/complex-theory/)): $$ \sqrt{10^{45}} \;\approx\; 3\times10^{22} \text{ quantum steps.} $$ ¿Es factible $3\times10^{22}$? Concédele a la máquina un regalo absurdo: una llamada completa al oráculo (verificando las 480 restricciones de arista de un tablero entero, de forma reversible) cada *nanosegundo*. Las iteraciones de Grover son inherentemente secuenciales (ejecutar $k$ máquinas en paralelo solo compra $\sqrt{k}$, no $k$), así que eso son $3\times10^{13}$ segundos: **cerca de un millón de años**. A las cadencias de puerta lógica de kHz–MHz que las máquinas con corrección de errores realmente proyectan, es más largo que la edad del universo. Y los 135 qubits de McGavin cuentan solo el registro de índice: el oráculo debe mantener el tablero (256 celdas × 10 bits de pieza-rotación ya son ~2.560 qubits lógicos), la contabilidad de piezas usadas, y las ancillas que hacen reversible la comprobación. Eso suma miles de qubits lógicos, es decir millones de qubits físicos con los sobrecostes de corrección de errores actuales, frente a los aproximadamente 150 qubits ruidosos accesibles en 2026 ([message 11813](https://groups.io/g/eternity2/message/11813)). Lo notable es que la lista acertó pronto, desde el sillón. En febrero de 2009 Max, leyendo un ensayo de David Deutsch, concluyó que «aunque tuviéramos hoy un gran ordenador cuántico, la aceleración para problemas como el ajedrez y probablemente también E2 sería muy moderada»; harían falta algoritmos nuevos, aún por descubrir, encima ([message 6484](https://groups.io/g/eternity2/message/6484)). Ese es el teorema BBBV, parafraseado en una lista de correo sobre un puzzle a dos años del inicio de la caza. ## Historia dos: el recocido, y el puzzle como un paisaje energético La segunda historia es más interesante porque está más cerca de lo construible. Los recocedores cuánticos (las máquinas de D-Wave) no ejecutan Grover. Enfrían físicamente una red de qubits acoplados hacia el estado fundamental de una función de energía programable, un **QUBO** (quadratic unconstrained binary optimization), equivalente a un modelo de Ising. [El catálogo de Lucas de 2014](https://arxiv.org/abs/1302.5843) da formulaciones de Ising para los 21 problemas NP-completos de Karp, y el emparejamiento de aristas se codifica exactamente en su estilo. Toma la misma variable que usa la [codificación SAT](/es/research/build/exact/sat-csp-encodings/), $x_{p,c,r} = 1$ si la pieza $p$ ocupa la celda $c$ con rotación $r$, y escribe $$ H \;=\; A\sum_{c}\Big(1-\!\!\sum_{p,r} x_{p,c,r}\Big)^{2} \;+\; A\sum_{p}\Big(1-\!\!\sum_{c,r} x_{p,c,r}\Big)^{2} \;+\; B \sum_{\langle c,c' \rangle} \sum_{\text{mismatching pairs}} x_{p,c,r}\,x_{p',c',r'} , $$ con $A > B > 0$: el primer término castiga las celdas que no albergan exactamente una colocación, el segundo castiga las piezas no usadas exactamente una vez, el tercero añade $B$ por cada junta interior mal emparejada. El estado fundamental tiene energía cero exactamente cuando el tablero es una solución perfecta. De forma grata, los estados excitados de baja energía *son* parciales de alta puntuación, de modo que la codificación habla de forma nativa el idioma de la [escalera de récords](/es/research/records/). Luego lo dimensionas. - **Variables:** $256 \times 256 \times 4 = 262{,}144$ binarias lógicas. - **Acoplamientos:** las 1.024 colocaciones candidatas de cada celda son mutuamente excluyentes, lo que significa $\binom{1024}{2} \approx 5\times10^{5}$ términos cuadráticos *por celda*, y de nuevo por pieza: del orden de $10^{8}$ acoplamientos antes de contar los términos de desemparejamiento. - **Hardware:** los mayores recocedores de 2026 llevan del orden de 5.000 qubits físicos, cada uno acoplado a 15–20 vecinos. Mapear un problema lógico sobre ese grafo disperso (**minor-embedding**) representa cada variable densamente conectada mediante una *cadena* de qubits físicos; el techo práctico para un problema totalmente conectado es un par de cientos de variables lógicas por chip. El grupo one-hot de **una sola celda** (1.024 variables mutuamente acopladas) ya lo supera varias veces, y hay 256 celdas. La brecha no es una generación de ingeniería; son más de tres órdenes de magnitud en variables y cuatro en acoplamientos, antes del sobrecoste de las cadenas. (Los solucionadores *híbridos* de D-Wave aceptan QUBO de un millón de variables, pero ahí el procesador cuántico es una subrutina dentro de una heurística clásica; un «resultado» híbrido no sería un resultado cuántico.) Y detrás del muro del tamaño se alza otro más antiguo: un recocedor, a cualquier tamaño, es una máquina física de búsqueda local que desciende este paisaje energético, el mismo paisaje sobre el que el [recocido simulado y la búsqueda local](/es/research/build/local-search/local-search-alns/) de la comunidad se estancaron en los 460. Nada en la teoría del recocido cuántico promete abrir un túnel a través de la [escasez que se ingenió en este puzzle](/es/research/why/complex-theory/); sobre instancias tipo vidrio de espín el gap adiabático se cierra y el tiempo de recocido se dispara. El alegre comentario de Alan en 2010 de que «el recocido simulado es uno de los problemas en los que se espera que los QComputers sean especialmente buenos» ([message 7802](https://groups.io/g/eternity2/message/7802)) es precisamente la esperanza, y sigue siendo, en esta clase de problemas, una esperanza y no un resultado. ## Lo que el archivo dice realmente El registro cuántico completo de la lista, 2007–2026. Es mayormente comentarios al margen, y esta tabla así lo dice; los tres momentos genuinamente técnicos van señalados. | Cuándo | Quién | Qué se dijo | Msg | | --- | --- | --- | --- | | 2007-05 | gfleder | «Homebrew Quantum Computer Club ???», la primera broma | [263](https://groups.io/g/eternity2/message/263) | | 2007-06 | Steve Moyer | Cita el hilo «home quantum computing» mientras hace los primeros recuentos de permutaciones | [268](https://groups.io/g/eternity2/message/268) | | 2007-07 | Jim Witte | Pregunta panorámica analógico/ADN/cuántico; un Q-comp «probablemente podría escupir una solución en un segundo aproximadamente» | [824](https://groups.io/g/eternity2/message/824) | | 2007-08 | psykowally y otros | El hilo «Quantum computing»: «una forma obvia de resolver el puzzle... ¿cuántos bits pueden manejar?»; Anurag: no existe hardware; Grech: un QC real vale más que el premio; una broma de cómputo contrafáctico | [1446](https://groups.io/g/eternity2/message/1446), [1457](https://groups.io/g/eternity2/message/1457), [1464](https://groups.io/g/eternity2/message/1464), [1535](https://groups.io/g/eternity2/message/1535), [1540](https://groups.io/g/eternity2/message/1540) | | 2008 | varios | El cuántico listado entre las «otras vías» (3995), puesto en duda por la interferencia (4032), deseado (4850), satirizado como el «ordenador cuántico viajero del tiempo» (5413, 5442), objeto de broma (5542), atado a reflexiones sobre P=NP (5629), listado con la computación holográfica y de ADN (5736) | [3995](https://groups.io/g/eternity2/message/3995), [4032](https://groups.io/g/eternity2/message/4032), [4850](https://groups.io/g/eternity2/message/4850), [5413](https://groups.io/g/eternity2/message/5413), [5629](https://groups.io/g/eternity2/message/5629), [5736](https://groups.io/g/eternity2/message/5736) | | 2009-02 | lukas; **Max** | «¿Dónde está el solucionador "cuántico" no lineal?», respondido con Deutsch: **la aceleración «sería muy moderada»** | [6480](https://groups.io/g/eternity2/message/6480), [6484](https://groups.io/g/eternity2/message/6484) | | 2009-12 | andreas gammel | «Ordenador cuántico casero»: reflexión sobre la doble rendija, proyectar la solución en una pared | [7336](https://groups.io/g/eternity2/message/7336) | | 2010-06 | **Alan (Figjam)** & Geoff | «Necesitamos o bien un ordenador cuántico de 2048 bits o bien comprar un billete de lotería»; **D-Wave nombrado** (primer puntero de hardware); los artículos de Ambainis y Aaronson–Ambainis publicados; esperanzas de efecto túnel cuántico | [7789](https://groups.io/g/eternity2/message/7789), [7796](https://groups.io/g/eternity2/message/7796), [7799](https://groups.io/g/eternity2/message/7799), [7802](https://groups.io/g/eternity2/message/7802), [7811](https://groups.io/g/eternity2/message/7811) | | 2011-02 | Johannes Lindé | Demo de Wolfram de algoritmos de búsqueda cuántica enlazada, «¿alguien más investigando en esta línea?» | [8565](https://groups.io/g/eternity2/message/8565) | | 2015-06 | void solid | Enlaza el QUBO-Chimera de alex1770 (cómo de bien se resuelve *en software* el problema nativo de D-Wave) en un hilo sin relación; sin continuación | [9417](https://groups.io/g/eternity2/message/9417) | | 2021-10 | **Peter McGavin** | **La aritmética Grover**: $3.4\times10^{40}$ nodos $\to$ $1.8\times10^{20}$ ops, 135 qubits; la pregunta abierta, nunca respondida en la lista | [10258](https://groups.io/g/eternity2/message/10258), [10260](https://groups.io/g/eternity2/message/10260) | | 2022-07 | mulisak | «¡Que la computación cuántica nos salve!»: un artículo QAOA sobre [exact cover](/es/research/build/exact/exact-cover-dlx/) + cuQuantum; «convencer a Google/IBM/Microsoft... de que esto los hará famosos» | [10791](https://groups.io/g/eternity2/message/10791) | | 2023-10 | Hopfer; **Poitras** | La idea «pseudocuántica» de un procesador por celda; recocido cuántico + tiempo comunitario gratuito de D-Wave sugeridos; **el único intento práctico**, un modelo D-Wave DQM atascado en el embedding: conectividad de 15 vías contra 22 colores, «esperando que puedan sacar pronto un chip Zephyr» | [11174](https://groups.io/g/eternity2/message/11174), [11175](https://groups.io/g/eternity2/message/11175), [11176](https://groups.io/g/eternity2/message/11176) | | 2023-12 | Jef Bucas | «¿Alguien tiene un gran ordenador cuántico en su carta a los Reyes Magos?» | [11185](https://groups.io/g/eternity2/message/11185) | | 2024 | mulisak; McGavin; Joe | La máquina de campus de 127 qubits de IBM señalada (11283); el cuántico listado entre los ámbitos de donde podría venir un avance (11346); el anuncio Willow de Google retransmitido (11407) | [11283](https://groups.io/g/eternity2/message/11283), [11346](https://groups.io/g/eternity2/message/11346), [11407](https://groups.io/g/eternity2/message/11407) | | 2026 | JSA; **mulisak** | Los ordenadores cuánticos nombrados como una de las dos vías a corto plazo (11788); ¿es el trabajo SAT «trabajo preliminar... para un eventual ordenador cuántico?» (11812); **la respuesta dimensionada**: existen ~150 qubits ruidosos, un circuito de set-cover para E2 necesita 3.000+, una prueba de concepto QAOA/Grover de ~30 qubits es el techo realista; «esto no parece algo que vaya a resolver Eternity II pronto» | [11788](https://groups.io/g/eternity2/message/11788), [11812](https://groups.io/g/eternity2/message/11812), [11813](https://groups.io/g/eternity2/message/11813) | Eso es todo. (Las restantes apariciones de «cuántico» en el archivo son usos figurados como «salto cuántico», o comentarios de física ajenos a la computación.) Resumido: tres momentos técnicos en diecinueve años (el teorema de sillón de Max en 2009, la raíz cuadrada de McGavin en 2021, el recuento de qubits de mulisak en 2026), un embedding D-Wave sin terminar, y cero ejecuciones reportadas de nada, en ninguna instancia. El registro de la comunidad es delgado, y el trabajo de esta página es decirlo en lugar de inflarlo. > **El cuántico como lente, no como herramienta** > > Aquí está el uso sobrio de todo esto. La búsqueda de tipo Grover es la aceleración genérica *más potente* que ofrece cualquier física conocida: divide el exponente a la mitad, allí donde toda historia de hardware de este wiki ([FPGA](/es/research/build/hardware/fpga-solving/), [GPU](/es/research/build/hardware/gpu-solving/), clústeres) solo divide por una constante. Y E2 se la sacude de encima: $10^{45} \to 10^{22.5}$ sigue perdiendo contra cualquier reloj concebible. El argumento de [por qué un ordenador más rápido no ayuda](/es/research/why/prune-vs-speed/) sobrevive incluso a la mejor aceleración que la física tiene en oferta, que es la forma más fuerte de ese argumento. Mientras tanto, la historia del recocido aterriza en el otro muro: como paisaje energético, E2 fue [construido para tener una aguja y ningún gradiente hacia ella](/es/research/why/complex-theory/). La verdadera relevancia de lo cuántico para E2 hoy es que evaluar el puzzle frente a hardware hipotético localiza la dificultad precisamente donde las páginas de estructura dicen que reside: en el árbol, no en el reloj. ## Cómo sería un intento serio La brecha entre «deseado» y «medido» es, por una vez, barata de cerrar. El tiempo de recocedor se alquila por minutos, y el experimento en sí es pequeño: 1. **Codifica la escalera, no el puzzle.** Escribe el QUBO anterior (o la forma de variables discretas de Poitras, [message 11176](https://groups.io/g/eternity2/message/11176)) para [la suite de bancos de prueba de Brendan Owen](/es/research/build/benchmarks/) empezando por 4×4 y 5×5, tamaños cuyos grupos one-hot sí caben en un chip de ~5.000 qubits. 2. **Ejecuta tres solucionadores sobre el mismo $H$:** la QPU real, el recocido simulado clásico, y un híbrido tabú/SA moderno: la misma función de energía, el mismo corte. La QPU debe batir al recocido clásico *en su propia codificación* antes de que cualquier afirmación mayor signifique algo. 3. **En hardware de puertas, haz la prueba de concepto de mulisak**: QAOA o Grover sobre un juguete de set-cover de ~30 qubits ([message 11813](https://groups.io/g/eternity2/message/11813)), sabiendo de antemano que demuestra maquinaria, no progreso. 4. **Reporta la curva de escalado, no la anécdota:** probabilidad de éxito y tiempo hasta la solución en función del tamaño del tablero, junto a la línea base clásica. El mejor caso realista no es un 6×6 resuelto; es un cruce medido o, más probablemente, una entrada limpia y con fuentes en el registro de [callejones sin salida](/es/research/build/dead-ends/), lo que en este wiki también cuenta como progreso. Hasta que alguien lo haga, el marcador reza: dos hermosos algoritmos, una aritmética que termina en $10^{22}$ pasos secuenciales, una codificación tres órdenes de magnitud demasiado grande para su hardware, y un archivo de diecinueve años en el que el ordenador cuántico sigue siendo lo que era en mayo de 2007: el club que nadie llegó a construir nunca. ## Relacionado - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - [Resolución en FPGA: cartografiada, pero nunca recorrida](https://eternity2.dev/es/research/build/hardware/fpga-solving/) — Si el bucle de colocación está limitado por la latencia de memoria, un FPGA parece la respuesta exacta: alojar las tablas de consulta en la block RAM embarcada, a un ciclo de distancia, y encauzar en pipeline decenas de pequeños backtrackers en un mismo chip. La comunidad cartografió esta ruta en detalle. Michael Field diseñó el solucionador, proyectó cinco mil millones de colocaciones por segundo y por chip, y ejecutó un prototipo sobre silicio real. Luego la ruta nunca se recorrió hasta el final. El expediente completo, y por qué. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. --- # Hechos y cifras establecidos > Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/known-facts/ - Actualizado: 2026-07-21 - Temas: structure - Fuente: Wikipedia, «Eternity II puzzle» (el premio, la fecha límite, el 467 de Verhaard y la estimación de 10^557) — https://en.wikipedia.org/wiki/Eternity_II_puzzle - Fuente: 469: hilo «EternityII Solver» (el tablero de Blackwood y McGavin), eternity2@groups.io, 2020-09 — https://groups.io/g/eternity2/message/10045 - Fuente: 470: «470 Found» (Joshua Blackwood), eternity2@groups.io, 2021-03 — https://groups.io/g/eternity2/message/10117 - Fuente: 460 con las cinco pistas: hilo «Highest points (of 480) with using all 5 (!) hints?», eternity2@groups.io, 2023-03 — https://groups.io/g/eternity2/message/11074 - Fuente: 464 con las cinco pistas (Benjamin Riotte): hilo «Record of Eternity2 with 5 hints?», eternity2@groups.io, 2026-07 — https://groups.io/g/eternity2/message/11919 - Fuente: Estimaciones del número esperado de soluciones de Brendan Owen (groups.io message 5197) — https://groups.io/g/eternity2/message/5197 - Fuente: Louis Verhaard, detalles del algoritmo y de la puntuación del 467 (shortestpath.se) — https://www.shortestpath.se/eii/eii_details.html - Fuente: e2.bucas.name (Jef Bucas), el visualizador de tableros de la comunidad; cada tablero récord se vuelve a puntuar ahí — https://e2.bucas.name --- Toda conversación sobre Eternity II acaba deteniéndose mientras alguien redemuestra el mismo puñado de cifras. Esta página es ese puñado, anotado de una vez por todas. Los hechos marcados como **calculado** se redemuestran de forma exacta a partir del juego de piezas oficial, los mismos datos con los que se contrastan nuestras páginas de [cifras de referencia](/es/research/reference/) y [¿Por qué es difícil?](/es/research/why/), y cualquiera puede reproducirlos. Los hechos sobre récords proceden de los mensajes primarios de la lista de correo; los hechos enciclopédicos, de Wikipedia. ## El puzzle en cifras | Hecho | Valor | Procedencia | | --- | --- | --- | | Tablero | 16×16 = 256 celdas, enmarcado | oficial | | Piezas | 256, todas distintas | oficial; calculado | | Piezas de esquina (2 lados grises) | 4 | calculado | | Piezas de borde (1 lado gris) | 56 | calculado | | Piezas interiores (0 lados grises) | 196 | calculado | | Colores (borde gris excluido) | 22 | calculado | | de los cuales colores exclusivos del marco | 5 | calculado | | de los cuales colores de la paleta interior | 17 | calculado | | Aristas internas (pares de celdas adyacentes) | 480 = 2 · 16 · 15 | calculado | | Colocaciones de pistas fijadas | 5 | oficial | | Premio | 2.000.000 $, sin reclamar; fecha límite mediodía, 31 dic. 2010 | Wikipedia | El color gris del borde exterior no forma parte de los 22: nunca aparece en una arista interna. La división de colores 5 + 17 no es casual: 17 colores interiores es [exactamente el pico de dificultad](/es/research/why/phase-transition/) para un puzzle de este tamaño. ## Las cinco pistas La hoja de reglas fija una pieza; Tomy vendió cuatro [puzzles-pista](/es/research/build/clue-puzzles/) más pequeños cuyas soluciones revelaban cada una una colocación adicional, y las colocaciones restantes se publicaron más tarde. Las casillas usan la notación de tablero de [e2.bucas.name](https://e2.bucas.name): filas A–P desde arriba, columnas 1–16 desde la izquierda. Los números de pieza van del 1 al 256 en el orden de la lista oficial, y la rotación se cuenta en el sentido de las agujas del reloj a partir de la orientación almacenada de la pieza. | Casilla | Pieza | Rotación | Qué pista | | --- | --- | --- | --- | | I8 | 139 | 0° | obligatoria (en el libro de reglas) | | C3 | 208 | 90° | puzzle-pista | | C14 | 255 | 90° | puzzle-pista | | N3 | 181 | 90° | puzzle-pista | | N14 | 249 | 180° | puzzle-pista | > **[Figure]** interactive: CluePositionsDiagram. Rendered on the canonical page (link above); not shown in this markdown export. Un tablero que respeta las cinco pistas se denomina **estrictamente canónico**; la mayoría de los tableros récord solo respetan la pista central obligatoria («canónico»). Esa distinción divide en dos la tabla de récords; véase más abajo. Las pistas también zanjan una cuestión de recuento: con solo la pieza obligatoria colocada, la [teoría compleja](/es/research/why/complex-theory/) prevé ≈ 14.702 soluciones completas; con las cinco, ≈ 1. El puzzle de 5 pistas tiene, por diseño, una única solución esperada. ## Convenciones de puntuación - **Puntuación = aristas internas apareadas, sobre 480.** Las 60 aristas grises orientadas hacia el exterior, alrededor del marco, no se cuentan. Es la convención del jurado del premio, de todos los récords de la tabla de más abajo, y de este wiki. - **«Rupturas» = 480 − puntuación.** Los autores de solucionadores a menudo informan del número de desapareamientos en su lugar: el 468 de Blackwood se anunció en la lista de correo como «12 breaks». - **479 es posible, pero solo a través del borde.** Un [argumento de paridad](/es/research/build/analysis/parity-arguments/) del verano del lanzamiento afirmaba que un único desapareamiento no puede existir ([kubzpa, 2007](https://groups.io/g/eternity2/message/1640)), y se sostiene para los movimientos interiores (rotar una pieza interior con aristas opuestas iguales rompe dos, dando 478, [msg 1642](https://groups.io/g/eternity2/message/1642)). Pero la paridad se fuga a través de las 60 aristas de borde exterior *no puntuadas*: voltear una pieza de borde cuyos dos lados orientados hacia el anillo comparten un color rompe exactamente una arista puntuada ([Verhaard, 2009](https://groups.io/g/eternity2/message/6317)). El juego oficial tiene 14 piezas de borde de este tipo (calculado), de modo que toda solución completa implica un 479. - **Comprueba el juego de piezas antes de comparar puntuaciones.** Varios tableros «480» que acaparan titulares usan [juegos de piezas variantes](/es/research/build/variants/) (diseños Clue-1/Clue-2, juegos mixtos, la variante sin marco de TopCoder). Son puzzles distintos; véase [Récords y solucionadores](/es/research/records/). Las 480 aristas internas se reparten en tres familias (calculado): | Familia de aristas | Número | | --- | --- | | Borde ↔ borde (alrededor del anillo del marco de 60 piezas) | 60 | | Borde ↔ interior (la costura, 4 × 14) | 56 | | Interior ↔ interior (dentro del núcleo 14×14) | 364 | | **Total** | **480** | ## La tabla de récords La cronología completa, con vistas previas de tableros y referencias por récord, se encuentra en [Récords y solucionadores](/es/research/records/). Las cifras en sí: | Puntuación | Quién | Cuándo | Categoría | | --- | --- | --- | --- | | 467 | Equipo de Louis Verhaard | Sept. 2008 | canónico; ganó el premio parcial de 10.000 $ | | 468 | Joshua Blackwood | Ago. 2020 | canónico | | 469 | Peter McGavin (solucionador de Blackwood) | Sept. 2020 | canónico | | 469 | varios (~7 tableros, hallazgos independientes más un simple intercambio del de McGavin) | Nov. 2020 | canónico | | **470** | **Joshua Blackwood** | **Mar. 2021** | **canónico, el techo desde entonces** | | 470 | Jef Bucas | Dic. 2024 | canónico (empate del 470) | | 460 | Bruno Gauthier | Mar. 2023 | estrictamente canónico; mejor tablero que respeta las cuatro pistas opcionales, de 2023 hasta ser batido en jul. 2026 | | **464** | **Benjamin Riotte** | **Jul. 2026** | **récord estrictamente canónico; batió el 460 de Gauthier, con las cinco pistas respetadas** | | «480» | varios | 2023 | juegos de piezas variantes, no el puzzle canónico | Los 469 se citaron durante mucho tiempo como el techo, pero la verificación a nivel de tablero muestra que los tableros 468/469/470 pertenecen todos al mismo régimen de solo la pieza inicial (las reglas del concurso fijaban únicamente la pieza inicial), de modo que el 470 es el récord sobre el mismo puzzle, no sobre una variante más fácil. Nunca nadie ha reportado una solución canónica completa (480/480), en ninguna fuente pública. La brecha de 10 aristas se mantiene desde marzo de 2021. Las vistas previas de tableros y las referencias por récord de cada fila están en [Récords y solucionadores](/es/research/records/). **Objetivos abiertos.** El 16×16 completo no es el único tablero sin resolver con nombre propio. El más cercano es el [10×10 set_2 de Brendan Owen](/es/research/build/benchmarks/#los-1010-de-brendan-uno-cayó-el-otro-sigue-en-pie): su gemelo set_1 cayó tras unos 180 núcleos-año, y set_2 sigue abierto, con su dificultad ya tasada por la teoría. El [tablero de problemas abiertos](/es/research/open-problems/) lo reúne junto con el resto de la frontera viva. ## Cuál es el tamaño de la búsqueda | Recuento | Valor | Procedencia | | --- | --- | --- | | Todas las colocaciones, sin restricciones: 256! · 4²⁵⁶ | ≈ 1,15 × 10⁶⁶¹ | calculado | | Esquinas en esquinas, bordes en el borde (orientación forzada), pista fijada: 4! · 56! · 195! · 4¹⁹⁵ | ≈ 1,115 × 10⁵⁵⁷ | calculado; coincide con la cifra ampliamente citada de Wikipedia | | Punto más ancho del árbol de búsqueda (estimación por teoría compleja, recorrido por filas) | ≈ 10⁴⁵ maneras de extender, en torno a la profundidad 50–200 | Owen / McGavin, véase [teoría compleja](/es/research/why/complex-theory/) | | Soluciones completas esperadas, 1 pista / 5 pistas | ≈ 14.702 / ≈ 1 | ídem | La cifra de 10⁵⁵⁷ merece que uno sepa redemostrarla en lugar de citarla: las 4 piezas de esquina van a las 4 esquinas (orientación forzada por los dos lados grises), las 56 piezas de borde a las 56 ranuras de borde (orientación forzada), y las 195 piezas interiores libres restantes (196 menos la pista fijada) toman cada una una de las 4 rotaciones. ## Hechos de simetría Todos calculados a partir del juego de piezas oficial: - **Ninguna pieza es simétrica por rotación.** Cada una de las 256 piezas tiene 4 orientaciones distintas, de modo que la rotación nunca reduce el conjunto de candidatos de una pieza. - **No hay dos piezas idénticas, ni siquiera salvo rotación.** No existen duplicados intercambiables que explotar. - **Cinco pares comparten un multiconjunto de colores sin ser la misma pieza**: las piezas 3 y 4, 6 y 15, 8 y 52, 110 y 111, 172 y 182 (numeración oficial desde 1) llevan los mismos cuatro colores en un orden cíclico diferente. - **Las pistas rompen todas las simetrías del tablero.** Un tablero 16×16 no tiene celda central, así que toda rotación o reflexión desplaza la casilla I8 de la pista obligatoria: ninguna simetría no trivial aplica el puzzle con pistas sobre sí mismo, y la ruptura de simetría no ofrece ninguna reducción adicional del espacio de búsqueda. ## Los colores, arista por arista Las 256 piezas llevan 1.024 pegatinas de arista; 64 son grises (2 por pieza de esquina, 1 por pieza de borde), lo que deja 960 instancias de arista coloreadas. Su censo (calculado; véase [geografía de los colores raros](/es/research/why/rare-color-geography/)): | Grupo de colores | Colores | Instancias de arista cada uno | Total | | --- | --- | --- | --- | | Exclusivos del marco («raros») | 5 | 24 (todas en piezas del marco, ninguna interior) | 120 | | Paleta interior, baja | 5 | 48 | 240 | | Paleta interior, alta | 12 | 50 | 600 | | **Total** | **22** | | **960** | Dos consecuencias que los investigadores no dejan de redescubrir: - **Cada recuento por color es par, y las mitades suman exactamente 480.** Una arista interna apareada consume dos instancias de un mismo color, así que una solución perfecta necesita $\sum_c N_c / 2 = 480$ apareamientos, que es exactamente el número de aristas internas. No hay **ningún margen**: en una solución completa, cada instancia de arista de cada color encuentra a su pareja. - **Los cinco colores raros solo viven en el marco** (24 instancias cada uno), lo que convierte el anillo del marco en un subpuzzle casi autónomo; la geometría se detalla en [geografía de los colores raros](/es/research/why/rare-color-geography/). ## Estructura local Recuentos exactos y exhaustivos sobre las piezas interiores oficiales (calculado; detalles y demos interactivas en las páginas enlazadas): | Hecho | Valor | Véase | | --- | --- | --- | | Colocaciones interiores aleatorias de 2 celdas inviables | 14.890 / 38.220 ≈ 39 % | [patrones prohibidos](/es/research/why/forbidden-patterns/) | | Colocaciones de L-tromino aleatorias inviables | ≈ 83,3 % | ídem | | Colocaciones interiores aleatorias 2×2 inviables | 1.427.039.544 / 1.431.033.240 ≈ 99,72 % | ídem | | Piezas interiores con un vecino forzado | 0: cada pieza tiene de 73 a 137 vecinos de la derecha posibles | [sin movimientos forzados](/es/research/why/no-forced-moves/) | | Equilibrio de color borde↔interior en toda solución completa | déficit $\Delta = 0$ (una condición necesaria, Hopfer 2022) | [el equilibrio del borde](/es/research/why/border-balance/) | ## Leer la procedencia - **calculado**: redemostrado de forma exacta a partir del juego oficial de 256 piezas; las páginas correspondientes llevan los comandos de reproducción `just research-…` y los resultados en bruto viven en el [repositorio](https://github.com/raphael-anjou/eternity2). - **groups.io**: las puntuaciones récord (468, 469, 470, el 464 estricto) solo existen en los mensajes de la lista de correo y en el visualizador de tableros de la comunidad; los mensajes de anuncio exactos están enlazados desde [Récords y solucionadores](/es/research/records/), y cada tablero puede volver a puntuarse en [e2.bucas.name](https://e2.bucas.name). - **Wikipedia**: cubre solo la capa enciclopédica (el premio, la fecha límite y el 467 de Verhaard). ## Relacionado - [Números de referencia](https://eternity2.dev/es/research/reference/) — Recuentos exactos de cuántas maneras válidas hay de rellenar un bloque pequeño en una posición dada del tablero oficial de Eternity II, bajo reglas cada vez más restrictivas: números fiables para contrastar el código de emparejamiento de aristas y de restricciones de tu solucionador. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). --- # Aprender de los tableros fuertes > La mayoría de los ataques a Eternity II buscan partiendo de cero. Una familia distinta hace lo contrario: explora el corpus de tableros que la gente ya ha encontrado en busca de estructura, y luego reinyecta esa estructura en la búsqueda. Priors de posición, ordenación aprendida de jugadas, minería de antipatrones, decodificación de récords y el modo de fallo en el que una señal aprendida se derrumba. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/learning/ - Actualizado: 2026-07-16 --- Todas las demás familias de este estante buscan partiendo de cero: un backtracker excava, un beam construye, una búsqueda local pule, cada uno razonando únicamente a partir de las reglas del puzzle y del tablero que tiene delante. Esta familia hace algo distinto. Toma el corpus de tableros fuertes que la gente ya ha encontrado, lo lee en busca de estructura y reinyecta esa estructura en una búsqueda como sesgo. Está más cerca del aprendizaje por imitación que del diseño de búsqueda: la pregunta no es «cuál es una buena jugada» partiendo de cero, sino «qué tendían a hacer los tableros que puntuaron bien, y puede eso reutilizarse». Las páginas siguientes van técnica por técnica. Cada una es realmente su propio método, de modo que no comparten una forma común como sí lo hacen los pulidores de búsqueda local: un prior de posición, una ordenación aprendida de jugadas, un minero de antipatrones y un rejuego de testigo comparten una tesis pero no un mecanismo. Para abarcar todo el territorio de una vez, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). Para los experimentos ejecutables que encarnan estas técnicas, con sus tableros y sus cifras, consulta los [experimentos de aprendizaje a partir de tableros](/es/research/lab/experiments/raphael-anjou/learning/). ## La tesis, y su límite Una señal aprendida ayuda cuando captura estructura real y transferible: algo cierto de los buenos tableros que una búsqueda partiendo de cero tendría que redescubrir de otro modo por suerte. Dónde tiende a situarse cada pieza, qué piezas gustan de tocarse, qué demanda escasa una pieza rara es la única capaz de satisfacer. Cableada en una búsqueda como un sesgo leve, esa estructura lleva de forma fiable una construcción a lo más alto de su propio rango. El límite es lo que hace de esto investigación y no un saco de trucos. El corpus del que se aprenden estas señales es él mismo subperfecto: cada tablero que contiene está atascado en algún punto por debajo de 480. Así que una señal extraída del corpus codifica el *techo* de la comunidad tanto como su sabiduría, y una señal que se limita a recodificar la meseta en la que cada tablero fuerte ya está atrapado no eleva nada. Empuja un prior aprendido, bueno para desempatar, hasta el interior de la función objetivo y la búsqueda se derrumba, porque empieza a cambiar la arista que tiene delante por una corazonada estadística. El hilo conductor nítido de toda esta familia: aprender de los tableros fuertes te hace alcanzar la meseta rápido y de forma fiable, pero no te hace, por sí solo, superarlo. El techo es el [muro de rigidez](/es/research/why/rigidity-wall/), y ninguna cantidad de minería del corpus lo mueve. ## Las técnicas - **[Priors de corpus](/es/research/build/learning/corpus-priors/)** son la forma más simple: cuenta dónde se sitúa cada pieza en los tableros fuertes, o con qué frecuencia una pieza satisface una demanda escasa, y usa el recuento como desempate en la construcción. Los experimentos [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) y [LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/). - **[Ordenación aprendida de jugadas](/es/research/build/learning/learned-value-ordering/)** clasifica las colocaciones candidatas según varias señales aprendidas a la vez, y las deja votar, de modo que ninguna corazonada aislada lleve la búsqueda al mismo callejón sin salida. El experimento [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/). - **[Minería de antipatrones](/es/research/build/learning/anti-pattern-mining/)** es la idea más sutil: no todo acuerdo entre tableros fuertes es bueno. Separa la estructura real de la trampa compartida, y ataca la trampa. El experimento [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/), que alcanzó el mejor tablero de este proyecto. - **[Decodificación de récords](/es/research/build/learning/decoding-records/)** reconstruye exactamente un tablero récord conocido, pieza por pieza, para recuperar el ingrediente que le faltaba a una búsqueda ordinaria. La reproducción como prueba. El experimento [REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/). - **[Cuando el aprendizaje se derrumba](/es/research/build/learning/when-learning-collapses/)** es la síntesis sobre el modo de fallo: exactamente cuándo una señal aprendida deja de ayudar, por qué confiar en exceso en ella arruina la búsqueda, y por qué ninguno de estos métodos eleva el techo. Fija el límite de toda la sección: las señales aprendidas alcanzan la meseta más rápido, pero ninguna lo levanta. ## Páginas de esta sección - [Priors de corpus](https://eternity2.dev/es/research/build/learning/corpus-priors/) — La forma más simple de aprender de los tableros fuertes: contar dónde tiende a situarse cada pieza, o con qué frecuencia satisface una demanda escasa, y usar ese recuento como un suave desempate en la construcción. Debe seguir siendo un desempate; en cuanto pasa a formar parte del objetivo, hace colapsar la búsqueda. - [Ordenación de jugadas aprendida](https://eternity2.dev/es/research/build/learning/learned-value-ordering/) — Cuando varias piezas encajan, ¿cuál colocas a continuación? En lugar de una sola regla empírica, transporta varias señales aprendidas de los buenos tableros y deja que voten. El voto evita que la búsqueda confíe en exceso en una única corazonada y avance hacia el mismo callejón sin salida. - [Minería de anti-patrones](https://eternity2.dev/es/research/build/learning/anti-pattern-mining/) — La idea sutil detrás de aprender de los tableros fuertes: no todo acuerdo entre ellos es bueno. Algunos emplazamientos compartidos son estructura real; otros son una trampa común que limita cada búsqueda justo por debajo de la cima. Distinguir ambos y atacar la trampa. - [Decodificar récords](https://eternity2.dev/es/research/build/learning/decoding-records/) — La forma más literal de aprender de un tablero fuerte: reconstruirlo con exactitud, pieza por pieza, hasta que tu búsqueda sepa reproducirlo. Lo que la reconstrucción te obliga a añadir es el ingrediente que le faltaba a tu búsqueda, y la reproducción es la prueba. - [Cuando el aprendizaje se desmorona](https://eternity2.dev/es/research/build/learning/when-learning-collapses/) — La mitad desencantada de aprender a partir de tableros fuertes. Una señal aprendida alcanza de forma fiable el tope del rango propio de una búsqueda, y ahí se detiene. Confía demasiado en ella y la búsqueda se desmorona; incluso usada a la perfección no eleva el techo, porque el techo no es algo que el corpus conozca. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. --- # Minería de anti-patrones > La idea sutil detrás de aprender de los tableros fuertes: no todo acuerdo entre ellos es bueno. Algunos emplazamientos compartidos son estructura real; otros son una trampa común que limita cada búsqueda justo por debajo de la cima. Distinguir ambos y atacar la trampa. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/learning/anti-pattern-mining/ - Actualizado: 2026-07-16 - Temas: local-search, learning - Fuente: Ropke & Pisinger 2006, búsqueda adaptativa de gran vecindario (el marco de destrucción-reparación que aquí se dirige) — https://doi.org/10.1287/trsc.1050.0135 --- Cada técnica vista hasta ahora trata el acuerdo entre tableros fuertes como algo bueno: allí donde los buenos tableros concuerdan, se los sigue. Esta descompone ese acuerdo, porque una parte de él es una trampa. Cuando muchas búsquedas independientes alcanzan todas un tablero alto pero imperfecto, coinciden en un enorme número de emplazamientos, y una parte de ese acuerdo es estructura genuina mientras que otra es un mal hábito compartido: una elección local que parece buena, se siente forzada y limita silenciosamente cada búsqueda justo por debajo de la cima. Toda la idea consiste en distinguir ambos y luego atacar la trampa. ## Dos frecuencias, no una Un simple recuento no puede separar la estructura real de la trampa, porque ambas aparecen casi en todas partes. El truco está en calcular *dos* frecuencias para cada patrón candidato y compararlas. Sobre un corpus de tableros repartidos en una amplia franja de puntuaciones, para cada par de celdas adyacentes y cada par de piezas que alguna vez ocupa ese lugar, se mide: $$ p_\text{high} = \frac{\#\{\text{boards with the pair, score} \ge 460\}}{\#\{\text{boards} \ge 460\}}, \qquad p_\text{all} = \frac{\#\{\text{boards with the pair}\}}{\#\{\text{all boards}\}} $$ junto con un *techo*: la mejor puntuación de cualquier tablero que contenga el patrón. Emergen dos categorías. Un **buen consenso** es un $p_\text{all}$ alto con un techo alto, un patrón que los tableros fuertes comparten *y* que los mejores tableros conservan: estructura real y fiable. Una **trampa de consenso** es un $p_\text{all}$ alto con un techo estancado justo por debajo de la cima, un patrón que casi todos los tableros adoptan pero que ningún tablero de cabeza retiene: la elección equivocada consensuada que bloquea a toda una familia por debajo del récord. La vista de frecuencia única no puede distinguirlos; separar por cuenca es todo el movimiento. > **[Figure]** Interactivo: el mapa de trampas, familia de esquinas por familia de esquinas — interactive: PalimpsestDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## Dirigir, no prohibir Saber dónde están las trampas convierte el corpus en un mapa de qué emplazamientos merecen confianza y cuáles hay que desmontar. El experimento [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) lo usa para dirigir una búsqueda [ALNS](/es/research/build/local-search/local-search-alns/): se toma un tablero atrapado en la cuenca de la trampa, se busca la cuña cuya eliminación rompe el mayor número de patrones-trampa preservando los de buen consenso, se rompen deliberadamente esas celdas y se devuelve el tablero al bucle de reparación, cuyo operador de destrucción abre precisamente esas regiones rotas y las reconstruye. Dirigida así, alcanzó 463, el mejor tablero que ha producido este proyecto (el [experimento PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/), cuyo tablero versionado se reproduce mediante `just research-record-boards`). La salvedad es la lección. Intentar usar la lista de trampas *directamente*, forzando a la búsqueda a evitar cada emplazamiento atrapado, no funcionó y empeoró los tableros. El valor estaba en leer el corpus para elegir *hacia dónde apuntar* la búsqueda, no en codificar en duro sus conclusiones como una prohibición. Un mapa aprendido es un buen lugar hacia el que orientar una búsqueda y un mal juego de grilletes que atornillarle, que es la misma frontera entre desempate y objetivo que atraviesa los [a priori de corpus](/es/research/build/learning/corpus-priors/), vista desde el otro lado: aquí el peligro no es sobreponderar una buena señal, sino confiar en exceso en una señal sobre lo que es *malo*. Incluso perfectamente dirigida, esta vía no franquea la cima. Reconstruir las regiones atrapadas tiende a caer de nuevo en el mismo tablero de cabeza ya conocido en lugar de en uno genuinamente nuevo, porque la trampa no es un error que una búsqueda más astuta evite; es el [muro de rigidez](/es/research/why/rigidity-wall/) en sí. Ese es el tema de la [página sobre el colapso](/es/research/build/learning/when-learning-collapses/). ## Relacionado - [Ordenación de jugadas aprendida](https://eternity2.dev/es/research/build/learning/learned-value-ordering/) — Cuando varias piezas encajan, ¿cuál colocas a continuación? En lugar de una sola regla empírica, transporta varias señales aprendidas de los buenos tableros y deja que voten. El voto evita que la búsqueda confíe en exceso en una única corazonada y avance hacia el mismo callejón sin salida. - [Cuando el aprendizaje se desmorona](https://eternity2.dev/es/research/build/learning/when-learning-collapses/) — La mitad desencantada de aprender a partir de tableros fuertes. Una señal aprendida alcanza de forma fiable el tope del rango propio de una búsqueda, y ahí se detiene. Confía demasiado en ella y la búsqueda se desmorona; incluso usada a la perfección no eleva el techo, porque el techo no es algo que el corpus conozca. - [PALIMPSEST](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. --- # Priors de corpus > La forma más simple de aprender de los tableros fuertes: contar dónde tiende a situarse cada pieza, o con qué frecuencia satisface una demanda escasa, y usar ese recuento como un suave desempate en la construcción. Debe seguir siendo un desempate; en cuanto pasa a formar parte del objetivo, hace colapsar la búsqueda. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/learning/corpus-priors/ - Actualizado: 2026-07-16 - Temas: construction, learning - Fuente: Búsqueda en haz (página de concepto de este proyecto): la construcción de anchura acotada que un prior sesga — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx --- Lo más simple que se puede aprender de un montón de tableros fuertes es un recuento. Para cada celda del tablero, ¿con qué frecuencia se sitúa allí cada pieza a lo largo de los buenos tableros? Ese único registro es un *prior*: una suave preferencia estadística por lo que tiende a pertenecer a cada sitio. No copia ningún tablero en particular; lee de una sola vez a toda la multitud de ellos y destila un sesgo. ## La matriz de recuentos Tome cada tablero del corpus que supere un umbral de puntuación y registre una matriz $M[c][p]$: cuántos tableros fuertes colocan la pieza $p$ en la celda $c$. Normalizada por celda, $M[c][\cdot]$ es una distribución sobre las piezas para esa posición, la preferencia aprendida. Su construcción cuesta una única pasada lineal sobre el corpus, y nada más en el momento de la búsqueda salvo una consulta. > **[Figure]** Interactivo: el mapa de calor del prior de posición — interactive: PriorDiagram. Rendered on the canonical page (link above); not shown in this markdown export. El prior solo se usa para desempatar. Una [búsqueda en haz](/es/research/build/construct/beam-search/) extiende sus tableros parciales celda a celda; cuando dos colocaciones candidatas casan el mismo número de aristas, el prior inclina la elección hacia la pieza más típica de los tableros fuertes en ese sitio. El recuento de aristas casadas sigue decidiendo; el prior solo habla cuando el recuento calla. Esta es la [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) experimento, que construye un tablero competitivo a partir de una cuadrícula vacía, sin tablero al que anclarse, y alcanza así 460. Vale la pena nombrar tres afilados del mismo recuento, porque cada uno cambia fuerza de señal por ruido: - **Sensible a la rotación.** Se desdobla cada pieza según sus cuatro rotaciones, de modo que el prior prefiere no solo la pieza correcta sino la orientación correcta. La matriz crece de $256 \times 256$ a $1024 \times 256$; la señal es más fina pero más delgada por celda. - **Por familia de esquinas.** Los tableros fuertes se reparten en familias según sus cuatro piezas de esquina. Un prior construido a partir de los tableros de una sola familia captura una estructura que la matriz agrupada promedia y borra, que es lo que permitió a PRIOR alcanzar una cuenca nueva en lugar de la común y concurrida. - **Umbral más severo.** Se reconstruye el prior a partir solo de los muy mejores tableros. El techo de la construcción se eleva, a costa de una señal más delgada y ruidosa, aprendida de menos ejemplos. ## Un prior sobre la demanda, no la posición El recuento no tiene por qué recaer sobre las posiciones. Un prior más sutil pregunta, para cada *pieza*, con qué frecuencia acaba satisfaciendo una **demanda escasa**: una celda cuyos colores norte y oeste solo pueden ser servidos por una o dos piezas de todo el conjunto. Los tableros fuertes satisfacen cada vez más las mismas demandas escasas a medida que ascienden, de modo que una pieza que suele ser la que se gasta en un color raro se gana un peso alto. Ordenar los candidatos según las aristas casadas más un pequeño múltiplo de ese peso empuja a la búsqueda a comprometer las piezas raras temprano, antes de que se las roben. Esta es la [LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/) experimento, y se conecta con la [geografía de colores raros](/es/research/why/rare-color-geography/) del puzzle. ## Por qué sigue siendo un desempate El detalle portante, tanto para el prior posicional como para el de demanda escasa, es que el múltiplo sobre el prior debe ser *minúsculo*. Un prior es un puro desempatador: decide entre movimientos que casan por igual y nada más. Suba el peso aunque sea un poco y la búsqueda empieza a trocar una arista casada real por una corazonada estadística, y la puntuación colapsa: LODESTONE cae de 451 a 422 a 380 a medida que el peso sube. Ese colapso no es un fallo de implementación; es la forma de toda la familia, y tiene su propia página: [cuando el aprendizaje colapsa](/es/research/build/learning/when-learning-collapses/). ## Relacionado - [Ordenación de jugadas aprendida](https://eternity2.dev/es/research/build/learning/learned-value-ordering/) — Cuando varias piezas encajan, ¿cuál colocas a continuación? En lugar de una sola regla empírica, transporta varias señales aprendidas de los buenos tableros y deja que voten. El voto evita que la búsqueda confíe en exceso en una única corazonada y avance hacia el mismo callejón sin salida. - [Cuando el aprendizaje se desmorona](https://eternity2.dev/es/research/build/learning/when-learning-collapses/) — La mitad desencantada de aprender a partir de tableros fuertes. Una señal aprendida alcanza de forma fiable el tope del rango propio de una búsqueda, y ahí se detiene. Confía demasiado en ella y la búsqueda se desmorona; incluso usada a la perfección no eleva el techo, porque el techo no es algo que el corpus conozca. - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [LODESTONE](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/lodestone/) — Una brújula tenue para una búsqueda partida de cero: incitarla a comprometer las piezas raras pronto, allí donde se necesitan. No eleva el techo; hace que la búsqueda alcance de forma fiable la cima de su propio rango. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. --- # Decodificar récords > La forma más literal de aprender de un tablero fuerte: reconstruirlo con exactitud, pieza por pieza, hasta que tu búsqueda sepa reproducirlo. Lo que la reconstrucción te obliga a añadir es el ingrediente que le faltaba a tu búsqueda, y la reproducción es la prueba. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/learning/decoding-records/ - Actualizado: 2026-07-16 - Temas: backtracking, learning - Fuente: Tableros récord de la comunidad (cronología de récords de este proyecto): los testigos que un rejuego reconstruye — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/records.mdx --- Los priors de corpus y el minado de anti-patrones aprenden un *estadístico* a partir de muchos tableros. Esta técnica aprende de un *único* tablero, y aprende lo más difícil de percibir desde la distancia: la única jugada que una búsqueda ordinaria no puede hacer. El método es brutalmente literal. Toma un tablero récord conocido e intenta que tu propia búsqueda lo reconstruya con exactitud, pieza por pieza. Todo lo que tengas que añadir a tu búsqueda antes de que pueda recorrer ese camino es precisamente el ingrediente que le faltaba, y la reconstrucción exacta es la prueba de que ese ingrediente es real. ## La reproducción como prueba El montaje es una búsqueda en profundidad ejecutada en un modo deliberadamente restringido, apuntada a un tablero testigo concreto en lugar de buscar libremente: - **Ordenación del prior por encima del coste.** Un backtracker ordinario tolerante a rupturas clasifica los emplazamientos candidatos por coste de desajuste inmediato, primero el más barato. Un rejuego invierte la prioridad, de modo que los emplazamientos que el tablero testigo realmente usó imponen su rango sobre los que parecen más baratos. La búsqueda es arrastrada por el buen camino conocido en lugar de desviarse de él. - **Una cola exacta.** Las últimas celdas se resuelven de forma exacta en lugar de heurística, de modo que el final que una ejecución ordinaria chapucea se cierra de manera determinista. - **La relajación bajo prueba.** Con la ordenación y la cola fijadas, varías la única regla que sospechas que es la barrera, y vigilas el instante en que el testigo se reconstruye. Este es el experimento [REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/), y lo que encontró en los tableros strict-460 de la comunidad es un ejemplo limpio de la recompensa. La búsqueda tolerante a rupturas propia del proyecto se había saturado en 457 o 458 hiciera lo que hiciera, y la razón resultó ser una única regla que nadie había cuestionado: permitía a lo sumo *una* arista en desajuste por celda. Los tableros récord contienen cada uno cuatro o cinco celdas que pagan *dos* desajustes de una vez. Una búsqueda limitada a una ruptura por celda es literalmente incapaz de representar esos tableros, así que quedaba apartada de los mismísimos objetivos que perseguía. > **[Figure]** Interactivo: las celdas de doble ruptura — interactive: DoubleBreakDiagram. Rendered on the canonical page (link above); not shown in this markdown export. > **[Figure]** Interactivo: reproducir el calendario de rupturas — interactive: DoubleBreakLab. Rendered on the canonical page (link above); not shown in this markdown export. Sube el presupuesto por celda de uno a dos, y ambos testigos strict-460 de la comunidad se reconstruyen con exactitud, cada pieza en su sitio, con la puntuación cuadrando arista por arista. La reconstrucción *es* el hallazgo: un resultado de completitud de búsqueda disfrazado de intento de récord. El muro estaba en el conjunto de jugadas, no en el cómputo. ## Qué puede y qué no puede comprar el decodificado Decodificar un récord es el diagnóstico más afilado de esta familia, porque convierte una sospecha vaga ("a nuestra búsqueda le falta algo") en una afirmación concreta y verificable ("no puede pagar dos rupturas en una misma celda"). Es también, en el mismo aliento, el más franco sobre sus límites. Recuperar la doble ruptura eleva la escalera estricta a 460, pero no dice, por sí solo, si dos rupturas por celda abren un camino hacia 461 y más allá o meramente hacia los 460 conocidos. El decodificado te dice el ingrediente que un testigo usó; no promete que ese ingrediente llegue más lejos de lo que llegó el testigo. Esa brecha, una jugada aprendida que alcanza la meseta sin probar nada más allá de ella, es el tema de la [página sobre el colapso](/es/research/build/learning/when-learning-collapses/). ## Relacionado - [Minería de anti-patrones](https://eternity2.dev/es/research/build/learning/anti-pattern-mining/) — La idea sutil detrás de aprender de los tableros fuertes: no todo acuerdo entre ellos es bueno. Algunos emplazamientos compartidos son estructura real; otros son una trampa común que limita cada búsqueda justo por debajo de la cima. Distinguir ambos y atacar la trampa. - [Cuando el aprendizaje se desmorona](https://eternity2.dev/es/research/build/learning/when-learning-collapses/) — La mitad desencantada de aprender a partir de tableros fuertes. Una señal aprendida alcanza de forma fiable el tope del rango propio de una búsqueda, y ahí se detiene. Confía demasiado en ella y la búsqueda se desmorona; incluso usada a la perfección no eleva el techo, porque el techo no es algo que el corpus conozca. - [REPLAY](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/replay/) — Reconstruir de forma idéntica los tableros estrictos de 460 de la comunidad y descubrir, de paso, la jugada que los solucionadores corrientes no saben hacer: pagar dos desajustes en una misma celda. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Aprendizaje de no-goods: recordar por qué fallaste](https://eternity2.dev/es/research/build/reduce/nogood-learning/) — Un subárbol fallido es un teorema: este estado parcial nunca podrá extenderse. Memorízalo y no vuelvas a entrar en él. La comunidad probó ambas variantes: tablas de transposición al estilo del ajedrez sobre la frontera de búsqueda, y restricciones extraídas del propio puzzle. El balance completo de lo que la memoria compra a la escala de E2, y los tableros pequeños donde realmente rinde. --- # Ordenación de jugadas aprendida > Cuando varias piezas encajan, ¿cuál colocas a continuación? En lugar de una sola regla empírica, transporta varias señales aprendidas de los buenos tableros y deja que voten. El voto evita que la búsqueda confíe en exceso en una única corazonada y avance hacia el mismo callejón sin salida. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/learning/learned-value-ordering/ - Actualizado: 2026-07-16 - Temas: construction, learning - Fuente: La búsqueda en haz (página de concepto de este proyecto): la construcción cuya ordenación de valores se aprende — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx --- Al construir un tablero pieza a pieza, la decisión difícil es qué pieza colocar a continuación cuando varias encajarían igual de bien. Una única regla empírica -el coste más bajo primero, la celda más restringida primero- tiende a llevar la búsqueda hacia el mismo callejón sin salida en cada ejecución. Un [prior de corpus](/es/research/build/learning/corpus-priors/) mejora eso con una sola señal aprendida. Esta técnica lo mejora de nuevo transportando *varias* señales aprendidas a la vez y dejándolas votar, de modo que ninguna corazonada se apropie por sí sola de la decisión. ## Varias señales, un solo voto A partir del corpus de buenos tableros puedes aprender más de una cosa a la vez, y las señales son recuentos baratos sobre el mismo conjunto de tableros: - **Pieza-en-posición.** Con qué frecuencia una pieza aparece en una celda dada a lo largo de los buenos tableros: el prior posicional de la página anterior. - **Adyacencia de pares de piezas.** Con qué frecuencia dos piezas concretas acaban en contacto. Una vecindad que el recuento posicional no ve. - **El prior de parche 2×2.** Para cada pequeño parche de cuatro celdas, un cociente de log-probabilidades suavizado a la Laplace de cuántas veces aparece en tableros de puntuación alta frente a los de puntuación baja. Un parche común en los buenos tableros y raro en los malos obtiene una puntuación positiva; un parche trampa-de-consenso obtiene una puntuación negativa. Este es el más afilado de los tres, porque es el único que contrasta lo bueno frente a lo malo en lugar de limitarse a contar lo bueno. En cada paso, el haz puntúa cada colocación candidata por su ganancia en aristas apareadas más una suma ponderada de las tres señales, y conserva las mejores. Un poco de aleatoriedad inyectada impide que los haces paralelos colapsen sobre un único camino. > **[Figure]** Interactivo: el voto de colocación de tres señales — interactive: KeyringDiagram. Rendered on the canonical page (link above); not shown in this markdown export. Esta es la experiencia [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/), un llavero de corazonadas en lugar de una sola. Alcanzó 460 en una familia de esquinas que ninguna búsqueda anterior había logrado descifrar, y ese es el verdadero beneficio: puesto que se sabe que los buenos tableros ocupan cuencas aisladas, una señal lo bastante variada para alcanzar una familia *nueva* vale más que una que redescubre un tablero ya conocido. ## Por qué el voto supera a una sola señal Una única señal aprendida tiene el mismo modo de fallo que una única regla escrita a mano: dondequiera que se equivoque, se equivoca siempre, y arrastra todos los haces en la misma dirección. Tres señales aprendidas a partir de vistas distintas del corpus -posición, adyacencia y calidad de parche- se contradicen en lugares distintos, y su desacuerdo es precisamente la aleatoriedad que mantiene a los haces explorando regiones diferentes. El prior de parche lleva el mayor peso porque es el único que codifica lo *malo*: puede alejar la búsqueda de una colocación, no solo atraerla hacia ella, lo cual es la semilla de la idea que madura hasta convertirse en la [minería de antipatrones](/es/research/build/learning/anti-pattern-mining/). Se aplica la misma advertencia que a toda señal aprendida. Los tres priors se extraen de un corpus que es en sí mismo subóptimo, de modo que codifican tanto el techo de la comunidad como su sabiduría, y el voto alcanza de forma fiable la cima del rango de la búsqueda sin elevar ese rango. Dónde se sitúa esa frontera es [objeto de su propia página](/es/research/build/learning/when-learning-collapses/). ## Relacionado - [Priors de corpus](https://eternity2.dev/es/research/build/learning/corpus-priors/) — La forma más simple de aprender de los tableros fuertes: contar dónde tiende a situarse cada pieza, o con qué frecuencia satisface una demanda escasa, y usar ese recuento como un suave desempate en la construcción. Debe seguir siendo un desempate; en cuanto pasa a formar parte del objetivo, hace colapsar la búsqueda. - [Minería de anti-patrones](https://eternity2.dev/es/research/build/learning/anti-pattern-mining/) — La idea sutil detrás de aprender de los tableros fuertes: no todo acuerdo entre ellos es bueno. Algunos emplazamientos compartidos son estructura real; otros son una trampa común que limita cada búsqueda justo por debajo de la cima. Distinguir ambos y atacar la trampa. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. --- # Cuando el aprendizaje se desmorona > La mitad desencantada de aprender a partir de tableros fuertes. Una señal aprendida alcanza de forma fiable el tope del rango propio de una búsqueda, y ahí se detiene. Confía demasiado en ella y la búsqueda se desmorona; incluso usada a la perfección no eleva el techo, porque el techo no es algo que el corpus conozca. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/learning/when-learning-collapses/ - Actualizado: 2026-07-16 - Temas: learning, search-space - Fuente: El muro de rigidez (este proyecto): el techo medido que toda señal aprendida alcanza y ninguna franquea — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/rigidity-wall.mdx --- Las otras cuatro páginas de esta sección tratan de lo que aprender a partir de tableros fuertes *aporta*. Esta trata de dónde se detiene, y es la página que mantiene a toda la familia con los pies en la tierra, porque cada técnica de aquí comparte los mismos dos modos de fallo y es mejor enunciarlos con claridad que dejar que un lector confunda un saco de trucos aprendidos con una forma de superar el muro. ## Fallo uno: la señal se convierte en el objetivo Toda señal aprendida de esta sección solo es segura como *desempate*. Decide entre jugadas que por lo demás son equivalentes en lo único que de verdad cuenta, la arista apareada que tienes delante, y nunca debe imponerse a esa cosa. En el instante en que un a priori aprendido asciende de desempate a componente del objetivo, la búsqueda empieza a canjear una arista apareada real por una corazonada estadística, y se desmorona. [LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/) es la medición más nítida de esto. Con un peso ínfimo, su a priori de piezas escasas primero eleva la puntuación mediana de construcción desde cero de 449 a 451 y estrecha la dispersión. Sube el peso aunque sea ligeramente y la puntuación cae a 422, luego a 380, porque perseguir las demandas escasas del corpus se canjea entonces directamente contra el apareado de la arista que tienes delante. La misma forma aparece en el [minado de anti-patrones](/es/research/build/learning/anti-pattern-mining/) por el otro extremo: usar la lista de trampas como una guía suave llegaba a 463, pero *prohibir* de forma dura las colocaciones atrapadas empeoraba los tableros. Una señal aprendida es un buen empujón y una mala ley. El desmoronamiento no es un accidente de ajuste que la ingeniería pueda hacer desaparecer; es la señal diciéndote que nunca fue más que una corazonada. ## Fallo dos: el techo no está en el corpus El límite más profundo es más discreto, porque parece un éxito. Usada correctamente, como desempate, una señal aprendida lleva de forma fiable una búsqueda hasta el tope de *su propio rango*, y no más allá. LODESTONE es explícito en que "no toca el techo de la cuenca que detiene a todo método cerca del tope". [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) y [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/) alcanzan 460 partiendo de cero, el tope del rango de construcción desde cero, pero no lo pasan. [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/), el más fuerte de todos, alcanza 463 y luego constata que reconstruir las regiones atrapadas devuelve al mismo tablero tope ya conocido en lugar de a uno nuevo. La razón es estructural, y es la tesis de toda la sección puesta del revés. Cada tablero del corpus está él mismo atascado por debajo de 480. Una señal minada a partir de ese corpus codifica *dónde están* los tableros fuertes, es decir, la meseta, de modo que una señal aprendida que se limita a re-codificar la meseta no puede alzar una búsqueda por encima de ella. El corpus conoce la forma de la cuenca en la que están atrapados sus tableros; no conoce la salida, porque ninguno de sus tableros la encontró. Lo que detiene a todo método cerca del tope es el [muro de rigidez](/es/research/why/rigidity-wall/): cerca de un tablero fuerte, los desapareamientos restantes se bloquean en un único [σ-ciclo](/es/research/why/sigma-cycles/) entrelazado que ninguna jugada local puede abrir. Ese muro es una propiedad del puzzle, no de la ignorancia de una búsqueda, y ninguna cantidad de minado de corpus lo mueve, porque el corpus está hecho de tableros que chocan contra ese mismo muro. ## Para qué sirve realmente esta familia Nada de esto vuelve inútil aprender a partir de tableros fuertes. Lo vuelve *preciso*. Una señal aprendida es la forma más rápida y fiable de llevar una búsqueda *hasta* la meseta: construir un tablero competitivo desde la nada (PRIOR, KEYRING), alcanzarla en una cuenca inédita (la nueva familia de esquinas de KEYRING), posarse cada vez en el tope del rango en lugar de tropezar a veces (la dispersión estrechada de LODESTONE), o diagnosticar la jugada exacta que le faltaba a una búsqueda para alcanzar una altura conocida (el doble desbloqueo de [REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/)). Para lo que no sirve es para pasar *más allá* de la meseta, y una sección sobre aprender a partir de tableros fuertes que fingiera lo contrario le vendería al lector la única cosa que el corpus, de forma demostrable, no puede contener. Los pipelines de construir-luego-refinar que alcanzan los mejores tableros de este proyecto reparten el trabajo con limpieza: un constructor aprendido para alcanzar rápido el tope del rango, y luego una confrontación aparte con el muro de rigidez, que aprender a partir de tableros fuertes sabe describir pero no sabe disolver. ## Relacionado - [Priors de corpus](https://eternity2.dev/es/research/build/learning/corpus-priors/) — La forma más simple de aprender de los tableros fuertes: contar dónde tiende a situarse cada pieza, o con qué frecuencia satisface una demanda escasa, y usar ese recuento como un suave desempate en la construcción. Debe seguir siendo un desempate; en cuanto pasa a formar parte del objetivo, hace colapsar la búsqueda. - [Minería de anti-patrones](https://eternity2.dev/es/research/build/learning/anti-pattern-mining/) — La idea sutil detrás de aprender de los tableros fuertes: no todo acuerdo entre ellos es bueno. Algunos emplazamientos compartidos son estructura real; otros son una trampa común que limita cada búsqueda justo por debajo de la cima. Distinguir ambos y atacar la trampa. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [LODESTONE](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/lodestone/) — Una brújula tenue para una búsqueda partida de cero: incitarla a comprometer las piezas raras pronto, allí donde se necesitan. No eleva el techo; hace que la búsqueda alcance de forma fiable la cima de su propio rango. --- # Búsqueda local > Parte de un tablero completo pero imperfecto y mejóralo mediante movimientos: destrucción-reparación, recocido y templado, recombinación evolutiva. Los pulidores más fiables del sitio, y las demostraciones más nítidas del muro de rigidez, donde cada uno de ellos se detiene a la misma altura. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/local-search/ - Actualizado: 2026-07-13 --- Parte de un tablero completo pero imperfecto y mejóralo mediante movimientos: destrucción-reparación, recocido y templado, recombinación evolutiva. Los pulidores más fiables del sitio, y las demostraciones más nítidas del muro de rigidez, donde cada uno de ellos se detiene a la misma altura. Las páginas siguientes avanzan técnica por técnica: qué es cada una en una línea, qué alcanzó realmente sobre el tablero 16×16 real, dónde se detiene, y los laboratorios y mediciones que la respaldan. Para ver todo el territorio de un solo vistazo, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Páginas de esta sección - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. - [Recocido simulado y tempering paralelo](https://eternity2.dev/es/research/build/local-search/parallel-tempering/) — Tratar los desajustes como energía y la temperatura como tolerancia a empeorar las cosas. El recocido ostenta el récord más longevo del puzzle; el tempering paralelo cruza barreras que el recocido no puede. Ambos se detienen en el mismo muro. - [Enfoques evolutivos y genéticos](https://eternity2.dev/es/research/build/local-search/evolutionary/) — Criar una población de tableros, conservar los más aptos, recombinar a los supervivientes. La metáfora más natural de la caja de herramientas, y el único método cuyo operador central, el cruce, choca de frente con la estructura de Eternity II. El registro completo de lo que la comunidad crió, midió y abandonó. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # Enfoques evolutivos y genéticos > Criar una población de tableros, conservar los más aptos, recombinar a los supervivientes. La metáfora más natural de la caja de herramientas, y el único método cuyo operador central, el cruce, choca de frente con la estructura de Eternity II. El registro completo de lo que la comunidad crió, midió y abandonó. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/local-search/evolutionary/ - Actualizado: 2026-07-02 - Temas: local-search, learning - Fuente: El plan completo de GA de simon.chapple: genoma en espiral, genes restringidos por clase, fitness (groups.io message 302) — https://groups.io/g/eternity2/message/302 - Fuente: El estudio de GA de dos semanas de Steve Moyer, «El cruce parece no tener impacto» (groups.io message 565) — https://groups.io/g/eternity2/message/565 - Fuente: cambdacambda: el cruce no es útil; población x10 = CPU x10, las mismas iteraciones (groups.io message 578) — https://groups.io/g/eternity2/message/578 - Fuente: sam_maes: la mutación es obvia, un operador de cruce plausible no lo es (groups.io message 1468) — https://groups.io/g/eternity2/message/1468 - Fuente: sam_maes sobre el verdadero problema, las buenas soluciones parciales son difíciles de combinar (groups.io message 1492) — https://groups.io/g/eternity2/message/1492 - Fuente: TD: mezclar dos padres es mezclar dos permutaciones; duplicados, huecos y la idea de reparación (groups.io message 1500) — https://groups.io/g/eternity2/message/1500 - Fuente: El estancamiento del GA de mobaladje cerca de 406/480 (groups.io message 2360) — https://groups.io/g/eternity2/message/2360 - Fuente: La receta clásica de mobaladje, y desajustes repartidos uniformemente por el tablero (groups.io message 2516) — https://groups.io/g/eternity2/message/2516 - Fuente: Lyman: dos soluciones parciales probablemente necesiten las mismas piezas en lugares distintos (groups.io message 2591) — https://groups.io/g/eternity2/message/2591 - Fuente: El esbozo de cruce-reparación de Lyman, con su propio veredicto (groups.io message 2612) — https://groups.io/g/eternity2/message/2612 - Fuente: El híbrido backtracker+GA de antminder, 462/480 en aproximadamente un día con un operador de reparación de Munkres (groups.io message 5589) — https://groups.io/g/eternity2/message/5589 - Fuente: Pierre Schaus explica el vecindario de asignación óptima detrás de esa reparación (groups.io message 5601) — https://groups.io/g/eternity2/message/5601 - Fuente: antminder lo archiva; una semana para llegar a 463, y el eii de Verhaard «lo aplasta por completo» (groups.io message 5950) — https://groups.io/g/eternity2/message/5950 - Fuente: La autopsia de 2011 de jagbrain sobre por qué las suposiciones de GA/SA fallan en este espacio de búsqueda (groups.io message 8257) — https://groups.io/g/eternity2/message/8257 - Fuente: Niang, Solving the Eternity II Puzzle using Evolutionary Computing Techniques (tesis de MASc, Concordia, 2011) — https://spectrum.library.concordia.ca/id/eprint/7487/1/Niang_MASc_S2011.pdf - Fuente: Wauters, Vancroonenburg & Vanden Berghe, A guide-and-observe hyper-heuristic approach to the Eternity II puzzle (JMMA 11, 2012) — https://link.springer.com/article/10.1007/s10852-012-9178-4 --- Diez días después del lanzamiento del puzzle, la lista de correo ya tenía sobre la mesa un diseño completo de algoritmo genético: numerar las piezas, ensartar el tablero en un genoma en espiral que parte de la pieza-pista, puntuar la conectividad, criar ([groups.io message 302](https://groups.io/g/eternity2/message/302)). Es la metáfora más natural de la caja de herramientas: una población de tableros, la supervivencia de los mejor emparejados, hijos que heredan buenos fragmentos de dos buenos padres. En los años siguientes la comunidad construyó estos solucionadores, los midió con cuidado, y vio cómo cada uno de ellos se estancaba en los 400 bajos mientras simples backtrackers los adelantaban sin esfuerzo. Esta página enseña la receta, y luego la razón de su fracaso. Esa razón merece entenderse bien, porque no es que «los GA sean débiles» sino un choque estructural preciso entre el cruce y los problemas de permutación. A partir de ahí, la página sigue las ideas que sobrevivieron hasta las páginas donde viven hoy. ## La receta sobre un tablero Un algoritmo genético necesita cuatro ingredientes, y Eternity II ofrece cada uno casi con demasiada facilidad: 1. **Genoma.** Una solución candidata codificada para la reproducción. Aquí: una asignación de las 256 piezas a las 256 celdas, más una rotación para cada una (de forma equivalente, una permutación de la lista de piezas). El plan de Chapple, ya en la semana del lanzamiento, ensartaba las celdas en una espiral que parte de la pieza-pista hacia fuera, con los genes de borde y de esquina restringidos a piezas de borde y de esquina ([message 302](https://groups.io/g/eternity2/message/302)); la mayoría de las implementaciones posteriores usaron directamente el tablero plano. 2. **Fitness.** Contar las aristas emparejadas, la misma puntuación de 0 a 480 en la que está denominada la [escala de récords](/es/research/records/). El solucionador de mobaladje era exactamente ese bucle clásico: generar una población aleatoria, evaluar, seleccionar los mejores, cruzarlos, mutar un poco, repetir ([message 2516](https://groups.io/g/eternity2/message/2516)). 3. **Mutación.** Intercambiar dos piezas, rotar una en su sitio, revolver un pequeño parche. Todos coincidían en que esta parte era fácil: «los operadores de mutación son obvios», como lo formuló el primer hilo serio sobre GA ([message 1468](https://groups.io/g/eternity2/message/1468)). 4. **Cruce.** Tomar dos padres de alta puntuación y producir un hijo que herede de ambos. Este es el ingrediente que hace que un GA sea un GA en lugar de una población de escaladores de colinas, y en este puzzle es donde todo se tuerce. ## El problema central: el cruce sobre una permutación La promesa del cruce es la recombinación de bloques de construcción: una criatura que sobresale volando y otra que sobresale nadando podrían producir una que hace ambas cosas. Lyman Hurd enunció la premisa en la lista (y su propia duda) en una sola frase: dos soluciones parciales probablemente necesiten *las mismas piezas en lugares distintos* ([message 2591](https://groups.io/g/eternity2/message/2591)). Concretémoslo. Un genoma es una permutación de 256 piezas. Tome dos buenos padres y córtelos en un punto (o mézclelos uniformemente): el hijo conserva las celdas 1 a $k$ del padre A y el resto del padre B. Como los padres disponen las *mismas* piezas de forma distinta, el hijo ahora tiene algunas piezas por duplicado y carece de otras por completo; no es un tablero en absoluto. TD lo detalló pocas horas después de que se planteara la pregunta: mezclar dos padres es mezclar dos permutaciones de 1..256, y el resultado «no es una permutación válida porque algunos valores están duplicados y otros valores faltan» ([message 1500](https://groups.io/g/eternity2/message/1500)). Véalo ocurrir. Dos padres *perfectos* (el mismo tablero resuelto y su rotación de un cuarto de vuelta, ambos disposiciones impecables de las mismas piezas) producen un hijo ilegal en casi todos los cortes: > **[Figure]** Interactivo: choques de cruce en la recombinación — interactive: CrossoverClashLab. Rendered on the canonical page (link above); not shown in this markdown export. El fitness del hijo ingenuo es casi perfecto, y ahí está la trampa: cada mitad heredada está resuelta internamente, de modo que una función de fitness que cuenta aristas adora un genoma que ni siquiera es un tablero. Toda corrección práctica es un **operador de reparación**: eliminar los duplicados, insertar las piezas que faltan ([message 1500](https://groups.io/g/eternity2/message/1500)), o intercambiar las entradas duplicadas entre los dos hijos para preservar tantas «buenas ideas» como sea posible, como esbozó Lyman antes de concluir que tenía «pocas esperanzas de que dé por casualidad con la solución real» ([message 2612](https://groups.io/g/eternity2/message/2612)). Pero los genes reparados aterrizan en celdas cuyos vecinos se heredaron del *otro* padre, donde no emparejan nada. La reparación convierte el cruce en una mutación grande y mal dirigida. En ese punto la población no es más que un conjunto de escaladores de colinas por mutación en paralelo que pagan el sobrecoste del cruce. > **¿Pero el cruce funciona en el TSP?** > > sam_maes planteó la objeción natural: los GA manejan el problema del viajante de comercio, que también es un problema de permutación ([message 1492](https://groups.io/g/eternity2/message/1492)). La diferencia está en qué es un «bloque de construcción». El valor de un recorrido reside en sus adyacencias, y los cruces que preservan el orden (OX, PMX) heredan fragmentos de adyacencia de forma significativa. El valor de un tablero de Eternity II reside en colocaciones exactas de pieza-en-celda comprobadas contra 22 colores, y dos buenos tableros no coinciden en casi ninguna. El propio diagnóstico de sam_maes era el acertado: el problema no es el tamaño del espacio de búsqueda sino que «las buenas soluciones parciales son difíciles de combinar». La versión más profunda de este argumento se midió en este sitio años más tarde: dos tableros de alta puntuación están relacionados por grandes [σ-ciclos](/es/research/why/sigma-cycles/) entrelazados, y toda aplicación *parcial* de un ciclo obtiene una puntuación peor que cualquiera de los dos extremos. El cruce es exactamente una aplicación parcial de la permutación que conecta a los padres. El valle entre dos buenos padres no es un accidente del operador: es la estructura del paisaje. ## Lo que la comunidad midió El registro, en orden cronológico, es notablemente coherente. - **2007, el estudio de dos semanas.** Steve Moyer ejecutó un GA de 1000 individuos con cruce que preserva el orden y comunicó las cifras que zanjaron la cuestión temprano: «El cruce parece no tener impacto», y el tamaño de la población apenas importa, ya que una población de 100 individuos convergía aproximadamente igual de rápido a una décima parte del coste ([message 565](https://groups.io/g/eternity2/message/565)). Una respuesta independiente confirmó ambos hallazgos a partir de experimentos separados ([message 578](https://groups.io/g/eternity2/message/578)). - **2007, los estancamientos.** El GA de insurrectors sobre el interior de 14×14 alcanzó 326–330 de 364 aristas y se atascó, concluyendo que los GA «son bastante malos en este tipo de problemas combinatorios» ([message 1311](https://groups.io/g/eternity2/message/1311)). El GA de tablero completo de mobaladje tocó su óptimo local «hacia 406 (/480)» ([message 2360](https://groups.io/g/eternity2/message/2360)), con los desajustes repartidos uniformemente por el tablero, sin región débil reparable ([message 2516](https://groups.io/g/eternity2/message/2516)). JSA señaló el problema subyacente: la métrica sobre 480 es una mala guía, y nadie encontró una mejor ([message 2683](https://groups.io/g/eternity2/message/2683)). - **2008, el híbrido serio.** antminder construyó el solucionador evolutivo más fuerte del archivo: un backtracker corre durante ~3 minutos y rellena legalmente la mayor parte del tablero, y luego un GA de estado estacionario (cada individuo forzado a ser único) pule el resto. El cruce disruptivo se compensa con un operador de reparación que él ya había usado antes en problemas de seguimiento: extraer piezas no adyacentes y dejar que el algoritmo de Munkres/húngaro las recoloque *de forma óptima*. En promedio, sobre siete ejecuciones: 462/480 en poco más de un día ([message 5589](https://groups.io/g/eternity2/message/5589)). Pierre Schaus, de cuyo artículo JFPC provenía el operador, confirmó el mecanismo en la lista ([message 5601](https://groups.io/g/eternity2/message/5601)). Nótese lo que le ocurrió a la arquitectura: el GA ya no cría tableros desde cero; gestiona un bucle de reinicio en torno a un backtracker y aplica una reparación local exacta. La capa genética se convirtió en andamiaje. - **2008, el archivado.** Tres meses después antminder informó de que su programa necesitaba «una semana para alcanzar una puntuación parcial de 463» y de que el [eii](/es/research/lab/experiments/louis-verhaard/eii/) de Louis Verhaard, basado en backtracking, «lo aplasta por completo» ([message 5950](https://groups.io/g/eternity2/message/5950)). Lo archivó. eii pasó a impulsar el récord de 467; ningún solucionador evolutivo aparece en ninguna parte del linaje de récords después de este punto. - **La cola larga.** Un blog de 2009 preguntó a la lista qué cruce usaba la gente; la única respuesta de fondo desaconsejaba esperar que los GA progresaran sin «retroceder y arruinar los avances previos» ([message 6835](https://groups.io/g/eternity2/message/6835)). Un solucionador de 2010 de red neuronal con GA se compartió con la escueta advertencia «de todos modos no resolverá tu puzzle» ([message 7454](https://groups.io/g/eternity2/message/7454)). Un censo de solucionadores de 2011 registró 190 piezas por backtracking puro frente a 209 con un híbrido genético ([message 8787](https://groups.io/g/eternity2/message/8787)): respetable, y unas cincuenta piezas por debajo del mejor de la misma época. jagbrain escribió la autopsia de la comunidad ese mismo año: el GA y el temple simulado suponen un paisaje que se puede escalar, y este es enorme, «fractalizado», con una colocación de soluciones casi aleatoria ([message 8257](https://groups.io/g/eternity2/message/8257)). - **Donde un GA *sí* brilló.** En el suave subproblema de los conjuntos de rotaciones (elegir una rotación por pieza de modo que todos los recuentos de colores se equilibren), el GA de antminder «casi nunca se queda atascado en un mínimo local» ([message 3443](https://groups.io/g/eternity2/message/3443)) y el de Varga encontraba conjuntos equilibrados en segundos donde el backtracking fallaba ([message 8900](https://groups.io/g/eternity2/message/8900)). El contraste es la lección: la evolución maneja bien la relajación; simplemente resultó que la relajación no podaba nada. El registro académico concuerda con el de la lista. El único tratamiento de extensión de tesis dedicado a la computación evolutiva sobre Eternity II ([Niang 2011](https://spectrum.library.concordia.ca/id/eprint/7487/1/Niang_MASc_S2011.pdf)) recorre el espacio de diseño de los GA sin destronar las metaheurísticas de la literatura de 2008–2012, y las heurísticas publicadas más fuertes de esa línea (búsqueda tabú, VLNS, [hiperheurísticas](https://link.springer.com/article/10.1007/s10852-012-9178-4)) abandonaron todas la recombinación de tableros. ## Adónde fueron las ideas supervivientes Nada en este wiki está más muerto que la cría de tableros, pero tres ideas de la era de los GA sobrevivieron mudándose: - **La población se convirtió en reinicios.** Una vez que el cruce no aporta nada, una población de tableros que mutan es exactamente una cartera de reinicios independientes. El hallazgo de Moyer de que el tamaño de la población apenas importa es la lección de los reinicios disfrazada: extracciones independientes de la misma distribución, no una evolución que se acumula. El caso medido a favor de las carteras de reinicio está en la [página de reinicios](/es/research/build/backtracking/restarts/). - **Mutación + selección + reparación inteligente se convirtió en ALNS.** El operador de reparación de Munkres de antminder dentro de un bucle de destrucción/reconstrucción *es* el rellenado basado en asignación de la [búsqueda local y ALNS](/es/research/build/local-search/local-search-alns/), donde sigue siendo el pulidor más fiable que tiene este proyecto. La parte ganadora del híbrido de 2008 nunca fue la genética; fue el vecindario. - **La evolución subió un nivel.** La línea de las hiperheurísticas ([Wauters et al. 2012](https://link.springer.com/article/10.1007/s10852-012-9178-4)) conserva la selección y la adaptación pero las aplica a los *operadores*, no a los tableros: aprender qué movimientos están rindiendo y apoyarse en ellos. Ese es literalmente el paso «adaptar» de ALNS. Hacer evolucionar los parámetros de la búsqueda sobrevivió; hacer evolucionar sus soluciones no. ## Lo que cuesta - **Por generación: $O(P \cdot (f + g))$** para un tamaño de población $P$, un coste de fitness $f$ (un recuento lineal de aristas, barato) y un coste de operador $g$, que es barato para las mutaciones por intercambio, $O(k^3)$ por reparación húngara de $k$ celdas, y sin valor entre medias para el cruce reparado. El multiplicador $P$ es la parte dolorosa: las mediciones de la comunidad dicen que compra una diversidad que la mutación por sí sola replica a una décima parte del coste ([message 578](https://groups.io/g/eternity2/message/578)). - **Ninguna garantía de ningún tipo.** Sin completitud, sin certificado de optimalidad, y, a diferencia de [ALNS](/es/research/build/local-search/local-search-alns/), que al menos pule un buen tablero que se le entrega, un GA criado a partir de poblaciones aleatorias gasta la mayor parte de su presupuesto en redescubrir lo que un constructor voraz produce en milisegundos. - **Dónde topan realmente los GA.** Los GA puros se estancan en torno a 406/480 en el tablero completo ([message 2360](https://groups.io/g/eternity2/message/2360)). El mejor híbrido jamás reportado en la lista promedió 462 por día en 2008 al degradar el GA a una capa de gestión sobre un backtracker y una reparación exacta ([message 5589](https://groups.io/g/eternity2/message/5589)), y su autor lo archivó la semana en que apareció un solucionador de backtracking puro ([message 5950](https://groups.io/g/eternity2/message/5950)). El cruce, la única idea que aporta la evolución y que nada más en este catálogo posee, es estructuralmente inadecuado para un puzzle cuyas buenas soluciones [no comparten casi nada trasplantable](/es/research/why/sigma-cycles/). Lo que sobrevivió de la era de los GA es real, y nada de ello es genético. ## Relacionado - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. --- # Búsqueda local y ALNS > Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/local-search/local-search-alns/ - Actualizado: 2026-07-02 - Temas: local-search - Fuente: El artículo de JFPC de Pierre Schaus + el vecindario de relleno húngaro, detallado por primera vez en la lista (groups.io msg 5589, junio de 2008) — https://groups.io/g/eternity2/message/5589 - Fuente: Ropke & Pisinger, An Adaptive Large Neighborhood Search Heuristic for the Pickup and Delivery Problem with Time Windows (Transportation Science, 2006) — https://doi.org/10.1287/trsc.1050.0135 - Fuente: Shaw, Using Constraint Programming and Local Search Methods to Solve Vehicle Routing Problems (CP 1998, el LNS original) — https://link.springer.com/chapter/10.1007/3-540-49481-2_30 - Fuente: Schaus & Deville, Hybridization of CP and VLNS for Eternity II (JFPC 2008) — https://hdl.handle.net/2078.5/253676 --- Una vez que se tiene un tablero sólido, los movimientos pieza a pieza dejan de rendir casi de inmediato. La búsqueda de gran vecindario hace la apuesta contraria: arrancar toda una región (docenas de celdas) y reconstruirla con algo más fino que la pasada voraz que la colocó. La idea es de Paul Shaw ([CP 1998](https://link.springer.com/chapter/10.1007/3-540-49481-2_30)); la versión *adaptativa*, ALNS, se debe a Ropke y Pisinger ([Transportation Science 2006](https://doi.org/10.1287/trsc.1050.0135)), que añadieron un portafolio de operadores de destrucción y reparación y una regla de aprendizaje que orienta el esfuerzo hacia los operadores que han tenido éxito recientemente. ## El bucle Una iteración de ALNS sobre un tablero: 1. **Destruir.** Elegir un operador de destrucción, retirar las $k$ celdas que selecciona. 2. **Reparar.** Rellenar el hueco (relleno voraz, [propagación de restricciones](/es/research/build/reduce/arc-consistency/), o una resolución exacta del pequeño subproblema). 3. **Aceptar.** Conservar el nuevo tablero si obtiene mejor puntuación, o a veces de todos modos según una regla de recocido simulado. 4. **Adaptar.** Reponderar los operadores según su éxito reciente, para que la ruleta favorezca lo que ha estado funcionando. Eternity II se presta particularmente bien al paso 1, porque un tablero parcial te dice exactamente dónde duele: las aristas no apareadas. ## Verlo en marcha Leer el bucle es una cosa; verlo aprender es otra. Abajo, un tablero 8×8 real resuelto por el motor se ha dañado deliberadamente, y el bucle ALNS completo corre sobre él a cámara lenta: destruir, rellenar voraz pieza por pieza, aceptar o revertir, reponderar. Fuerza un operador a mano y observa cómo responde su barra de peso; o simplemente deja que la ruleta derive hacia lo que haya estado rindiendo. > **[Figure]** Interactivo: el bucle destruir-reparar — interactive: AlnsLoopLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso Una iteración, exactamente como la ejecuta el laboratorio: 1. **Sortear un operador.** Selección por ruleta: el operador $o$ se elige con probabilidad $w_o / \sum_j w_j$. Todos los pesos parten iguales; la ruleta es uniforme hasta que llegan los resultados. 2. **Destruir.** El operador devuelve $k$ celdas cuyas piezas salen del tablero. Tomar celdas al azar o una forma fija cuesta $O(k)$; los operadores guiados por conflictos (peor fila, celdas más en conflicto) también necesitan el mapa de desapareamientos, lo que cuesta un barrido lineal a menos que el motor lo mantenga de forma incremental. El nuestro lo hace, precisamente para que la destrucción se quede en $O(k)$. 3. **Reparar, de forma voraz.** Hasta que el hueco esté lleno: tomar la celda vacía con más vecinos ya colocados (la más restringida primero), probar cada pieza retirada en las cuatro rotaciones, conservar la colocación que aparee más costuras. Cada una de las $k$ colocaciones recorre los candidatos restantes, de modo que la pasada cuesta $O(k \cdot |C|)$ donde $|C|$ es la reserva de candidatos (piezas libres × 4 rotaciones). 4. **Aceptar o revertir.** Puntuar la región reconstruida; solo cambiaron las costuras que tocan las $k$ celdas, así que la reevaluación es $O(k)$. Conservar el tablero si $\Delta \geq 0$, si no conservarlo de todos modos con probabilidad $e^{\Delta/T}$; en caso de rechazo, restaurar la instantánea. 5. **Adaptar.** Actualizar el peso del ganador, $w_o \leftarrow \lambda\, w_o + (1 - \lambda)\, \psi$, donde la recompensa $\psi$ está escalonada: nuevo mejor global > mejora > movimiento lateral aceptado > rechazo. Ese suavizado exponencial es todo lo "adaptativo" que hay en ALNS. El original de Ropke y Pisinger lleva la misma contabilidad sobre segmentos de unos cientos de iteraciones. ## Lo que cuesta Por iteración, con $k$ celdas destruidas: $$ \underbrace{O(k)}_{\text{destruir}} \;+\; \underbrace{O(k \cdot |C|)}_{\text{reparación voraz}} \;+\; \underbrace{O(k)}_{\text{evaluar}} \;+\; \underbrace{O(|\mathcal{O}|)}_{\text{adaptar}} $$ Tres refinamientos que vale la pena conocer: - **El relleno óptimo es un problema de asignación (a veces).** Cuando las celdas liberadas son dos a dos no adyacentes, el coste de cada hueco depende solo de sus vecinos fijos, de modo que el relleno es exactamente un problema de asignación $k \times k$: el algoritmo húngaro lo resuelve de forma óptima en $O(k^3)$. Ese es el vecindario Eternity II de Schaus. En cuanto dos huecos se tocan, sus elecciones se acoplan, y la reparación óptima se convierte en una pequeña búsqueda CP/exacta, exponencial en el peor caso en $k$, que es por lo que las destrucciones grandes dejan de rendir. - **Anytime, y nada más.** ALNS mejora una respuesta factible y puede detenerse en cualquier momento; el mejor tablero hasta ese punto *es* la salida. No ofrece garantía alguna de completitud ni de optimalidad: nunca puede certificar que no exista un tablero mejor. En este puzzle ese certificado tiene que venir de otro lado (el oráculo SAT tras el [muro de rigidez](/es/research/why/rigidity-wall/)). - **A escala de Eternity II el bucle es barato; el escape no lo es.** Con $k = 20$–$80$ de las 256 celdas y unos pocos cientos de candidatos por hueco, una iteración cuesta de microsegundos a milisegundos, y las curvas de mejora se aplanan en unas pocas decenas de iteraciones. El coste vinculante no es, por tanto, la aritmética sino la probabilidad de que un vecindario de $k$ celdas contenga el único [σ-cycle](/es/research/why/sigma-cycles/) entrelazado que lleva hacia arriba, y esa probabilidad es la que se desploma cerca de la cima. ## Un portafolio de operadores para tableros Los operadores de destrucción que este proyecto entregó son en su mayoría conscientes de la geometría y de los conflictos: celdas aleatorias como línea base, celdas incidentes a aristas no apareadas, las $k$ celdas más en conflicto, la peor fila o banda de filas, una componente conexa del grafo de desapareamiento (opcionalmente con un halo de una celda a su alrededor), rectángulos y anillos concéntricos. Dos hallazgos del ajuste del portafolio, ambos medidos en el motor de este proyecto y no replicados de forma independiente: - **La selección le gana a la cobertura.** Un conjunto seleccionado de cinco operadores superó al conjunto completo de once; repartir los pesos adaptativos entre demasiados operadores diluye la señal de aprendizaje. - **La temperatura no es la palanca.** A lo largo de un rango de temperaturas de aceptación de un factor diez, las puntuaciones finales fueron idénticas, porque cerca de la cima el paisaje está dominado por mesetas de igual puntuación donde prácticamente cada movimiento se acepta a cualquier temperatura. Que destruir-reparar convenga a este puzzle es una observación antigua: Schaus y Deville hibridaron la programación con restricciones con la búsqueda de gran vecindario en Eternity II ya en [2008](https://hdl.handle.net/2078.5/253676), usando CP como el paso de reparación, la misma división del trabajo que funciona aquí. ## Lo que rinde de forma fiable El pulido final. En el motor de este proyecto, ALNS es el paso que convierte una salida constructiva en tableros dignos de récord: las construcciones por [haz](/es/research/build/construct/beam-search/) que aterrizan consistentemente a mediados de los 450 ganan varias aristas bajo una pasada de refinamiento, y los tableros más sólidos del proyecto llevan todos un empuje de ALNS como su última etapa. En puzzles generados más pequeños el efecto es espectacular y repetible: destruir-reparar cierra la mayor parte de la distancia entre una colocación aleatoria y la mejor puntuación alcanzable, a lo largo de un amplio rango de aprieto del puzzle, antes de saturar en las instancias más difíciles. (Todo esto está medido aquí, y matizado en consecuencia.) Igual de característico: las ganancias llegan pronto. Las curvas de mejora se aplanan dentro de las primeras decenas de iteraciones, y dejar una ejecución correr diez veces más reproduce la misma puntuación final. Cuando ALNS se detiene, se ha detenido. ## El muro con el que choca Por qué se detiene es la parte interesante, y este sitio le dedica dos páginas enteras. En cada tablero de cabeza, los desapareamientos restantes están demostrablemente bloqueados: liberar un vecindario generoso a su alrededor y buscarlo exhaustivamente no encuentra nada mejor; ese es el [muro de rigidez](/es/research/why/rigidity-wall/). Y pasar de un tablero de cabeza a uno mejor exige reubicar un gran conjunto de piezas en un único bucle entrelazado, donde toda aplicación parcial del bucle puntúa peor que no hacer nada: la [estructura en σ-cycles](/es/research/why/sigma-cycles/). ALNS tiene exactamente la forma equivocada para eso. Un vecindario de destrucción de 20 a 80 celdas casi nunca cubre el único ciclo que importa, y cuando la destrucción es lo bastante grande para cubrirlo, el paso de reparación se enfrenta a un subproblema casi tan difícil como el propio puzzle y devuelve menos de lo que se arrancó. Destruir-reparar explora una cuenca de maravilla y prácticamente nunca sale de ella. El resumen que sostienen las mediciones de este proyecto: ALNS es el mejor último kilómetro que tenemos, y no es más que un último kilómetro. ## Relacionado - [El estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/) — La hermana del estudio DFS, para la otra manera en que se ataca Eternity II: destruir parte de un tablero, reconstruirla, conservar el cambio si ayuda. Una pregunta, planteada con cuidado. Qué aporta cada decisión de ese bucle: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, cuándo reiniciar, y desde qué tablero partir. - [PALIMPSEST](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [Recocido simulado y tempering paralelo](https://eternity2.dev/es/research/build/local-search/parallel-tempering/) — Tratar los desajustes como energía y la temperatura como tolerancia a empeorar las cosas. El recocido ostenta el récord más longevo del puzzle; el tempering paralelo cruza barreras que el recocido no puede. Ambos se detienen en el mismo muro. --- # Recocido simulado y tempering paralelo > Tratar los desajustes como energía y la temperatura como tolerancia a empeorar las cosas. El recocido ostenta el récord más longevo del puzzle; el tempering paralelo cruza barreras que el recocido no puede. Ambos se detienen en el mismo muro. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/local-search/parallel-tempering/ - Actualizado: 2026-07-02 - Temas: local-search - Fuente: Swendsen & Wang, Replica Monte Carlo Simulation of Spin-Glasses (Physical Review Letters, 1986) — https://doi.org/10.1103/PhysRevLett.57.2607 - Fuente: Earl & Deem, Tempering paralelo: teoría, aplicaciones y nuevas perspectivas (Phys. Chem. Chem. Phys., 2005) — https://arxiv.org/abs/physics/0508111 - Fuente: La lista de correo de Eternity II, donde Verhaard describió su método de recocido de 2008 (groups.io) — https://groups.io/g/eternity2 --- El recocido simulado lee un tablero como un sistema físico: las aristas sin emparejar son energía, los movimientos que reducen la energía se aceptan siempre, y los que la aumentan se aceptan con probabilidad $e^{-\Delta E / T}$. En caliente, la búsqueda deambula; al enfriarla, el tablero se asienta en una disposición de baja energía, idealmente una profunda, y no simplemente la más cercana. La trampa está en el calendario: enfría demasiado rápido y te congelas en un óptimo local mediocre; enfría lo bastante despacio para un puzzle de este tamaño y esperarás una eternidad. ## De una temperatura a una escalera El tempering paralelo (intercambio de réplicas) disuelve el problema del calendario ejecutando toda la escalera a la vez. El método procede de la física de los vidrios de espín: el [artículo de Monte Carlo por réplicas de 1986](https://doi.org/10.1103/PhysRevLett.57.2607) de Swendsen y Wang es el precursor, el intercambio de réplicas en su forma moderna suele atribuirse a Geyer (1991) y a Hukushima y Nemoto (1996), y la [revisión de 2005](https://arxiv.org/abs/physics/0508111) de Earl y Deem es la síntesis moderna de referencia. $K$ copias del tablero ejecutan recocido simulado a temperaturas fijas $T_1 < T_2 < \dots < T_K$; periódicamente, réplicas adyacentes proponen intercambiar sus estados, intercambio aceptado según la regla de Metropolis $$ P(\text{swap}) = \min\bigl(1,\; e^{(\beta_i - \beta_j)(E_i - E_j)}\bigr) = \min\bigl(1,\; e^{\Delta\beta\,\Delta E}\bigr), $$ con $\beta = 1/T$, $\Delta\beta = \beta_i - \beta_j$ y $\Delta E = E_i - E_j$. Léela una vez con signos concretos: si la réplica $i$ es la más fría ($\Delta\beta > 0$) y la réplica más caliente tiene la energía *más baja* ($\Delta E > 0$), el exponente es positivo y el intercambio se acepta con certeza: el buen estado siempre se transmite escalera abajo de forma gratuita. Las réplicas calientes recorren las barreras; las réplicas frías explotan; los intercambios trasladan las configuraciones prometedoras escalera abajo para ser refinadas. Ninguna cadena individual tiene que sobrevivir nunca a un calendario de enfriamiento. ## Ver a la escalera vencer a una sola cadena fría La afirmación que vale la pena ver es la comparación: la misma cadena fría, con y sin una escalera por encima de ella. A continuación, cuatro réplicas exploran un paisaje sintético accidentado cuyo mínimo global se esconde detrás de barreras; un fantasma gris ejecuta a solas la dinámica fría idéntica. Observa los destellos de intercambio (verde para los aceptados) llevar la cuenca de la derecha hasta el peldaño frío, mientras el fantasma permanece para siempre en el pozo de partida. Luego arrastra el deslizador de espaciado a ambos extremos y reproduce los dos fallos clásicos de la escalera. > **[Figure]** Interactivo: la escalera del tempering paralelo — interactive: TemperingLadderLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso Una ronda de tempering paralelo, tal como la ejecuta el laboratorio: 1. **Barrido.** Cada réplica realiza movimientos de Metropolis a su propia temperatura fija: proponer un cambio local, calcular $\Delta E$, aceptar si va cuesta abajo, si no con probabilidad $e^{-\Delta E / T_i}$. En un tablero, un movimiento de una sola pieza toca como mucho cuatro costuras, de modo que el $\Delta E$ de cada movimiento es $O(1)$. 2. **Intento de intercambio.** Elegir un par adyacente $(i, i{+}1)$, calcular $\Delta\beta\,\Delta E$ a partir de las dos energías en caché, aceptar con $\min(1, e^{\Delta\beta \Delta E})$. Si se acepta, las dos réplicas intercambian sus configuraciones (de forma equivalente: sus temperaturas); nada más se mueve. 3. **Contabilidad.** Seguir la tasa de aceptación de intercambios por par de peldaños. Ese número *es* el diagnóstico de la escalera: cerca del 100 %, los peldaños adyacentes ven el mismo paisaje y uno de ellos se desperdicia; cerca del 0 %, la escalera se ha desacoplado en cadenas independientes. Las escaleras útiles se sitúan en las decenas de por ciento: frecuentes pero no gratuitas, exactamente el régimen que recomiendan Earl y Deem y aquel al que convergieron nuestras ejecuciones. 4. **Repetir.** Los buenos estados descienden los peldaños en caminata aleatoria; los estados atascados suben, se sacuden hasta soltarse y regresan distintos. ## Lo que cuesta - **Por barrido:** $R$ réplicas × $N$ sitios, cada movimiento con una evaluación local $O(1)$, así que $O(R \cdot N)$, exactamente $R$ veces una sola cadena. La memoria es $O(R \cdot N)$: cada réplica es un tablero completo. - **Por fase de intercambio:** los $R{-}1$ pares adyacentes necesitan cada uno una exponencial de las energías en caché: $O(R)$ en total, un error de redondeo al lado de los barridos. - **La ganancia está en el tiempo de mezcla, no en el coste del paso.** Una cadena fría aislada cruza una barrera de energía $\Delta E$ en aproximadamente $e^{\Delta E / T_{\text{cold}}}$ intentos (la espera de Arrhenius; nuestro cruce de 76 celdas medido se situaba en $e^{-21}$ por intento a $T = 1$). La escalera reemplaza esa espera por difusión: una configuración camina aleatoriamente a través de $R$ peldaños, y con un espaciado geométrico ajustado para una aceptación por peldaño constante, un viaje de ida y vuelta cuesta del orden de $R^2$ rondas de intercambio. Pagas un factor constante $R$ por barrido para convertir una espera exponencial en una lanzadera polinómica. Esa asimetría es todo el argumento del método. - **Sin garantías, igual que todos los muestreadores.** El tempering paralelo no es completo y no certifica nada; converge a la distribución correcta con el tiempo, sin ninguna cota útil sobre ese «con el tiempo». Y allí donde el paisaje ofrece empates en lugar de barreras, como en las mesetas de iso-puntuación en lo alto de este puzzle, $\Delta E = 0$ hace que todos los peldaños se comporten de forma idéntica, y la ventaja de la escalera se desvanece por construcción, que es precisamente lo que informa el veredicto de más abajo. ## Por qué este puzzle necesita la escalera Las mediciones de este proyecto (sobre nuestro propio motor; no replicadas de forma independiente) dan una razón inusualmente concreta. Entre un tablero fuerte y otro mejor, el movimiento que los conecta es una única relocalización entrelazada de docenas de piezas en la que *todo* subconjunto estricto del movimiento pierde aristas: la [estructura de σ-ciclos](/es/research/why/sigma-cycles/). Una transición medida requirió un movimiento de 76 celdas cuyos estados intermedios se situaban unas 21 aristas por debajo del punto de partida: a $T = 1$ la aceptación es del orden de $e^{-21}$, sin esperanza. Con la temperatura máxima de la escalera elevada a aproximadamente 30, el cruce ocurrió realmente, y produjo lo que entonces era el mejor tablero de arranque en frío del proyecto. La temperatura, empleada correctamente, es una palanca real contra barreras reales. El diseño de la escalera es donde la práctica muerde. Cuando espaciamos las temperaturas demasiado juntas, el intercambio de réplicas aceptaba todos los intercambios. Una tasa de aceptación del 100 % suena sana y significa lo contrario: las réplicas adyacentes veían en la práctica el mismo paisaje, y la escalera no añadía nada. Un espaciado geométrico con un peldaño superior genuinamente caliente, ajustado para que los intercambios sean frecuentes pero no gratuitos, es el consejo estándar de Earl y Deem, y coincidió con lo que observamos. ## El récord comunitario que construyó el recocido El recocido tiene una historia distinguida en este puzzle. El récord más longevo sobre el conjunto de piezas canónico (el 467 de 480 de Louis Verhaard en 2008, invicto hasta los backtrackers de la era Blackwood de 2020) provino de un método de recocido, y de uno inusual: como lo describió en la [lista de correo de la comunidad](https://groups.io/g/eternity2), recocía la *composición* de un subconjunto de piezas, intercambiando piezas dentro y fuera de un grupo candidato bajo una puntuación de teselabilidad, en lugar de recocer posiciones sobre el tablero. La lección se generaliza: en Eternity II, la elección de *qué recocer* importó más que el recocido en sí. ## El veredicto A partir de las mediciones de este proyecto, matizadas en consecuencia: el tempering paralelo cruza mejor las barreras que el recocido simple, y en el tramo intermedio de la subida esa diferencia es real y fiable. Cerca de la cima se disuelve. Las mesetas de allí arriba son de iso-puntuación: empates por todas partes, de modo que la aceptación ya no depende en absoluto de la temperatura, y subir el calor en lugar de escalar solo aleatoriza el tablero, que después nunca encuentra el camino de vuelta al territorio de los récords. Las réplicas lanzadas desde un tablero de cabeza se estancan en la puntuación de la semilla, en cada cadena, en cada escalera que probamos. El tempering te desplaza entre colinas; no deroga el [muro de rigidez](/es/research/why/rigidity-wall/). ## Relacionado - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # Reducir la búsqueda > Todo lo que descarta estados sin esperanza antes de que la búsqueda pierda tiempo en ellos: propagación hasta el punto fijo, el filtro de emparejamiento all-different, no-goods aprendidos y el invariante de deslizamiento de bordes. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/reduce/ - Actualizado: 2026-07-13 --- Todo lo que descarta estados sin esperanza antes de que la búsqueda pierda tiempo en ellos: propagación hasta el punto fijo, el filtro de emparejamiento all-different, no-goods aprendidos y el invariante de deslizamiento de bordes. Estas técnicas podan con fuerza en tableros pequeños; la lección que se repite aquí es hasta dónde llega esa poda en el tablero completo de 16×16, y dónde se desvanece. Las páginas siguientes van técnica por técnica: qué es cada una en una línea, qué llegó realmente a alcanzar sobre el tablero real de 16×16, dónde se detiene, y los laboratorios y las mediciones que la respaldan. Para abarcar todo el terreno de una sola vez, empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Páginas de esta sección - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. - [All-different, el filtro por matching de Régin](https://eternity2.dev/es/research/build/reduce/alldiff-regin/) — Ninguna pieza puede usarse dos veces: una sola restricción all-different global sobre 256 celdas. Jean-Charles Régin mostró en 1994 cómo un matching bipartito la filtra por completo en tiempo polinómico; su variante por color es el propagador más potente jamás medido sobre el edge matching, con una reserva clara sobre las búsquedas tolerantes a desajustes. - [El deslizamiento de arista](https://eternity2.dev/es/research/build/reduce/edge-slipping/) — La jugada premiada de Louis Verhaard: dejar que el backtracker coloque una pieza no concordante, pero solo a profundidades escogidas cerca del final del tablero. Cada deslizamiento permitido cuesta un punto de puntuación y multiplica de forma astronómica el número de tableros objetivo. Por eso su 467 se encontró más de cincuenta veces, y el ancestro directo de las rupturas de Blackwood. - [Aprendizaje de no-goods: recordar por qué fallaste](https://eternity2.dev/es/research/build/reduce/nogood-learning/) — Un subárbol fallido es un teorema: este estado parcial nunca podrá extenderse. Memorízalo y no vuelvas a entrar en él. La comunidad probó ambas variantes: tablas de transposición al estilo del ajedrez sobre la frontera de búsqueda, y restricciones extraídas del propio puzzle. El balance completo de lo que la memoria compra a la escala de E2, y los tableros pequeños donde realmente rinde. ## Relacionado - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Las técnicas](https://eternity2.dev/es/research/build/techniques/) — El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. --- # All-different, el filtro por matching de Régin > Ninguna pieza puede usarse dos veces: una sola restricción all-different global sobre 256 celdas. Jean-Charles Régin mostró en 1994 cómo un matching bipartito la filtra por completo en tiempo polinómico; su variante por color es el propagador más potente jamás medido sobre el edge matching, con una reserva clara sobre las búsquedas tolerantes a desajustes. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/reduce/alldiff-regin/ - Actualizado: 2026-07-02 - Temas: search-space, exact-methods - Fuente: Régin 1994, «A Filtering Algorithm for Constraints of Difference in CSPs» (AAAI-94) — https://cdn.aaai.org/AAAI/1994/AAAI94-055.pdf - Fuente: Ansótegui, Béjar, Fernández & Mateu 2008, «Edge Matching Puzzles as Hard SAT/CSP Benchmarks» (CP 2008): el filtro por matching por color — https://doi.org/10.1007/978-3-540-85958-1_42 - Fuente: Algoritmo de matching de Hopcroft-Karp (Wikipedia) — https://en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm --- Bajo el matching de colores, Eternity II lleva una segunda ley global: las 256 celdas deben recibir 256 piezas *distintas*. Escrita como restricción, eso es un único all-different sobre todo el tablero. La mayoría de los solucionadores lo imponen de la forma más débil posible (cuando se coloca una pieza, se tacha en todas las demás celdas), lo que deja pasar toda una clase de posiciones muertas: cinco celdas cuyos candidatos restantes solo recurren a cuatro piezas ya son insolubles, y un simple tachado no lo notará hasta mucho más tarde. ## El filtro de Régin (1994) Jean-Charles Régin demostró que la restricción all-different puede filtrarse *por completo*, en tiempo polinómico: todo candidato que no aparezca en ninguna asignación global válida queda eliminado. La construcción es pura teoría de grafos: 1. Construir el grafo bipartito de celdas frente a piezas, con una arista allí donde una pieza sigue en el dominio de una celda. 2. Calcular un matching máximo (Hopcroft-Karp, $O(m \sqrt{n})$). Si no cubre todas las celdas, la posición está muerta; se retrocede de inmediato. 3. Orientar el grafo alrededor del matching y calcular sus componentes fuertemente conexas (Tarjan, tiempo lineal). Un teorema de Berge identifica entonces, en una sola pasada, exactamente qué aristas pertenecen a *algún* matching máximo. 4. Toda arista que no pertenezca a ninguno es un candidato que puede eliminarse del dominio de su celda, de forma correcta. Este artículo fundó de hecho el campo de las restricciones globales en programación con restricciones: una restricción sobre cientos de variables, filtrada de forma óptima por un único algoritmo combinatorio en lugar de descomponerse en débiles comprobaciones por pares. Las versiones incrementales (Régin 1995; Mehlhorn & Thiel 2000) reparan el matching tras unas pocas eliminaciones en vez de recalcularlo, lo que lo hace asequible dentro de un bucle de búsqueda. ## Ver el filtro en acción La construcción es más fácil de creer que de imaginar, así que aquí está sobre una instancia de seis piezas diseñada para contener una trampa: las celdas C1 y C2 solo recurren a las piezas P1 y P2, un conjunto de Hall. El tachado no ve nada malo en que C3 conserve P2 como candidato; el argumento del matching prueba que eso nunca puede ocurrir. Construye primero el matching (observa cómo un camino aumentante expulsa y reencamina una asignación anterior), luego ejecuta el filtro y mira cómo las componentes fuertemente conexas exponen cada arista que ningún matching máximo puede usar. > **[Figure]** Interactivo: el filtro por matching de Régin en acción — interactive: ReginMatchingLab. Rendered on the canonical page (link above); not shown in this markdown export. La ganancia a notar: tres aristas eliminadas, y dos celdas *forzadas*. C3 debe tomar P3 y C6 debe tomar P6, conclusiones que un razonamiento por pares solo alcanzaría tras un ramificado. Eso es lo que significa «filtrar de forma óptima»: tras la pasada de Régin, todo candidato superviviente participa realmente en alguna asignación completa. ## Paso a paso El mismo recorrido, en palabras: 1. **Construir el grafo bipartito.** Las celdas de un lado, las piezas del otro, una arista allí donde una pieza sigue en el dominio de una celda: seis celdas, seis piezas, trece aristas en la demo. 2. **Hacer crecer un matching por caminos aumentantes.** C1 toma P1. C2 también quiere P1: en vez de rendirse, se sigue el *camino alternante* C2-P1-C1-P2. P1 está tomado, pero su dueño C1 dispone de una alternativa libre, P2. Se invierte cada arista del camino: C1 se desliza hacia P2, C2 obtiene P1, y el matching ha crecido en una unidad. Se repite hasta que todas las celdas queden cubiertas. Si alguna celda agota alguna vez sus caminos, no existe ninguna asignación completa y la búsqueda retrocede al instante. 3. **Orientar el grafo.** Las aristas del matching apuntan celda → pieza; las aristas fuera del matching apuntan pieza → celda. Ahora un ciclo alternante del grafo original se convierte en un ciclo dirigido en este. 4. **Calcular las componentes fuertemente conexas** (Tarjan, una pasada lineal). En la demo, \{C1, C2, P1, P2\} forman una componente (intercambian sus dos piezas a lo largo de un ciclo) y \{C4, C5, P4, P5\} otra. 5. **Aplicar la regla de Berge.** Una arista fuera del matching solo puede unirse a *algún* matching máximo si se halla sobre un ciclo alternante (misma componente) o sobre un camino alternante que parte de un vértice libre (ninguno aquí; el matching es perfecto). Todo lo demás está muerto: C3-P2, C4-P3 y C6-P5 cruzan cada una dos componentes, así que se eliminan, de forma probada y no heurística. 6. **Leer las reducciones.** El dominio de C3 se reduce a \{P3\}, el de C6 a \{P6\}: dos colocaciones forzadas halladas sin una sola ramificación. ## Lo que cuesta Una invocación desde cero son dos pasadas de grafo: - **Matching máximo** vía Hopcroft-Karp: $O(m \sqrt{n})$ para $m$ aristas admisibles sobre $n$ vértices, el término dominante. - **Descomposición en componentes fuertemente conexas** vía Tarjan: $O(n + m)$, lineal, más otro tanto para barrer las aristas y eliminar. Para el all-different a nivel de piezas sobre Eternity II, $n = 512$ vértices (256 celdas + 256 piezas) y $m$ vale como mucho $256 \times 256 = 65{,}536$ aristas, de modo que $m\sqrt{n} \approx 1.5$ millones de operaciones sobre aristas para una construcción completa. Es calderilla en hardware moderno, y es el *peor* caso, desde cero, con dominios lo más laxos posible. Dentro de una búsqueda nadie reconstruye: las versiones incrementales citadas más arriba conservan el matching anterior, lo reparan con unos pocos caminos aumentantes tras cada cambio de dominio, y relanzan la pasada lineal de componentes fuertemente conexas, lo que en la práctica equivale a un refiltrado casi lineal por nodo. La variante por color es aún más pequeña: un grafo por clase de color sobre las solas semiaristas que muestran ese color, 22 pequeños matchings en lugar de uno grande. La etiqueta polinómica es lo esencial: esto es un filtrado completo de una restricción global al precio de un algoritmo de grafos, no al precio de una búsqueda. ## Por qué muerde en Eternity II El mismo teorema se aplica a dos niveles distintos en este puzzle. **Por color.** Para cada color, las semiaristas que lo muestran deben emparejarse perfectamente entre celdas adyacentes: una condición de matching perfecto por clase de color. Ansótegui, Béjar, Fernández y Mateu construyeron exactamente este propagador sobre el teorema de Régin para los CSP de edge matching, y lo calificaron como la restricción global más potente que habían encontrado para estos puzzles. Eso coincide con la experiencia de este proyecto: el filtro por color es el propagador más fuerte del motor de matching exacto del proyecto, el ingrediente que (junto con la [consistencia de arco](/es/research/build/reduce/arc-consistency/)) eleva un simple backtracker a 449 de 480 aristas en menos de un minuto (medido sobre el motor de este proyecto, no replicado de forma independiente). Se gana su sitio tarde: el proyecto lo reserva a las posiciones profundas, donde los dominios están lo bastante ajustados para que los matchings fallen y el coste se amortice. **Por pieza.** La lectura directa, piezas restantes frente a celdas vacías, atrapa las trampas de tipo Hall que el tachado se pierde: grupos enteros de celdas que se disputan demasiado pocas piezas, detectados antes de que la maquinaria por pares vea contradicción alguna. Puesto que [ningún movimiento está jamás forzado](/es/research/why/no-forced-moves/) en este puzzle, un filtro que razona sobre grupos en lugar de sobre celdas aisladas es exactamente el tipo de palanca que escasea. ## La reserva Blackwood, dicha sin rodeos El filtro por color supone que cada color debe emparejarse *exactamente*. Una [búsqueda al estilo Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) rompe esa hipótesis a propósito: sus índices de ruptura autorizan un presupuesto de desajustes a profundidades tardías, de modo que un tablero que el filtro declara «imposible» puede ser precisamente el 470 que la búsqueda persigue. Ejecutar el filtro por matching por color dentro de una búsqueda tolerante a desajustes es incorrecto, punto final. En el motor de este proyecto se desactiva en ese régimen, y quitarlo (junto con el resto de los propagadores estrictos) formó parte de una gran aceleración en mono-hilo. El all-different a nivel de piezas es la excepción, y eso importa: ni siquiera una búsqueda tolerante a desajustes usa una pieza dos veces. La unicidad de las piezas se mantiene estricta donde el matching de colores deja de serlo, de modo que el filtro de Régin sobre las piezas sigue siendo correcto precisamente en el régimen donde todo lo demás de la familia de propagación se derrumba. Es el único propagador global fuerte del que dispone un motor de récord. ## Beneficio, y lo que aún se ignora El lado del coste del balance está arriba, y es polinómico de principio a fin. El lado del beneficio, en cambio, tiene un hueco: el artículo original de Régin evalúa un juguete de 25 variables, y no existe ninguna medición publicada del filtro sobre un all-different de 256 variables con la forma de Eternity II. Este proyecto tampoco ha construido la versión a nivel de piezas; su promesa dentro de las búsquedas tolerantes a desajustes es un argumento, no una cifra. A tratar como la apuesta abierta mejor fundamentada del estante: correcto allí donde ya nada fuerte lo es, coste conocido como polinómico, ganancia no medida. ## Relacionado - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. --- # La consistencia de arco, desde AC-3 en adelante > El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/reduce/arc-consistency/ - Actualizado: 2026-07-02 - Temas: search-space - Fuente: Mackworth 1977, "Consistency in Networks of Relations" (Artificial Intelligence 8): AC-3 — https://doi.org/10.1016/0004-3702(77)90007-8 - Fuente: Bessière, Régin, Yap & Zhang 2005, "An Optimal Coarse-grained Arc Consistency Algorithm" (AIJ): AC-2001/AC-3.1 — https://doi.org/10.1016/j.artint.2005.02.004 - Fuente: Algoritmo AC-3 (Wikipedia) — https://en.wikipedia.org/wiki/AC-3_algorithm --- En Eternity II, un backtracker gasta la mayor parte de su esfuerzo no en colocar piezas sino en descartarlas. Puesto que [ninguna celda queda nunca forzada](/es/research/why/no-forced-moves/) (toda posición interior conserva decenas de candidatos vivos hasta muy adentro de la búsqueda), la única palanca disponible es reducir esas listas de candidatos con la mayor dureza y el menor coste posibles. La consistencia de arco es la maquinaria estándar para ello, y arrastra tras de sí medio siglo de publicaciones. ## Dominios que se vigilan mutuamente Asignemos a cada celda vacía un *dominio*: el conjunto de candidatos pieza-y-rotación aún permitidos en ese lugar. En el puzzle completo, eso arranca en unas 764 tuplas por celda interior. El **forward checking** es la disciplina de un solo paso: cuando se coloca una pieza, se elimina de todos los demás dominios y se elimina todo candidato que choque con las aristas recién expuestas. Es barato, y todo solucionador serio hace al menos esto. La **consistencia de arco** exige más. Para cada par de celdas adyacentes, todo candidato de un dominio debe tener al menos un compañero compatible en el otro, un *soporte*. Cuando una eliminación, en cualquier parte, deja un candidato sin soporte, ese candidato desaparece a su vez, y la comprobación se propaga hacia afuera hasta que no queda nada más por retirar. Para el emparejamiento de aristas esto significa exactamente: "una pieza solo puede permanecer en una celda si cada celda vecina puede seguir respondiendo a sus colores". ## AC-3, y dónde desperdicia trabajo El AC-3 de Alan Mackworth (1977) es la forma de grano grueso de alcanzar ese punto fijo: se mantiene una cola de arcos orientados, se revisa un arco a la vez (se recorre un dominio, se eliminan los candidatos sin soporte), y cada vez que un dominio se encoge, se reencolan los arcos que apuntan hacia él. Es corto, correcto y fácil de hacer incremental dentro de una búsqueda, y por eso sigue siendo la opción por defecto en todas partes. En el peor caso cuesta $O(e d^3)$ para $e$ arcos y un tamaño de dominio $d$; en el tablero de 16×16, $e$ vale $e = 960$ (las 480 adyacencias interiores, en ambos sentidos) y $d \approx 764$. Su defecto conocido: cada revisión busca los soportes desde cero, de modo que el mismo soporte se redescubre miles de veces a medida que la búsqueda se sumerge y retrocede. ## Míralo en marcha Las descripciones de algoritmos de lista de trabajo suenan todas iguales; es al ver a uno estabilizarse cuando todo encaja. Abajo está AC-3 sobre una versión en miniatura del problema: un tablero de 4×4, 3 colores de arista, cada celda arrancando con sus 64 candidatos (16 piezas × 4 rotaciones). Coloca una pieza y sigue la cola: qué arcos entran en ella, qué elimina cada revisión, cómo una eliminación rearma los arcos que apuntan al dominio encogido, y cómo se apaga la onda. Los contadores comparan el trabajo de AC-3 con el del bucle ingenuo de punto fijo (AC-1: rebarrer cada arco hasta que una pasada completa quede limpia) ejecutándose sobre exactamente las mismas posiciones. > **[Figure]** Interactivo: mira a AC-3 estabilizarse hacia un punto fijo — interactive: AcThreeLab. Rendered on the canonical page (link above); not shown in this markdown export. Dos cosas merecen atención. Las primeras colocaciones apenas propagan: un anillo de vecinas se encoge y la onda se detiene, porque el segundo anillo aún encuentra soportes para los tres colores entre los supervivientes. Las colocaciones tardías se propagan mucho más lejos: los dominios están apretados, y una sola eliminación deja aislados candidatos a dos y tres celdas de distancia. Ese es exactamente el comportamiento en el puzzle real: la consistencia de arco se gana el pan en el final de partida, no en la apertura. ## Paso a paso La misma ejecución, en palabras. Esto es todo AC-3: 1. **Inicio.** Cada celda tiene un dominio de 64 candidatos. La cola de arcos está vacía; sin ninguna eliminación aún, no hay nada que comprobar. 2. **Una pieza aterriza en B2.** Su dominio se colapsa al único candidato colocado. Todo arco *dirigido hacia* B2 entra en la cola, uno por vecina: aquí (B1→B2), (C2→B2), (B3→B2), (A2→B2). Nada más lo hace: ningún otro dominio cambió, así que ningún otro arco pudo perder un soporte. 3. **Se desencola un arco, se revisa.** Tomemos (B1→B2): se recorren los 64 candidatos de B1 y, para cada uno, se busca en el dominio de B2 un compañero compatible, un *soporte*. B2 tiene ahora una sola pieza, así que solo sobreviven los candidatos cuya arista sur coincide con su color norte: en torno a un tercio. El resto se elimina. 4. **Las eliminaciones rearman arcos.** El dominio de B1 se encogió, así que los candidatos en otros lugares que se apoyaban en los eliminados pueden quedar aislados: todo arco que apunta a B1 reentra en la cola, salvo el que viene de B2 y acaba de dispararse. Esta es la onda. 5. **Sin eliminación, sin reencolado.** Cuando una revisión no retira nada, el arco simplemente se descarta. Al principio de la partida el segundo anillo casi siempre sobrevive intacto, y la cola se vacía en un puñado de revisiones. 6. **Punto fijo.** La cola está vacía: cada candidato, en todas partes, tiene un soporte en cada dominio vecino. Ningún orden de procesamiento cambia este estado final: el punto fijo es único, y la disciplina de cola solo cambia con qué rapidez lo alcanzas. La comparación con AC-1 en la demo es todo el argumento a favor de la lista de trabajo: el bucle ingenuo rerevisa los 48 arcos por barrido hasta que un barrido queda limpio, haciendo las mismas eliminaciones a costa de varias veces más comprobaciones, y la brecha se ensancha a medida que el tablero crece. ## Qué aportan las variantes más fuertes La literatura pasó dos décadas corrigiendo esa redundancia. AC-4 (Mohr & Henderson 1986) cuenta los soportes explícitamente: tiempo óptimo $O(e d^2)$, pero $O(e d^2)$ de memoria y una penosa restauración de estado al retroceder. AC-6 y AC-7 (Bessière; Bessière, Freuder & Régin) almacenan los soportes de forma perezosa y explotan la bidireccionalidad, manteniendo el tiempo óptimo con $O(e d)$ de espacio a costa de una contabilidad de grano fino. La versión que vale la pena conocer hoy es **AC-2001/AC-3.1**, hallada de forma independiente por Bessière & Régin y por Zhang & Yap en 2001: se conserva el bucle simple de AC-3, pero se recuerda para cada par candidato-arco el *último soporte encontrado*, se comprueba que sigue vivo antes de volver a buscar, y se reanuda el recorrido donde se detuvo en lugar de desde cero. Ese único entero por par entrega la cota óptima $O(e d^2)$ con solo $O(e d)$ de memoria; en este puzzle eso son unos 367 000 enteros pequeños, despreciable. El estudio de revista de 2005 mide entre 1,5 y 9 veces menos CPU que AC-3 en una búsqueda con consistencia de arco mantenida, y muestra que la ventaja sobre AC-6 *crece* con el tamaño del dominio al otro lado del arco. Eternity II tiene dominios enormes a ambos lados de cada arco, lo que hace de AC-2001 la elección de manual. ## El techo: ¿por qué no la consistencia de camino? La consistencia de arco comprueba pares de celdas. El siguiente peldaño, la *consistencia de camino*, comprueba tripletes: retira todo par de asignaciones que ninguna tercera celda pueda soportar, propagando una condición mucho más fuerte. Encoge el árbol de búsqueda enormemente, y la comunidad midió exactamente cuánto, y exactamente por qué nadie la usa. En marzo de 2008, Geoff ejecutó toda la escalera sobre los puzzles para principiantes de Brendan Owen ([msg 4827](https://groups.io/g/eternity2/message/4827)): - En el de 6×6, la simple consistencia nodal deja un árbol de búsqueda de más de **40 000 nodos**. La consistencia de camino-1 parcial lo baja a unos 10 000. La consistencia de camino-2 parcial lo baja a **138 nodos**, el mínimo estricto necesario para recorrer las ocho soluciones. Pero el tiempo de ejecución pasa de 0,25 segundos a más de **10 segundos**. - En el de 8×8, el trato empeora. La consistencia de arco por sí sola lo resuelve en menos de **6 millones de nodos y unos 36 segundos**. Añadir un preprocesamiento de camino-1 recorta el árbol a aproximadamente 1 millón de nodos pero cuesta unos **14 minutos** de preprocesamiento; el preprocesamiento de camino-2 seguía corriendo tras **7 horas**. El patrón es inequívoco: cada nivel más fuerte de consistencia recorta realmente el árbol en varios órdenes de magnitud, y cada uno cuesta más de lo que ahorra. La propia conclusión de Geoff fue que la consistencia de camino "no tiene sencillamente un efecto coste-beneficio positivo" en este puzzle. Eso es [podar frente a velocidad](/es/research/why/prune-vs-speed/) enunciado en el lenguaje de un algoritmo real: la poda es genuina y grande, pero aquí la maquinaria para calcularla es más cara que la búsqueda que elimina, y por eso los motores recordistas se detienen en la consistencia de arco (o por debajo) y dedican el tiempo ahorrado a colocaciones en bruto. ## Lo que cuesta La contabilidad, con $e$ el número de arcos orientados y $d$ el tamaño máximo de dominio: - **AC-3** corre en $O(e d^3)$ de tiempo en el peor caso: cada arco puede reencolarse hasta $d$ veces (una por eliminación en su dominio lejano), y cada revisión cuesta hasta $d^2$ comprobaciones de soporte. Su memoria de trabajo se reduce a la cola, $O(e)$. - **AC-2001** corre en $O(e d^2)$ de tiempo, lo que es *óptimo* para cualquier algoritmo basado en la revisión de arcos: hay $e d$ pares candidato–arco y cada uno puede necesitar que su soporte se recorra una vez sobre un dominio de tamaño $d$. El precio es la tabla del último soporte: un entero por par candidato–arco, $O(e d)$ de espacio. A la escala de Eternity II, esos símbolos valen: $e = 960$ (480 adyacencias interiores, en ambos sentidos) y $d \approx 764$ tuplas candidatas por celda interior. Así que las cotas del peor caso se sitúan cerca de $e d^3 \approx 4 \times 10^{11}$ comprobaciones elementales para AC-3 frente a $e d^2 \approx 5.6 \times 10^8$ para AC-2001, tres órdenes de magnitud de diferencia sobre el papel. Los peores casos son pesimistas (las propagaciones reales tocan unas pocas celdas, como muestra la demo de arriba), pero esa razón es por la que la literatura señala la cota de AC-3 como la cosa a corregir, y la corrección solo cuesta $O(e d)$ enteros de memoria. La trampa en este puzzle no es el coste de propagación por nodo; es que dentro de una búsqueda ese coste se paga en *cada* nodo, millones de veces por segundo, y por eso los factores constantes y el comportamiento de la caché acaban importando tanto como el exponente de $d$. ## Medido en este puzzle En el motor de este proyecto (medido aquí; no replicado de forma independiente): - Un backtracker simple que propaga AC-3 junto con el [filtro de emparejamiento por color](/es/research/build/reduce/alldiff-regin/) alcanza 449 de 480 aristas en el puzzle canónico en unos 44 segundos en un solo hilo, alrededor de 2,5 segundos en 8 núcleos. - La mejor aceleración algorítmica hallada dentro del propio AC-3 fue mundana: una tabla precalculada de qué rotaciones de la misma pieza comparten colores de arista, para que las revisiones dejen de rederivarla, con un valor de 2,9× de ganancia de rendimiento en el banco de referencia del motor. - La parte no construida: AC-2001 se recomendó dos veces en las notas de este proyecto y nunca se construyó realmente, de modo que su ganancia proyectada de 2 a 5× aquí es una lectura de la literatura, no una medición. Y la creencia de que AC-3 dominaba el perfil de ejecución nunca la confirmó un profiler. Medir antes de portar. ## La salvedad sobre la corrección La consistencia de arco supone que cada arista debe coincidir perfectamente. Los motores recordistas no lo hacen: las [búsquedas al estilo Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) permiten un presupuesto de desajustes deliberados a grandes profundidades, y bajo ese régimen la consistencia de arco es *incorrecta*: poda tableros que un desajuste autorizado haría perfectamente legales. En el motor de este proyecto, toda la familia AC se desactiva en las ejecuciones tolerantes a rupturas, exactamente por esa razón. El único propagador fuerte que sobrevive al régimen de desajuste es el all-different a nivel de pieza; véase [el filtro de Régin](/es/research/build/reduce/alldiff-regin/). ## Veredicto Para cualquier búsqueda de emparejamiento exacto, la consistencia de arco es obligatoria y barata: es la diferencia entre un backtracker que patina y uno que alcanza los 440. El forward checking por sí solo deja podas sobre la mesa; AC-3 las recoge; AC-2001 recoge las mismas por menos CPU, si primero verificas que la propagación es donde de verdad se van tus ciclos. Para la caza de récords tolerante a desajustes, déjalo fuera; la corrección va primero. ## Relacionado - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [All-different, el filtro por matching de Régin](https://eternity2.dev/es/research/build/reduce/alldiff-regin/) — Ninguna pieza puede usarse dos veces: una sola restricción all-different global sobre 256 celdas. Jean-Charles Régin mostró en 1994 cómo un matching bipartito la filtra por completo en tiempo polinómico; su variante por color es el propagador más potente jamás medido sobre el edge matching, con una reserva clara sobre las búsquedas tolerantes a desajustes. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. --- # El deslizamiento de arista > La jugada premiada de Louis Verhaard: dejar que el backtracker coloque una pieza no concordante, pero solo a profundidades escogidas cerca del final del tablero. Cada deslizamiento permitido cuesta un punto de puntuación y multiplica de forma astronómica el número de tableros objetivo. Por eso su 467 se encontró más de cincuenta veces, y el ancestro directo de las rupturas de Blackwood. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/reduce/edge-slipping/ - Actualizado: 2026-07-02 - Temas: search-space, local-search - Fuente: Verhaard define el deslizamiento de arista (enero de 2009) — https://groups.io/g/eternity2/message/6328 - Fuente: Verhaard detalla el método del 467: deslizamiento condicionado a profundidades escogidas, encontrado 50+ veces (diciembre de 2009) — https://groups.io/g/eternity2/message/7321 - Fuente: El relato en primera persona del 467 por Verhaard: 247 piezas sin defecto (agosto de 2009) — https://groups.io/g/eternity2/message/6891 - Fuente: La fórmula de conteo de Max para N aristas deslizadas (enero de 2009) — https://groups.io/g/eternity2/message/6390 - Fuente: Owen extiende la teoría compleja a los deslizamientos de arista (msg 6408; la tabla de deslizamientos es el msg 6412) — https://groups.io/g/eternity2/message/6408 - Fuente: La cadena de Markov de Verhaard sobre (profundidad, deslizamientos): cómo se optimizó el arreglo de deslizamientos (msg 6423) — https://groups.io/g/eternity2/message/6423 - Fuente: JSA reproduce el 467 con el solucionador público: la escalera de rareza (msg 6687) — https://groups.io/g/eternity2/message/6687 - Fuente: La disciplina de «sin rupturas adyacentes» de Blackwood (msg 10051) — https://groups.io/g/eternity2/message/10051 --- El deslizamiento de arista es la colocación deliberada de una pieza que no concuerda con uno de sus vecinos. Louis Verhaard, que acuñó el término en la lista de correo, lo definió en una sola frase: «poner sobre el tablero una pieza cuyo color no concuerda con el de uno o más de sus vecinos» ([msg 6328](https://groups.io/g/eternity2/message/6328)). Eso suena como la descripción de un fracaso. En realidad es la idea de puntuación parcial más trascendental de toda la historia del puzzle: como la escalera de premios de Eternity II puntuaba las *aristas concordantes* en lugar de la finalización perfecta, una no concordancia cuesta exactamente un punto de 480, y tolerar un presupuesto de ellas convierte un objetivo inalcanzable, el tablero perfecto, en un número astronómico de objetivos alcanzables. El arte está en la palabra *presupuesto*: los deslizamientos no se permiten en cualquier lugar, sino que se desbloquean según un calendario, en lo más profundo de la búsqueda, donde resultan baratos. Todo lo de esta página trata sobre ese calendario. ## La no concordancia que gana premios En el verano de 2008, Verhaard estaba atascado por la vía legítima. Sin ninguna tolerancia a la no concordancia había encontrado cientos de parciales con 248 piezas correctamente colocadas (puntuación 450) y calculaba su techo en torno a 456. Solo descubrió que las piezas a medio ajustar estaban *permitidas* cuando ejecutó el solucionador público de Bob Cousins (originalmente el de Dave Clark) y lo vio alcanzar 458 en menos de un minuto; por su propia y jovial admisión, nunca se había molestado en leer las reglas ([msg 5767](https://groups.io/g/eternity2/message/5767)). El mismo descubrimiento le llegó a Max de forma independiente aquel mes de julio: ajustó su backtracker para tolerar una sola arista no concordante más allá de la pieza 215 y llevó al instante un parcial en barrido de 219 piezas hasta 461 ([msg 5691](https://groups.io/g/eternity2/message/5691)); en septiembre ya había superado el «límite del que no se habla» de la comunidad, 463, «con bastante facilidad». La respuesta de Verhaard, «¡Max, eres realmente un hombre peligroso!», abre el intercambio sobre el método en el que ambos describen la forma de la técnica madura: una búsqueda heurística en profundidad, ajustada para mantener embaldosables las piezas restantes, con una tolerancia a la no concordancia al final ([msgs 5767–5787](https://groups.io/g/eternity2/message/5767)). Seis meses más tarde, el primer escrutinio dio sus frutos: 10 000 $ a «Anna Karlsson de Lund» (la esposa de Verhaard, ejecutando su programa, [msg 6891](https://groups.io/g/eternity2/message/6891)) por un tablero con 467 de 480 aristas concordantes. El número que importa para esta página no es 467 sino *cincuenta*: «el 467 no fue algo aislado; lo encontré más de 50 veces» ([msg 7321](https://groups.io/g/eternity2/message/7321)). Una puntuación que ningún argumento exhaustivo decía que debiera ser hallable en absoluto se encontraba de forma repetida, en hardware de aficionado, y cuando Verhaard publicó el solucionador, JSA lo reprodujo desde fuera, registrando 4 017 182 tableros a 463, 227 245 a 464, 13 637 a 465, 625 a 466 y finalmente dos 467 a lo largo de unos ochenta días de funcionamiento continuo ([msg 6687](https://groups.io/g/eternity2/message/6687)). Esa escalera de rareza es escalable por una razón: cada peldaño no es un tablero único sino una clase de tableros combinatoriamente enorme, y el deslizamiento es lo que hace alcanzable la clase. La mayoría de los 467 de Verhaard tenían una puntuación *limpia*, piezas sin ninguna arista no concordante en absoluto, de solo 247 ([msg 7321](https://groups.io/g/eternity2/message/7321)); las no concordancias no eran defectos sobre el resultado, eran el mecanismo. ## Cómo funciona La propia descripción de Verhaard es concisa ([msg 7321](https://groups.io/g/eternity2/message/7321)). El programa «busca normalmente» (un backtracker en profundidad sobre un orden de relleno fijo, con heurísticas ajustadas para maximizar la embaldosabilidad de las piezas restantes) pero a ciertas profundidades *permite el deslizamiento de arista*: una pieza puede colocarse con una arista en desacuerdo con un vecino ya colocado. Es explícito sobre lo que no es: el solucionador no construye primero un parcial limpio para después embutir las piezas sobrantes en los huecos al final, y es un programa distinto de su buscador de puntuación limpia, al que se le permite saltar casillas en lugar de dejarlas no concordantes. La tolerancia está condicionada por la profundidad y es acumulativa, estructurada en lo que su documentación llama el *arreglo de deslizamientos*: para cada profundidad, el número de aristas deslizadas que la búsqueda tiene permitido haber acumulado hasta ese punto. Por debajo de la primera barrera, el solucionador es un backtracker exacto ordinario. Más allá, cada colocación puede o bien ajustarse perfectamente o, si el presupuesto a esa profundidad lo permite, ajustarse a medias, y el presupuesto desbloquea un deslizamiento cada vez a medida que aumenta la profundidad. Dos hechos hacen de las barreras tardías todo el juego: - **La ramificación.** Una pieza aleatoria se ajusta a medias mucho más a menudo de lo que se ajusta del todo. La maquinaria de Verhaard sigue las dos probabilidades por separado, por profundidad, bajo los nombres `fitProb` y `halfFitProb` ([msg 6423](https://groups.io/g/eternity2/message/6423)). Abre la puerta del deslizamiento a la profundidad 40 y multiplicas el ancho del árbol allí donde ya es más ancho, ahogando la búsqueda bajo prefijos inútiles. Ábrela a la profundidad 210, donde las ramas supervivientes están casi forzadas y el número de candidatos ronda el cero, y la misma opción adicional reanima ramas moribundas casi por nada. - **La herencia.** Una búsqueda en profundidad nunca repara un deslizamiento; deshacerlo significa retroceder a través de todo lo colocado después de él. Un deslizamiento admitido a la profundidad 41 queda sellado bajo 215 colocaciones posteriores; uno admitido a la profundidad 221 tiene 35 debajo. Los deslizamientos tempranos gastan el presupuesto allí donde menos rinde y más cuesta. Y las barreras no se adivinaron. Verhaard optimizó tanto el orden de relleno como el arreglo de deslizamientos mediante una cadena de Markov cuyos estados son pares (profundidad, deslizamientos ya usados), con probabilidades de transición estimadas a partir de las tasas medidas de ajuste pleno y a medias; a partir de la cadena calculó la probabilidad de alcanzar el fondo del tablero y el número de nodos que cada calendario candidato costaría ([msg 6423](https://groups.io/g/eternity2/message/6423)). El calendario ganador concentraba todo el presupuesto al final: trece deslizamientos, un objetivo de 467. > **[Figure]** Interactivo: la transformación por deslizamiento de arista — interactive: EdgeSlipLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Paso a paso 1. **Fija N = 0.** Una sola clase objetivo: los tableros perfectos. Nadie ha encontrado jamás uno, y la [teoría compleja](/es/research/why/complex-theory/) explica por qué nadie debería esperarlo. 2. **Desliza hasta N = 2.** Ya ≈ 1,8 × 10⁵ veces más objetivos, a puntuación 478. Cada deslizamiento adicional permitido multiplica de nuevo la clase, de modo que las barras trepan alrededor de dos órdenes de magnitud por paso. 3. **Cuidado con el hueco en N = 1.** No hay barra: una sola arista interior deslizada aislada está prohibida por la paridad, y la tabla de deslizamientos de Owen tiene ahí un cero exacto ([msg 6412](https://groups.io/g/eternity2/message/6412)). Los únicos tableros de no concordancia única pasan por el borde exterior no contabilizado, la misma fuga que produjo [la historia del 479](/es/research/build/analysis/parity-arguments/). 4. **Detente en N = 10.** Puntuación objetivo 470, el récord actual, y exactamente el presupuesto de rupturas del [solucionador de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/). 5. **Detente en N = 13.** Puntuación objetivo 467, multiplicador ≈ 6,9 × 10²⁷. Por eso el programa de un solo aficionado encontró el tablero premiado más de cincuenta veces. 6. **Bascula las barreras hacia el principio.** Mismo presupuesto, mismo multiplicador, pero el deslizamiento más temprano queda ahora bajo 215 colocaciones posteriores en lugar de 55, y la ramificación adicional aterriza allí donde el árbol es más ancho. Es el calendario, no el presupuesto, lo que la cadena de Markov de Verhaard estaba diseñada para acertar. ## Lo que cuesta Preguntado por cuántos parciales altos existen, Max razonó hacia atrás a partir de las soluciones completas y produjo el conteo empírico de la comunidad para tableros con $N$ aristas interiores deslizadas ([msg 6390](https://groups.io/g/eternity2/message/6390)): $$ S(480-N) \;\approx\; 2^{\,N-1}\binom{420}{N}\,S(480), \qquad N \ge 2, $$ donde $\binom{420}{N}$ escoge cuáles de las 420 uniones interiores se rompen, las potencias de dos dan cuenta (a grandes rasgos) de las maneras de realizar cada ruptura, y $S(480)$ es el número de tableros perfectos. Introduciendo la estimación temprana de la teoría compleja $S(480) = 26{,}700$ obtuvo unos $4.7 \times 10^9$ tableros a 478, $2.9 \times 10^{30}$ a 468 y $1.8 \times 10^{32}$ a 467, números que este proyecto ha reverificado a partir de la fórmula. Dos consecuencias importan más que los valores absolutos, que el propio Max señaló como excesivamente simplificados: - **El coste de una arista concordante más.** Los cocientes consecutivos se telescopan: $S(467)/S(468) = 2\binom{420}{13}/\binom{420}{12} = 2 \cdot 408/13 \approx 63$. Cada arista que te niegas a deslizar reduce la clase objetivo en un factor de alrededor de sesenta, lo que coincide, como señaló Max, con el comportamiento observado del solucionador de Verhaard ([msg 6390](https://groups.io/g/eternity2/message/6390)), y es del mismo orden que la regla empírica de Owen de ~100× por arista, publicada en el mismo hilo al día siguiente ([msg 6391](https://groups.io/g/eternity2/message/6391)). - **El techo.** La multiplicación se compra al precio de la puntuación: $N$ deslizamientos permitidos limitan el tablero a $480 - N$ para siempre. El deslizamiento compra alcanzabilidad, no calidad; convierte una búsqueda imposible en una factible cuyo mejor resultado posible es estrictamente peor. El precio en tiempo de ejecución, en cambio, es casi nulo: por colocación el solucionador compara un contador de deslizamientos con la entrada del arreglo de deslizamientos correspondiente a la profundidad actual (contabilidad en $O(1)$, incrementada en una colocación a medio ajustar y restaurada al retroceder). Todo el coste reside en el árbol que desbloquea, y por eso la colocación de las barreras es el problema de diseño. Owen cerró el círculo extendiendo la [teoría compleja](/es/research/why/complex-theory/) a los deslizamientos: reemplazar la probabilidad de que todas las $m$ uniones concuerden por $pm(m,v)$, la probabilidad de que exactamente $v$ lo hagan, mediante la recurrencia $pm(m,v) = pm(m-1,v) - pm(m,v+1)$, y después ponderar por las maneras de posicionar los deslizamientos ([msg 6408](https://groups.io/g/eternity2/message/6408)). Su tabla sitúa los tableros con 13 deslizamientos en $2.05 \times 10^{35}$ veces el número de tableros perfectos ([msg 6412](https://groups.io/g/eternity2/message/6412)), siete órdenes de magnitud por encima de la cifra de Max, porque la teoría también cuenta casi-tableros que no son perturbaciones de ninguna solución, mientras que Max solo contaba los derivados de un tablero perfecto. Toma cualquiera de los dos números: el conjunto de objetivos explota de forma combinatoria, mientras que el precio es lineal en puntuación. ## Del deslizamiento a las rupturas Durante doce años el 467 se mantuvo, y el diseño también. Cuando Joshua Blackwood llegó en 2020, un outsider cuyo 468 se transmitió a la lista desde Reddit, su solucionador récord llevaba una lista codificada a mano: ```csharp break_indexes_allowed = new List() { 201, 206, 211, 216, 221, 225, 229, 233, 237, 239 }; ``` Léela a la luz de esta página y es un arreglo de deslizamientos: las no concordancias («rupturas», en su vocabulario) prohibidas de plano durante las primeras 200 colocaciones, luego desbloqueadas de forma acumulativa, una a la vez, a profundidades escogidas a mano, diez en total, para una puntuación objetivo de 470. El concepto, el condicionamiento por profundidad y la concentración tardía del presupuesto son el diseño de Verhaard de 2008, rederivado a fuerza récord; el reajuste preciso de esas mismas profundidades de desbloqueo es lo que llevó a Blackwood de 469 a 470. Añadió además una disciplina que la versión de Verhaard no tenía: dos rupturas no pueden nunca tocarse, de modo que cada no concordancia queda aislada entre aristas concordantes, y por eso cualquiera de sus ejecuciones que alcance 255 colocaciones se completa hasta 256, y por eso un tablero a 469 hace también las veces de un parcial limpio de 249 piezas con siete huecos ([msg 10051](https://groups.io/g/eternity2/message/10051)). La máquina completa, con sus calendarios de cupos y su estudio de parámetros, está en [la página de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/). Vale la pena decir en voz alta la aritmética del linaje. Los trece deslizamientos de Verhaard apuntaban a 467; los diez de Blackwood apuntan a 470. Según el cociente de Max, cada deslizamiento retirado cuesta un factor de alrededor de sesenta, de modo que esas tres aristas representan a grandes rasgos un multiplicador de dificultad de $2 \times 10^5$, pagado por doce años de hardware, un bucle interno más rápido y una comunidad ejecutando el código en paralelo. La técnica en sí no cambió. En un puzzle puntuado por aristas concordantes, la jugada ganadora, dos veces y con trece años de diferencia, no fue una mejor búsqueda de tableros perfectos. Fue una redefinición calendarizada y presupuestada de lo que cuenta como objetivo. ## Relacionado - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [Argumentos de paridad](https://eternity2.dev/es/research/build/analysis/parity-arguments/) — Cuente cualquier cosa en un tablero de emparejamiento de aristas dos veces, una desde cada lado, y los totales deben coincidir, entregando pruebas de imposibilidad al precio de una sola pasada. La historia del 479 muestra tanto su poder como su trampa: un argumento de paridad limpio, cierto para todo movimiento interior, derrotado por las sesenta aristas de borde que nadie puntúa. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. --- # Aprendizaje de no-goods: recordar por qué fallaste > Un subárbol fallido es un teorema: este estado parcial nunca podrá extenderse. Memorízalo y no vuelvas a entrar en él. La comunidad probó ambas variantes: tablas de transposición al estilo del ajedrez sobre la frontera de búsqueda, y restricciones extraídas del propio puzzle. El balance completo de lo que la memoria compra a la escala de E2, y los tableros pequeños donde realmente rinde. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/reduce/nogood-learning/ - Actualizado: 2026-07-02 - Temas: search-space, exact-methods - Fuente: El esquema de índice de frontera de Max: 16 aristas no apareadas más un bitmap de piezas (groups.io message 6137, 2008) — https://groups.io/g/eternity2/message/6137 - Fuente: Lindström lo prueba, «aprende de sus errores» (groups.io message 6138) — https://groups.io/g/eternity2/message/6138 - Fuente: El consejo de Verhaard al estilo del ajedrez: memoria fija, hash, sobrescritura (groups.io message 6144) — https://groups.io/g/eternity2/message/6144 - Fuente: El tamaño de clave corregido: 76 bits de estado de frontera; tasa de aciertos 0,1 % → 1 % antes de agotarse la memoria (groups.io message 6145) — https://groups.io/g/eternity2/message/6145 - Fuente: El recuento de Max de firmas de frontera distintas: 5²·17¹⁴ ≈ 4×10¹⁸ (groups.io message 6143) — https://groups.io/g/eternity2/message/6143 - Fuente: El método mejorado: memoria mínima, 75–80 % de las ramas descartadas (groups.io message 6218) — https://groups.io/g/eternity2/message/6218 - Fuente: Comienza la saga de las restore-lists (groups.io message 8854, 2011) — https://groups.io/g/eternity2/message/8854 - Fuente: La corrección de DeVincentis: una restore-list por arista, más una para las piezas usadas (groups.io message 8886) — https://groups.io/g/eternity2/message/8886 - Fuente: Medido en el anillo de borde 6×6: 133 326 155 → 30 496 808 nodos (groups.io message 8875) — https://groups.io/g/eternity2/message/8875 - Fuente: La Failure Lookup Table de Mocsi, abandonada por un bug (groups.io message 8887) — https://groups.io/g/eternity2/message/8887 - Fuente: Las filas superiores duplicadas de McGavin: 40 horas-núcleo demostrablemente desperdiciadas (groups.io message 9610, 2016) — https://groups.io/g/eternity2/message/9610 - Fuente: Las mediciones de tasa de duplicados de 21valy: ~1 % en clave exacta a mitad de camino; la tabla relajada se satura en minutos (groups.io message 9618) — https://groups.io/g/eternity2/message/9618 - Fuente: Verhaard: eii no guarda memoria de posiciones pasadas, y ganó los 10 000 $ (groups.io message 7451, 2010) — https://groups.io/g/eternity2/message/7451 - Fuente: El balance de Blackwood: caché de 2×2 medido y descartado (groups.io message 10056, 2020) — https://groups.io/g/eternity2/message/10056 - Fuente: La extracción de colocaciones inválidas y la llamada a colaborar de Lindström (groups.io message 6743, 2009) — https://groups.io/g/eternity2/message/6743 - Fuente: La combinación de dos piezas inválida de capiman para el puzzle de 5 pistas (groups.io message 10832, 2022) — https://groups.io/g/eternity2/message/10832 - Fuente: El recuento: ~68 M de pares inválidos hallados, ~8,1×10⁹ indeterminados, y los ~32 000 pares de una solución deben sobrevivir a todos (groups.io message 10973, 2023) — https://groups.io/g/eternity2/message/10973 - Fuente: Una combinación de tres piezas inválida, diseccionada hasta tres celdas del anillo 0 (groups.io message 11131) — https://groups.io/g/eternity2/message/11131 - Fuente: SAT como servicio de invalidación: reducir un parcial sin salida a 28 piezas (groups.io messages 10289/10292, 2021) — https://groups.io/g/eternity2/message/10289 - Fuente: El pipeline CNF de capiman: 130 180 variables, cryptominisat, parciales y anillos (groups.io message 11822, 2026) — https://groups.io/g/eternity2/message/11822 --- Un backtracker que se rinde ante un subárbol acaba de demostrar un teorema: *este estado parcial no puede extenderse hasta una solución*. Luego tira el teorema y, horas después, lo vuelve a demostrar desde otra rama. El aprendizaje de no-goods es la negativa a desperdiciar esa prueba: memorizar el estado fallido, consultar el almacén antes de descender, no volver a entrar jamás. Los motores de ajedrez funcionan con esta idea (las tablas de transposición), y los solucionadores SAT la industrializaron como aprendizaje de cláusulas. La comunidad de Eternity II lleva intentando rentabilizarla desde 2008, en dos variantes distintas, y el archivo registra tanto los intentos como las autopsias. ## Por qué un subárbol fallido es siquiera reutilizable Una búsqueda en profundidad sobre un [orden de relleno](/es/research/build/backtracking/fill-order/) por líneas de barrido es función de una cantidad sorprendentemente reducida de entradas. Cuando el solucionador se encuentra a la profundidad $d$, todo el subárbol de debajo queda determinado por dos cosas: la **frontera abierta** (la secuencia de colores expuesta a lo largo del límite entre celdas colocadas y vacías) y el **conjunto de piezas todavía en mano**. Nada más del historial importa. Dos parciales de 128 piezas distintos que exponen los mismos dieciséis colores de arista y dejan las mismas 128 piezas sin usar tienen subárboles *idénticos*. Si el primero falló, el segundo debe fallar, y recorrerlo es puro desperdicio. [Peter McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) sorprendió este fenómeno en plena acción en 2016: dos combinaciones de fila superior en sus registros de [farming](/es/research/build/faster/distributed-solving/) 10×10 usaban las mismas diez piezas con la misma permutación de colores a lo largo de su arista inferior, y sus árboles de búsqueda devolvieron exactamente el mismo recuento de nodos: 5 602 741 481 523 nodos, dos veces. Las aproximadamente 40 horas-núcleo invertidas en la segunda «fueron una completa pérdida de tiempo, ya que podíamos predecir con facilidad de antemano que el resultado sería el mismo» ([message 9610](https://groups.io/g/eternity2/message/9610)). Así que el teorema es real y el desperdicio es real. Todo lo demás en esta página trata de si *recordar* sale más barato que *volver a derivar*. A la escala de E2 esa pregunta tiene una respuesta sorprendentemente constante. ## Variante uno: tablas de transposición sobre la frontera La idea llegó a la lista de correo en un solo hilo en el otoño de 2008. Max propuso indexar cada parcial de 128 piezas (ocho filas completas) por sus dieciséis aristas no apareadas, almacenando junto al índice un bitmap de las piezas que estaban disponibles-más-no-consideradas cuando el subárbol falló; que se alcance otro parcial con el mismo índice cuyas piezas disponibles sean un *subconjunto* del bitmap almacenado, y se puede saltar el subárbol entero ([message 6137](https://groups.io/g/eternity2/message/6137)). Michael Lindström ya llevaba experimentando: «funciona bastante bien, aprende de sus errores y cortará cada vez más ramas temprano en la búsqueda» ([message 6138](https://groups.io/g/eternity2/message/6138)). [Louis Verhaard](/es/research/lab/experiments/louis-verhaard/eii/) aportó la respuesta de ingeniería estándar del ajedrez por computadora: no intentes almacenarlo todo; fija un presupuesto de memoria, haz hash de la posición, sobrescribe las entradas antiguas ([message 6144](https://groups.io/g/eternity2/message/6144)). Añadió una advertencia: cuanto más difieran los conjuntos de piezas de dos fronteras coincidentes, más corto será el subárbol que el acierto puede cortar legítimamente. Luego llegaron las mediciones, y son el corazón de la historia. La contabilidad corregida de Lindström fijaba la clave en 76 bits de estado de frontera (3 bits para cada una de las dos aristas orientadas al borde, 5 bits para cada una de las catorce aristas interiores), de modo que una tabla directa necesita $2^{76}/8$ bytes, y Max contó aproximadamente $5^2 \cdot 17^{14} \approx 4 \times 10^{18}$ firmas distintas para esa única línea de prueba ([message 6145](https://groups.io/g/eternity2/message/6145), [message 6143](https://groups.io/g/eternity2/message/6143)). Al ejecutar la cosa real con el punto de ruptura en 128 piezas, la tasa de descarte comenzó en 0,1 % y trepó lentamente hasta cerca del 1 % antes de que se agotara la memoria ([message 6145](https://groups.io/g/eternity2/message/6145)). El veredicto de Max sobre ese 1 %: «no deberíamos esperar milagros de este método» ([message 6152](https://groups.io/g/eternity2/message/6152)). Un mes después Lindström informó de una versión refinada: sin estado por pieza almacenado, el punto de prueba movible, memoria mínima, «descarta alrededor del 75-80 % de media» ([message 6218](https://groups.io/g/eternity2/message/6218)). La afirmación es llamativa, pero nadie más la midió nunca y nunca apareció en ningún solucionador récord; cuando regresó en 2010 fue para pedir al grupo que detectara el fallo en su esquema de reducción dinámica, y no llegó ninguna respuesta sustancial ([message 7938](https://groups.io/g/eternity2/message/7938)). Nótese lo que hacía la clave tan grande: la frontera por líneas de barrido de E2 es *ancha*. Una posición de ajedrez cabe en unas pocas decenas de bytes con independencia de la profundidad de la partida; una frontera E2 son dieciséis aristas abiertas de diecisiete colores interiores **más** un conjunto de disponibilidad de 256 piezas, y el número de firmas alcanzables crece exponencialmente con la longitud de la frontera. Esa es la misma magnitud de entropía de frontera que gobierna la [ley de área de la entropía](/es/research/why/entropy-area-law/): la frontera es donde reside la información del puzzle, y una clave de transposición debe llevarla toda o ser incorrecta. ## Las trampas de corrección Incorrectas es exactamente lo que resultaron ser las variantes más baratas, y la contribución más instructiva del archivo sobre este tema es una autopsia pública. En 2011 Lindström describió un backtracker en el que cada celda mantiene una lista de candidatos viva, y una pieza refutada en una celda se retira de esa lista y se aparca en una «restore-list» adjunta a la celda anterior cuya deshecha la volvería válida de nuevo; poda memoizada, en efecto ([message 8854](https://groups.io/g/eternity2/message/8854)). Reducía los recuentos de nodos de forma hermosa y perdía soluciones en silencio: sus ejecuciones 8×8 se saltaban algunas de las 52 soluciones conocidas. A lo largo de más de treinta mensajes McGavin insistió con objeciones y casos de prueba inquisitivos ([message 8866](https://groups.io/g/eternity2/message/8866)) hasta que Joseph DeVincentis diagnosticó el fallo: una única restore-list confunde el *porqué* de la eliminación de una pieza. Cada celda necesita una restore-list por arista vecina más una para las piezas usadas en otro lugar, restauradas en momentos distintos del backtrack ([message 8871](https://groups.io/g/eternity2/message/8871), [message 8886](https://groups.io/g/eternity2/message/8886)). El premio que el esquema perseguía era real: Lindström ya había medido el anillo de borde 6×6 cayendo de 133 326 155 nodos a 30 496 808 ([message 8875](https://groups.io/g/eternity2/message/8875)). En el mismo hilo Mocsi reconoció su propia Failure Lookup Table (búsqueda en espiral, registro de la disposición de colores exteriores en cada repliegue forzado hacia el borde, consulta antes de descender), abandonada porque un bug le impedía resolver siquiera el 6×6 y «depurar no es tan fácil, cuando hay que esperar varios miles de iteraciones hasta que el bug se produce» ([message 8887](https://groups.io/g/eternity2/message/8887)). La lección se generaliza. Un no-good es una *prueba*, y cachear pruebas significa que tu clave de caché debe capturar cada hipótesis que la prueba usó. Subindéxala olvidando una arista vecina, una pieza usada o un momento de restauración, y cacheas una falsedad que borra soluciones en silencio. Por eso la versión correcta de la idea dentro de los motores CSP registra los no-goods solo en los fallos de propagación con sus conjuntos de razones completos, comprobados al estilo SAT con literales vigilados; los mecanismos están en la [página sobre codificaciones SAT y CSP](/es/research/build/exact/sat-csp-encodings/). ## Variante dos: no-goods sobre el propio puzzle Una entrada de transposición dice «este estado, en esta búsqueda, está muerto». Un tipo de no-good más fuerte dice «esta configuración local no aparece en **ninguna solución de Eternity II en absoluto**»: una restricción aprendida sobre el puzzle, no sobre la ejecución, válida para todo solucionador y compartible como archivo. Ese programa también arranca en 2009 con Lindström: dados las esquinas y las pistas, contó ~4500 colocaciones individuales intrínsecamente inválidas, estimó entre 20 y 50 millones de combinaciones de dos piezas inválidas, y llamó abiertamente a colaboradores para verificar e intercambiar ficheros de «colocaciones inválidas» que cualquier solucionador pudiera usar para la poda temprana de ramas ([message 6743](https://groups.io/g/eternity2/message/6743)); comparar matrices de posibilidad con otro miembro ([message 6951](https://groups.io/g/eternity2/message/6951)) hizo surgir de inmediato una discrepancia de 618 frente a 624 ([message 6956](https://groups.io/g/eternity2/message/6956)) que Lindström atribuyó a una confusión de rotación en su propio lado ([message 6957](https://groups.io/g/eternity2/message/6957)). La forma moderna e industrializada es la de capiman. Usando un CNF generado del puzzle de 5 pistas (130 180 variables, ~4 GB, resuelto con un antiguo cryptominisat; el pipeline se describe de primera mano en el [message 11822](https://groups.io/g/eternity2/message/11822)), extrae colocaciones de dos piezas demostrablemente inválidas, pares que no pueden coexistir en sus posiciones en ninguna solución ([message 10832](https://groups.io/g/eternity2/message/10832)), e incluso diseccionó una combinación de *tres* piezas inválida hasta las tres celdas del anillo 0 que estrangula ([message 11131](https://groups.io/g/eternity2/message/11131)). La misma maquinaria funcionó como servicio para otros miembros: dado un parcial sin salida, retiraba las piezas una a una, conservando cada retirada solo si el solucionador SAT seguía respondiendo UNSAT ([message 10292](https://groups.io/g/eternity2/message/10292)), y devolvía un núcleo de 28 piezas que ya es no extensible ([message 10289](https://groups.io/g/eternity2/message/10289)). Eso es minimización de cláusula de conflicto hecha a mano, exactamente lo que un solucionador CDCL hace internamente después de cada conflicto. La contabilidad, sin embargo, invita a la reflexión y capiman la publicó él mismo: en febrero de 2023 la mina contenía ~68 millones de pares inválidos confirmados, frente a aproximadamente $8.1 \times 10^9$ pares todavía indeterminados; escondidos entre los indeterminados, según su estimación, están los ~32 000 pares de una solución real, los que ninguna campaña de invalidación tiene derecho a tocar ([message 10973](https://groups.io/g/eternity2/message/10973)). Sesenta y ocho millones de teoremas, cada uno individualmente verdadero, que cubren colectivamente menos del 1 % del espacio de pares, sin modo de adivinar el resto sin arriesgar uno de los 32 000 que deben sobrevivir. Las restricciones aprendidas sobre E2 son activos reales. Solo que se están depositando en una cuenta con pasivos astronómicos. Por qué la versión automatizada de este aprendizaje por CDCL también se agota en el tablero completo (cadenas de implicación planas, conflictos tardíos y anchos) se trata en la [página sobre codificaciones SAT y CSP](/es/research/build/exact/sat-csp-encodings/); es el mismo fenómeno, encontrado desde el lado de la extracción. ## El palmarés: medido y luego descartado Ahora el contrapeso, porque sobre este tema los negativos del archivo están mejor documentados que sus positivos. **El solucionador premiado no recordaba nada.** Preguntado en 2010 sobre si su solucionador público desduplicaba los miles de tableros de 463–465 que encontraba, Verhaard respondió sin rodeos: «no los recuerda». No había memoria alguna de posiciones pasadas, y dados los volúmenes de nodos, alguien casi con certeza ya se había reencontrado con cualquier posición dada ([message 7451](https://groups.io/g/eternity2/message/7451)). Es el mismo Verhaard que había dado el consejo de transposición al estilo del ajedrez dos años antes ([message 6144](https://groups.io/g/eternity2/message/6144)), cuyo motor mantuvo el récord de 467 durante más de una década. Conocía la técnica; lo entregó sin ella. **El motor récord midió el caché y lo descartó.** Al catalogar lo que probó tras el 469, Joshua Blackwood enumeró solucionadores SAT, GPUs, «y el caché de todos los 2 por 2 preresueltos», todo medido, nada conservado; solo el afinado de las heurísticas de colocación rindió, con un valor de aproximadamente 2× ([message 10056](https://groups.io/g/eternity2/message/10056)). Sus razones declaradas para rechazar un diseño de caché por hilo emparentado son pura aritmética de memoria: el coste de reconstrucción cuando la búsqueda vuelve a cruzar la frontera del caché, y la certeza de que las tablas por hilo ya no cabrían en L3. Los motores más rápidos ya pasan más de la mitad de sus ciclos detenidos sobre la memoria (véase [ingeniería de solucionadores](/es/research/build/faster/solver-engineering/)); un sondeo de caché por nodo es una propuesta de añadir un viaje de ida y vuelta a la latencia DRAM a un bucle que vive o muere por el L1. **Las tasas de aciertos se midieron, y son magras.** En 2016, 21valy instrumentó un solucionador 10×10 por líneas de barrido: los estados exactamente duplicados (mismos bordes, mismas piezas interiores, mismos nortes expuestos) ocurren a razón de cerca del 1 % a mitad de camino del tablero, de donde su «moraleja n.º 1: no te preocupes por los duplicados verdaderos». Las claves relajadas (solo piezas interiores) muestran un 30–40 % de repetición, pero la ganancia teórica se topa por debajo del 25 % y su tabla de hash «crece demasiado rápido … saturada en unos minutos» ([message 9618](https://groups.io/g/eternity2/message/9618)). Un uno por ciento de aciertos, cada uno ahorrando un subárbol, frente a un sondeo en cada nodo y una tabla cuyo conjunto de trabajo supera la RAM en minutos: ese es el problema del punto de equilibrio en una sola medición. El patrón a lo largo de los tres casos: nadie refutó el teorema. Los subárboles fallidos *son* reutilizables. Lo que falló es el tipo de cambio: en 16×16 la clave de frontera es demasiado ancha, el espacio de estados demasiado grande para que cualquier tabla cubra una fracción útil, y el coste del sondeo recae sobre el recurso exacto (el ancho de banda de memoria) que los backtrackers rápidos ya han agotado. ## Dónde rinde de verdad Reduce el tablero o cierra la búsqueda, y la misma idea cambia de signo. - **Tableros y anillos pequeños.** El esquema de restore-lists de Lindström redujo el anillo de borde 6×6 en un factor de 4,4× ([message 8875](https://groups.io/g/eternity2/message/8875)). En un espacio de estados pequeño la tabla *puede* cubrir una fracción significativa de las fronteras alcanzables, de modo que las tasas de aciertos suben del por-mil al por-ciento y más allá. - **Enumeración y conteo exhaustivos.** Cuando el árbol se recorra hasta el final, cada subárbol duplicado es una revisita garantizada, no una probabilística: las filas superiores gemelas de McGavin ([message 9610](https://groups.io/g/eternity2/message/9610)) son 40 horas-núcleo que una comprobación de firma habría ahorrado con certeza. Desduplicar listas de filas enumeradas antes de distribuirlas es exactamente esto, aplicado en lo alto del árbol, y la cultura de censo de la comunidad (los 9×9 exhaustivos, los puzzles de pistas íntegramente enumerados) es donde la disciplina de enumeración vence de forma visible (véase [benchmarks](/es/research/build/benchmarks/)). - **Finales.** Muy dentro del tablero el conjunto de piezas restantes es pequeño, la frontera corta, y el subproblema se repite a lo largo de muchas mitades superiores: el régimen donde una tabla de memoización se mantiene pequeña, caliente y fiable. - **Dentro de un motor de propagación.** Registrar un no-good duro con su conjunto de razones completo en cada fallo de propagación es correcto por construcción y barato de comprobar: la herencia del lado CSP de CDCL descrita en la [página de codificaciones](/es/research/build/exact/sat-csp-encodings/). ## Lo que cuesta - **La clave: entropía de frontera, pagada por entrada.** Una clave de transposición correcta es la frontera abierta más el conjunto de piezas restantes. En una línea de prueba a media altura del tablero eso son $2 \cdot 3 + 14 \cdot 5 = 76$ bits de estado de arista ([message 6145](https://groups.io/g/eternity2/message/6145)) más un bitmap de piezas de 256 bits para la prueba de subconjunto ([message 6137](https://groups.io/g/eternity2/message/6137)), y el número de claves *alcanzables* en esa única línea es de alrededor de $5^2 \cdot 17^{14} \approx 4 \times 10^{18}$ ([message 6143](https://groups.io/g/eternity2/message/6143)). En general la población de claves crece como $e^{h \cdot \ell}$ para una frontera de longitud $\ell$: una ley de perímetro, el mismo término de frontera que el de la [ley de área](/es/research/why/entropy-area-law/), y por eso los tableros pequeños son baratos y el 16×16 no lo es. - **La tabla: la cobertura es la memoria dividida por la población.** Una tabla de hash de $M$ entradas frente a $K$ claves alcanzables cubre $M/K$ de ellas; con $K \approx 4 \times 10^{18}$, una tabla de 64 GiB ($M \approx 2^{33}$ entradas) cubre alrededor de $10^{-9}$ del espacio. Los aciertos vienen entonces solo de la localidad a corto plazo, que es lo que Lindström observó: 0,1 % trepando a 1 % y estancándose contra el muro de la memoria ([message 6145](https://groups.io/g/eternity2/message/6145)). - **El sondeo: un viaje de ida y vuelta a DRAM por nodo.** Un motor moderno coloca $\sim$70 M de piezas por segundo (unos $14$ ns por nodo) mientras que un sondeo aleatorio de tabla cuesta un bloqueo de memoria de $\sim$100 ns, es decir $c \approx 7$ nodos de búsqueda. El caché solo rinde si $$ p_{\text{hit}} \cdot \bar{S} \;>\; c \;\approx\; 7 \text{ nodos}, $$ donde $\bar{S}$ es el tamaño medio de un subárbol saltado. Con el $p_{\text{hit}} \approx 1\%$ medido ([message 9618](https://groups.io/g/eternity2/message/9618)) necesitas $\bar{S} > 700$ nodos *y* una tabla que retenga efectivamente esas entradas, la misma que 21valy vio saturarse en minutos. Con un $p_{\text{hit}} \sim 10^{-9}$ efectivo, ningún $\bar{S}$ realista equilibra las cuentas. - **Corrección: el conjunto de razones completo, o nada.** Cada hipótesis que la prueba de fallo usó debe estar en la clave: restore-lists por arista, listas de piezas usadas, todo ([message 8886](https://groups.io/g/eternity2/message/8886)), y el modo de fallo del subindexado son soluciones perdidas en silencio, el bug más caro que una búsqueda exhaustiva puede tener. Ese es el resumen que el archivo se ganó a lo largo de dieciocho años: el teorema es gratis, la memoria no. Un subárbol fallido es de verdad un hecho que te pertenece, pero a la escala del tablero completo, almacenar hechos cuesta más que redescubrirlos, y los dos solucionadores que establecieron récords eligieron ambos, tras medir, olvidar. ## Relacionado - [REPLAY](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/replay/) — Reconstruir de forma idéntica los tableros estrictos de 460 de la comunidad y descubrir, de paso, la jugada que los solucionadores corrientes no saben hacer: pagar dos desajustes en una misma celda. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - [Ingeniería de solucionadores: el oficio bajo el algoritmo](https://eternity2.dev/es/research/build/faster/solver-engineering/) — Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # Ejecútalo tú mismo > Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha, recompilar el motor WebAssembly y reproducir las cifras. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/run-it-yourself/ - Actualizado: 2026-07-21 - Fuente: El repositorio eternity2 en GitHub — https://github.com/raphael-anjou/eternity2 --- Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha y reproducir las cifras. ## Consigue el código Clona el repositorio. Todo está aquí: el motor Rust, el sitio web y los temas de investigación con sus scripts de cómputo. ```bash git clone https://github.com/raphael-anjou/eternity2 cd eternity2 ``` ## Qué necesitas Tres cadenas de herramientas. El motor está escrito en Rust, el sitio es una aplicación Node, y el motor se entrega al navegador como WebAssembly. - **Rust**, versión estable, con el target `wasm32-unknown-unknown` - **Node.js 22+ y pnpm** para el sitio web (`corepack enable` te consigue pnpm) - **wasm-pack** para compilar el motor a WebAssembly - **just** (opcional), un pequeño ejecutor de tareas que envuelve los comandos de abajo ## Compila y ejecuta el sitio Con `just` instalado, dos comandos. El primero compila el motor a WebAssembly e instala las dependencias web; el segundo arranca el sitio en `localhost:5173` con recarga en caliente. ```bash just setup just dev ``` ¿Prefieres ejecutar las cosas directamente? Cada receta de `just` no es más que un envoltorio de una sola línea, así que puedes prescindir por completo de `just`: ```bash # build the engine to WebAssembly cd engine && wasm-pack build --target web --out-dir ../web/src/engine/pkg --release # install and run the site cd ../web && pnpm install && pnpm dev ``` ## Trabaja sobre el motor El motor es una crate Rust corriente que además compila a WebAssembly. Ejecuta sus tests y luego recompila el WASM cada vez que lo modifiques. Los tests incluyen comprobaciones cruzadas frente a tableros reales de la comunidad, de modo que detectan cualquier cambio en el conjunto de piezas, la rotación o el cálculo de la puntuación. ```bash just test # cargo test --release just wasm # rebuild the WebAssembly after a change ``` ## Reproduce un resultado de investigación Cada tema de esta sección es autónomo: un artículo, un script de cómputo y la salida versionada que produce. Reejecutar el script regenera esa salida. Los resultados deterministas vuelven idénticos byte a byte; las ejecuciones que dependen del azar o que tardan horas lo dicen con claridad, y entregan el tablero que encontraron para que aun así puedas comprobarlo en el visor. Por ejemplo, el recuento de patrones prohibidos (unos veinte segundos): ```bash just research-forbidden-patterns # or directly: cd research/topics/forbidden-patterns/compute cargo run --release > ../results/feasibility.json ``` Cada resultado de esta sección tiene su propia receta de reproducción; el [índice de reproducción](/es/research/build/reproduce/) las lista, cada una con su comando y lo que regenera. ## Ejecuta todas las comprobaciones Un solo comando ejecuta lo que hace la integración continua: tests del motor, verificación de tipos, lint y build de producción. ```bash just check # engine tests, typecheck, lint, build ``` [Explora el repositorio en GitHub](https://github.com/raphael-anjou/eternity2). ## Relacionado - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. --- # Cómo buscan los solucionadores récord > Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/solvers/ - Actualizado: 2026-07-21 - Temas: backtracking, speed --- Todo solucionador que ostenta un récord serio en Eternity II es, en el fondo, la misma máquina: un backtracker en profundidad. Lo que los distingue no es el bucle, sino tres decisiones que se superponen a él: el orden en que visitan las celdas, las heurísticas que deciden qué pieza probar primero y cómo doblan el final de la partida cuando ya no queda una coincidencia perfecta. Esta página es el recorrido neutral por esas decisiones. La historia completa y de primera mano de cada motor (descifrada a partir del código fuente y la literatura, y luego reconstruida y medida) vive en su propia página de laboratorio, enlazada desde cada sección más abajo. ## Los motores de un vistazo Antes del recorrido, el catálogo: una fila por motor, y las cuatro decisiones que lo distinguen. Cada alcance se mide en un solo núcleo, en una misma máquina, de modo que los números se comparan igual con igual en vez de entre clústeres; cada fila enlaza su informe completo. | Motor | Orden de relleno | Poda | Régimen de hardware | Alcance medido | | --- | --- | --- | --- | --- | | [Backtracker de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) | barrido por fila desde abajo-izquierda, piezas de borde al final | cuota de color por profundidad más un presupuesto de índice de ruptura según la profundidad | un solo núcleo; el 470 salió de muchos núcleos en paralelo | 248/256 piezas sin restricción; se estanca cerca de 45 al fijar las cinco pistas | | [eii de Verhaard](/es/research/lab/experiments/louis-verhaard/eii/) | órdenes de búsqueda en peine | poda anticipada frente a umbrales de puntuación ajustados; un calendario de deslizamiento ajustado por Markov | binario Win32 en un núcleo; sin fuente para recompilar | 467/480, el único premio que pagó el concurso | | [Backtracker C de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) | según el puzle: barrido por fila, espiral, o borde primero | código generado más tablas de consulta y trucos de contador para el rendimiento bruto | un solo núcleo, ~109M colocaciones/s en el puzle real | más allá de 200/256 piezas; hecho para la velocidad, no para un score récord | | [Reimplementación de Verhaard](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/) | recocido por intercambio de composición de conjuntos bajo la métrica 2×2 | aceptación por recocido, constantes recuperadas al bit desde el binario | un solo núcleo; ejecución versionada y reejecutable | 438/480 en el puzle real de cinco pistas | | [Preajustes CSP, medidos](/es/research/lab/experiments/single-core-benchmark/csp-presets/) | una docena de preajustes de orden, borde primero el mejor | propagación por consistencia de arco | un solo núcleo, diez variantes ancladas por esquina | cerca de 183 en las variantes ancladas; por debajo de la mitad del score de un contendiente | El recorrido de abajo repasa las tres decisiones que comparten esas filas. ## Backtracking elemental Rellenar el tablero celda por celda en un orden fijo. En cada celda, probar toda pieza y rotación cuyas aristas coincidan con lo ya colocado; si ninguna encaja, retroceder y probar la celda anterior de otra manera. Correcto pero lento: el árbol de búsqueda es de una anchura astronómica. Esto es exactamente eso, a cámara lenta: un backtracker real sobre un 3×3, una decisión a la vez. Recórrelo paso a paso y observa cómo se coloca una pieza, aparece un callejón sin salida y la búsqueda retira la pieza y vuelve a intentarlo. > **[Interactive: DfsDemo]** Rendered on the canonical page (link above); not shown in this markdown export. ## El orden importa: el camino de relleno El orden en que visitas las celdas cambia la dificultad en varios órdenes de magnitud, porque algunos órdenes fuerzan a que los conflictos afloren pronto (bueno) y otros los posponen hasta que se ha desperdiciado mucho trabajo (malo). Empezar por el borde supera con amplio margen a un recorrido fila por fila sobre el mismo puzzle. Es la única palanca que ajusta cada motor récord: los órdenes de búsqueda en peine de Verhaard, el barrido de Blackwood en filas desde la esquina inferior izquierda con las piezas de borde intercaladas tardíamente y la elección por McGavin, puzzle a puzzle, entre barrido en filas, espiral hacia el interior o borde primero son todas respuestas a la misma pregunta. ## Heurísticas: qué pieza primero Un backtracker elemental prueba los candidatos en un orden arbitrario. Un motor récord los puntúa, de modo que las piezas con más probabilidad de importar se colocan primero, y poda toda rama que se quede rezagada respecto a un calendario. El solucionador de Blackwood, por ejemplo, privilegia tres colores e impone una cuota por profundidad que debe cumplirse para seguir descendiendo; Verhaard poda hacia adelante apoyándose en umbrales de puntuación ajustados a mano. Los detalles difieren, pero la forma es compartida: comprometer pronto las piezas restringidas, cortar las ramas que no pueden rentabilizar su coste. ## Doblar el final de la partida: rupturas y deslizamiento de aristas Nunca se ha encontrado un teselado perfecto de 256 piezas. En su lugar, cada tablero récord tolera un puñado de discordancias tardías, y los motores las alcanzan *planificando* la imperfección: un presupuesto por profundidad de aristas no coincidentes que se desbloquea en lo más hondo de la búsqueda. Verhaard llamó al suyo un array de deslizamiento (slip array); Blackwood llama al suyo los índices de ruptura (break indexes). La misma idea, condicionada por la profundidad para que el inicio del tablero se mantenga limpio y las discordancias solo se gasten allí donde más rinden. El laboratorio de abajo te permite mover ese presupuesto y observar cómo cambia la puntuación alcanzable: > **[Interactive: BreakIndexLab]** Rendered on the canonical page (link above); not shown in this markdown export. ## Lee la historia completa del motor Cada motor récord tiene una página dedicada que descifra cómo funciona y luego lo reconstruye y lo mide en una sola máquina, en un solo núcleo: - **[El solucionador de Blackwood, descifrado y ejecutado aquí](/es/research/lab/experiments/joshua-blackwood/solver/)**: el backtracker de calendario e índices de ruptura que hay detrás del 470 vigente, con el estudio de parámetros de Jef Bucas y una reconstrucción que vuela sin restricciones pero se atasca en cuanto se fijan las cinco pistas. - **[El eii de Verhaard](/es/research/lab/experiments/louis-verhaard/eii/)**: el motor detrás del 467, el único premio que el concurso llegó a pagar: poda hacia adelante, órdenes de búsqueda en peine, un calendario de deslizamiento ajustado por Markov y por qué su binario sin código fuente no puede ejecutarse hoy. - **[El backtracker en C de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/)**: el motor más rápido de la comunidad, una receta de optimización de 2007 refinada durante dos décadas, reconstruida aquí y llevada más allá de 200 de 256 piezas a más de 100 millones de colocaciones por segundo. - **[El backtracker JIT](/es/research/lab/experiments/raphael-anjou/jit-backtracker/)**: un motor en Rust portable que genera y compila código propio de cada rompecabezas, llevado peldaño a peldaño hasta el rendimiento de McGavin - a la par de su C afinado a mano en tableros difíciles y realistas (su C sigue siendo más rápido en los fáciles) - un resultado de velocidad en un [eje propio](/es/research/lab/experiments/raphael-anjou/going-fast/) frente al puntaje que persiguen los motores récord. - **[El motor de referencia de este sitio](/es/research/lab/experiments/raphael-anjou/engine/)**: no una máquina de récords, sino el backtracker Rust/WASM que hace funcionar cada demostración de este wiki y comprueba sus cifras. ## Míralo funcionar El área de pruebas ejecuta un solucionador en profundidad real en tu navegador. [Míralo buscar en directo](/playground/watch/) o [dibuja tu propio orden de relleno](/playground/paths/) y ponlo a competir contra los clásicos para sentir cuánto importa el orden. Para los enfoques que no funcionan, consulta los [callejones sin salida](/es/research/build/dead-ends/). --- # Las técnicas > El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/techniques/ - Actualizado: 2026-07-21 - Fuente: Problema de satisfacción de restricciones (Wikipedia): el marco general — https://en.wikipedia.org/wiki/Constraint_satisfaction_problem --- El estante de técnicas: los algoritmos y las ideas de poda que reaparecen en todo solucionador serio de Eternity II, cada uno con lo que es, lo que cuesta y lo que realmente aportó al medirse sobre este puzzle. ¿Recién llegas, o quieres ver todo el territorio de una vez? Empieza por [un mapa de todos los enfoques conocidos](/es/research/build/approaches-map/): cada familia de ataque en una sola página, lo que alcanzó cada una y dónde choca contra un muro. El [catálogo de solucionadores](/es/research/build/solvers/) muestra cómo los motores que ostentan récords ensamblan estas piezas; la página de [callejones sin salida](/es/research/build/dead-ends/) recoge las técnicas que parecían igual de prometedoras y no sobrevivieron al contacto con el terreno. ## Relacionado - [Cómo buscan los solucionadores récord](https://eternity2.dev/es/research/build/solvers/) — Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. --- # La caja de herramientas de la comunidad, 2007-2026 > Diecinueve años de software comunitario para Eternity II (interfaces de colocación manual, editores, solucionadores públicos, generadores y visualizadores), más la capa más discreta que los hizo interoperar: e2pieces.txt, las sumas de comprobación CRC-16 y el formato tablero-en-una-URL que se convirtió en la lingua franca. Un censo de referencia, con cada herramienta rastreada hasta el mensaje que la anunció. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/tooling/ - Actualizado: 2026-07-02 - Fuente: El formato de archivo e2pieces.txt puesto por escrito (John Morrison), eternity2@groups.io, 2007-12 — https://groups.io/g/eternity2/message/3571 - Fuente: El esquema de suma de comprobación CRC-16, semana del lanzamiento, eternity2@groups.io, 2007-07 — https://groups.io/g/eternity2/message/1063 - Fuente: El Manual Placement Program de eii4me, la primera herramienta GUI compartida, eternity2@groups.io, 2007-12 — https://groups.io/g/eternity2/message/3541 - Fuente: Nace E2Lab (Fred / Eternity Blogger), eternity2@groups.io, 2009-10 — https://groups.io/g/eternity2/message/7071 - Fuente: Jef Bucas lanza e2.bucas.name, el visualizador de tableros, eternity2@groups.io, 2019-11 — https://groups.io/g/eternity2/message/9955 - Fuente: Se publica libblackwood (Jef Bucas), eternity2@groups.io, 2020-11 — https://groups.io/g/eternity2/message/10078 - Fuente: Recuento de los archivos e2pieces.txt: «¡es un desastre!» (Vasily V.), eternity2@groups.io, 2023-03 — https://groups.io/g/eternity2/message/11033 - Fuente: e2.bucas.name (Jef Bucas), el visualizador comunitario y el formato de tablero compartido de hoy — https://e2.bucas.name --- La comunidad de Eternity II escribió mucho software: solucionadores, por supuesto, pero también programas de colocación manual para quienes resuelven a mano, editores de tableros, exploradores de rutas de relleno, generadores de puzzles, motores de renderizado y visualizadores. Esta página es el censo de esa caja de herramientas: quién construyó cada herramienta, cuándo, qué hacía y dónde vive ahora. Las [páginas de historia](/es/research/community/hunt/) cuentan el relato en el que aparecen estas herramientas, y las [páginas de solucionadores](/es/research/build/solvers/) cubren los algoritmos. Los enlaces muertos se declaran como muertos; nada de lo que aparece aquí es una recomendación de descarga. Una restricción lo moldeó todo. En agosto de 2007, el inventor del puzzle reivindicó derechos de autor sobre el diseño de las piezas y amenazó a los participantes que las hacían circular ([msg 1342](https://groups.io/g/eternity2/message/1342)), de modo que la norma pasó a ser que las herramientas comunitarias no distribuían las piezas. Todos los programas que siguen esperan que usted escriba su propio juego: «un rito de paso a la hermandad E2. TODOS lo hicimos.», como lo formuló Alan O'Donnell cuando la disputa volvió a estallar por enésima vez ([msg 7578](https://groups.io/g/eternity2/message/7578)). Los moderadores, por su parte, retiraban los archivos de piezas de los paquetes de herramientas subidos cuando los autores resbalaban ([msg 7609](https://groups.io/g/eternity2/message/7609)). Por eso la caja de herramientas tiene una segunda capa, menos visible: formatos de archivo compartidos y protocolos de suma de comprobación que permiten a las herramientas y a las personas interoperar sin que nadie transmita los datos de las piezas. Ambas capas están catalogadas aquí. Esa norma se ha erosionado desde entonces. Archivos `e2pieces.txt` rellenados circularon en GitHub durante años (Vasily V. reseñó «todos los que pudo encontrar» en 2023, más abajo), y le siguieron bibliotecas de juegos de piezas abiertas: Eternity2Puzzles.jl de jwortmann y eii-puzzles de Dobrogost incluyen ambas el juego. Los números de adyacencia de aristas son, en la práctica, públicos. Nuestro propio [kit de inicio](/es/research/build/toolkit/) incluye el juego por la misma razón: reproducibilidad sin un paso de transcripción manual. ## 2007-2008: las herramientas del lanzamiento Las primeras herramientas anteceden al puzzle. Brendan Owen publicó código fuente en C++ para generar puzzles de tipo Eternity II en enero de 2007, seis meses antes del lanzamiento; ese código es la semilla de toda la cultura de las pruebas de referencia ([msg 41](https://groups.io/g/eternity2/message/41)). Sergio «Zerjillo» Alonso subió un corpus de 10 080 tableros de prueba generados, más el generador y una hoja de cálculo estadística, aquella primavera ([msg 201](https://groups.io/g/eternity2/message/201), [msg 202](https://groups.io/g/eternity2/message/202), [msg 203](https://groups.io/g/eternity2/message/203)). Owen también había escrito un programa de visión por computador para leer los paneles de piezas escaneados, que digitalizó el puzzle real en la víspera del lanzamiento ([msg 789](https://groups.io/g/eternity2/message/789), [msg 1054](https://groups.io/g/eternity2/message/1054)). El buque insignia del año del lanzamiento fue **eternity2.net**, de Dave Clark, el [solucionador distribuido](/es/research/build/faster/distributed-solving/) basado en BOINC ([msg 756](https://groups.io/g/eternity2/message/756)). Importó menos por su cómputo (el proyecto cerró en diciembre de 2007 sin haber cambiado nada, [msg 3511](https://groups.io/g/eternity2/message/3511)) que por su legado: los archivos `e2pieces.txt` / `e2hints.txt` de su cliente se convirtieron en los formatos estándar de la comunidad (más abajo), su solucionador y sus archivos de datos se preservaron en el archivo del grupo con la bendición de Clark ([msg 3633](https://groups.io/g/eternity2/message/3633)), Bob Cousins distribuyó versiones «rmc» del solucionador parcheadas por la comunidad ([msg 3654](https://groups.io/g/eternity2/message/3654)), y Clark liberó como código abierto su programa personal de I+D, un solucionador de investigación capaz de exportar codificaciones SAT y LP y de generar puzzles de tipo E2 ([msg 3716](https://groups.io/g/eternity2/message/3716)). El primer backtracker *público* rápido fue el solucionador en C++ de Marc Lebel en squaro.fr, cuyas tripas la lista diseccionó en el mejor hilo de ingeniería de solucionadores de la época ([msg 1704](https://groups.io/g/eternity2/message/1704)). El renderizado se resolvió pronto y con ingenio. Henk van der Griendt fotografió sus propias piezas y construyó un visualizador HTML a partir de las imágenes ([msg 2499](https://groups.io/g/eternity2/message/2499)); Ignacio Ruiz de Conejo fue más allá con **EPiecesV2.ps**, un programa PostScript que renderiza cualquier tablero 16×16 o juego de 256 piezas a partir de la numeración oficial de las aristas. Distribuyó el *motor de renderizado* en lugar de los datos de las piezas, precisamente para mantenerse del lado correcto de la línea de los derechos de autor ([msg 2616](https://groups.io/g/eternity2/message/2616)). Owen lo adoptó para su propia visualización ([msg 2617](https://groups.io/g/eternity2/message/2617)). Los no programadores obtuvieron su herramienta en diciembre de 2007: el **Manual Placement Program** de eii4me (EternManShare.EXE), una GUI en VB6 para colocar piezas a mano, publicada con código fuente e iterada hasta la versión S3.00 en ocho días a partir de los comentarios de la comunidad ([msg 3541](https://groups.io/g/eternity2/message/3541), [msg 3719](https://groups.io/g/eternity2/message/3719)). Y en febrero de 2008 Yannick Kirschhoffer publicó **Eternity II Editor 1.0.0**, un editor de tableros multiplataforma en Java que se convertiría en la herramienta más longeva de todas ([msg 4544](https://groups.io/g/eternity2/message/4544)). ## 2008-2010: la era de los editores y la ola de código abierto El lanzamiento central de la época fue **eii**, de Louis Verhaard, el solucionador que ganó el único premio en metálico que Eternity II llegó a pagar. Publicado en septiembre de 2008 en fingerboys.se con las palabras «Estoy atascado y mi única esperanza de mejorar mi mejor puntuación es recurrir a la fuerza bruta» ([msg 5940](https://groups.io/g/eternity2/message/5940)), se distribuyó como un binario para que lo ejecutaran voluntarios; la documentación y un decodificador de sus archivos de salida `.eii` siguieron en enero de 2009, junto con la revelación de que los usuarios habían encontrado 467 más de cuarenta veces ([msg 6275](https://groups.io/g/eternity2/message/6275)). Su alojamiento es una lección sobre la putrefacción de los enlaces: fingerboys.se era el sitio web del grupo de música de Verhaard y desapareció con la banda ([msg 7446](https://groups.io/g/eternity2/message/7446)), de modo que en enero de 2010 el solucionador se trasladó sin cambios a [shortestpath.se/eii](http://www.shortestpath.se/eii/), su propio sitio y su hogar a largo plazo ([msg 7439](https://groups.io/g/eternity2/message/7439)). Los aficionados todavía lo ejecutaban con puntuaciones de nivel 466 en 2011 ([msg 8840](https://groups.io/g/eternity2/message/8840)), y los veteranos todavía guiaban a los recién llegados por `eii.exe` en 2021 ([msg 10202](https://groups.io/g/eternity2/message/10202)). La máquina en sí tiene [su propia página de solucionador](/es/research/lab/experiments/louis-verhaard/eii/). A su alrededor, se llenó todo un estante: - **E2_Manual**, el programa de colocación manual en DirectX de trans.spam (Thomas), en la v1.0.0.18 a mediados de 2008 ([msg 5686](https://groups.io/g/eternity2/message/5686)), trasladado a un proyecto SourceForge con binarios y código fuente en junio de 2009 ([msg 6765](https://groups.io/g/eternity2/message/6765)). - **Eternity II Editor** pasó de editor a solucionador: 1.3 en marzo de 2009, luego 1.4.0 con los patrones reales de E2, un solucionador integrado y un generador de tableros aleatorios ([msg 6594](https://groups.io/g/eternity2/message/6594), [msg 6679](https://groups.io/g/eternity2/message/6679)), y después la v1.5 en el mismo día de las peticiones de funciones de un usuario ([msg 6978](https://groups.io/g/eternity2/message/6978)). Vive en SourceForge (sourceforge.net/projects/eternityii); Kirschhoffer reapareció en 2012 ofreciendo todavía ayuda con el código ([msg 9064](https://groups.io/g/eternity2/message/9064)), y en 2023 el 460 de Bruno Gauthier (el mejor tablero de cinco pistas hasta 2026) fue «realizado con mi propio programa y Eternity II Editor» ([msg 11074](https://groups.io/g/eternity2/message/11074)), convertido al formato del visualizador compartido por Peter McGavin ([msg 11081](https://groups.io/g/eternity2/message/11081)). - **E2Lab.** Fred («Eternity Blogger») publicó un editor+solucionador para Windows en octubre de 2009 e iteró casi a diario ([msg 7071](https://groups.io/g/eternity2/message/7071)); tomó el nombre de E2Lab en la v1.0.0.20 ([msg 7148](https://groups.io/g/eternity2/message/7148)), y la v1.0.0.21 eliminó un «botón mágico» explícitamente «para respetar las reglas del juego» ([msg 7150](https://groups.io/g/eternity2/message/7150)). E2Lab es además el origen de la lección canónica de la comunidad sobre la fiabilidad de las herramientas: en diciembre de 2009 un usuario informó de una ventana emergente que anunciaba un 471 en un tablero que nunca se guardó, una afirmación inverificable que aún ronda las discusiones sobre récords ([msg 7284](https://groups.io/g/eternity2/message/7284)). - **e2walker.** El explorador de rutas de relleno de Philippe Coustaux, en la sección de Archivos del grupo desde agosto de 2007 ([msg 2313](https://groups.io/g/eternity2/message/2313)), revisado por Ole Knudsen («Kron») y, cuando la lista hizo inventario en 2009, todavía «el único programa de su clase»: un solucionador que permite especificar una ruta de relleno arbitraria de 256 pasos ([msg 7056](https://groups.io/g/eternity2/message/7056), [msg 7067](https://groups.io/g/eternity2/message/7067)). - **WhichWayToGo.jar.** La GUI de okifinoki (Benjamin) para puntuar rutas de relleno candidatas según el número de opciones esperado por colocación; tres implementaciones independientes convergieron en sus estadísticas dentro del hilo ([msg 6572](https://groups.io/g/eternity2/message/6572)). Su generador de puzzles gráfico E2Generator.jar se había unido al área de Archivos el otoño anterior ([msg 6036](https://groups.io/g/eternity2/message/6036)). - **El código abierto de solucionadores** llegó en una ola: el solucionador en C++ con propagación de restricciones de Markus Zajc ([msg 6748](https://groups.io/g/eternity2/message/6748)); el backtracker en Java de Martin Hapl en hapl.net, sacado a la luz por la lista y perfilado por la comunidad de 1,2 M a 2,9 M de iteraciones/s ([msg 6794](https://groups.io/g/eternity2/message/6794), [msg 6916](https://groups.io/g/eternity2/message/6916)); el solucionador en C# con paralelismo de tareas de snazzyflapper, resubido de inmediato sin el archivo de piezas que los moderadores habían señalado ([msg 7606](https://groups.io/g/eternity2/message/7606), [msg 7610](https://groups.io/g/eternity2/message/7610)); y la **Eternity II Java Toolbox** de doc_s_smith, una suite de cinco herramientas (backtracker configurable, colocación guiada por restricciones, búsqueda tolerante a discordancias con reparación por intercambio, estimador de nodos de Monte-Carlo, buscador de estrategia de relleno) que marcó el regreso del veterano de Eternity I en junio de 2010 ([msg 7755](https://groups.io/g/eternity2/message/7755)). ## 2011-2018: las herramientas de los años tranquilos A medida que el concurso moría, las herramientas se volvieron más extrañas y más personales. Dan Hansen, tras «4 años absorbentes» de algoritmos de E2, publicó **Edge Match Puzzles** para iPhone, la primera vez que la experiencia de la comunidad se convirtió en un producto de consumo ([msg 8943](https://groups.io/g/eternity2/message/8943)); el grupo académico de Tony Wauters publicó una aplicación de correspondencia de aristas para Android ([msg 9057](https://groups.io/g/eternity2/message/9057)). Juraj Pivovarov subió un visualizador de orden de recorrido, presentado con autocrítica como una «pérdida de tiempo total» ([msg 9013](https://groups.io/g/eternity2/message/9013)). La teoría se convirtió en un documento: el complex_theory.pdf de Peter McGavin, la transcripción en LaTeX del modelo de Owen, estaba en los Archivos del grupo ya en 2013 ([msg 9188](https://groups.io/g/eternity2/message/9188)). La antorcha del código abierto pasó a David Barr: un solucionador OpenCL publicado en GitHub en 2015 ([msg 9360](https://groups.io/g/eternity2/message/9360), [msg 9367](https://groups.io/g/eternity2/message/9367)). El repositorio, github.com/david3x3x3/eternity2, sigue siendo la base de código más reutilizada de la época, seguida de montajes en clúster de Raspberry Pi con una página de estado pública ([msg 9582](https://groups.io/g/eternity2/message/9582)), un solucionador en Python dentro del navegador vía Pyodide ([msg 9854](https://groups.io/g/eternity2/message/9854)) y experimentos con dancing-links y visualizaciones ([msg 10095](https://groups.io/g/eternity2/message/10095), [msg 10100](https://groups.io/g/eternity2/message/10100)). La web también tuvo su primer campo de juego de solucionadores: el backtracker de navegador de Guillaume L. en 16x16tetravex.xyz, cuyas resoluciones instantáneas se desmoronaron a «interminables» en cuanto los puzzles se regeneraron con estadísticas de color de tipo E2, una demostración en vivo de dónde reside la dificultad ([msg 9449](https://groups.io/g/eternity2/message/9449), [msg 9458](https://groups.io/g/eternity2/message/9458)). ## 2019-2026: la pila moderna La cadena de herramientas moderna comienza con un rescate. Cuando Yahoo anunció que borraría el contenido de Groups en 2019, la migración a groups.io llevó consigo los mensajes, archivos y fotos con semanas de margen ([msg 9934](https://groups.io/g/eternity2/message/9934)), razón por la cual las herramientas del área de Archivos citadas arriba aún existen, tras el muro de membresía del grupo. Dos semanas después de la migración, Jef Bucas lanzó **[e2.bucas.name](https://e2.bucas.name)**: tableros renderizados en SVG y codificados enteramente en los parámetros de la URL («puesto que los parámetros van después del '#', en realidad no se transmite nada al servidor»), con un menú desplegable de los mejores tableros que discretamente se convirtió en el libro de récords de la comunidad ([msg 9955](https://groups.io/g/eternity2/message/9955)). Una página de Pistas que respondía a las eternas preguntas sobre las piezas-pista siguió en 2021 ([msg 10082](https://groups.io/g/eternity2/message/10082)), y una remodelación con atajos de teclado y visualización de la puntuación en 2022 ([msg 10590](https://groups.io/g/eternity2/message/10590)). Prácticamente cada tablero parcial compartido desde entonces es una URL de e2.bucas.name. La estirpe de los solucionadores de récords es una historia de tres repositorios. Joshua Blackwood liberó como código abierto su **EternityII_Solver** en C# (el código tras el 468) en septiembre de 2020, tras haber pedido primero un archivo de piezas estándar para que su repositorio no distribuyera datos protegidos por derechos de autor ([msg 10037](https://groups.io/g/eternity2/message/10037), [msg 10034](https://groups.io/g/eternity2/message/10034)). Bucas lo tuvo funcionando bajo Mono en cuestión de horas ([msg 10038](https://groups.io/g/eternity2/message/10038)), lo reescribió en C para aproximadamente el doble de velocidad ([msg 10065](https://groups.io/g/eternity2/message/10065)), y publicó el generador tras el port bajo el nombre de **libblackwood** (Python que emite C rápido) en github.com/jfbucas/libblackwood ([msg 10078](https://groups.io/g/eternity2/message/10078)). Cuando el repositorio original pasó discretamente a privado, el «¿Dónde está el software que todos usáis?» de un recién llegado hizo que se volviera a publicar: «Es exactamente el código usado para encontrar un 470» ([msg 10161](https://groups.io/g/eternity2/message/10161)). El port, el original y el visualizador son la pila detrás de cada récord desde 2020; la [página del solucionador de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) cubre el algoritmo en sí. El resto del estante moderno: **E2Play** de mtmidgee, un viejo tablero de juego manual en VB recodificado en C# y liberado como código abierto desde el confinamiento australiano, «no es un solucionador (de ninguna manera, forma ni modo)» ([msg 10208](https://groups.io/g/eternity2/message/10208)); **solveforscore** de David Barr, un maximizador de puntuación en Python publicado en su repositorio de GitHub, que produjo un 462 sin pistas ([msg 11088](https://groups.io/g/eternity2/message/11088), [msg 11101](https://groups.io/g/eternity2/message/11101)); **Eternity2Puzzles.jl** de jwortmann, un paquete de Julia que amplía la teoría de la complejidad con uniones inválidas y un array de deslizamiento ([msg 11603](https://groups.io/g/eternity2/message/11603)); y **eii-puzzles** de Michal Dobrogost (github.com/michal-dobrogost/eii-puzzles), un generador de puzzles bien probado con una biblioteca de análisis en C solo de cabeceras, que genera instancias de 5 pistas al estilo del original ([msg 11752](https://groups.io/g/eternity2/message/11752)). ## La capa de convenciones Los formatos sobrevivieron a la mayoría de las herramientas, y son lo que un recién llegado realmente necesita conocer. **e2pieces.txt / e2hints.txt.** El formato del archivo de piezas lo fijó el cliente BOINC de eternity2.net (un solucionador distribuido necesita una entrada estándar, [msg 10952](https://groups.io/g/eternity2/message/10952)), y se puso por escrito conscientemente como estándar de la comunidad en diciembre de 2007, con John Morrison publicando descripciones explícitas del formato ([msg 3571](https://groups.io/g/eternity2/message/3571), [msg 3572](https://groups.io/g/eternity2/message/3572)). Siguieron quince años de deriva: cuando Vasily V. recopiló en 2023 todos los `e2pieces.txt` que pudo encontrar en GitHub, su veredicto fue «¡es un desastre!». Encontró numeraciones y paletas incoherentes y al menos un archivo defectuoso que se había recomendado a los recién llegados ([msg 11033](https://groups.io/g/eternity2/message/11033)). El hilo sobre la confusión de formatos que lo había precedido justo antes ya había producido la lista de piezas de referencia en la numeración estándar de facto hacia la que se orienta hoy a los recién llegados ([msg 10970](https://groups.io/g/eternity2/message/10970)), verificada como correcta en suma de comprobación en el seguimiento del recuento ([msg 11034](https://groups.io/g/eternity2/message/11034)). Las propias convenciones de numeración son decisiones de la semana del lanzamiento: los tipos de arista numerados a partir del folleto, acordados antes de que el puzzle cumpliera dos semanas ([msg 983](https://groups.io/g/eternity2/message/983)); una propuesta de 2009 para renumerar los patrones «universalmente» se rechazó precisamente porque ya existían estándares de facto ([msg 6804](https://groups.io/g/eternity2/message/6804)). **Sumas de comprobación CRC-16.** En los años del concurso, cuando la norma era no redistribuir el juego de piezas, la comunidad verificaba en su lugar las transcripciones: se publicaban sumas de comprobación CRC-16 por bloque de 8 piezas y se comparaban. Los miembros convergieron en CRC idénticos dentro del día siguiente al lanzamiento ([msg 1063](https://groups.io/g/eternity2/message/1063), [msg 1073](https://groups.io/g/eternity2/message/1073)); las utilidades de suma de comprobación (Checksum-v4.txt, ChecksumCalc.zip) se asentaron en la sección de Archivos como la respuesta estándar a «¿es correcto mi archivo de piezas?» ([msg 7591](https://groups.io/g/eternity2/message/7591)), y el protocolo se extendió a los puzzles de pistas en 2009 ([msg 6769](https://groups.io/g/eternity2/message/6769)). **El formato tablero-en-una-URL.** Desde 2019, un tablero *es* una URL de e2.bucas.name: anchura, altura, lista de piezas y aristas en el fragmento, renderizado en el cliente, sin enviar nada a servidor alguno ([msg 9955](https://groups.io/g/eternity2/message/9955)). Es el formato en el que los récords se anuncian, se verifican y se archivan: la lingua franca de hoy, como lo era `e2pieces.txt` en 2008. Este sitio es una rama más de esa estirpe: su [visualizador](/viewer/) lee el mismo formato de URL, y los tableros comunitarios que incluye están catalogados en [los tableros notables](/es/research/community/boards/). ## El censo | Herramienta | Autor | Nacimiento | Estado | Fuente | | --- | --- | --- | --- | --- | | Generador de puzzles de tipo E2 (C++) | Brendan Owen | 2007-01 | Archivos del grupo (miembros) | [41](https://groups.io/g/eternity2/message/41) | | Corpus de referencia + generador | Sergio "Zerjillo" Alonso | 2007-05 | Archivos del grupo (miembros) | [201](https://groups.io/g/eternity2/message/201) | | eternity2.net (BOINC) + solucionador de I+D | Dave Clark | 2007-07 | cerrado 2007-12; archivos archivados | [756](https://groups.io/g/eternity2/message/756), [3716](https://groups.io/g/eternity2/message/3716) | | Solucionador C++ público (squaro.fr) | Marc Lebel | 2007-08 | estado actual desconocido | [1704](https://groups.io/g/eternity2/message/1704) | | e2walker (explorador de rutas de relleno) | Philippe Coustaux | 2007-08 | Archivos del grupo (miembros) | [2313](https://groups.io/g/eternity2/message/2313), [7056](https://groups.io/g/eternity2/message/7056) | | Visualizador HTML a base de fotos | Henk van der Griendt | 2007-09 | personal; nunca distribuido | [2499](https://groups.io/g/eternity2/message/2499) | | EPiecesV2.ps (motor de renderizado PostScript) | Ignacio Ruiz de Conejo | 2007-09 | Archivos del grupo (miembros) | [2616](https://groups.io/g/eternity2/message/2616) | | Manual Placement Program | eii4me | 2007-12 | Archivos del grupo (miembros) | [3541](https://groups.io/g/eternity2/message/3541) | | Eternity II Editor | Yannick Kirschhoffer | 2008-02 | SourceForge; usado hasta 2023 | [4544](https://groups.io/g/eternity2/message/4544), [11074](https://groups.io/g/eternity2/message/11074) | | E2_Manual | trans.spam (Thomas) | 2008-07 | SourceForge (2009) | [5686](https://groups.io/g/eternity2/message/5686), [6765](https://groups.io/g/eternity2/message/6765) | | eii (solucionador distribuido + decodificador) | Louis Verhaard | 2008-09 | shortestpath.se/eii; fingerboys.se muerto | [5940](https://groups.io/g/eternity2/message/5940), [7439](https://groups.io/g/eternity2/message/7439) | | E2Generator.jar | okifinoki (Benjamin) | 2008-10 | Archivos del grupo (miembros) | [6036](https://groups.io/g/eternity2/message/6036) | | WhichWayToGo.jar | okifinoki (Benjamin) | 2009-03 | Archivos del grupo (miembros) | [6572](https://groups.io/g/eternity2/message/6572) | | Solucionador C++ con restricciones | Markus Zajc | 2009-05 | Archivos del grupo (miembros) | [6748](https://groups.io/g/eternity2/message/6748) | | Backtracker Java (hapl.net) | Martin Hapl | 2009-07 | hapl.net; estado actual desconocido | [6794](https://groups.io/g/eternity2/message/6794) | | E2Lab (editor + solucionador) | Fred ("Eternity Blogger") | 2009-10 | blog del autor; estado actual desconocido | [7071](https://groups.io/g/eternity2/message/7071) | | Eternity II Java Toolbox | doc_s_smith (Dietmar Wolz) | 2010-06 | Archivos del grupo (miembros) | [7755](https://groups.io/g/eternity2/message/7755) | | Edge Match Puzzles (iPhone) | Dan Hansen | 2011-07 | lanzamiento en App Store; estado desconocido | [8943](https://groups.io/g/eternity2/message/8943) | | Visualizador de orden de recorrido | Juraj Pivovarov | 2012-01 | Archivos del grupo (miembros) | [9013](https://groups.io/g/eternity2/message/9013) | | complex_theory.pdf | Peter McGavin | 2013-07 | Archivos del grupo (miembros) | [9188](https://groups.io/g/eternity2/message/9188) | | Solucionadores OpenCL/CPU, solveforscore | David Barr | 2015-04 | GitHub (david3x3x3/eternity2) | [9367](https://groups.io/g/eternity2/message/9367), [11088](https://groups.io/g/eternity2/message/11088) | | Solucionador de navegador (16x16tetravex.xyz) | Guillaume L. | 2015-09 | estado actual desconocido | [9449](https://groups.io/g/eternity2/message/9449) | | e2.bucas.name (visualizador de tableros) | Jef Bucas | 2019-11 | en línea | [9955](https://groups.io/g/eternity2/message/9955) | | EternityII_Solver | Joshua Blackwood | 2020-09 | GitHub (público de nuevo desde 2021) | [10037](https://groups.io/g/eternity2/message/10037), [10161](https://groups.io/g/eternity2/message/10161) | | libblackwood (generador de port en C) | Jef Bucas | 2020-11 | GitHub (jfbucas/libblackwood) | [10078](https://groups.io/g/eternity2/message/10078) | | E2Play (tablero de juego manual) | mtmidgee | 2021-08 | liberado como código abierto | [10208](https://groups.io/g/eternity2/message/10208) | | Eternity2Puzzles.jl | jwortmann | 2025-08 | GitHub | [11603](https://groups.io/g/eternity2/message/11603) | | eii-puzzles (generador + biblioteca C) | Michal Dobrogost | 2026-01 | GitHub (michal-dobrogost/eii-puzzles) | [11752](https://groups.io/g/eternity2/message/11752) | Donde un estado indica «Archivos del grupo (miembros)», el artefacto sobrevivió a la migración de Yahoo a groups.io de 2019 ([msg 9934](https://groups.io/g/eternity2/message/9934)) y es accesible para los [miembros del grupo](https://groups.io/g/eternity2). Las *suites* de referencia que transitaron por estas herramientas (la de Txibilis, la de Geoff, la de Benoist, las de 9×9 y 10×10 de Owen) tienen [su propia página](/es/research/build/benchmarks/). ## Relacionado - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - [Los tableros notables](https://eternity2.dev/es/research/community/boards/) — Los famosos tableros de Eternity II, tratados como objetos de estudio de pleno derecho: el 467 premiado de Verhaard, la línea de récords Blackwood hasta 470, el récord estricto de cinco pistas hasta 464, y los tableros propios de este proyecto: quién encontró cada uno, cuándo, y qué lo hace estructuralmente interesante. Cada tablero incluido se abre en el visor. --- # La caja de herramientas del constructor > Un kit de inicio en Rust listo para usar para construir tu propio solucionador de Eternity II: puntuar, generar tableros con equilibrio de colores real, generar lotes con pistas fijadas, convertir todos los formatos, medir el rendimiento y un bucle resolver→barrer→comparar, donde solo escribes el solucionador. Además, una configuración de una línea para agentes de código y un generador de tableros directamente en el navegador. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/toolkit/ - Actualizado: 2026-07-20 - Fuente: El kit de inicio (este repositorio): el espacio de trabajo Rust, los ejemplos y los archivos de configuración para agentes — https://github.com/raphael-anjou/eternity2/tree/main/research/starter-kit --- Todo lo que necesitas para *empezar* a construir un solucionador de Eternity II, menos el solucionador. El [kit de inicio](https://github.com/raphael-anjou/eternity2/tree/main/research/starter-kit) es una carpeta del repositorio: un pequeño espacio de trabajo Rust que ya hace la fontanería. Puntuación, generación de tableros, generación de lotes con pistas fijadas, conversión de formatos, benchmarks y un bucle completo **resolver → barrer → comparar**: todo está ahí. Escribes un único `Solver`; el resto sigue funcionando a su alrededor. Nada en el kit reimplementa la puntuación, la generación o los formatos. Vienen de las mismas bibliotecas compartidas sobre las que corre el propio sitio, así que una puntuación del kit es el *mismo* número que producen el [visor](/viewer/) y cualquier otro motor: el recuento canónico de aristas emparejadas, borde excluido. Copia la carpeta, mete tu idea e itera. > **[Interactive: AgentSetupBlock]** Rendered on the canonical page (link above); not shown in this markdown export. ## Qué hay en la caja - **Puntuar y verificar cualquier tablero**, desde una URL `eternity2.dev` / `e2.bucas.name` o un simple bloque `board_edges`, a través del puntuador canónico, y comprobarlo contra el conjunto de piezas oficial real (piezas todas distintas, cumplimiento de pistas), que el kit ahora incluye. - **Generar tableros** con el equilibrio de colores real de Eternity II: cinco colores de borde confinados al marco, el interior equilibrado, cada pieza distinta, totalmente determinista según la semilla. - **Generar lotes** («dame 100 tableros, estas semillas, cinco pistas fijadas») como JSON de esquema-sitio reproducible que puedes releer directamente. - **Convertir** entre todos los formatos que usa la comunidad: `board_edges`, `board_pieces`, `e2pieces.txt`, las URLs `eternity2.dev` y bucas heredadas, y CSV. Ver la [referencia de formatos](/es/research/build/formats/). - **Medir** la fontanería en un solo núcleo, para conocer el presupuesto de sobrecarga de tu solucionador. - **El bucle de iteración:** un trait `Solver` estable, un ejecutor de barrido que escribe directorios de ejecución reproducibles y una herramienta `compare` que compara dos ejecuciones, con la disciplina de varianza que este puzzle exige incorporada. ## La única regla que el kit impone por ti En Eternity II la puntuación varía mucho de una semilla a otra: la desviación estándar entre semillas es de aproximadamente 12 a 20 puntos para un solucionador de tablero completo. Así que una diferencia de uno o dos puntos de media entre dos versiones de solucionador casi siempre es ruido. La herramienta `compare` del kit se niega a llamar victoria a una diferencia por debajo del ruido, te dice que barras al menos 40 semillas y siempre informa de la dispersión. Mantén todo en un solo núcleo, como hacen los [benchmarks](/es/research/build/benchmarks/) del sitio, y tus números seguirán siendo comparables con los de los demás. ## Escribe tu primer solucionador Todo el kit se construye en torno a un único trait: ```rust use e2_kit::{Board, Budget, Instance, SolveOutcome, Solver}; struct MySolver; impl Solver for MySolver { fn name(&self) -> String { "my-solver".into() } fn solve(&mut self, instance: &Instance, start: &Board, budget: Budget) -> SolveOutcome { let mut board = start.clone(); // `start` ya lleva las pistas fijadas // ...tu búsqueda aquí. Consulta budget.expired(). SolveOutcome::complete(board) // o ::improved / ::exhausted / ::bound } } ``` Copia `examples/my_solver.rs` (una base voraz completa y funcional), reemplaza el cuerpo de `solve` y luego bárrelo: ```bash cargo run --release --example sweep -- --n 40 --budget 3 cargo run --release --bin e2kit -- compare runs/ runs/ ``` Las recetas completas (puntuación, generación, lote, conversión, benchmark) están en el [README](https://github.com/raphael-anjou/eternity2/tree/main/research/starter-kit#readme) del kit. Los tableros para probar un solucionador están en el [conjunto de datos](/es/research/build/dataset/) CC0; los enfoques a probar están recogidos en el [mapa de todos los enfoques conocidos](/es/research/build/approaches-map/). ## Genera tableros aquí mismo El generador del kit, en el navegador: el mismo motor WASM, sin instalación. Elige una forma y un rango de semillas y crea un lote reproducible; haz clic en cualquier tablero para abrirlo en el [visor](/viewer/) y puntuarlo arista por arista. > **[Interactive: BoardGenerator]** Rendered on the canonical page (link above); not shown in this markdown export. ¿Quieres lo mismo en la línea de comandos, o 10 000 tableros con pistas fijadas? Usa el ejemplo `generate_batch` del kit: escribe cada tablero en JSON que puedes volver a alimentar directamente a un solucionador. ## Relacionado - [Ejecútalo tú mismo](https://eternity2.dev/es/research/build/run-it-yourself/) — Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha, recompilar el motor WebAssembly y reproducir las cifras. - [El conjunto de datos](https://eternity2.dev/es/research/build/dataset/) — Un conjunto de datos público bajo licencia CC0 para Eternity II, en dos partes: catorce instancias de referencia para resolver, y un corpus de 7658 tableros fuertes distintos de los que aprender. Cada puntuación se recalcula a partir del propio tablero, y se verifica que el corpus sea realmente variado, en lugar de mil copias de un mismo tablero. - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Los formatos de tablero y de puzzle, puestos por escrito](https://eternity2.dev/es/research/build/formats/) — Todos los formatos en los que un tablero o un puzzle de Eternity II circula en este sitio y en la comunidad: la cadena de letras board_edges y la lista de pistas hints, e2pieces.txt, el CSV de puzzle, el JSON Puzzle del sitio, y la URL de visor, con las reglas exactas a nivel de byte (cómo se codifica el borde gris en cada uno) y, sobre todo, qué puede y qué no puede recuperar cada formato. --- # Las variantes y las afirmaciones que habitan en ellas > Todos los «Eternity II» que no son el puzzle real: la variante Marathon de TopCoder y el 468 sin resolver de Takahashi, el 480/480 sin marco de McGavin, los tableros de juegos mezclados, el desafío sin pieza inicial y la cuarentena de afirmaciones, desde la advertencia de 2007 sobre los juegos fantasma hasta la ética comunitaria de verificación de conocimiento cero. Termina con una lista de comprobación para enunciar una puntuación correctamente. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/build/variants/ - Actualizado: 2026-07-02 - Fuente: La advertencia sobre los juegos fantasma (Sergio Demian Lerner), eternity2@groups.io, 2007-07 — https://groups.io/g/eternity2/message/1210 - Fuente: El popup «471» de E2Lab que no se guardó, eternity2@groups.io, 2009-12 — https://groups.io/g/eternity2/message/7284 - Fuente: Una resolución a mano que valdría «al menos 472», nunca demostrada, eternity2@groups.io, 2010-01 — https://groups.io/g/eternity2/message/7383 - Fuente: Brendan Owen pide al autor del 476/480 que publique el tablero, eternity2@groups.io, 2011-02 — https://groups.io/g/eternity2/message/8676 - Fuente: El desafío sin pieza inicial de 1000 $, cuantificado por Peter McGavin, eternity2@groups.io, 2011-06 — https://groups.io/g/eternity2/message/8924 - Fuente: La afirmación «resuelto» de Vautrin cae ante los controles de piezas duplicadas, eternity2@groups.io, 2014-10 — https://groups.io/g/eternity2/message/9300 - Fuente: Aparece la afirmación del 468 de Takahashi (Dima), eternity2@groups.io, 2017-09 — https://groups.io/g/eternity2/message/9694 - Fuente: El control de las reglas de TopCoder: piezas generadas aleatoriamente (Peter McGavin), eternity2@groups.io, 2017-10 — https://groups.io/g/eternity2/message/9697 - Fuente: E2 sin marco resuelto: miles de tableros 480/480 (Peter McGavin), eternity2@groups.io, 2017-11 — https://groups.io/g/eternity2/message/9750 - Fuente: Por qué el 480 sin marco queda descalificado: aristas grises fuera del borde, eternity2@groups.io, 2017-11 — https://groups.io/g/eternity2/message/9766 - Fuente: El «480» de juegos mezclados: un E2 + un Clue-1 + un Clue-2 (Peter McGavin), eternity2@groups.io, 2023-10 — https://groups.io/g/eternity2/message/11169 --- A lo largo de más de veinte años, el archivo ha acumulado un pequeño zoológico de puzzles que son *casi* Eternity II: las mismas piezas con una regla suprimida, las mismas reglas con piezas distintas, el mismo tablero con piezas donantes mezcladas. Cada variante es un objeto de estudio legítimo (algunas produjeron resultados genuinamente hermosos), pero cada una también se convirtió, tarde o temprano, en el domicilio de una puntuación de titular que no es un récord sobre el puzzle real. Esta página es la guía de campo: qué es cada variante, qué se logró realmente en ella, y cómo la comunidad aprendió a mantener las puntuaciones de las variantes fuera de la [tabla de récords](/es/research/records/). ## Por qué importan las variantes: las puntuaciones solo se comparan dentro de un mismo juego Hay una sola lección, y todo lo demás en esta página es un estudio de caso de ella: **una puntuación solo es comparable con otra si ambas se obtuvieron sobre el mismo juego de piezas bajo el mismo régimen de reglas.** El puzzle real es el tablero que vendió Tomy: 256 piezas específicas, un marco de 16×16 con las aristas grises en el borde, y la pieza inicial fijada en I8 (las otras cuatro colocaciones de pistas eran ayudas opcionales según las reglas del concurso, [msg 11046](https://groups.io/g/eternity2/message/11046)). La línea de récords 467 → 468 → 469 → 470 vive entera en ese único régimen, verificada tablero por tablero ([msg 10554](https://groups.io/g/eternity2/message/10554)); la línea estricta de cinco pistas (mejor conocida: 464) se sigue por separado porque constituye un régimen *más difícil*, no un puzzle distinto ([Récords y solucionadores](/es/research/records/)). Cambie el juego de piezas y «480» puede volverse fácil. Suprima la regla del marco y el 480/480 se ha *logrado* efectivamente. Suprima la restricción de la pieza inicial y el número esperado de soluciones se multiplica por 784. Ninguno de esos números dice nada sobre el 480 oficial, que sigue sin encontrarse. De ahí el catálogo que sigue, y la cuarentena posterior. ## El catálogo ### La variante Marathon de TopCoder y la afirmación del 468 de Takahashi En 2009, TopCoder organizó un Marathon Match sobre un problema de *estilo* Eternity II. Cuando Peter McGavin revisó el enunciado del concurso años más tarde, comprobó que usaba **piezas generadas aleatoriamente**, aparentemente con recuentos de colores distintos de los de E2 y posiblemente sin distinción entre los tipos de arista de borde y de interior ([msg 9697](https://groups.io/g/eternity2/message/9697)). Cada prueba era su propio puzzle. Eso hace que cualquier puntuación del concurso sea una afirmación sobre instancias aleatorias de la *clase* de puzzle, no sobre las 256 piezas fijas de Monckton: un juego distinto, por muy parecida que sea la hoja de reglas. La afirmación asociada a él apareció en septiembre de 2017, en el resplandor posterior a la resolución del [benchmark 10×10](/es/research/build/benchmarks/) de McGavin: Dima informó que «467 fue superado en 2009». Naohiro Takahashi (chokudai), un programador competitivo de primer nivel, había tuiteado un 468. Dima afirmó sin rodeos que nunca había visto la solución y que estaba sin verificar ([msg 9694](https://groups.io/g/eternity2/message/9694), [9696](https://groups.io/g/eternity2/message/9696)). El escrutinio siguió el protocolo habitual. McGavin, sorprendido de que un método «simple» de tipo búsqueda por haz pudiera superar todo lo que contenía [el arsenal de Verhaard](/es/research/lab/experiments/louis-verhaard/eii/) ([msg 9695](https://groups.io/g/eternity2/message/9695)), hizo el control de reglas anterior y pidió confirmación de que el 468 usaba las piezas originales ([msg 9697](https://groups.io/g/eternity2/message/9697)). David Barr defendió la postura contraria: el tuit dice «Eternity 2», y el propio perfil de Takahashi distingue el concurso de TopCoder del puzzle real ([msg 9698](https://groups.io/g/eternity2/message/9698)). Dima se comprometió a contactarlo y pedirle la solución: «Es la única manera de saberlo con certeza» ([msg 9700](https://groups.io/g/eternity2/message/9700)). Nunca apareció una resolución en el archivo, de modo que el estado de la afirmación sigue sin resolverse. Contada por completo: *si* el 468 fue sobre la variante TopCoder, es incomparable en cuanto a reglas con el 467 de Verhaard; *si* fue sobre las piezas reales, nunca se produjo ningún tablero. En ambos casos se queda fuera de la tabla de récords como afirmación, no como récord. ### E2 sin marco: el 480/480 de McGavin que no es una solución El no-resultado más hermoso del archivo. A finales de 2017, Peter McGavin se fijó una variante: colocar **las 256 piezas reales** sobre el tablero real de 16×16, pero tratar las aristas grises como colores ordinarios (de modo que las piezas de borde migran hacia una banda interior) y maximizar las uniones internas. El 2 de noviembre publicó 479/480 ([msg 9736](https://groups.io/g/eternity2/message/9736)); diez días más tarde, uno de sus backtrackers, trabajando a partir de su 4400ª subsolución 14×15 aproximadamente, encontró no una sino **miles de configuraciones completas 480/480** ([msg 9750](https://groups.io/g/eternity2/message/9750), imagen en [9755](https://groups.io/g/eternity2/message/9755)). Henk van der Griendt dispuso las piezas físicamente y confirmó que encajaban ([msg 9754](https://groups.io/g/eternity2/message/9754)). Llegó la pregunta inevitable: ¿así que ha resuelto Eternity 2? McGavin fue preciso. El tablero suma 480/480 uniones internas con las piezas originales sobre el tablero original, pero «las reglas del concurso dicen que las aristas grises deben estar alrededor del borde, cosa que claramente no ocurre. Desde ese punto de vista, la entrada queda descalificada» ([msg 9757](https://groups.io/g/eternity2/message/9757), [9766](https://groups.io/g/eternity2/message/9766)). Su propio resumen es el modelo de cómo reportar un resultado de variante: «Me planteé mi propio desafío de tipo E2 con mis propias reglas y luego lo resolví» ([msg 9767](https://groups.io/g/eternity2/message/9767)). Estimó la dificultad de la variante comparable a la de construir un 14×14 sin marco a partir de las 196 piezas centrales ([msg 9719](https://groups.io/g/eternity2/message/9719)). Difícil, pero demostrablemente no al nivel de E2: la restricción del marco que la variante suprime es precisamente donde se concentra la dificultad del puzzle real. ### Juegos de piezas mezclados: los «480» de piezas donantes La tercera familia conserva la regla del marco y cambia las piezas. En 2014, McGavin mostró tableros 16×16 completos construidos a partir de *dos* juegos de E2, explotando las piezas duplicadas ([msg 9305](https://groups.io/g/eternity2/message/9305)), y en octubre de 2023 construyó un tablero completo 480/480 a partir de las piezas de un juego de E2, un juego Clue-1 y un juego Clue-2 ([msg 11169](https://groups.io/g/eternity2/message/11169)), dentro del desafío de máximo de piezas distintas de Vlastislav W., un juego deliberado cuya métrica es cuántas piezas oficiales *distintas* puede portar un tablero así (récord: 238, [msg 11167](https://groups.io/g/eternity2/message/11167), [11170](https://groups.io/g/eternity2/message/11170)). Estas construcciones no ocultan nada: claramente etiquetadas por sus autores, son la razón por la que la tabla de récords lleva una insignia de «variante» en su fila de 2023. La historia completa de los juegos donantes (qué eran los puzzles de pistas, y cómo sus piezas acabaron en estos tableros) está en [la página de los puzzles de pistas](/es/research/build/clue-puzzles/). ### La variante sin pieza inicial y el desafío de 1000 $ En junio de 2011, el miembro de la lista ebeternity puso 1000 $ en juego por una solución completa de E2 **sin** la restricción de la pieza inicial 139, válida hasta finales de septiembre ([msg 8922](https://groups.io/g/eternity2/message/8922)). Fue el primer dinero puesto sobre la mesa tras el concurso. McGavin cuantificó de inmediato lo que aporta la relajación: un número estimado de **1,1527 × 10⁷ soluciones sin la restricción de la pieza inicial frente a 14 702 con ella**, 784 veces más agujas, y sin embargo el coste esperado del backtracker por solución apenas se mueve (9,2766 × 10⁴² nodos frente a 9,2751 × 10⁴², en el mejor orden de búsqueda conocido) ([msg 8924](https://groups.io/g/eternity2/message/8924)). Menos restricciones, pajar proporcionalmente más grande: la variante es 784× «más fácil» en número de soluciones y esencialmente inalterada en cantidad de trabajo. Nadie reclamó el dinero. El único «solve» que llegó al hilo fue una afirmación de 480 de segunda mano rápidamente calificada de falsa, dando pie al resumen de Johannes Lindé de una década de tales afirmaciones: los reclamantes se vuelven «bastante indignados (o silenciosos) ante las peticiones de prueba» ([msg 8951](https://groups.io/g/eternity2/message/8951), [8952](https://groups.io/g/eternity2/message/8952)). ### Un objetivo distinto: el máximo de piezas colocadas, cero conflictos No toda variante cambia las piezas o el marco. Algunas cambian la *regla de puntuación*, y el ejemplo más limpio es el objetivo de colocación máxima sin conflictos: en lugar de contar las aristas apareadas en un tablero completo, se cuenta el mayor número de piezas que se pueden colocar de modo que **cada** pieza colocada encaje con todos sus vecinos, dejando huecos en lugar de desajustes. La puntuación es «piezas colocadas», no «aristas apareadas», y ambas no son comparables: un tablero con un puñado de huecos no dice nada sobre cómo puntuaría un tablero completo construido a partir de la misma búsqueda. La frontera aquí es antigua y estrecha, y sigue perteneciendo a Louis Verhaard. Su tablero «Only seven holes» de hacia 2008 coloca **249 de las 256** piezas sin conflictos, con los siete huecos agrupados en la banda superior (filas 1 a 4). En junio de 2026, Laurent Zamofing alcanzó **248**, a uno de él, recombinando como donantes de cruce los tableros de 467 aristas publicados por la comunidad ([msg 11890](https://groups.io/g/eternity2/message/11890), [11901](https://groups.io/g/eternity2/message/11901)). Lo llamativo es que ambos tableros topan con un *callejón sin salida local demostrado* en su puntuación: los siete huecos de Verhaard no pueden rellenarse con las siete piezas restantes, y liberar un vecindario de radio 6 a su alrededor nunca llega a 250. Que los huecos residuales caigan siempre en la misma banda superior, bajo un objetivo que no tiene nada que ver con el recuento de aristas, es en sí mismo un pequeño hallazgo, y es de nuevo [la geometría de los desajustes](/es/research/why/mismatch-geometry/): el daño se acumula contra la arista en la que la búsqueda termina, sea cual sea lo que esté optimizando. ## La cuarentena de afirmaciones Las variantes son una de las formas en que nace un falso «récord»; la otra es una afirmación sin tablero adjunto. La respuesta de la comunidad a ambas maduró hasta convertirse en un protocolo, y su historia merece contarse porque las afirmaciones en cuarentena todavía circulan. **La forma más temprana: la advertencia sobre los juegos fantasma (2007).** A los pocos días del lanzamiento, Sergio Demian Lerner advirtió a la lista sobre los «juegos fantasma»: aceptar el benchmark «aleatorio» de estilo E2 de un desconocido podía significar resolver sin saberlo una recodificación isomorfa del puzzle real, y entregarle al desconocido una solución de 2 M$ ([msg 1210](https://groups.io/g/eternity2/message/1210)). La comunidad adoptó la práctica de publicar los benchmarks con su procedencia y sus soluciones conocidas ([msg 1213](https://groups.io/g/eternity2/message/1213)). La intuición se generaliza: *un juego de piezas que no puedes verificar es una afirmación que no puedes puntuar*. El escrutinio de los juegos formaba parte de la cultura antes de que llegara ningún falso célebre. **El 471 que nunca se guardó (2009).** Una mañana, Dominique Schaltz informó que E2Lab había mostrado durante la noche un cuadro de mensaje que decía 471, pero la puntuación no apareció en su tablero y la configuración aparentemente nunca se guardó ([msg 7284](https://groups.io/g/eternity2/message/7284)). En cuestión de semanas resonó por la lista como «alguien tocó 471» ([msg 7317](https://groups.io/g/eternity2/message/7317), [7353](https://groups.io/g/eternity2/message/7353)). Nunca existió ningún tablero. El episodio es la ilustración más limpia de por qué la regla es *tablero o no ocurrió*: un popup de software reportado fielmente, una vez separado de sus reservas, circuló como un récord. **La resolución a mano ≥472 (2010).** Faruk Barber informó haber completado todo el tablero a mano sin ninguna de las piezas de pista en sus posiciones; Henk van der Griendt calculó que la afirmación valdría al menos 472 tras intercambiar la pieza inicial para ponerla en conformidad ([msg 7383](https://groups.io/g/eternity2/message/7383), [7385](https://groups.io/g/eternity2/message/7385)). Al Hopfer lo calificó de «simplemente ridículo»: un 472 genuino empequeñecería el 467 conocido ([msg 7427](https://groups.io/g/eternity2/message/7427)). Nunca se publicó ninguna prueba; el reclamante ofrecía simultáneamente sus puzzles de pistas a la venta ([msg 7395](https://groups.io/g/eternity2/message/7395)). **El brote 476-luego-480 (2011).** En enero de 2011, Alain Bidon afirmó un 476/480 logrado sin la pieza inicial en su lugar; el mensaje original falta en la exportación del archivo y solo sobrevive a través de las respuestas ([msg 8247](https://groups.io/g/eternity2/message/8247)). La lista lo repuntó de inmediato bajo las reglas (a lo sumo 472 sin la pieza inicial, 468 garantizado tras la conformidad). En febrero la afirmación había crecido a múltiples **480** sin pistas ([msg 8636](https://groups.io/g/eternity2/message/8636)) y chocó con lo que un miembro llamó «la vieja y buena prueba de conocimiento cero». Las dos exigencias de Brendan Owen en ese hilo siguen siendo el modelo del género: «hay un error en su programa. Coloque de verdad las piezas reales» ([msg 8670](https://groups.io/g/eternity2/message/8670)), y «¿podría por favor publicar el tablero de identificadores de piezas?» ([msg 8676](https://groups.io/g/eternity2/message/8676)); Bruce lo concretó: basta con dar la vuelta a cada pieza y publicar la lista 16×16 de los números del reverso ([msg 8681](https://groups.io/g/eternity2/message/8681)). Nunca apareció ningún tablero. En la misma temporada, un anuncio anónimo de «nuevo algoritmo» fue recibido con el otro desafío habitual: demuéstralo resolviendo [el benchmark 10×10 sin pistas de Brendan](/es/research/build/benchmarks/) ([msg 8262](https://groups.io/g/eternity2/message/8262), [8264](https://groups.io/g/eternity2/message/8264)). **El caso Vautrin (2014): el protocolo funcionando de principio a fin.** Nicolas Vautrin afirmó primero que su programa podía demostrar que E2 *no* tiene soluciones, se retractó (un error), y luego, días después, publicó «eternity2 resuelto ;)» reteniendo la solución a causa de un premio ([msg 9280](https://groups.io/g/eternity2/message/9280), [9286](https://groups.io/g/eternity2/message/9286), [9291](https://groups.io/g/eternity2/message/9291)). Esta vez existía un artefacto verificable, una solución reclamada a uno de los benchmarks de Brendan, y la verificación lo mató en días: el editor de Conny Öström encontró en él **115 piezas duplicadas** ([msg 9300](https://groups.io/g/eternity2/message/9300)), McGavin exhibió una pieza usada cinco veces ([msg 9301](https://groups.io/g/eternity2/message/9301)), Arnaud Carré identificó el error exacto de contabilidad ([msg 9308](https://groups.io/g/eternity2/message/9308)), y Vautrin lo concedió ([msg 9303](https://groups.io/g/eternity2/message/9303)). Nadie tuvo que confiar en nadie: el tablero estaba publicado, así que el tablero podía comprobarse. El patrón común a estas cinco historias es el verdadero saber institucional de la comunidad. Las afirmaciones mueren o sobreviven sobre artefactos (un tablero de identificadores de piezas, un benchmark público resuelto, una suma de comprobación), nunca sobre la reputación, el entusiasmo o la plausibilidad. El 471, el ≥472 y los 476/480 no deben entrar nunca en la tabla de récords; el 468 de Takahashi espera fuera de ella a que aparezca un tablero; y el episodio Vautrin muestra la misma maquinaria despejando un error genuino en cuatro días. ## Cómo enunciar una puntuación correctamente Destilada de los veinte años anteriores, la lista de comprobación que el archivo hace cumplir de hecho. Una puntuación no significa nada sin las cuatro: 1. **Nombra el juego de piezas.** ¿E2 oficial de 256 piezas? ¿Un juego de benchmark de Brendan (cuál)? ¿Piezas aleatorias? ¿Juegos donantes mezclados? Si el juego es privado o no verificable, no puntúa nada; la [advertencia sobre los juegos fantasma](https://groups.io/g/eternity2/message/1210) trata exactamente de esto. 2. **Nombra el régimen de reglas.** ¿Enmarcado con las aristas grises en el borde? ¿Solo con pieza inicial (la línea de récords 467→470), cinco pistas estrictas (la línea del 464), sin pieza inicial (el desafío de 1000 $), o sin marco? Las puntuaciones no se transfieren entre regímenes: 784× más soluciones sigue sin ser el mismo juego. 3. **Publica el tablero.** El tablero 16×16 de identificadores de piezas con rotaciones: la exigencia de Brendan, el «da la vuelta a cada pieza» de Bruce. Cualquiera puede repuntar un tablero; un número, no. Cada tablero de [la página de tableros notables](/es/research/community/boards/) puede cargarse y repuntarse arista por arista en el [visualizador](/viewer/). 4. **Di quién y cuándo, con un enlace.** La tabla de récords solo lleva entradas con una fuente primaria; las afirmaciones que solo viven en un popup, un tuit o un recuerdo quedan en cuarentena ([Récords y solucionadores](/es/research/records/)). Juego + régimen + tablero, o no ocurrió. ## Relacionado - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Los cuatro puzzles-pista](https://eternity2.dev/es/research/build/clue-puzzles/) — Tomy vendió cuatro pequeños puzzles complementarios de Eternity II: resuelve uno, envía la solución y el sitio oficial revelaba la posición de una pieza en el tablero principal. Qué era cada puzzle, el verificador en línea defectuoso, el mercado gris de eBay, por qué los puzzles 5 y 6 nunca llegaron, y la segunda vida de los puzzles-pista como casos de prueba para la teoría de complejos y como juegos de piezas donantes. - [Los tableros notables](https://eternity2.dev/es/research/community/boards/) — Los famosos tableros de Eternity II, tratados como objetos de estudio de pleno derecho: el 467 premiado de Verhaard, la línea de récords Blackwood hasta 470, el récord estricto de cinco pistas hasta 464, y los tableros propios de este proyecto: quién encontró cada uno, cuándo, y qué lo hace estructuralmente interesante. Cada tablero incluido se abre en el visor. --- # Historia y comunidad > El récord y las personas que hay detrás: dos décadas de Eternity II contadas como una historia, los propios tableros récord, los poseedores del récord y los teóricos, la literatura académica, y cómo añadir tu propio trabajo al wiki. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/community/ - Actualizado: 2026-07-13 --- Eternity II es una historia antes de ser un algoritmo. Esta sección conserva la memoria de la comunidad: cómo fue subiendo el récord, los tableros que sostienen la línea, las personas que los encontraron, los artículos escritos por el camino, y cómo añadir lo que sabes.
- [Historia: los grandes hitos](/es/research/history/) — Toda la historia de un vistazo: una cronología recorrible de los puntos de inflexión, desde la lista de correo fundada en 2000 hasta el récord de 470 que aún se mantiene. - [La búsqueda, al completo](/es/research/community/hunt/) — El relato extenso en dos partes: la era fundacional (2000-2009) y la línea moderna del récord (2009-2026), con los mensajes que atestiguan cada giro. - [Récords y solucionadores](/es/research/records/) — La cronología del récord y los motores que hay detrás: quién alcanzó 470/480, y qué revelan esos tableros sobre el muro. - [Los tableros destacados](/es/research/community/boards/) — La línea del récord contada a través de los propios tableros: el 467 de Verhaard, la subida hasta 470, el récord estricto de cinco pistas, cada uno con sus aristas no concordantes marcadas y abribles en el visor. - [Quién es quién](/es/research/people/) — Las personas detrás de dos décadas de investigación (fundadores, poseedores del récord, teóricos), con lo que cada uno aportó y los mensajes que lo atestiguan. - [Artículos](/es/research/papers/) — La literatura académica sobre Eternity II y el emparejamiento de aristas, clasificada según su utilidad real para quien construye un solucionador. - [Contribuir](/es/research/contribute/) — Cómo enriquecer el wiki: las fuentes en las que confía, cómo se acreditan los hallazgos, y adónde enviar lo que sabes.
## El archivo de la comunidad Buena parte de aquello en lo que se apoya este wiki reside, en bruto, en el [área de Archivos de groups.io](https://groups.io/g/eternity2/files): unos 300 MB acumulados a lo largo de dos décadas. Vale la pena saber qué hay ahí dentro.
- [El archivo de artículos](https://groups.io/g/eternity2/files/00_Eternity2_articles_papers_presentations_books) — Quince PDF fechados, de 2007 a 2020: las pruebas de complejidad, los artículos SAT/CSP y MILP, tesis, y una bibliografía mantenida al día. La columna vertebral de nuestra página de [Artículos](/es/research/papers/). - [Teoría del puzzle y pruebas](https://groups.io/g/eternity2/files/Puzzle%20Theory) — Dieciséis más: las cotas de la transición de fase, la prueba de factibilidad por arista compartida, notas de seminario francesas, y trabajos transversales procedentes de la literatura SAT y de física. - [Décadas de solucionadores](https://groups.io/g/eternity2/files) — Decenas de carpetas de colaboradores (Brendan, Guenter, Peter McGavin, y muchos más): backtrackers, codificadores SAT y de cobertura exacta, intentos con GA y GPU, con el código fuente, la mayoría anteriores a este wiki. - [Bases de datos](https://groups.io/g/eternity2/databases) — La tabulación de las ["estimaciones del backtracker"](/es/research/why/complex-theory/) de Brendan Owen (los tamaños de árbol y los recuentos de soluciones que encontrarás integrados en las páginas de teoría) y las clasificaciones del récord, todo consultable.
Puzzles de muestra, conjuntos de referencia e imágenes de tableros también están ahí. Si descubres algo que merezca una página, [dilo](/es/research/contribute/) y podrá convertirse en una. ## Páginas de esta sección - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - [La cacería, una historia, parte II: 2009-2026](https://eternity2.dev/es/research/community/hunt-part-2/) — Diecisiete años después del premio: el concurso muere con su solución encerrada en una caja fuerte, 467 se mantiene durante una década, el archivo sobrevive al cierre de Yahoo por cuestión de días, y luego un desconocido venido de Reddit reescribe el libro de récords. Cada suceso está vinculado a su mensaje original. - [Los tableros notables](https://eternity2.dev/es/research/community/boards/) — Los famosos tableros de Eternity II, tratados como objetos de estudio de pleno derecho: el 467 premiado de Verhaard, la línea de récords Blackwood hasta 470, el récord estricto de cinco pistas hasta 464, y los tableros propios de este proyecto: quién encontró cada uno, cuándo, y qué lo hace estructuralmente interesante. Cada tablero incluido se abre en el visor. --- # Los tableros notables > Los famosos tableros de Eternity II, tratados como objetos de estudio de pleno derecho: el 467 premiado de Verhaard, la línea de récords Blackwood hasta 470, el récord estricto de cinco pistas hasta 464, y los tableros propios de este proyecto: quién encontró cada uno, cuándo, y qué lo hace estructuralmente interesante. Cada tablero incluido se abre en el visor. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/community/boards/ - Actualizado: 2026-07-02 - Fuente: msg 6337: el resultado del escrutinio de enero de 2009, 10 000 $ para Anna Karlsson de Lund por 467/480 — https://groups.io/g/eternity2/message/6337 - Fuente: msg 10032: el 468 de Blackwood llega a la lista desde Reddit — https://groups.io/g/eternity2/message/10032 - Fuente: msg 10045: McGavin anuncia el 469 — https://groups.io/g/eternity2/message/10045 - Fuente: msg 10074: el 469 de Fernandez obtenido por intercambio de una sola pieza — https://groups.io/g/eternity2/message/10074 - Fuente: msg 10117: el 470 de Blackwood — https://groups.io/g/eternity2/message/10117 - Fuente: msg 11401: Bucas iguala el 470 — https://groups.io/g/eternity2/message/11401 - Fuente: msg 11074: el 460 estricto de cinco pistas de Gauthier (el récord 2023-2026) — https://groups.io/g/eternity2/message/11074 - Fuente: El 464 de Riotte, el nuevo récord estricto de cinco pistas (groups.io, julio de 2026) — https://groups.io/g/eternity2/message/11919 - Fuente: e2.bucas.name (Jef Bucas), el visor comunitario donde estos tableros se compartieron por primera vez — https://e2.bucas.name --- La historia de Eternity II suele contarse a través de las personas y los solucionadores. Esta página la cuenta a través de los tableros mismos: el puñado de objetos que sostienen toda la línea de récords, sea quien sea su autor. Cada entrada indica quién anunció el tablero y dónde, y qué se sabe públicamente sobre su estructura. Todos los tableros que aquí se muestran vienen incluidos con este sitio: haz clic en cualquier vista previa para cargarlo en el [visor](/viewer/) y volver a puntuarlo arista por arista. La cronología completa y el historial de métodos viven en la [página de récords](/es/research/records/); esto es la galería. ## La línea de récords: 467 → 468 → 469 → 470 ### El 467 de Verhaard (2008): el tablero premiado El tablero que ganó el único premio en metálico que Eternity II llegó a pagar. El [solucionador distribuido *eii*](/es/research/lab/experiments/louis-verhaard/eii/) de Louis Verhaard, distribuido a los voluntarios en septiembre de 2008 con estas palabras, "I am stuck" ([msg 5940](https://groups.io/g/eternity2/message/5940)), había encontrado un 467/480 más de 40 veces, por usuarios distintos, en el momento en que lo documentó ([msg 6275](https://groups.io/g/eternity2/message/6275)). En el escrutinio del 31 de diciembre de 2008 la entrada, presentada bajo el nombre de Anna Karlsson de Lund (el hogar de Verhaard), se llevó el premio de 10 000 $ a la mejor solución parcial ([msg 6337](https://groups.io/g/eternity2/message/6337), con el grupo reconociendo de inmediato a la ganadora en el [msg 6349](https://groups.io/g/eternity2/message/6349)). Dos notas al pie posteriores cambian cómo se lee el tablero. Al releer el propio relato de Verhaard, Jef Bucas observó que el 467 se había logrado bajo una desventaja autoimpuesta: Verhaard había malinterpretado las reglas y había restringido el tipo de tablero que se permitía presentar ([msg 10582](https://groups.io/g/eternity2/message/10582)). Y ya en 2023 la puntuación se había convertido en un objetivo de calibración: "la semana pasada encontré unos 30 x 467. Uso este objetivo para calibrar el código que estoy ejecutando" ([msg 11001](https://groups.io/g/eternity2/message/11001)). Aun así, se mantuvo como récord durante doce años. > **[Interactive: CommunityBoard]** Rendered on the canonical page (link above); not shown in this markdown export. El visor también incluye, en su menú de tableros, tres 467 hermanos (Verhaard 467a, 467b, 467c) de la misma campaña. ### El 468 de Blackwood (2020): el tablero de fuera El primer avance más allá de 467 en doce años llegó desde fuera de la comunidad: una publicación en Reddit de Joshua Blackwood, entonces desconocido para la lista de correo, retransmitida en el [msg 10032](https://groups.io/g/eternity2/message/10032). Un tablero con solo 12 rupturas, 468/480. Bucas lo verificó, lo añadió al visor y transmitió la asombrosa afirmación de que el autor podía "encontrar un 468 cada 4 días" ([msg 10033](https://groups.io/g/eternity2/message/10033)). Días más tarde, Blackwood liberó el código [del solucionador que lo encontró](/es/research/lab/experiments/joshua-blackwood/solver/) ([msg 10037](https://groups.io/g/eternity2/message/10037)). Todos los tableros que siguen se remontan a ese código. > **[Interactive: CommunityBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ### El 469 de McGavin (2020): el tablero techo "¡¡Tu solucionador es fantástico!! Lo ejecuté durante unos días en un par de cientos de núcleos y me toco el gordo. ¡Nueva puntuación récord de 469! ¡Solo 11 rupturas!" Así escribió Peter McGavin, ejecutando el solucionador recién publicado por Blackwood ([msg 10045](https://groups.io/g/eternity2/message/10045)). Blackwood explicó en el mismo hilo la disciplina de rupturas del solucionador: las rupturas nunca pueden tocarse, de modo que este 469 equivale a un parcial de 249 piezas con 7 huecos ([msg 10051](https://groups.io/g/eternity2/message/10051)). Estructuralmente, este tablero tiene una firma que puedes comprobar tú mismo: sus once aristas no emparejadas se alojan todas en las cinco primeras filas, dejando una losa de once filas localmente impecable: los daños quedan barridos contra el borde donde terminó la búsqueda. Esa geometría, y por qué se invierte en los tableros construidos en sentido contrario, se analiza en [Dónde viven los defectos](/es/research/why/mismatch-geometry/). > **[Interactive: CommunityBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ### La oleada de 469 (octubre-noviembre de 2020) Bucas publicó sus dos primeros 469 en octubre ([msg 10052](https://groups.io/g/eternity2/message/10052), "Here are 2 other 469"), portó el algoritmo de Blackwood a C, duplicando aproximadamente su velocidad ([msg 10065](https://groups.io/g/eternity2/message/10065)), y el flujo siguió llegando: los tableros c a g en noviembre, desde el [msg 10067](https://groups.io/g/eternity2/message/10067) ("Another one yay \o/") hasta el [msg 10078](https://groups.io/g/eternity2/message/10078), que salió junto con el portado de código abierto, *libblackwood*. Los siete están en el menú de tableros del visor como Bucas 469a-g. La excepción es el de Carlos Fernandez. Pasó el 469 de McGavin a un programa de intercambio de piezas de su propia autoría y encontró otro 469 que difería en una sola pieza ([msg 10074](https://groups.io/g/eternity2/message/10074)), prueba, en palabras de Bucas cuando lo añadió al visor, de que "incluso a 469, todavía queda un poquito de flexibilidad" ([msg 10075](https://groups.io/g/eternity2/message/10075)). Esa flexibilidad es escasa: es exactamente el tipo de empate aislado que predice el análisis de rigidez de más abajo, y no un camino hacia arriba. ### Los 470 (2021 y 2024): el techo actual Blackwood cerró su propio arco con un mensaje casi sin palabras: una URL de visor, una lista de piezas (470/480, 10 rupturas) y esta única línea, "I haven't physically put it together yet, but I found one!" ([msg 10117](https://groups.io/g/eternity2/message/10117)). Más tarde confirmó que lo había encontrado con exactamente el código del repositorio público ([msg 10161](https://groups.io/g/eternity2/message/10161)), con la planificación reajustada que había publicado de antemano, y luego se detuvo: "No he escrito una línea de código ni ejecutado ningún algoritmo desde que encontré un 470" ([msg 10185](https://groups.io/g/eternity2/message/10185)). > **[Interactive: CommunityBoard]** Rendered on the canonical page (link above); not shown in this markdown export. La puntuación se ha igualado una vez, no superado. En diciembre de 2024 Bucas reinició "unos cuantos hilos del código de Joshua" y apareció otro 470 ([msg 11401](https://groups.io/g/eternity2/message/11401)); Fernandez advirtió que sus tres figuras de borde no emparejadas permitían un reordenamiento y publicó un 470b ([msg 11403](https://groups.io/g/eternity2/message/11403)). La clase de los 470 sigue siendo un monopolio del solucionador de Blackwood, y 470 sigue siendo el techo: "Nadie está ni siquiera cerca… El mejor resultado hasta la fecha es la solución parcial de Joshua Blackwood, 470/480 aristas emparejadas" ([msg 11343](https://groups.io/g/eternity2/message/11343)). > **[Interactive: CommunityBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ## Lo que comparten los tableros récord Tres hechos documentados públicamente valen para toda la línea 468/469/470. **Mismo régimen de pistas.** Todos colocan la pieza de inicio obligatoria en su lugar oficial y ninguna de las cuatro piezas pista opcionales en el suyo. La comunidad lo comprobó para el 470 ([msg 10554](https://groups.io/g/eternity2/message/10554)), y Blackwood confirmó que disponía de las piezas pista y que deliberadamente no las usó ([msg 10185](https://groups.io/g/eternity2/message/10185)). Bajo las reglas originales del concurso solo la pieza de inicio era obligatoria, así que estos tableros eran elegibles para el premio tal como se presentaron. **Defectos en bandas.** Las pocas aristas no emparejadas no están dispersas; se apiñan en una sola banda de filas contra el borde donde terminó la búsqueda. [Dónde viven los defectos](/es/research/why/mismatch-geometry/) puntúa los tableros reales en vivo y muestra la banda; también muestra los tableros de este proyecto exhibiendo la misma banda, en espejo. **Rigidez local.** Ninguno de estos tableros es una casi-solución a la espera de un pulido. [El muro de rigidez](/es/research/why/rigidity-wall/) recurre a resoluciones exactas de programación entera para demostrar que, en los tableros récord, liberar regiones enteras y rellenarlas de nuevo de forma óptima devuelve la misma disposición: los mejores tableros se asientan en el fondo de sus propios valles. El 469 de Fernandez obtenido por intercambio de una sola pieza es la excepción que confirma la regla: un empate al lado, nunca un paso hacia arriba. ## La línea estricta de cinco pistas: del 460 de Gauthier al 464 de Riotte La mayoría de los tableros récord publicados conservan solo la pieza de inicio obligatoria. En marzo de 2023 un hilo planteó la pregunta más exigente: ¿cuál es el mejor tablero que respeta **las cinco** pistas oficiales ([msg 11037](https://groups.io/g/eternity2/message/11037))? Una escalera se subió en unos días: 412, luego 452 y 457 (Carlos Fernandez), luego 453/455/456/458 (David Barr), deteniéndose en el **460 de Bruno Gauthier**, "hecho con mi propio programa y el Eternity II Editor" ([msg 11074](https://groups.io/g/eternity2/message/11074)); McGavin lo convirtió al formato compartido del visor ([msg 11081](https://groups.io/g/eternity2/message/11081)). Ese 460 se mantuvo más de tres años. A finales de junio de 2026 un nuevo hilo, "Record of Eternity2 with 5 hints?", reabrió la línea: **Benjamin Riotte** publicó un 461, luego una oleada de resultados que trepaba hasta **464/480 (solo 16 aristas rotas)**, el primer avance en el récord estricto desde 2023 ([groups.io msg 11919](https://groups.io/g/eternity2/message/11919)). **Igor Pejic** alcanzó el mismo rango 463-464 de forma independiente en el mismo hilo, apoyándose en lo que describió como un "algoritmo DFS de Blackwood modificado". Todos los tableros respetan las cinco pistas en sus celdas oficiales (inicio n.º 139, pistas n.º 208, n.º 255, n.º 181, n.º 249). La línea estricta importa por lo que implican las cinco pistas: la estimación comunitaria del número de soluciones con las cinco pistas colocadas es de aproximadamente 0,00000004 (un objetivo prácticamente único), frente a unas 14 702 "soluciones" esperadas con la sola pieza de inicio ([msg 11193](https://groups.io/g/eternity2/message/11193)). Un tablero de cinco pistas juega exactamente el juego que definieron los diseñadores. El 464 se sitúa dieciséis aristas por debajo de la solución completa, y esa brecha es en sí misma un dato. > **[Interactive: BoardsFoundGallery]** Rendered on the canonical page (link above); not shown in this markdown export. ## Los tableros de este proyecto Los experimentos propios de este sitio produjeron cuatro tableros que vale la pena conservar, etiquetados por lo que son: experimentos varios peldaños por debajo de la línea comunitaria, y documentados de principio a fin. Cada uno enlaza al experimento que lo encontró; cada puntuación se recalcula a partir de las aristas propias del tablero. ### PALIMPSEST (463) El mejor del proyecto, encontrado leyendo todo el corpus de tableros fuertes para separar la estructura genuinamente compartida de los malos hábitos compartidos, y luego atacando las trampas. La historia completa está en [el experimento PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/). > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ### KEYRING (460) Construido desde cero dejando que tres señales aprendidas voten sobre cada colocación, alcanzando 460 en una familia de tableros que ninguna búsqueda anterior aquí había logrado descifrar; véase [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/). Sus defectos se agrupan en banda en las filas de abajo, la imagen especular del 469 de McGavin. Esa huella ligada al orden de recorrido se explica en [Dónde viven los defectos](/es/research/why/mismatch-geometry/). > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ### PRIOR (460) Desde cero más destrucción-y-reparación, desempatando las igualdades de construcción por dónde tienden a asentarse las piezas en los tableros fuertes (véase [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/)). > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ### GAUNTLET (458) La misma [búsqueda en haz](/es/research/build/construct/beam-search/) ejecutada sobre nueve órdenes de recorrido para que aterrice en regiones distintas del espacio de tableros; el orden en zigzag encontró este 458. El informe completo está redactado en [GAUNTLET](/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/). > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ## Relacionado - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. --- # La cacería, una historia (parte I: 2000-2009) > La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/community/hunt/ - Actualizado: 2026-07-02 - Fuente: El ultimátum de copyright de Monckton y la descalificación de Brendan Owen (mensaje groups.io 1342) — https://groups.io/g/eternity2/message/1342 - Fuente: Brendan Owen deriva el diseño 17+5 como el puzzle más difícil posible (mensaje groups.io 1947) — https://groups.io/g/eternity2/message/1947 - Fuente: eternity2.net cierra: 1,6 TFlops, 10^19 operaciones, ninguna solución (mensaje groups.io 3511) — https://groups.io/g/eternity2/message/3511 - Fuente: Louis Verhaard publica el solucionador eii: «I am stuck» (mensaje groups.io 5940) — https://groups.io/g/eternity2/message/5940 - Fuente: Primer resultado de escrutinio: 10.000 $ a Anna Karlsson de Lund, puntuación 467 (mensaje groups.io 6337) — https://groups.io/g/eternity2/message/6337 - Fuente: Wikipedia, "Eternity II puzzle" — https://en.wikipedia.org/wiki/Eternity_II_puzzle --- Eternity II tiene una historia oficial (un comunicado de prensa, un premio, una fecha límite) y tiene una real, que ocurrió en una lista de correo. El [grupo eternity2](https://groups.io/g/eternity2) (originalmente un grupo de Yahoo) es donde el puzzle fue analizado antes de existir, digitalizado el día de su lanzamiento, declarado irresoluble en menos de quince días, y donde el único dinero de premio jamás pagado fue discretamente rastreado hasta uno de los propios habituales de la lista. Esta página cuenta esa historia a partir del archivo mismo: cada suceso enlaza al mensaje donde ocurrió. La parte I abarca desde la fundación del grupo hasta la primera fecha de escrutinio, de 2000 a febrero de 2009. ## El grupo que precede a su puzzle (2000-2006) El hecho más extraño sobre la comunidad de Eternity II es su fecha de nacimiento. Brendan Owen creó el grupo eternity_two en octubre de 2000, seis años y medio antes de que se anunciara el puzzle, "because we anticipated a follow up puzzle" a Eternity I ([msg 404](https://groups.io/g/eternity2/message/404)). Los mensajes conservados más antiguos especulan sobre cuáles podrían ser las piezas de la secuela, y apuestan erróneamente por tetraedros 3D ([msg 8](https://groups.io/g/eternity2/message/8)). Ya en 2001 el grupo ensayaba el problema del diseñador más que el del solucionador: Günter Stertenbrink preguntaba cómo se construiría un puzzle con un premio enorme y solo un ~1 % de probabilidad de ser resuelto en diez años ([msg 15](https://groups.io/g/eternity2/message/15)), casi exactamente el encargo que el equipo de Christopher Monckton ejecutaría más tarde. Los veteranos de Eternity I aparecían y esperaban: Dave Clark, autor del solucionador distribuido de E1 ESolve, se reincorporó en abril de 2001 ([msg 21](https://groups.io/g/eternity2/message/21)). Cuando llegaron los primeros informes de prensa en diciembre de 2005, con Monckton prometiendo que la secuela necesitaría "the lifetime of the Universe" mientras el co-diseñador Oliver Riordan decía "several years", Stertenbrink extrajo la conclusión obvia: "So we can conclude, the end of the universe is in several years." ([msg 34](https://groups.io/g/eternity2/message/34)) ## El verano del lanzamiento (2007) El anuncio llegó el 22 de enero de 2007: 256 piezas, 2.000.000 US$ para la primera solución correcta, lanzamiento el 28 de julio, y un golpe mediático en la London Toy Fair en el que un forzudo destruía "the computer containing a solution" ([msg 36](https://groups.io/g/eternity2/message/36)). Ese ordenador, como admitió más tarde un allegado al distribuidor, no contenía absolutamente nada ([msg 148](https://groups.io/g/eternity2/message/148)). El grupo no esperó a las piezas. En dos días ya contaba los tipos de borde en las fotos promocionales, y Owen había derivado la fórmula del número esperado de soluciones que convertía la dificultad en un parámetro de diseño ajustable ([msg 38](https://groups.io/g/eternity2/message/38), [msg 44](https://groups.io/g/eternity2/message/44)). Publicó un generador de puzzles de tipo Eternity II ([msg 41](https://groups.io/g/eternity2/message/41)); Alan O'Donnell tenía el primer solucionador funcional una semana después ([msg 64](https://groups.io/g/eternity2/message/64)). Para el 8 de julio, tres semanas antes de que nadie hubiera tocado una pieza real, anr_56 había estimado los recuentos de tipos de borde a partir de las fotos de lanzamiento y Owen había hecho las cuentas sobre esa configuración: unas 10^30 veces más difícil que los bancos de prueba que el grupo resolvía en minutos. "No one will solve this puzzle", concluyó ([msg 665](https://groups.io/g/eternity2/message/665)). Luego llegaron las famosas 48 horas. Australia recibió el puzzle primero, y Owen estaba en Kmart la víspera del lanzamiento, "first one to grab it off their stack" ([msg 1051](https://groups.io/g/eternity2/message/1051)). Pasó los paneles de piezas por un programa de visión por computador que había escrito de antemano ([msg 789](https://groups.io/g/eternity2/message/789)), informó de una distribución de bordes "as flat as could be" ([msg 1054](https://groups.io/g/eternity2/message/1054)), y confirmó los parámetros reales: 5 colores de borde, 17 colores interiores, el peor escenario del grupo ([msg 977](https://groups.io/g/eternity2/message/977)). Luego, tras la "nice chat to Mr Monckton" de Dave Clark, publicó la primera estimación del número de soluciones para el conjunto real de piezas: unas 5.930 soluciones con la pista obligatoria, frente a la propia cifra de Monckton de unos 5 millones ([msg 987](https://groups.io/g/eternity2/message/987)). El puzzle tenía dos días y su dificultad ya estaba medida. La misma semana fijó las normas de la comunidad. Para verificar las transcripciones de piezas sin compartir datos protegidos por copyright, los miembros convergieron en sumas de comprobación CRC publicadas ([msg 1063](https://groups.io/g/eternity2/message/1063)); y el recién llegado Sergio Demian Lerner advirtió sobre los "conjuntos fantasma": el banco de prueba de un desconocido podía ser el puzzle real recodificado, engañándote para que entregaras una solución de 2 M$ ([msg 1210](https://groups.io/g/eternity2/message/1210)). ## La carrera teórica (2007-2008) A una semana de empezar agosto, el inventor del puzzle llegó en persona; vino a descalificar a alguien. Escribiendo desde una dirección de Yahoo inverificable, Christopher Monckton declaró tener el copyright sobre los diseños de las piezas y que su "web-trawling software" había marcado el sitio web de Brendan Owen: Owen, que había apuntado al premio menor, quedaba fuera ([msg 1342](https://groups.io/g/eternity2/message/1342), [msg 1352](https://groups.io/g/eternity2/message/1352), [msg 1358](https://groups.io/g/eternity2/message/1358)). Más tarde se supo que el archivo señalado ni siquiera correspondía a las piezas reales ([msg 1358](https://groups.io/g/eternity2/message/1358)). Algunos miembros protestaron que una cuenta anónima de foro difícilmente podía tener peso oficial; Monckton se reafirmó ([msg 1374](https://groups.io/g/eternity2/message/1374), [msg 1377](https://groups.io/g/eternity2/message/1377)). El enfriamiento fue real y duradero: un año después Owen, como moderador, seguía borrando tablas de datos derivados "to be safe" ([msg 5651](https://groups.io/g/eternity2/message/5651)). Fue en este clima donde Owen, mostrando que las estadísticas planas de las piezas de E2 mataban la estrategia que había resquebrajado Eternity I, trazó su línea: "If we cannot talk about something as fundamental as piece frequencies, then I will give up on this puzzle now" ([msg 1667](https://groups.io/g/eternity2/message/1667), [msg 1694](https://groups.io/g/eternity2/message/1694)). La teoría llegó rápido después de eso. kubzpa demostró mediante un [argumento de paridad](/es/research/build/analysis/parity-arguments/) que una puntuación de exactamente 479 (una sola arista no coincidente) es imposible ([msg 1640](https://groups.io/g/eternity2/message/1640)); reten esa idea, porque diecisiete meses después el argumento se encontraría con un contraejemplo. Owen produjo entonces el resultado característico del periodo: suponiendo que los diseñadores querían el 16×16 más difícil posible, con una distribución plana y aproximadamente una solución esperada, el número de colores interiores debería ser (196! · 4^196)^(1/392) ≈ 17,14, de ahí 17 colores interiores y 5 colores de borde. Exactamente el puzzle real ([msg 1947](https://groups.io/g/eternity2/message/1947)). La división 17+5 no fue mala suerte; fue [una diana en el pico de dificultad](/es/research/why/phase-transition/), y el grupo había reconstruido por ingeniería inversa la puntería. Las afirmaciones teóricas se contrastaban con recuentos de nodos medidos sobre [bancos de prueba](/es/research/build/benchmarks/) compartidos. Angel de Vicente, escribiendo bajo el seudónimo Txibilis, construyó la suite estándar de tableros de prueba de tipo E2 ([msg 1610](https://groups.io/g/eternity2/message/1610)), y comenzó un duelo: los [órdenes de relleno](/es/research/build/backtracking/fill-order/) diseñados a mano por Txibilis contra el optimizador de estrategias automatizado de doc_s_smith, haciendo caer en órdenes de magnitud los recuentos de nodos en búsqueda completa; un banco de prueba se situaba en 89.794 nodos, respondido en dos días por 85.729 ([msg 2896](https://groups.io/g/eternity2/message/2896), [msg 2928](https://groups.io/g/eternity2/message/2928)). En pleno duelo, la lista descubrió quién era doc_s_smith: Dietmar Wolz, descubridor de la mayoría de las soluciones conocidas de Eternity I ([msg 2972](https://groups.io/g/eternity2/message/2972)). Las estimaciones también convergieron. El artículo de kubzpa situaba el número de soluciones cerca de 15 millones ([msg 3497](https://groups.io/g/eternity2/message/3497)); Owen midió la profundidad de ramificación del árbol de búsqueda nivel por nivel, y halló que el recuento de nodos alcanza su máximo con 161 piezas colocadas ([msg 3147](https://groups.io/g/eternity2/message/3147)); y en abril de 2008 anunció que había "nailed the theory": un modelo exacto del árbol de búsqueda cuyas predicciones se superponían a las curvas empíricas, verificado de forma independiente por Louis Verhaard: del orden de 10^27 años-CPU por solución ([msg 5197](https://groups.io/g/eternity2/message/5197), [msg 5193](https://groups.io/g/eternity2/message/5193), [msg 5209](https://groups.io/g/eternity2/message/5209)). El teórico principal del grupo actuó según sus propias cifras: ahora perseguía la puntuación más alta, no 480 ([msg 4996](https://groups.io/g/eternity2/message/4996)). ## Grandes máquinas y sindicatos Si un ordenador era una causa perdida, quizá miles no lo fueran. eternity2.net de Dave Clark, un [solucionador distribuido](/es/research/build/faster/distributed-solving/) basado en BOINC, se lanzó junto con el puzzle en julio de 2007 ([msg 756](https://groups.io/g/eternity2/message/756)) y tenía 1.300 miembros en un mes, 160 de ellos en EE. UU., donde el puzzle ni siquiera se había puesto a la venta ([msg 2122](https://groups.io/g/eternity2/message/2122), [msg 2132](https://groups.io/g/eternity2/message/2132)). El proyecto envió a Tomy un parcial de 462 aristas, luego 463 ([msg 2663](https://groups.io/g/eternity2/message/2663)), un número que funcionaría como el techo público de puntuación de la comunidad durante más de un año. Le siguió un "Eternity 2 Syndicate" de reparto del premio, que pagaba a los miembros en proporción a las colocaciones aportadas ([msg 3021](https://groups.io/g/eternity2/message/3021)). Duró cinco meses. En diciembre de 2007 Clark cerró eternity2.net, y publicó el recuento final: más de 1,6 TFlops de cómputo agregado, más de 10^19 operaciones CPU, mejores puntuaciones en los 460 medios. Su veredicto: una solución por fuerza bruta "was always clearly going to be impossible" ([msg 3511](https://groups.io/g/eternity2/message/3511)). La lista generó de inmediato hilos titulados "Eternity2 Must Have Been Solved"; no lo había sido ([msg 3554](https://groups.io/g/eternity2/message/3554)). Los archivos del proyecto se conservaron en el archivo del grupo ([msg 3633](https://groups.io/g/eternity2/message/3633)), y Clark liberó el código fuente de su solucionador de investigación ([msg 3716](https://groups.io/g/eternity2/message/3716)). También dejó al archivo su mejor fuente primaria sobre la creación del puzzle: una llamada telefónica con Monckton, que describía a jueces tecleando entropía en un generador construido por los ganadores de Eternity I Alex Selby y Oliver Riordan, la solución impresa una sola vez y guardada bajo llave ([msg 4177](https://groups.io/g/eternity2/message/4177)), "whilst all parties were out of the room", como decía el folleto del distribuidor Tomy que él había publicado en el lanzamiento ([msg 901](https://groups.io/g/eternity2/message/901)). El flanco de los métodos exactos no corrió mejor suerte. Una [codificación SAT](/es/research/build/exact/sat-csp-encodings/) publicada del puzzle completo venía con una petición a cualquiera que poseyera una máquina con más de 16 GB de RAM ([msg 4084](https://groups.io/g/eternity2/message/4084)); la programación entera moría en tableros de 8×8 ([msg 5602](https://groups.io/g/eternity2/message/5602)). La velocidad bruta seguía subiendo: istarinz superó los 100 millones de colocaciones por segundo en múltiples núcleos ([msg 5804](https://groups.io/g/eternity2/message/5804)), luego midió 558 millones en un Core i7 flamante ([msg 6212](https://groups.io/g/eternity2/message/6212)). Pero frente a espacios de búsqueda medidos en potencias de cuarenta, el rendimiento era un error de redondeo. ## El camino hacia 467 (2008) Las puntuaciones habían subido poco a poco todo el tiempo: 410 de Pierre Schaus en las primeras semanas ([msg 1568](https://groups.io/g/eternity2/message/1568)), 453 de philippe.dupond ([msg 3998](https://groups.io/g/eternity2/message/3998)), 461 de e2dude ([msg 4440](https://groups.io/g/eternity2/message/4440)), con 463 como el "current known high" ([msg 5688](https://groups.io/g/eternity2/message/5688)). Los métodos cambiaron de carácter a mediados de 2008: Schaus publicó su artículo de programación por restricciones, cuya jugada clave (retirar un conjunto de piezas no adyacentes y volver a colocarlas *de forma óptima* resolviendo un problema de asignación) se convirtió en el motor del híbrido de antminder, que promediaba un 462 por día ([msg 5589](https://groups.io/g/eternity2/message/5589), [msg 5601](https://groups.io/g/eternity2/message/5601)). Mientras tanto dos personas habían superado discretamente el techo. En un largo intercambio de agosto, Max informó de que llegaba "beyond the 'don't-talk-about-limit' quite easily"; Louis Verhaard ("Max, you are really a dangerous man!") comparó métodos con él y descubrió que habían convergido en la misma firma heurística, prometiendo divulgación completa "after new-year", es decir, después de la fecha de escrutinio del 31 de diciembre ([msg 5767](https://groups.io/g/eternity2/message/5767), [msg 5780](https://groups.io/g/eternity2/message/5780)). Verhaard solo revelaría la geometría: sus mejores órdenes de relleno de puntuación alta parecían un "peine": la mayoría de las filas recorridas horizontalmente, el resto verticalmente ([msg 6112](https://groups.io/g/eternity2/message/6112)). Luego, el 22 de septiembre de 2008, Verhaard publicó [su solucionador](/es/research/lab/experiments/louis-verhaard/eii/) para que cualquiera lo ejecutara en fingerboys.se: "This because I am stuck and my only hope to improve my best score is by using brute force" ([msg 5940](https://groups.io/g/eternity2/message/5940)). Cualquier premio se repartiría 50-50 con el usuario de mejor puntuación. antminder, cuyo propio programa necesitaba una semana para alcanzar 463, fue tajante: eii "completely blows it away" ([msg 5950](https://groups.io/g/eternity2/message/5950)). El premio en sí seguía siendo folclore (las reglas solo prometían un "lesser prize" discrecional) hasta que Max rastreó la cifra de 10.000 $ hasta una entrevista de Monckton en el sitio oficial francés ([msg 6073](https://groups.io/g/eternity2/message/6073)). Verhaard, tres meses antes de ganarlo, afirmaba que no le importaba: lo hacía por el honor, y solo por este año ([msg 6072](https://groups.io/g/eternity2/message/6072)). Ese mismo otoño afloraron quienes resolvían a mano: Christine Raisin, con 21 piezas restantes en la tapa de la caja ([msg 5935](https://groups.io/g/eternity2/message/5935)), Verhaard clasificando piezas por patrón con su hija de siete años y organizando una mini-competición de resolución a mano, con los hilos acuñando apodos como "pink swords" y "kipper ties" para los motivos ([msg 5933](https://groups.io/g/eternity2/message/5933), [msg 5929](https://groups.io/g/eternity2/message/5929), [msg 5958](https://groups.io/g/eternity2/message/5958), [msg 5959](https://groups.io/g/eternity2/message/5959)). La lista nunca fue solo un banco de solucionadores. ## La farsa de la fecha de escrutinio (diciembre de 2008 → enero de 2009) De cara a la primera fecha de escrutinio, la comunidad estaba en compás de espera: varios miembros se negaban a dedicar un esfuerzo serio hasta que el puzzle demostrara que podía sobrevivir a su primera fecha límite ([msg 6216](https://groups.io/g/eternity2/message/6216)); NickB tenía 20 £ apostadas a que no habría ganador y consideraba su dinero a salvo ([msg 5979](https://groups.io/g/eternity2/message/5979)). El 31 de diciembre de 2008 llegó y pasó. Nada. Algunos miembros escribieron a las direcciones británica y estadounidense de Tomy y dejaron mensajes de voz, y no obtuvieron respuesta ([msg 6245](https://groups.io/g/eternity2/message/6245)); la Careline de atención al consumidor no sabía "no details as of yet, regarding whether or not there is a winner" ([msg 6295](https://groups.io/g/eternity2/message/6295)). Las reglas decían que a los ganadores se les avisaría en un plazo de 14 días y que los resultados se publicarían en el London Times y el New York Times ([msg 6296](https://groups.io/g/eternity2/message/6296), [msg 6336](https://groups.io/g/eternity2/message/6336)); nunca apareció visiblemente ninguna publicación semejante. Entretanto, el 6 de enero, Verhaard publicó la documentación de su solucionador y reveló su techo: los usuarios habían encontrado 467 más de cuarenta veces ([msg 6275](https://groups.io/g/eternity2/message/6275)). El 15 de enero, aproximadamente el último día de la ventana de 14 días, Henk van der Griendt encontró una declaración detrás de un enlace discreto solo en el sitio británico: cientos de participaciones, ninguna completa, el premio de 2 M$ todavía abierto, y un premio de finalista de 10.000 $ a **Anna Karlsson de Lund, Suecia, por 467 de 480** ([msg 6337](https://groups.io/g/eternity2/message/6337)). Sin comunicado de prensa, sin Times, y ni una palabra de Monckton en ningún momento. La lista necesitó cerca de una hora para descifrar "Lund + 467": la participación provenía del hogar de Louis Verhaard, presentada a nombre de su esposa, que había recibido el correo de felicitación días antes ([msg 6349](https://groups.io/g/eternity2/message/6349)). Las felicitaciones llovieron de todos los habituales; Max reveló que su propio mejor resultado había sido 465, y que cada arista adicional le costaba a su programa un factor de ~30 en tiempo ([msg 6348](https://groups.io/g/eternity2/message/6348)). La prensa sueca publicó la foto familiar: más de un año de trabajo, 13 "seams" de una solución completa, con parte del dinero destinada al World Wildlife Fund ([msg 6374](https://groups.io/g/eternity2/message/6374), [msg 6375](https://groups.io/g/eternity2/message/6375)). Las secuelas tuvieron tres púas. Un investigador del grupo SAT de Lleida publicó que alcanzar 470 era "rather easy" con sus métodos, una afirmación jamás respaldada por ninguna participación enviada, como Max señaló con intención ([msg 6306](https://groups.io/g/eternity2/message/6306), [msg 6360](https://groups.io/g/eternity2/message/6360)). Tomy le dijo a un miembro que no habría más [puzzles con pistas](/es/research/build/clue-puzzles/), lo que la mayor parte de la lista acogió como algo que mantenía puro el desafío ([msg 6381](https://groups.io/g/eternity2/message/6381)). Y Verhaard zanjó de pasada un teorema de diecisiete meses de antigüedad: 479 *es* alcanzable, volteando una pieza de borde cuyas dos aristas de borde comparten un color en una solución de 480. La prueba de paridad de 2007 había pasado por alto las aristas de borde orientadas hacia fuera, que la puntuación nunca cuenta ([msg 6317](https://groups.io/g/eternity2/message/6317)). Incluso el resultado de imposibilidad más limpio de la comunidad tenía un resquicio; el puzzle, sin resolver, conservaba todos los suyos. ## La historia continúa > **Parte II: 2009-2026** > > La historia continúa en la [parte II](/es/research/community/hunt-part-2/): el rumor húngaro del "lo hemos resuelto" resuelto, la muerte del concurso con su solución encerrada en una caja fuerte, la década del 467, la migración que salvó este archivo por unos días, y la ola de récords que llevó el tablero a 470. ## Relacionado - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). --- # La cacería, una historia, parte II: 2009-2026 > Diecisiete años después del premio: el concurso muere con su solución encerrada en una caja fuerte, 467 se mantiene durante una década, el archivo sobrevive al cierre de Yahoo por cuestión de días, y luego un desconocido venido de Reddit reescribe el libro de récords. Cada suceso está vinculado a su mensaje original. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/community/hunt-part-2/ - Actualizado: 2026-07-02 - Fuente: Monckton cierra el concurso: «El reglamento no permite ninguna prórroga de plazo» (groups.io message 8477) — https://groups.io/g/eternity2/message/8477 - Fuente: Peter McGavin resuelve el 10×10 de Brendan Owen en ~180 años-núcleo, dentro de los márgenes de error de la teoría de la complejidad (groups.io message 9688) — https://groups.io/g/eternity2/message/9688 - Fuente: El 469 de McGavin con el solucionador de Blackwood: «¡Nuevo récord de 469! ¡Solo 11 rupturas!» (groups.io message 10045) — https://groups.io/g/eternity2/message/10045 - Fuente: El 470 de Joshua Blackwood, el récord vigente (groups.io message 10117) — https://groups.io/g/eternity2/message/10117 - Fuente: El 460 de Bruno Gauthier, el mejor tablero de cinco pistas 2023-2026 (groups.io message 11074) — https://groups.io/g/eternity2/message/11074 - Fuente: El 464 de Benjamin Riotte, el nuevo récord de cinco pistas (groups.io, julio de 2026) — https://groups.io/g/eternity2/message/11919 - Fuente: Jef Bucas iguala el 470 con el código de Blackwood (groups.io message 11401) — https://groups.io/g/eternity2/message/11401 --- La [parte I](/es/research/community/hunt/) terminaba en enero de 2009 con un cheque de 10 000 dólares descifrado en una hora y un puzzle que había superado su primer plazo sin un rasguño. La parte II abarca todo lo que vino después: la lenta agonía del concurso, la década en que un solo número, 467, se negó a moverse, el día en que el propio archivo estuvo a punto de desaparecer, y la oleada de récords que por fin lo movió. Como antes, esta es la historia de la comunidad contada desde el [archivo eternity2](https://groups.io/g/eternity2), y cada suceso enlaza al mensaje donde ocurrió. ## El largo silencio y los irreductibles (2009-2010) El rumor húngaro del «lo hemos resuelto» que la parte I dejaba en suspenso murió como mueren siempre esas pretensiones en esta lista. Una vez traducidos correctamente (un equipo de la universidad ELTE que reivindicaba una resolución completa mediante una ensalada de algoritmos que incluía la poda alfa-beta, para un puzzle de un solo jugador), los hablantes nativos calificaron los mensajes de confusos y los ingenieros rehicieron los cálculos ([msg 6575](https://groups.io/g/eternity2/message/6575)). En junio, la cuenta del pretendiente y todos sus comentarios habían sido eliminados del foro húngaro ([msg 6764](https://groups.io/g/eternity2/message/6764)). La historia verificada de 2009 fue más discreta y mucho mejor. JSA ejecutó el [solucionador eii](/es/research/lab/experiments/louis-verhaard/eii/) público de Louis Verhaard en un solo PC y registró el ascenso: cuatro millones de 463, 625 veces 466, y por fin, hacia el día ~82, un 467, reproduciendo de forma independiente la puntuación del premio con el binario público y cuantificando hasta qué punto se enrarece el aire por encima de 466 ([msg 6687](https://groups.io/g/eternity2/message/6687)). En agosto, el propio Verhaard dio el relato definitivo, en primera persona, de la entrada ganadora: «Anna es mi esposa»; fue ella quien la presentó, «fue mi programa el que hizo el trabajo», y el tablero de 467 contenía 247 piezas sin defecto ([msg 6891](https://groups.io/g/eternity2/message/6891)). Aquel diciembre reveló el método que la parte I solo podía insinuar: había encontrado 467 «más de 50 veces», dejando que el backtracker colocara una arista discordante a profundidades elegidas, el movimiento conocido como [deslizamiento de arista](/es/research/build/reduce/edge-slipping/), condicionado por la profundidad ([msg 7321](https://groups.io/g/eternity2/message/7321)). La segunda fecha de escrutinio, el 31 de diciembre de 2009, repitió la primera como farsa, sin el pago. Semanas de silencio, y luego una nota informativa («Eternity II sigue sin resolverse») sin ganador y, a diferencia de 2008, sin ningún premio al mejor parcial ([msg 7471](https://groups.io/g/eternity2/message/7471)). Un miembro obtuvo un intercambio escrito con Tomy: ninguna actividad organizada en 2009, las soluciones parciales ni siquiera se puntuaban, y «el premio del primer año formaba parte únicamente de la promoción inicial» ([msg 7488](https://groups.io/g/eternity2/message/7488)). Verhaard confirmó que no había mejorado su 467 ([msg 7494](https://groups.io/g/eternity2/message/7494)). También republicó su solucionador en shortestpath.se, su punto de anclaje a largo plazo, tras la desaparición del sitio de su grupo de música ([msg 7439](https://groups.io/g/eternity2/message/7439), [msg 7446](https://groups.io/g/eternity2/message/7446)). Las pretensiones florecieron en el vacío de todos modos: una ventana emergente de E2Lab que anunciaba un 471 en un tablero que nunca se guardó ([msg 7284](https://groups.io/g/eternity2/message/7284)), una resolución a mano que insinuaba al menos 472, descartada a simple vista ([msg 7383](https://groups.io/g/eternity2/message/7383), [msg 7427](https://groups.io/g/eternity2/message/7427)). Ninguna produjo un tablero. Mientras tanto, doc_s_smith, veterano de Eternity I, regresó tras tres años y convirtió la lista en un taller de algoritmos ([msg 7755](https://groups.io/g/eternity2/message/7755)), planteando el objetivo que la época podía perseguir con realismo: siendo resolver E2 en sí mismo algo desesperado, «el desafío está claro: superar 468 aristas casadas» ([msg 7803](https://groups.io/g/eternity2/message/7803)). Cuando su estimador de Monte-Carlo discrepó del [modelo de complejidad](/es/research/why/complex-theory/) de Brendan Owen en cinco órdenes de magnitud, Verhaard defendió el modelo como «el trabajo más excelente jamás publicado sobre E2» ([msg 7810](https://groups.io/g/eternity2/message/7810)), una frase que los quince años siguientes no dejarían de confirmar. ## El concurso muere (diciembre de 2010 → 2011) Requerido para una prórroga de un año de la fecha de escrutinio final, Tomy respondió en una línea: «No se tomará ninguna decsión [sic] hasta la próxima fecha de escrutinio» ([msg 8006](https://groups.io/g/eternity2/message/8006)). El plazo del 31 de diciembre de 2010 pasó con humor de patíbulo, con los miembros bromeando sobre enviar por mensajería una hipotética solución de último minuto a la oficina de correos ([msg 8197](https://groups.io/g/eternity2/message/8197)). Luego el sitio oficial se apagó, «suspendido a la espera de la confirmación del escrutinio final» ([msg 8270](https://groups.io/g/eternity2/message/8270)); Verhaard escribió: «Puedo decirte con toda honestidad que no lo resolví» ([msg 8277](https://groups.io/g/eternity2/message/8277)). El final llegó a través de Francia: un comunicado de prensa de Tomy France (plazo vencido, sin ganador, sin año adicional, los 2 M$ sin reclamar) recibido con incredulidad hasta que la URL de origen reapareció y la página inglesa siguió dos días después ([msg 8339](https://groups.io/g/eternity2/message/8339), [msg 8373](https://groups.io/g/eternity2/message/8373)). La respuesta por correo electrónico de Monckton a un miembro cerró la puerta en persona: la competición había terminado, y «El reglamento no permite ninguna prórroga de plazo», un reglamento que, como los miembros señalaron de inmediato, autorizaba explícitamente otras fechas de escrutinio a discreción del promotor ([msg 8477](https://groups.io/g/eternity2/message/8477), [msg 8478](https://groups.io/g/eternity2/message/8478)). Brendan Owen, el hombre que publicaba desde antes incluso del lanzamiento del puzzle, se despidió: «Fue muy divertido». También pidió a Verhaard que felicitara a su esposa por la puntuación más alta, confirmación de primera mano de que 467 se mantenía al cierre del concurso ([msg 8429](https://groups.io/g/eternity2/message/8429)). Dos cabos sueltos definieron las secuelas. Uno fue el vacío de las pretensiones: el 476 sin la pista de un miembro (el mensaje original falta del archivo; sobrevive a través de sus respuestas, [msg 8247](https://groups.io/g/eternity2/message/8247)) degeneró en múltiples reivindicaciones de 480 sin pista y chocó con el muro del conocimiento cero de la comunidad (Owen: publiquen la cuadrícula de identificadores de piezas); nunca se publicó nada ([msg 8676](https://groups.io/g/eternity2/message/8676)). El otro fue la solución en sí. El propietario del grupo expuso el dispositivo de custodia: nadie, ni Tomy, ni Monckton, conoce la solución; está en manos de peritos de siniestros independientes ([msg 8502](https://groups.io/g/eternity2/message/8502)). Owen ofreció después la declaración que aún hoy se cita: Alex Selby y Oliver Riordan crearon una solución cuando Monckton les pagó por generar un puzzle prácticamente imposible, y yace «oculta entre resmas de texto impreso encerradas en una caja fuerte», como seguro contra un recurso judicial ([msg 8823](https://groups.io/g/eternity2/message/8823)). En abril de 2011, el sitio oficial confirmó que el premio no se había reclamado ([msg 8846](https://groups.io/g/eternity2/message/8846)). Lo que reemplazó al dinero fue una escalera. Aparecieron clasificaciones comunitarias en la base de datos del grupo ([msg 8222](https://groups.io/g/eternity2/message/8222), [msg 8735](https://groups.io/g/eternity2/message/8735)); Owen, incitado por una corazonada sobre la razón áurea, demostró que el número de nodos de un backtracker culmina en una fracción (1 − 1/e) del tablero: 256 × 0,632 = 161,8, la forma cerrada tras la «magia del 161» observada desde hace tiempo ([msg 8125](https://groups.io/g/eternity2/message/8125)); y las primeras búsquedas exhaustivas sobre los [tests de referencia 9×9](/es/research/build/benchmarks/) de Owen quedaron a un orden de magnitud de lo que predecía su teoría ([msg 8793](https://groups.io/g/eternity2/message/8793), [msg 8803](https://groups.io/g/eternity2/message/8803)). Un nombre nuevo hizo la mayor parte de esa comprobación: Peter McGavin, que ya en 2011 llevaba el mostrador de atención de la teoría de la complejidad y había calculado las cifras que se volvieron canon, unas 14 702 soluciones esperadas con la pieza obligatoria colocada ([msg 8924](https://groups.io/g/eternity2/message/8924)). ## Los años tranquilos (2012-2018) Tres años completos, de 2012 a 2014, produjeron menos mensajes que un trimestre ajetreado de 2008. La academia se presentó en persona: Tony Wauters publicó el artículo revisado por pares de su grupo sobre una hiperheurística (mejor puntuación 461/480 en una hora) y se quedó a responder preguntas ([msg 9017](https://groups.io/g/eternity2/message/9017)); un segundo artículo, sobre heurísticas de MILP y Max-Clique, siguió en 2017 ([msg 9683](https://groups.io/g/eternity2/message/9683)). El único dinero de premio de la época fue una reedición del concurso por un minorista checo, dotada con 12 000 EUR ([msg 9072](https://groups.io/g/eternity2/message/9072)), prorrogada hasta julio de 2015 ([msg 9271](https://groups.io/g/eternity2/message/9271)); su vencimiento pasó después sin una sola mención en la lista. Cuando el recién llegado Dima preguntó por el mejor resultado conocido a finales de 2014 y recibió la respuesta canónica, su réplica resumía la época en una línea: «¿467 todavía, en serio? ¡Pero eso fue hace 6 años!» ([msg 9318](https://groups.io/g/eternity2/message/9318)). Bajo la superficie, dos cosas maduraron. La teoría se convirtió en un documento: McGavin transcribió el modelo de complejidad de Owen a LaTeX bajo el nombre complex_theory.pdf, en los archivos del grupo ([msg 9188](https://groups.io/g/eternity2/message/9188)), transformando el folclore en algo que los recién llegados podían leer de verdad. Y la velocidad volvió a ser una cultura: Arnaud Carré publicó un solucionador mononúcleo de 114 millones de recursiones por segundo como patrón de comparación ([msg 9233](https://groups.io/g/eternity2/message/9233)), Michael Field diseñó un backtracker sobre FPGA ([msg 9226](https://groups.io/g/eternity2/message/9226)), y un registro de nodos por vatio se extendió desde clústeres de Raspberry Pi hasta una Xbox One X ([msg 9519](https://groups.io/g/eternity2/message/9519), [msg 9816](https://groups.io/g/eternity2/message/9816)). El filtro de pretensiones siguió funcionando también: un «eternity2 resuelto ;)» de 2014 murió cuando la verificación encontró una pieza usada cinco veces ([msg 9286](https://groups.io/g/eternity2/message/9286), [msg 9301](https://groups.io/g/eternity2/message/9301)). Luego, en septiembre de 2017, cayó el test de referencia compartido de la comunidad. Peter McGavin encontró la primera nueva solución al 10×10 sin pista de Brendan Owen, el «monstruo» que había resistido a todos desde 2008, industrializando exactamente aquello sobre lo que la lista había convergido: enumerar los ~20 millones de primeras filas posibles, clasificarlas por la probabilidad de solución por nodo de la teoría de la complejidad, y distribuirlas a todos los núcleos disponibles, desde ODROID domésticos y Orange Pi de 12 $ hasta servidores de trabajo prestados, más de 400 núcleos en total ([msg 9686](https://groups.io/g/eternity2/message/9686), [msg 9688](https://groups.io/g/eternity2/message/9688)). La solución costó unos 2×10^17 nodos (aproximadamente 180 años-núcleo) y llegó en la búsqueda de fila ~92 907 frente a una predicción de una por cada 70 000, dentro de los márgenes de error de la teoría: en palabras de McGavin, «ningún método nuevo, solo perseverancia sistemática y la ley de los grandes números». John Gilbert habló por la lista: «Asombroso que esté siendo verdaderamente tan difícil como se predijo» ([msg 9693](https://groups.io/g/eternity2/message/9693)). Fue la validación más fuerte que la teoría de Owen recibió jamás, y la prueba de que la cultura del test de referencia, y no la carrera por el récord, había sido el verdadero logro del grupo en la década. El mismo hilo planteó una cuestión de récords que nunca se resolvió: Dima sacó a la luz un tuit de 2009 de la estrella de TopCoder Naohiro Takahashi que reivindicaba un 468, nunca acompañado de un tablero, quizás puntuado bajo otras reglas de concurso, y dejado para siempre sin verificar ([msg 9694](https://groups.io/g/eternity2/message/9694), [msg 9697](https://groups.io/g/eternity2/message/9697)). Dos meses después, McGavin colocó las 256 piezas reales sobre el tablero 16×16 con las 480 uniones internas todas casadas, un «E2 sin marco» con aristas grises enterradas en el interior, siendo escrupulosamente preciso en que no era una solución al puzzle ([msg 9736](https://groups.io/g/eternity2/message/9736), [msg 9750](https://groups.io/g/eternity2/message/9750), [msg 9757](https://groups.io/g/eternity2/message/9757)). La ventana se cerró en marea baja: 2018 produjo 42 mensajes, y a una encuesta de un recién llegado un veterano respondió: «¿alguien sigue moliendo con backtracking?? ni de broma....» ([msg 9832](https://groups.io/g/eternity2/message/9832)). ## La migración (2019) En octubre de 2019, Yahoo anunció que borraría todo el contenido de Groups en cuestión de semanas: doce años de recuentos de piezas, pruebas, desmentidos y código fuente de solucionadores, desaparecidos. Jef Bucas dio la alarma ([msg 9920](https://groups.io/g/eternity2/message/9920)), Robert Gerbicz propuso groups.io, el fundador Ole Knudsen creó el nuevo grupo, y JSA pagó la tarifa de transferencia: «Puedo pagar los primeros 5 años» ([msg 2](https://groups.io/g/eternity2/message/2)). La transferencia automatizada se completó el 8 de noviembre de 2019 con unos 2 000 miembros, mensajes, archivos y fotos intactos ([msg 9934](https://groups.io/g/eternity2/message/9934), [msg 9937](https://groups.io/g/eternity2/message/9937)). El archivo desde el que se escribe esta crónica sobrevivió por cuestión de días. Dos semanas después, Bucas lanzó la otra mitad de la infraestructura de la era moderna: [e2.bucas.name](https://e2.bucas.name), un visor de tableros cuyos tableros viven enteramente en la URL (nada se transmite al servidor), con un menú desplegable de mejores tableros que discretamente se convirtió en el libro de récords de la comunidad ([msg 9955](https://groups.io/g/eternity2/message/9955)). Como corresponde, la noticia de récords del año fue también archivística: Verhaard confirmó que su asombroso parcial sin defecto de 249 piezas era real, «sin trampa… lo encontré al cabo de una semana más o menos, en 1 ordenador» ([msg 9890](https://groups.io/g/eternity2/message/9890)). ## La oleada de récords (2020-2021) El 31 de agosto de 2020, un miembro retransmitió una publicación de Reddit: un nuevo mejor tablero con solo 12 rupturas, 468/480, el primer avance más allá del 467 de Verhaard en doce años ([msg 10032](https://groups.io/g/eternity2/message/10032)). El autor era Joshua Blackwood, un completo desconocido para la lista. Bucas verificó el tablero, lo añadió al visor, y transmitió el detalle que hizo aguzar el oído a los veteranos: el autor «¡dice que puede encontrar un 468 cada 4 días!» ([msg 10033](https://groups.io/g/eternity2/message/10033)). Tres días después, Blackwood liberó el propio solucionador, que incorporaba cambios heurísticos que él creía «dos veces mejores» y preconfigurado para cazar 469 ([msg 10037](https://groups.io/g/eternity2/message/10037)). Sus notas de ingeniería valían tanto como el código: solucionadores SAT, GPU y cachés de 2×2 preresueltos habían sido todos medidos y descartados; la magia estaba en el calendario heurístico y en un pequeño conjunto de profundidades de «ruptura» permitidas ([msg 10056](https://groups.io/g/eternity2/message/10056), [msg 10076](https://groups.io/g/eternity2/message/10076)). La comunidad hizo lo que hace con el buen código: lo ejecutó. El 9 de septiembre de 2020, Peter McGavin, el hombre que había resuelto el 10×10, escribió: «¡¡Tu solucionador es fantástico!! Lo hice correr unos días en unos doscientos núcleos y me toqué el gordo. ¡Nuevo récord de 469! ¡Solo 11 rupturas!» ([msg 10045](https://groups.io/g/eternity2/message/10045)). Bucas reescribió el solucionador en C, duplicando aproximadamente su velocidad, y una oleada de 469 adicionales siguió a lo largo de noviembre ([msg 10065](https://groups.io/g/eternity2/message/10065), [msg 10067](https://groups.io/g/eternity2/message/10067)); el generador que había detrás del port se publicó bajo el nombre de libblackwood ([msg 10078](https://groups.io/g/eternity2/message/10078)). Luego, el 30 de marzo de 2021, un mensaje de dos líneas: la URL de un tablero 470/480 ([msg 10117](https://groups.io/g/eternity2/message/10117)). Blackwood confirmó más tarde que el repositorio público era «el código exacto usado para encontrar un 470» ([msg 10161](https://groups.io/g/eternity2/message/10161)), y luego se retiró: «No he escrito una línea de código ni ejecutado ningún algoritmo desde que encontré un 470» ([msg 10185](https://groups.io/g/eternity2/message/10185)). Una aclaración importa para cómo se leen estos récords. El reglamento propio del concurso solo fijaba la pieza de inicio, exigida en su ubicación y rotación especificadas; las otras cuatro pistas eran ayudas opcionales ([msg 11046](https://groups.io/g/eternity2/message/11046)). Cada tablero récord a partir del 468 se sitúa en ese mismo régimen de «solo pieza de inicio»: la pieza 139 en su casilla obligatoria, ninguna de las cuatro pistas opcionales en su posición oficial, una afirmación verificada a nivel de tablero para el 470 ([msg 10554](https://groups.io/g/eternity2/message/10554)). El 470 es el mismo puzzle que los 469 citados durante mucho tiempo como el techo, y no una variante más fácil; Blackwood tenía las piezas de pista y «deliberadamente no las usó» ([msg 10185](https://groups.io/g/eternity2/message/10185)). Los tableros que además respetan las cuatro pistas opcionales forman una escalera distinta, más estricta (más detalles abajo). La [página de récords](/es/research/records/) mantiene los dos regímenes explícitamente separados. Blackwood se permitió un bis: reconfigurando su solucionador para cero rupturas, llevó el récord de colocaciones consecutivas del 226 de larga data de Verhaard a 227, luego a 230, todo en «un solo PC en mi sótano» ([msg 10536](https://groups.io/g/eternity2/message/10536), [msg 10544](https://groups.io/g/eternity2/message/10544), [msg 10547](https://groups.io/g/eternity2/message/10547)). ## La era moderna (2022-2026) Los años posteriores a la oleada se asentaron en un ritmo de invariantes, calibración y procedencia. En mayo de 2022, Al Hopfer, un habitual desde 2009, enunció la condición de borde conocida ahora en este sitio como el [equilibrio NS-1](/es/research/why/border-balance/): el reborde exterior del interior 14×14 «debe tener la misma mezcla (paridad) de las imágenes internas en las 56 piezas de borde» ([msg 10754](https://groups.io/g/eternity2/message/10754), [msg 10757](https://groups.io/g/eternity2/message/10757)). En el mismo hilo, Carlos Fernandez resolvía cuadrantes 14×14 en unos cuatro minutos ([msg 10802](https://groups.io/g/eternity2/message/10802)). Los grandes bloques interiores se habían vuelto rutinarios; cerrar el marco, no. La puntuación del premio de 2008, entretanto, fue formalmente degradada a test de no regresión: «la semana pasada encontré unas 30 veces 467. Uso este objetivo para calibrar el código que estoy ejecutando», escribió Bucas ([msg 11001](https://groups.io/g/eternity2/message/11001)). La escalera más estricta tuvo su propio récord. Un hilo de 2023 que recopilaba los mejores tableros que respetan **las cinco** colocaciones de pistas subió de 412 a 452 y 458, hasta el 460 de Bruno Gauthier ([msg 11074](https://groups.io/g/eternity2/message/11074)), que se mantuvo más de tres años hasta el 464 de Benjamin Riotte en julio de 2026, un 461 que se elevó a 464/480 con su propio solucionador Blackwood modificado, con Igor Pejic alcanzando el mismo rango 463-464 de forma independiente ([groups.io](https://groups.io/g/eternity2/message/11919)). El mismo año produjo el falso positivo canónico de la época: un 16×16 completo, con 480 aristas casadas, construido por McGavin a partir de las piezas de un juego E2, un juego Clue-1 y un juego Clue-2, un «480» que no es el puzzle, publicado precisamente para dejar sentado ese punto ([msg 11169](https://groups.io/g/eternity2/message/11169)). La teoría completó su largo viaje de los mensajes al código fuente. En enero de 2024, McGavin reafirmó las cifras destacadas: 14 702 soluciones esperadas con solo la pieza de inicio, 0,00000004 con las cinco pistas, «sugiriendo con mucha fuerza… una solución única y sola» ([msg 11193](https://groups.io/g/eternity2/message/11193)). Al día siguiente publicó complex_theory.c, su implementación exacta en C del modelo de Owen ([msg 11197](https://groups.io/g/eternity2/message/11197)): la referencia que el [motor de complejidad](/es/research/lab/experiments/joshua-blackwood/solver/) propio de este sitio porta. En diciembre, Bucas igualó el récord: «Reinicié unos cuantos hilos del código de Joshua, y… ¡apareció otro 470!» ([msg 11401](https://groups.io/g/eternity2/message/11401)), con Fernandez publicando una variación de borde reordenado esa misma semana ([msg 11403](https://groups.io/g/eternity2/message/11403)). La atribución de Bucas nunca flaqueó: «Joshua Blackwood es el actual poseedor del récord. Yo, humildemente, usé su código» ([msg 11555](https://groups.io/g/eternity2/message/11555)). Y su proyecto wrapper_blackwood puso el asunto más allá de la opinión: una granja que varió cada parámetro del algoritmo de Blackwood y midió los resultados, concluyendo que, dentro de los parámetros barridos, el ajuste manual del autor ya era casi óptimo; sus notas están publicadas en este sitio con su permiso explícito ([msg 11905](https://groups.io/g/eternity2/message/11905)). Y los fundadores volvieron, o no. En mayo de 2025, Brendan Owen publicó por primera vez en unos catorce años, respondiendo a una pregunta de dificultad de un recién llegado ([msg 11500](https://groups.io/g/eternity2/message/11500)), diciéndole a McGavin que sus años de trabajo eran «muy impresionantes» ([msg 11521](https://groups.io/g/eternity2/message/11521)), y regresando a su propio modelo con un cálculo afinado de las probabilidades de unión de aristas ([msg 11546](https://groups.io/g/eternity2/message/11546)). La era de la IA llegó primero como farsa: ChatGPT informando con aplomo a un miembro de que una solución «acabó siendo encontrada por un equipo de entusiastas de los puzzles» ([msg 10993](https://groups.io/g/eternity2/message/10993)), y luego una app de solucionador programada por intuición cuyo dueño reconocía «no está garantizado al 100 % porque Base44 es IA», acogida con tutoría paciente en lugar de burla ([msg 11755](https://groups.io/g/eternity2/message/11755), [msg 11818](https://groups.io/g/eternity2/message/11818)). Y en febrero de 2026, la nota de bienvenida anual se abrió con un homenaje a Kronjuvel: Ole Knudsen, que creó el grupo, lo llevó durante buena parte de dos décadas, y está ausente de la lista desde 2023 ([msg 11771](https://groups.io/g/eternity2/message/11771)). El frente actual del archivo es el 31 de marzo de 2026: un hilo SAT que aún discute sobre codificaciones CNF de 4 GB, un desafío permanente solo por diversión para invalidar un parcial de borde, y la frase de un miembro para el aniversario: «poco a poco avanzamos hacia los 20 años de E2 el año que viene ;-) ¿Resolveremos E2 en 2026…?» ([msg 11820](https://groups.io/g/eternity2/message/11820), [msg 11823](https://groups.io/g/eternity2/message/11823)). El balance tras diecinueve años: el 480 nunca se ha encontrado; el 470 se mantiene desde 2021; y las diez aristas que faltan son, como siempre, [donde vive todo el problema](/es/research/records/). ## Relacionado - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # Contribuye con tus investigaciones > Este wiki es el hogar de investigación de la comunidad, y hay sitio en él para tu trabajo. Tres formas de publicarlo, desde un mensaje en la lista de correo hasta una pull request, más el pequeño conjunto de reglas de la casa que mantiene cada página digna de confianza. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/contribute/ - Actualizado: 2026-07-21 --- Este wiki no es el blog de una sola persona con la puerta cerrada. Pretende ser el hogar de investigación de la comunidad: el lugar donde diecinueve años de trabajo sobre Eternity II (récords, métodos, hallazgos estructurales, [callejones sin salida](/es/research/build/dead-ends/) incluidos) quedan consignados, referenciados y a mano para encontrarlos. Cada página del [laboratorio](/es/research/lab/) lleva la firma de su autor y se reúne en la [página de contribuidor](/es/research/people/) de ese investigador, hoy sobre todo [la de Raphaël](/es/research/people/raphael-anjou/), porque es quien se toma la molestia de escribirlo todo, pero la estructura acredita a cada contribuidor por su nombre. La tuya puede situarse justo al lado de la suya. > **¿Todavía no tienes nada que publicar?** > > Empieza construyendo. La [caja de herramientas del constructor](/es/research/build/toolkit/) te lleva a un solucionador que se ejecuta, y para un primer objetivo con el que hacerte un nombre, el [10×10 set_2 de Brendan Owen](/es/research/build/benchmarks/#los-1010-de-brendan-uno-cayó-el-otro-sigue-en-pie) es el tablero sin resolver más cercano por debajo del puzzle completo. Un resultado ahí merece traerse de vuelta aquí. Ya existe un precedente. La página sobre [el algoritmo de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) se apoya en las notas y el estudio de parámetros de Jef Bucas, republicados con su permiso explícito, sus figuras y su nombre en cada una de ellas. Ese es el modelo: el trabajo sigue siendo tuyo, el wiki le da un hogar permanente y citable. ## Tres formas de entrar **1. Publícalo y señálalo: la vía más ligera.** Comparte tu hallazgo allí donde la comunidad ya conversa: la [lista de correo](https://groups.io/g/eternity2) o el [servidor de Discord](https://discord.gg/Ny5xs3q8w). Si quieres verlo en el wiki, basta con decirlo en tu mensaje. Alguien (normalmente Raphaël) lo redactará como página, te la someterá a revisión y la publicará con todo el crédito. Así es exactamente como nació la página de Blackwood a partir de las notas de Jef. Nunca tienes que tocar el repositorio. **2. Abre una issue o una pull request.** El wiki es [un repositorio abierto](https://github.com/raphael-anjou/eternity2), y una página de investigación no es más que un archivo MDX bajo `web/content/research/`. Añadir el archivo *es* el registro: la barra lateral, la búsqueda y el sitemap lo recogen automáticamente. Cada página empieza con un pequeño bloque de frontmatter: ```yaml title: Your finding, in one line description: >- Two or three sentences that can stand alone in a search result. kind: finding # or experiment, concept, reference... updated: 2026-07-02 topics: [backtracking] sources: - label: Hopfer's statement of the NS-1 condition (2022) url: https://groups.io/g/eternity2/message/10754 ``` Si la página es un **experimento** (una búsqueda que has medido), se requiere un bloque más: el hardware sobre el que se ejecutó. Es lo que permite a un lector comparar tu resultado con el de todos los demás, y el build rechaza una página de experimento que carezca de él. ```yaml kind: experiment hardware: cores: 1 # logical cores used; sum across nodes for a cluster cpu: "AMD Ryzen 9 7950X" ramGb: 64 gpus: 0 accelerator: none # none | gpu | quantum | fpga | tpu machine: "desktop, single box" wallClock: "10 × 60 s" # budget per run × repeats runs: 10 seedPolicy: "randomized corner permutation per run" measured: true # true only for the standardized single-core bench ``` La página lo representa como una ficha técnica con una sola cifra-titular derivada: los **núcleos-hora** (núcleos × horas de tiempo real), el coste verdadero de la ejecución. Esa única cifra es lo que sitúa una búsqueda de un núcleo y un minuto y un barrido de 400 núcleos en un centro de datos en la misma tabla sin que uno favorezca al otro. Pon `measured: true` solo para una referencia mononúcleo estandarizada (un núcleo, un presupuesto de tiempo fijo); una ejecución multinúcleo es un `native run` y consigna su equipo real y la mejor puntuación que alcanzó. ¿No lo tienes claro con la fontanería? Abre una issue con tu borrador en markdown simple y nosotros nos ocupamos del resto. [Ejecútalo tú mismo](/es/research/build/run-it-yourself/) explica cómo poner el sitio en marcha en local si quieres previsualizar tu página. **3. Comparte datos y tableros.** No todo necesita prosa. Un buen tablero, un barrido de parámetros, un conjunto de datos de una ejecución larga: todo ello es bienvenido. Cada tablero de este sitio es verificable en el [visualizador](/viewer/), que habla de forma nativa el formato de URL estándar de la comunidad, de modo que cualquiera puede comprobar tu resultado con un clic. Publica el tablero o los datos con una nota sobre cómo se produjeron, y puede respaldar una página o convertirse en una. ## Las reglas de la casa Existen por una sola razón: para que cualquiera que llegue a cualquier página pueda confiar en lo que lee. - **Cada afirmación enlaza una fuente.** Un mensaje de la lista de correo, un repositorio, un artículo: algo que un lector pueda seguir. - **Cada cifra es reproducible o está etiquetada por lo que es.** Los resultados deterministas vienen con una orden que los regenera exactamente. Los cálculos con semilla, estocásticos o pesados lo dicen con claridad ("no se reproducirá exactamente", "~40 h en 8 núcleos") y entregan el tablero que encontraron para que siga siendo verificable. El estado de revisión de una página la acompaña en un nivel aparte: `report` para un informe técnico público pero aún sin revisar, y `live` para una página revisada, citada y tratada como asentada (`draft` es el estado sin publicar que rara vez se ve). - **Cada experimento dice sobre qué se ejecutó.** Una búsqueda medida no tiene sentido sin su hardware, así que una página de experimento debe llevar el bloque `hardware:` de arriba (núcleos, equipo, presupuesto de tiempo). El build lo exige. Una puntuación sin cómputo detrás no es un resultado que nadie pueda comparar. - **Las páginas en francés se escriben, no se traducen.** Cada página existe en ambos idiomas, y la versión francesa es prosa francesa de verdad, no una pasada automática. Si solo escribes en un idioma, no pasa nada; un mantenedor puede encargarse de traducir el otro. - **Tu nombre permanece en tu trabajo.** Notas de crédito, enlaces a fuentes, atribuciones de figuras: la página de Blackwood muestra cómo se ve esto en la práctica. Nada se absorbe de forma anónima. ## Lo que el wiki devuelve a cambio A cambio de cumplir esas reglas, tu trabajo recibe una infraestructura que un mensaje de foro nunca tendrá: una página estable en el armazón de la documentación con barra lateral, búsqueda y migas de pan; una ubicación en los [centros temáticos](/es/research/) para que se encuentre por tema, y no solo por fecha; una exportación en markdown en bruto de cada página (añade `.md` a su URL) para que siga siendo legible por máquina; y una URL permanente que otros investigadores podrán citar, dentro de años y no solo esta semana. El puzzle ha resistido a todo el mundo hasta ahora. Lo mínimo que podemos hacer es asegurarnos de que el progreso de nadie contra él se pierda. ## Relacionado - [Ejecútalo tú mismo](https://eternity2.dev/es/research/build/run-it-yourself/) — Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha, recompilar el motor WebAssembly y reproducir las cifras. - [La caja de herramientas del constructor](https://eternity2.dev/es/research/build/toolkit/) — Un kit de inicio en Rust listo para usar para construir tu propio solucionador de Eternity II: puntuar, generar tableros con equilibrio de colores real, generar lotes con pistas fijadas, convertir todos los formatos, medir el rendimiento y un bucle resolver→barrer→comparar, donde solo escribes el solucionador. Además, una configuración de una línea para agentes de código y un generador de tableros directamente en el navegador. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # Historia: los grandes hitos > La historia de Eternity II de un vistazo, desde la lista de correo fundada en 2000 hasta el récord de 470 que aún se mantiene. Una cronología recorrible de los momentos decisivos, cada uno con enlace a la historia completa en dos partes y al mensaje donde ocurrió. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/history/ - Actualizado: 2026-07-11 - Fuente: El archivo de la lista de correo eternity2 (groups.io): cada hito de abajo enlaza con su mensaje original — https://groups.io/g/eternity2 - Fuente: Wikipedia, «Eternity II puzzle» — https://en.wikipedia.org/wiki/Eternity_II_puzzle --- Eternity II tiene una historia oficial (un lanzamiento, un premio de 2 000 000 $, una fecha límite) y una historia real, que se desarrolló en una lista de correo. Esta página cuenta la real, reducida a sus momentos decisivos: los instantes que de verdad hicieron avanzar el puzzle, cada uno en una sola línea que se lee de un vistazo. Para el relato completo en prosa, la historia se cuenta en dos partes: la [parte I](/es/research/community/hunt/) abarca de 2000 a 2009, desde la fundación del grupo hasta el primer premio de verificación; la [parte II](/es/research/community/hunt-part-2/) abarca de 2009 hasta hoy. Cada hito aquí enlaza con ellas, y con el mensaje del archivo donde ocurrió. > **[Interactive: HistoryTimeline]** Rendered on the canonical page (link above); not shown in this markdown export. ## Adónde ir después - La [cronología de récords](/es/research/records/) traza la puntuación en sí a lo largo del tiempo: el 467 de 2008, el largo silencio, el rápido ascenso hasta 470 y la línea plana desde 2021, con la tabla completa y cada tablero consultable arista por arista. - La [historia completa](/es/research/community/hunt/) cuenta el mismo relato en prosa, con mucho más de las personas, las discusiones y los callejones sin salida de lo que cabe en una cronología. - Las [personas detrás de todo esto](/es/research/people/) cuentan el mismo relato por persona: quién hizo qué, y dónde leerlo en sus propias palabras. ## Relacionado - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - [La cacería, una historia, parte II: 2009-2026](https://eternity2.dev/es/research/community/hunt-part-2/) — Diecisiete años después del premio: el concurso muere con su solución encerrada en una caja fuerte, 467 se mantiene durante una década, el archivo sobrevive al cierre de Yahoo por cuestión de días, y luego un desconocido venido de Reddit reescribe el libro de récords. Cada suceso está vinculado a su mensaje original. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Quién es quién en la investigación de E2](https://eternity2.dev/es/research/people/) — Dos décadas de investigación sobre Eternity II fueron obra de personas concretas, en una lista de correo. Esta página es la galería: quiénes son, qué aportó cada una y dónde leerlo en sus propias palabras. Un agradecimiento tanto como un índice. --- # El laboratorio > El cuaderno abierto del wiki: hallazgos estructurales y experimentos de búsqueda con nombre propio, cada uno atribuido al investigador que lo llevó a cabo y reproducible desde el código fuente. Un rincón de la investigación más amplia de la comunidad. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/ - Actualizado: 2026-07-21 --- Este es el cuaderno abierto: hallazgos y experimentos originales sobre Eternity II, redactados en detalle y atribuidos página por página al investigador que hizo el trabajo. No es el blog de una sola persona. Los [experimentos](/es/research/lab/experiments/) están organizados en una sección por investigador, y el trabajo de cada persona se reúne además en su propia [página de contribuyente](/es/research/people/). Hoy la sección de [Raphaël](/es/research/people/raphael-anjou/) es la más completa, porque es quien está dejando constancia de las cosas, pero la estructura está pensada para muchas manos y hay una sección esperando la tuya. Los métodos, récords e historia de la comunidad ocupan el resto de la sección de investigación. ## Por dónde empezar - **[Los experimentos](/es/research/lab/experiments/)** son la galería completa: cada búsqueda con nombre y cada hallazgo estructural, filtrables por desenlace y por investigador. Empieza aquí para explorar. - **[Qué muro detiene a qué método](/es/research/why/walls-and-methods/)** lee la galería como una sola imagen: cada experimento frente al muro que ataca y el score donde se detuvo. - **[Cómo publica el laboratorio](/es/research/lab/experiments/methodology/)** es el estándar editorial común que cumple cada página aquí, para que sepas qué significa cada etiqueta en un resultado. - **[Contribuir](/es/research/contribute/)** es cómo añadir tu propio hallazgo, acreditado a tu nombre, junto al resto. Los algoritmos que aparecen aquí son experimentos, no grandes avances. Algunos son ideas originales; otros reimplementan fielmente una técnica conocida de la comunidad para medir con precisión lo que aporta. Cada informe indica de qué tipo es, qué atacó, dónde se detuvo y qué dejó abierto, de modo que cualquiera pueda retomar el trabajo donde terminó. ## Todo es reproducible Ningún resultado en este sitio es una afirmación sin respaldo. Los cálculos deterministas incluyen un script ejecutable y la salida exacta que produce. Las búsquedas que dependen del azar o tardan horas incluyen el mismo script, más el tablero que encontraron, que puedes cargar en el visor y verificar arista por arista. La etiqueta de cada resultado te indica de qué tipo se trata. ## Cómo publica el laboratorio Cada página aquí cumple con una misma norma editorial: qué tipo de contribución es, si se publica y en qué nivel, y con qué solidez está respaldada su afirmación. [Cómo publica el laboratorio](/es/research/lab/experiments/methodology/) establece esa norma, para que las mismas reglas se apliquen sin importar quién escriba la página. ## Añade la tuya El cuaderno está abierto. Si tienes un hallazgo o una búsqueda que merezca quedar registrada, hay [un lugar para ella aquí](/es/research/contribute/), atribuida a tu nombre, junto a las demás. ## Páginas de esta sección - [Experimentos](https://eternity2.dev/es/research/lab/experiments/) — Los experimentos de búsqueda con nombre del laboratorio, una sección por investigador. Cada uno es un run real contra Eternity II con su idea, su mejor tablero y las preguntas que dejó abiertas. El cuaderno de Raphaël Anjou está aquí completo; el cuaderno queda abierto a cualquier otra persona. --- # Experimentos > Los experimentos de búsqueda con nombre del laboratorio, una sección por investigador. Cada uno es un run real contra Eternity II con su idea, su mejor tablero y las preguntas que dejó abiertas. El cuaderno de Raphaël Anjou está aquí completo; el cuaderno queda abierto a cualquier otra persona. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/ - Actualizado: 2026-07-21 --- Los experimentos son runs de búsqueda con nombre contra Eternity II, cada uno documentado con su idea, su mejor resultado y las preguntas que dejó abiertas. Se acreditan página por página al investigador que los llevó a cabo, y se agrupan en una sección por investigador. Esto es solo un rincón de la investigación más amplia de la comunidad; los métodos, los récords y la historia viven en el resto de la [sección de investigación](/es/research/). > **[Interactive: ExperimentAuthors]** Rendered on the canonical page (link above); not shown in this markdown export. ## Cada experimento con puntuación, lado a lado El registro completo: cada experimento con nombre que alcanzó un tablero, entre todos los investigadores, con la puntuación lograda y cómo terminó ese run. Las filas se descubren desde las propias páginas, de modo que esta tabla se mantiene al día con ellas; pulsa un encabezado de columna para reordenar. Cada puntuación se marca con la convención bajo la que se mide (aristas emparejadas, o la pista más estricta de cinco pistas), porque un simple NNN/480 significa algo distinto bajo cada una. > **[Interactive: ExperimentResultsTable]** Rendered on the canonical page (link above); not shown in this markdown export. No todo resultado es un solucionador, y la tabla de arriba recoge solo los runs con puntuación. Para recorrer el laboratorio del otro modo, según qué tipo de resultado es cada página (los análisis, la teoría, las mediciones, y los callejones sin salida guardados como resultados negativos de pleno derecho), consulta el [índice por contribución](/es/research/lab/experiments/by-contribution/). ## Qué cuenta aquí como experimento Algunos son ideas originales; otros reimplementan fielmente una técnica conocida de la comunidad para medir exactamente lo que aporta. Cada informe indica de cuál se trata, qué atacó, dónde se detuvo y qué dejó abierto, de modo que cualquiera pueda retomarlo donde terminó. Y cada resultado es reproducible: los runs deterministas se entregan con un script y su salida exacta; las búsquedas que dependen del azar se entregan con ese mismo script más el tablero que encontraron, cargable en el [visor](/viewer/) y verificable arista por arista. Cada experimento también indica el **hardware sobre el que se ejecutó**, en una ficha técnica fija: los núcleos, la máquina, el presupuesto de tiempo, y una cifra derivada, las horas-núcleo, que dice lo que el run realmente costó. Es obligatorio, porque una puntuación no significa nada sin el cómputo que la respalda. Cuando un run es directamente comparable, lleva una insignia de **banco estandarizado** (un núcleo, un presupuesto fijo en minutos, reiniciado desde esquinas aleatorias); un run más grande es un **run nativo** que registra su equipo real y la mejor puntuación que alcanzó. Así, un minuto partiendo de cero en un núcleo y un barrido en centro de datos sobre cuatrocientos núcleos caben en la misma tabla, cada uno juzgado frente a lo que realmente gastó. ## Páginas de esta sección - [Cómo publica el laboratorio](https://eternity2.dev/es/research/lab/experiments/methodology/) — El estándar editorial de este cuaderno abierto: cómo una investigación sobre Eternity II pasa de ser un trabajo no publicado a una página publicada. De qué tipo de contribución se trata, si se publica, en qué nivel y dónde reside. Un estándar común, concebido para escalar a muchos autores. - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [Los experimentos de Raphaël Anjou](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/) — Un cuaderno de experimentos de búsqueda sobre Eternity II, organizado en torno a los motores compartidos sobre los que se ejecutan, las pipelines de combinación que persiguen la puntuación, cuatro estudios que desmontan un paradigma de búsqueda una decisión a la vez, y resoluciones exactas de final de partida. Cada uno expone su idea, su mejor tablero y las preguntas que deja abiertas. El mejor alcanza 463 de 480. - [El motor de Peter McGavin](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/) — El backtracker en C que el propio Peter McGavin escribió, el solucionador en bruto más rápido que la comunidad ha medido. Obtenido de la lista de correo, compilado en un M1 y ejecutado sobre el verdadero Eternity II. Su código, su algoritmo; ejecutado y documentado aquí. - [El solucionador de Joshua Blackwood](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/) — El solucionador C# de código abierto de Joshua Blackwood, el que encontró el récord vigente de 470. Compilado y ejecutado aquí tal como él lo publicó, y después con las cinco pistas oficiales fijadas. Su código, su algoritmo; ejecutado y documentado aquí. - [El eii de Louis Verhaard](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/) — El eii de Louis Verhaard ganó el único premio que el puzzle llegó a pagar, pero se distribuye como un binario de Windows sin código fuente. En qué consiste su método, por qué el original no se ejecuta aquí, y dónde vive una reimplementación fiel del mismo. --- # El solucionador de Joshua Blackwood > El solucionador C# de código abierto de Joshua Blackwood, el que encontró el récord vigente de 470. Compilado y ejecutado aquí tal como él lo publicó, y después con las cinco pistas oficiales fijadas. Su código, su algoritmo; ejecutado y documentado aquí. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/ - Actualizado: 2026-07-15 --- Esta sección trata sobre el solucionador del propio [Joshua Blackwood](/es/research/people/joshua-blackwood/): el programa C# de código abierto que encontró el 470 que aún se mantiene. El algoritmo y el código son suyos, públicos en GitHub. Lo que se añade aquí es la ejecución: compilado tal como él lo publicó, medido en mono-núcleo, y luego confrontado con el verdadero puzzle de cinco pistas para ver qué compra realmente su velocidad. ## Páginas de esta sección - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # El solucionador de Blackwood, decodificado y ejecutado aquí > El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/ - Actualizado: 2026-07-21 - Temas: backtracking, speed - Reproducir: `git clone github.com/jblackwood345/EternityII_Solver; dotnet build -c Release` - Fuente: El solucionador de Joshua Blackwood (GitHub, GPL-3.0, la fuente original) — https://github.com/jblackwood345/EternityII_Solver - Fuente: Las notas de Jef Bucas sobre el solucionador Blackwood (repositorio wrapper_blackwood) — https://github.com/jfbucas/wrapper_blackwood/blob/main/doc/Notes/Notes.md - Fuente: El anuncio del estudio de Jef y el permiso para republicar (groups.io message 11905) — https://groups.io/g/eternity2/message/11905 - Fuente: El plan de ajuste de Blackwood: las cuatro palancas y el reajuste del 470 (groups.io message 10076) — https://groups.io/g/eternity2/message/10076 - Fuente: El repositorio republicado, «el código exacto usado para encontrar un 470» (groups.io message 10161) — https://groups.io/g/eternity2/message/10161 - Fuente: El anuncio del 470 por Blackwood (msg 10117) — https://groups.io/g/eternity2/message/10117 --- > **De quién es este trabajo** > > El algoritmo y el código C# son de **Joshua Blackwood** ([EternityII_Solver](https://github.com/jblackwood345/EternityII_Solver), público en GitHub bajo la licencia GPL-3.0). La decodificación de las entrañas, junto con el estudio de parámetros que se reporta más abajo, es obra de Jef Bucas, en su proyecto [wrapper_blackwood](https://github.com/jfbucas/wrapper_blackwood); las secciones decodificadas reformulan y amplían [sus notas](https://github.com/jfbucas/wrapper_blackwood/blob/main/doc/Notes/Notes.md) con su permiso explícito ([groups.io message 11905](https://groups.io/g/eternity2/message/11905)), y las figuras son suyas, reproducidas de esas mismas notas. La última sección es [Raphaël Anjou](/es/research/people/raphael-anjou/) construyendo y ejecutando el código de Blackwood en una sola máquina y dando cuenta de lo que hizo; las tres pequeñas modificaciones a su fuente se listan ahí, cada una invitada por su propio README. Joshua Blackwood ostenta el récord vigente de 470, encontrado con un código que hizo público. Su solucionador es, en el fondo, un backtracker clásico en profundidad que ejecuta el mismo bucle que cualquier otro: colocar, comprobar, retroceder. Lo que lo convierte en el motor detrás de los mejores tableros de la comunidad es un conjunto de heurísticas fabricadas a mano y apiladas encima: una regla de puntuación que decide *qué* piezas probar primero, un calendario de cuotas por profundidad que poda las ramas que se quedan atrás, un [orden de relleno](/es/research/build/backtracking/fill-order/) ajustado para ser «ni demasiado apretado ni demasiado holgado», y una tolerancia a desajustes acumulados en el tramo final. Cada una de esas decisiones lleva números dentro, y el estudio de Jef Bucas planteó la pregunta obvia: ¿los números de Blackwood valen algo? Sí, hasta resultar incómodo. Como el código es un programa C# real y compilable, se puede entonces ejecutar exactamente tal como lo escribió su autor, que es lo que hace la última sección aquí. ## Puntuar las piezas por tres colores El solucionador puntúa cada pieza según los colores de sus lados, y privilegia exactamente tres de ellos, un color de borde y dos colores interiores: ```csharp heuristic_sides = new List() { 13, 16, 10 }; ``` Las piezas que portan esos colores se ordenan al frente de cada lista de candidatos, de modo que la búsqueda las compromete pronto. ¿Por qué estos tres? Esa es una de las dos perillas que giró el estudio de Jef (véase más abajo). Su muestreo sugiere que las mejores puntuaciones conocidas provienen de dos conjuntos de patrones distintos: > **[Figure]** interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. ## El calendario: una curva de cuotas sobre 256 profundidades Priorizar tres colores solo ayuda si la búsqueda se ve *forzada* a colocarlos realmente. Por eso el solucionador lleva un arreglo de 256 entradas, una por profundidad, donde cada valor es el número mínimo de esos tres colores que debe figurar ya en el tablero para seguir descendiendo. Cae por debajo de la cuota y la rama se corta en el acto: retroceso, sin discusión. Blackwood rellenó ese arreglo a mano, como una rampa lineal por tramos: ```csharp heuristic_array = new int[256]; for (int i = 0; i < 256; i++) { if (i <= 16) heuristic_array[i] = 0; else if (i <= 26) heuristic_array[i] = (int)(((float)i - 16) * (float)2.8); else if (i <= 56) heuristic_array[i] = (int)((((float)i - 26) * (float)1.43333) + 28); else if (i <= 76) heuristic_array[i] = (int)(((((float)i - 56) * (float)0.9)) + 71); else if (i <= 102) heuristic_array[i] = (int)(((((float)i - 76) * (float)0.6538)) + 89); else if (i <= 160) heuristic_array[i] = (int)(((((float)i - 102) / 4.4615)) + 106); } ``` Libre hasta la profundidad 16, empinada durante los veintitantos, y luego aplanándose hasta la profundidad 160. Este es el «calendario» del schedule-and-break-index: un cronograma comprometido de antemano para agotar los colores de alta frecuencia, impuesto como una poda estricta. > **[Figure]** interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. ## El orden de relleno: ni demasiado apretado ni demasiado holgado La búsqueda arranca en la esquina inferior izquierda del tablero (la esquina más cercana a la pieza central obligatoria) y ejecuta un recorrido de filas estándar hasta la profundidad 180. Después de eso, intercala las piezas de borde restantes (incluida la tercera esquina) cada pocos pasos entre las colocaciones interiores. Es un camino intermedio deliberado. Entrar en espiral (el anillo de borde primero) compromete demasiado pronto las piezas más restringidas; un recorrido de filas puro las deja todas para el final, donde te tienden una emboscada. El orden de Blackwood libera la presión del borde de forma progresiva. Por qué el orden importa tanto, y cómo puntuar uno antes de ejecutarlo, es exactamente lo que formaliza la [teoría de la complejidad](/es/research/why/complex-theory/). > **[Figure]** interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. ## Los breaks: comprar el tramo final con desajustes Al aproximarse al final de la búsqueda, el solucionador deja de exigir la perfección. Un presupuesto de desajustes de arista se desbloquea con la profundidad, de forma acumulativa: un break se permite a partir de la profundidad 201 (puede gastarse en 201 o en cualquier profundidad posterior), un segundo a partir de 206, y así sucesivamente: ```csharp break_indexes_allowed = new List() { 201, 206, 211, 216, 221, 225, 229, 233, 237, 239 }; ``` Diez breaks en total, el último desbloqueándose en la profundidad 239. Esto es lo que hace que los [tableros récord](/es/research/records/) sean alcanzables en absoluto: un 256 perfecto nunca se ha encontrado, pero un tablero que tolera un puñado de desajustes tardíos es algo que un backtracker puede terminar de verdad. Dos detalles afinan el cuadro. Primero, el presupuesto viene con una disciplina: nunca se permite que dos breaks se toquen: cada desajuste debe quedar aislado entre aristas apareadas. Blackwood deletrea la consecuencia él mismo: cualquier ejecución que alcance 255 colocaciones se completa automáticamente a 256, y un tablero 469 es equivalentemente un parcial de 249 piezas con siete huecos ([groups.io message 10051](https://groups.io/g/eternity2/message/10051)). Segundo, la lista de diez entradas de arriba es en sí misma un reajuste: al planear el empujón de 469 a 470, Blackwood recortó el presupuesto de breaks de once profundidades a diez, un cambio que documentó, palanca por palanca, en su propio plan de ajuste ([groups.io message 10076](https://groups.io/g/eternity2/message/10076)). Los puntos de desbloqueo desplazados que esbozó en ese plan nunca se adoptaron (el código 470 publicado conserva los puntos de la era 469 y simplemente descarta el undécimo), y ese calendario más ceñido es el que encontró el 470. ## Reinicios, aleatoriedad, y un tope de 50 000 millones de nodos Un backtracker por recorrido de filas rara vez vuelve a subir hasta sus primeras filas, de modo que una mala apertura puede varar una ejecución entera en una región imposible. La respuesta de Blackwood es barata y eficaz: aleatorizar la apertura (la primera esquina y las piezas de la fila inferior se barajan en cada intento, de modo que dos ejecuciones nunca retrazan el mismo prefijo) y topar cada intento en 50 000 millones de nodos explorados. Alcanza el tope, abandona, [reinicia](/es/research/build/backtracking/restarts/) con una apertura fresca, y sal a buscar una más fértil. ## Hacerlo caber en la caché El último ingrediente es la simpatía mecánica. Las piezas candidatas viven en tablas de consulta por posición, y cada entrada es una estructura compacta (número de pieza, rotación, los dos lados expuestos, un contador de breaks y un contador heurístico) dimensionada para que el conjunto de trabajo quepa en la caché de la CPU: ```csharp public struct RotatedPiece { public ushort PieceNumber { get; set; } public byte Rotations { get; set; } public byte TopSide { get; set; } public byte RightSide { get; set; } public byte Break_Count { get; set; } public byte Heuristic_Side_Count { get; set; } } ``` Esta es la mitad de «rendimiento» de la historia: el mismo diseño que [Peter McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) llevó más tarde a cientos de millones de colocaciones por segundo. ## De un solo 468 a una ola de récords La historia del solucionador es tan instructiva como sus entrañas. Blackwood llegó como un completo desconocido: su 468, el primer avance más allá del [467 de Louis Verhaard](/es/research/lab/experiments/louis-verhaard/eii/) en doce años, llegó a la lista de correo de segunda mano, retransmitido desde una publicación de Reddit ([groups.io message 10032](https://groups.io/g/eternity2/message/10032)). Tres días después liberó el código del solucionador, con heurísticas que él calculaba lo hacían «el doble de bueno» que la ejecución del 468 ([message 10037](https://groups.io/g/eternity2/message/10037)); Jef Bucas lo tenía corriendo bajo Mono en Ubuntu casi de inmediato ([message 10038](https://groups.io/g/eternity2/message/10038)). En una semana, Peter McGavin, ejecutándolo «en unos doscientos núcleos», alcanzó 469 ([message 10045](https://groups.io/g/eternity2/message/10045)). Bucas reescribió entonces el algoritmo en C para aproximadamente el doble de velocidad ([message 10065](https://groups.io/g/eternity2/message/10065)), una ola de nuevos tableros 469 siguió en cuestión de semanas, y el generador de código detrás de la reescritura se publicó como [libblackwood](https://github.com/jfbucas/libblackwood) ([message 10078](https://groups.io/g/eternity2/message/10078)). Cuando Blackwood publicó su 470 en marzo de 2021, provino de ese mismo código público. Sus propias palabras, al republicar el repositorio después de que hubiera pasado silenciosamente a privado: «Es el código exacto usado para encontrar un 470» ([message 10161](https://groups.io/g/eternity2/message/10161)). Un récord, liberado en abierto, se convirtió en una máquina de récords comunitaria. ## El estudio de parámetros de Jef: wrapper_blackwood Todo lo anterior es *cómo* funciona el solucionador. Jef Bucas construyó [wrapper_blackwood](https://github.com/jfbucas/wrapper_blackwood) para preguntarse si sus números son *correctos*. El montaje es un pequeño [experimento distribuido](/es/research/build/faster/distributed-solving/): un servidor Python reparte trabajos por HTTP, donde cada trabajo es una variación de los parámetros del solucionador. Los clientes (un worker por núcleo) recogen un trabajo, generan la fuente C# a partir de plantillas con esa variación integrada, la compilan con Mono, la ejecutan, y reportan el resultado de vuelta al servidor para su análisis. Dos parámetros recibieron el tratamiento: - **Los tres colores priorizados.** Muestreando muchos conjuntos distintos de tres patrones, y registrando hasta qué profundidad llegó el algoritmo con cada uno, su [página de resultados](https://github.com/jfbucas/wrapper_blackwood/blob/main/doc/batch00_edge_combos_stats.html) asocia cada combinación de un color de borde y dos colores interiores con la profundidad que alcanzó, junto con un mapa de calor de dónde, en el tablero, la búsqueda pasó su tiempo. Las mejores puntuaciones conocidas se concentran en dos conjuntos de patrones distintos. - **El calendario de cuotas.** Ejecutando muchas variaciones aleatorias del arreglo heurístico de 256 entradas y graficando hasta dónde llegó cada una (más verde es mejor), la curva fabricada a mano por Blackwood cae justo en el medio de la región verde. > **[Figure]** interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. ## Lo que el ajuste manual acertó Ese último resultado merece énfasis. Blackwood rellenó su calendario a mano: cinco segmentos lineales, coeficientes estimados a ojo. Cuando un barrido aleatorio exploró el vecindario a su alrededor, la línea ajustada a mano quedó de lleno en la zona de mejor rendimiento. La conclusión de Jef, y la nuestra: los parámetros originales eran casi óptimos. El viejo consejo se sostiene. Antes de rediseñar las heurísticas de un solucionador récord, comprueba si su autor ya encontró el óptimo local a mano. > **Los propios resultados negativos de Blackwood** > > Blackwood llevó a cabo la misma auditoría sobre sí mismo. Después del 469 catalogó sus callejones sin salida en la lista de correo ([groups.io message 10056](https://groups.io/g/eternity2/message/10056)): eliminar cuatro colores temprano en lugar de tres (ninguna ganancia), reservar colores para el tramo final (peor), solucionadores SAT como kissat, cryptominisat y Google OR-tools (pobre), aceleración por GPU, y cachear todos los bloques 2×2 preresueltos (medido, luego descartado). Lo único que alguna vez rindió fue refinar las heurísticas mismas, con otro factor de ~2. Es la misma conclusión que el barrido de Jef, alcanzada desde el otro extremo: el calendario es la magia, no la tecnología en bruto. ## Replicar el estudio Una salvedad sobre el estudio de parámetros, y es del propio Jef: los tamaños de muestra detrás de estos resultados son bajos, y él no está 100% seguro de las conclusiones. Sus notas lo dicen sin rodeos: sería bueno intentar reproducir estos resultados, para validarlos o invalidarlos. Él ofrece sus muestras, y el arnés [wrapper_blackwood](https://github.com/jfbucas/wrapper_blackwood) es público: apunta unas cuantas máquinas al servidor, vuelve a ejecutar los barridos, y publica lo que encuentres en la [lista de correo](https://groups.io/g/eternity2). Una replicación independiente confirmaría o refutaría los hallazgos, y cualquiera de los dos desenlaces sería una contribución real. ## Ejecutarlo aquí El estudio de arriba audita los parámetros de Blackwood; esta última sección audita algo distinto: lo que hace su programa publicado cuando lo construyes tú mismo y lo sometes al puzzle real, en un solo núcleo, en mi máquina. ### De dónde vino el código La fuente es su repositorio público, [github.com/jblackwood345/EternityII_Solver](https://github.com/jblackwood345/EternityII_Solver), bajo la licencia GPL-3.0. Se construye sin modificaciones en .NET 8. No se copia aquí: la licencia y los buenos modales dicen ambos que hay que enlazarlo, no incorporarlo, así que se clonó en un directorio temporal, se ejecutó, y solo se conservaron los números. ### Qué se cambió para ejecutarlo Su programa está escrito para correr sobre el total de núcleos de una máquina y para guardar solo tableros casi completos. Para medirlo en un solo núcleo, y para ver cualquier cosa por debajo de una resolución completa, se hicieron tres modificaciones, cada una invitada por su propio README («cambia el número de núcleos», «cambia la función de guardado»): - **Un solo hilo de búsqueda.** Su constante `number_virtual_cores` vale 64 por defecto. Su `Parallel.For(1, N)` lanza `N-1` workers, así que fijarla en 2 da exactamente un hilo de búsqueda. - **Una línea de progreso.** Sin modificar, en una ejecución acotada solo imprime «Solving...». Una sola línea añadida reporta la colocación más profunda alcanzada, de modo que una ejecución que no termina aún arroja un número. - **Un umbral de guardado más bajo, y la fijación de pistas** para la ejecución restringida de abajo. ### Tal como se publicó: rápido, y apuntando a la única pista que vincula Ejecutado tal como está su código, en un solo núcleo durante 60 segundos, es rápido y llega lejos: - **248 / 256 piezas colocadas**, un tablero que se recalifica a **454 / 480** aristas apareadas. - **~18,9 millones de nodos por segundo** (un nodo es un intento de colocación). Su programa publicado no tiene noción alguna de pistas: trata cada pieza, incluidas las especiales, como ordinaria y maximiza las aristas apareadas en bruto. Esto es menos un compromiso de lo que parece a primera vista, porque un tablero legal de Eternity II tiene exactamente **una** restricción vinculante, la pista central obligatoria (la pieza 139 en su celda central, en su orientación dada); las otras cuatro «pistas» del puzzle eran pistas extra que soltó el creador, no requisitos. Su célebre tablero **470** es la prueba: en el [visualizador](/viewer/) se verifica como pistas respetadas **1 / 5**, siendo la única respetada el centro, y una es todo lo que un tablero legal necesita. Maximizar aristas sin lógica de pistas no es un atajo que rodee el puzzle; es una forma legítima de atacar la única que vincula. Las últimas ocho celdas de ese tablero 454 son un callejón sin salida genuino: ninguna disposición de las ocho piezas sobrantes las completa con aristas perfectas. (Por diversión, entregar ese tablero a [nuestro ALNS](/es/research/build/local-search/local-search-alns/) durante 30 segundos rellenó las ocho y lo empujó a 462 reordenando la región.) ### Con las pistas fijadas: se atasca Fijar las piezas de pista en sus celdas obliga al motor a respetarlas en lugar de colocarlas donde encajen. El mismo código, las cinco pistas oficiales fijadas, 120 segundos, un solo núcleo: - **Colocación más profunda: alrededor de 45 / 256.** Su heurística de orden de recorrido no tiene nada a lo que agarrarse una vez que las piezas especiales quedan fijas a mitad del tablero: se debate cerca de las filas inferiores y nunca sube. Fijar las cinco es más estricto que lo que el puzzle exige en rigor (solo la pista central es obligatoria), pero es la misma restricción a la que se someten los otros motores aquí, y Blackwood aterriza muy por debajo del [438 de la reimplementación de Verhaard](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/) o del [204 de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) bajo la misma restricción. > **Una salvedad justa** > > Esta fijación de pistas es tosca: prohíbe cualquier otra pieza en las cinco celdas de pista y reserva esas piezas. Un rediseño consciente de las pistas buscaría hacia afuera a partir de las pistas en su lugar, y lo haría mejor. Así que 45 es un piso para «su código publicado con las pistas atornilladas encima», no un veredicto sobre el enfoque. Su récord 470 se encontró con este código más una gran cantidad de cómputo y suerte, no en dos minutos. ## Relacionado - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. - [El eii de Verhaard: el solucionador que ganó el único premio](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/eii/) — El motor detrás del 467, la única puntuación de Eternity II jamás premiada, reconstruido a partir de los propios mensajes de Louis Verhaard en la lista de correo: poda prospectiva, órdenes de relleno en peine, deslizamiento de arista condicionado por la profundidad, un calendario de deslizamiento ajustado por cadena de Markov. Y por qué su propio binario Win32, sin código fuente, no puede compilarse ni ejecutarse en esta máquina en absoluto. - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Cómo buscan los solucionadores récord](https://eternity2.dev/es/research/build/solvers/) — Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. --- # El eii de Louis Verhaard > El eii de Louis Verhaard ganó el único premio que el puzzle llegó a pagar, pero se distribuye como un binario de Windows sin código fuente. En qué consiste su método, por qué el original no se ejecuta aquí, y dónde vive una reimplementación fiel del mismo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/louis-verhaard/ - Actualizado: 2026-07-15 --- Esta sección trata sobre el eii de [Louis Verhaard](/es/research/people/louis-verhaard/), el solucionador que encontró el 467 y ganó el único premio del puzzle. A diferencia de McGavin y Blackwood, nunca publicó el código fuente, de modo que su propio programa no puede ejecutarse aquí. Esta página deja constancia de su método y de esa carencia; el motor ejecutable es una [reimplementación](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/), que vive aquí junto al método que reconstruye, atribuida a Raphaël Anjou porque el código es suyo aunque la idea sea de Verhaard. ## Páginas de esta sección - [El eii de Verhaard: el solucionador que ganó el único premio](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/eii/) — El motor detrás del 467, la única puntuación de Eternity II jamás premiada, reconstruido a partir de los propios mensajes de Louis Verhaard en la lista de correo: poda prospectiva, órdenes de relleno en peine, deslizamiento de arista condicionado por la profundidad, un calendario de deslizamiento ajustado por cadena de Markov. Y por qué su propio binario Win32, sin código fuente, no puede compilarse ni ejecutarse en esta máquina en absoluto. - [Reimplementación de Verhaard](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/) — Una reimplementación desde cero del método eii de Louis Verhaard, ya que su propio binario no incluye código fuente y no se ejecuta aquí. Recocido por intercambio de composición de conjunto bajo la métrica de teselado 2×2; en el puzzle real de cinco pistas alcanza 438 de 480, en un solo núcleo. --- # El eii de Verhaard: el solucionador que ganó el único premio > El motor detrás del 467, la única puntuación de Eternity II jamás premiada, reconstruido a partir de los propios mensajes de Louis Verhaard en la lista de correo: poda prospectiva, órdenes de relleno en peine, deslizamiento de arista condicionado por la profundidad, un calendario de deslizamiento ajustado por cadena de Markov. Y por qué su propio binario Win32, sin código fuente, no puede compilarse ni ejecutarse en esta máquina en absoluto. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/louis-verhaard/eii/ - Actualizado: 2026-07-21 - Temas: backtracking, local-search, speed - Fuente: Detalles del solucionador eii de Louis Verhaard (el original, solo Win32) — https://www.shortestpath.se/eii/eii_details.html - Fuente: La publicación: «estoy atascado… mi única esperanza es la fuerza bruta» (groups.io message 5940) — https://groups.io/g/eternity2/message/5940 - Fuente: Decodificador y documentación de los entresijos publicados; el 467 hallado más de 40 veces (groups.io message 6275) — https://groups.io/g/eternity2/message/6275 - Fuente: El método revelado: deslizamiento de arista condicionado por la profundidad, puntuación limpia 247 (groups.io message 7321) — https://groups.io/g/eternity2/message/7321 - Fuente: El banco de pruebas independiente de JSA: un 467 en 82 días con el binario público (groups.io message 6687) — https://groups.io/g/eternity2/message/6687 - Fuente: El hogar duradero del solucionador: shortestpath.se/eii (groups.io message 7439) — https://groups.io/g/eternity2/message/7439 - Fuente: Verhaard sobre su método (groups.io msg 6891) — https://groups.io/g/eternity2/message/6891 --- > **De quién es este trabajo** > > El solucionador, llamado **eii**, y su documentación son obra de **Louis Verhaard**, alojada en su propio sitio ([shortestpath.se/eii](http://www.shortestpath.se/eii/)). La entrada ganadora se presentó a nombre de su esposa, Anna Karlsson; las propias palabras de Verhaard zanjan la cuestión del crédito: «Mi esposa presentó mi mejor solución el año pasado y ganó 10 000 dólares» ([groups.io message 7451](https://groups.io/g/eternity2/message/7451)). Esta página, redactada por [Raphaël Anjou](/es/research/people/raphael-anjou/), reconstruye la máquina a partir de los mensajes de Verhaard en la lista de correo de 2008 a 2010 y del banco de pruebas público de JSA sobre el binario publicado, y deja constancia de por qué el binario original no puede ejecutarse aquí en absoluto. El motor ejecutable es una [reimplementación](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/) aparte, archivada aquí en esta sección junto al método, atribuida a Raphaël porque ese código es suyo, no de Verhaard. El eii de Louis Verhaard es el solucionador detrás del 467/480 que ganó el premio de finalista de 10 000 dólares en la primera fecha de escrutinio, el único dinero que el concurso Eternity II llegó a pagar. Esa misma puntuación se mantuvo luego como récord durante doce años, hasta el 468 de Joshua Blackwood en 2020. Como [el motor de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/), es en el fondo un backtracker en profundidad con heurísticas ajustadas a mano superpuestas. A diferencia del de Blackwood, sus entresijos nunca se publicaron como código; lo que tenemos en su lugar es un testimonio de una calidad poco común: Verhaard documentó él mismo las heurísticas y el orden de búsqueda, discutió el diseño en la lista de correo en primera persona, y distribuyó un binario público que un usuario independiente llevó por banco de pruebas hasta la mismísima puntuación del premio. Esa ausencia de código fuente es la razón por la que, de los tres motores comunitarios estudiados en este laboratorio, el suyo es el que no puede ejecutarse en absoluto; la última sección dice exactamente por qué. ## La trayectoria: atascado más allá de 463, así que publícalo La historia de origen de Verhaard desarma. Su primer programa de puntuación alta solo colocaba piezas que encajaban a la perfección, y se estancaba en torno a 450: cientos de parciales limpios de 248 piezas, sin salida. Solo cuando probó el solucionador de Bob Cousins (originalmente el de Dave Clark), que encontró un 458 en menos de un minuto, comprendió que el concurso puntuaba las *aristas concordantes*, de modo que las colocaciones que encajan a medias también cuentan ([groups.io message 5767](https://groups.io/g/eternity2/message/5767)). Según su propio relato, nunca se había molestado en leer las reglas; Jef Bucas seguía señalando a los lectores esa confesión en la documentación de Verhaard en 2021 ([groups.io message 10582](https://groups.io/g/eternity2/message/10582)). A lo largo del verano de 2008 el techo públicamente visible de la comunidad era 463 ([groups.io message 5688](https://groups.io/g/eternity2/message/5688)), y en un intercambio notable Verhaard y Max confrontaron sus notas, como los únicos dos que se sabía que habían superado lo que llamaban el «límite-del-que-no-se-habla» ([messages 5767–5787](https://groups.io/g/eternity2/message/5767)). Luego, el 22 de septiembre de 2008, a tres meses de la primera fecha de escrutinio, Verhaard publicó el solucionador para que cualquiera lo ejecutara en fingerboys.se: «Esto porque estoy atascado y mi única esperanza de mejorar mi mejor puntuación es mediante la fuerza bruta» ([message 5940](https://groups.io/g/eternity2/message/5940)). Las condiciones reflejaban las de eternity2.net: necesitabas poseer el puzzle real, y cualquier premio se repartiría al 50-50 entre el usuario de mayor puntuación y Verhaard. La comunidad se convirtió en su granja de cómputo. Funcionó. El 6 de enero de 2009 publicó un decodificador para los archivos de salida `.eii` del solucionador, documentó los entresijos (heurísticas y orden de búsqueda), y reveló el número que la granja había alcanzado: 467, hallado más de 40 veces por distintos usuarios ([message 6275](https://groups.io/g/eternity2/message/6275)). Nueve días más tarde salió a la luz el anuncio de Tomy: ninguna solución completa, y un premio de finalista de 10 000 dólares para Anna Karlsson, de Lund, por 467 de 480 ([message 6337](https://groups.io/g/eternity2/message/6337)). A la lista le llevó alrededor de una hora decodificar «Lund + 467». El resto de la historia del concurso corresponde a [la página de historia](/es/research/community/hunt/): el silencio de Tomy, la cobertura de prensa, las secuelas. Lo que sigue aquí es la máquina. ## Poda prospectiva contra umbrales estáticos El bucle base es un backtracker en profundidad sobre un [orden de relleno](/es/research/build/backtracking/fill-order/) fijo, pero que poda por anticipación: las ramas cuya puntuación heurística cae por debajo de un umbral se cortan antes de explorarlas. Verhaard describía sus umbrales como estáticos y ajustados a mano: «basados sobre todo en pura conjetura y solo en una cantidad limitada de teoría o mediciones», lentos de ajustar pero predecibles en ejecuciones largas ([groups.io message 5771](https://groups.io/g/eternity2/message/5771), que se le cita de vuelta en el [message 5772](https://groups.io/g/eternity2/message/5772)). ¿Para qué sirven los umbrales *en realidad*? El diseño sobre el que él y Max convergieron en ese intercambio es la parte interesante: solo puedes influir en la selección de piezas temprano en la búsqueda, pero lo que quieres maximizar es la **pavabilidad de las piezas restantes** en lo profundo del relleno, en torno a las piezas 160 a 200, donde el factor de ramificación se desploma hacia jugadas forzadas. Así que los umbrales tempranos se ajustan, de forma semimanual, para responder: ¿qué puntuación heurística deben alcanzar los parciales tempranos para que los supervivientes lleven un conjunto de piezas sobrantes que aún pave bien? El veredicto de Verhaard sobre la descripción de Max: «Creo que, después de todo, trabajamos de una manera muy parecida» ([message 5780](https://groups.io/g/eternity2/message/5780)). ## El panel de control: dónde culmina la distribución de nodos ¿Cómo sabes que una heurística es fuerte? La medida en la que ambos se detuvieron (propuesta por Max, adoptada por Verhaard) es dónde se sitúa el pico de la distribución de nodos por profundidad. Una búsqueda exhaustiva sin heurística sobre E2 pasa la mayor parte de su tiempo en torno a la profundidad 161, la cifra de referencia de Brendan Owen ([message 6112](https://groups.io/g/eternity2/message/6112)); ambas búsquedas heurísticas habían empujado el pico hasta justo por debajo de 170 ([message 5780](https://groups.io/g/eternity2/message/5780)). Max aportó la interpretación: un pico en 170 equivale aproximadamente a eliminar por completo un color interior del puzzle; una «heurística asesina» que eliminara dos parecía fuera de alcance ([message 5787](https://groups.io/g/eternity2/message/5787)). ## Búsqueda en peine: un orden de relleno para puntuaciones altas Una búsqueda de solución completa quiere un recorrido fila por fila; una búsqueda de puntuación alta vive más adentro del tablero, y quiere una frontera distinta. Cuando Brendan Owen planteó exactamente esa pregunta, Verhaard reveló la forma de su respuesta: los mejores órdenes que había encontrado se asemejan a una **búsqueda en peine** (la mayoría de las filas recorridas horizontalmente, y luego las filas restantes recorridas verticalmente), con la longitud del diente ligada al objetivo: «Cuanto más baja es la puntuación a la que aspiras, más largos se vuelven los dientes del peine» ([groups.io message 6112](https://groups.io/g/eternity2/message/6112)). Max había convergido de forma independiente en casi la misma geometría (doce filas de recorrido en línea, luego recorrido por columnas) y reportaba que sus puntuaciones quedaban alrededor de una arista por debajo de «los resultados que logra el solucionador de Louis» ([message 6126](https://groups.io/g/eternity2/message/6126)). ## Deslizamiento de arista, condicionado por la profundidad La palanca que realmente compró el 467 es una imperfección deliberada. Preguntado directamente al respecto un año más tarde, Verhaard fue preciso: el programa del 467 busca «normalmente», pero a ciertas profundidades permite el **deslizamiento de arista**: colocar una pieza con una arista discordante contra un vecino ya colocado. No construye primero un parcial limpio y luego parchea los huecos; las discordancias están presupuestadas *dentro del descenso*, desbloqueadas a profundidades elegidas. Y la anatomía del resultado es reveladora: la mayoría de los tableros a 467 que examinó tenían una puntuación limpia de apenas 247, con trece aristas deslizadas gastadas allí donde el calendario lo permitía ([groups.io message 7321](https://groups.io/g/eternity2/message/7321)). El 467 tampoco fue casualidad: lo encontró más de 50 veces ([el mismo mensaje](https://groups.io/g/eternity2/message/7321)). La técnica en sí tiene [su propia página](/es/research/build/reduce/edge-slipping/): por qué las discordancias programadas alcanzan tableros que una búsqueda limpia nunca podría, y la teoría del conteo detrás del coste de cada arista concordante adicional. Lo que corresponde aquí es la maquinaria del lado del solucionador: el presupuesto de discordancias por profundidad es un **arreglo de deslizamiento**, una entrada por profundidad, y es un objeto ajustado, no una conjetura. ## El optimizador del arreglo de deslizamiento: una cadena de Markov En enero de 2009, en el hilo donde Owen extendía la [teoría del complejo](/es/research/why/complex-theory/) para cubrir los deslizamientos, Verhaard publicó el esbozo (con fragmentos en Java) del algoritmo que usaba para optimizar el orden de búsqueda y el arreglo de deslizamiento de eii ([groups.io message 6423](https://groups.io/g/eternity2/message/6423)). La entrada es un orden de búsqueda candidato más un arreglo de deslizamiento. Para cada profundidad estima dos números a partir de ejecuciones experimentales (la teoría bastaría para empezar, señalaba): la probabilidad de que una pieza restante tomada al azar encaje a la perfección, y la probabilidad de que encaje con una arista deslizada. A partir de ellos construye una cadena de Markov cuyo estado es *(profundidad, aristas deslizadas hasta ahora)*, con transiciones para una colocación limpia y, allí donde el arreglo de deslizamiento lo permite, para una deslizada. Ejecutar la cadena de principio a fin da la probabilidad de llegar al fondo y el número esperado de nodos: un evaluador en bucle cerrado, barato, para cualquier par (orden, calendario de deslizamiento), memoizado por eficiencia. Él mismo señaló su límite: el modelo simple ignora la paridad de los deslizamientos, de modo que se vuelve poco fiable en puntuaciones objetivo muy altas. El aire de familia con lo que llegó una década más tarde es difícil de pasar por alto: los índices de ruptura de Blackwood son también un presupuesto de discordancias condicionado por la profundidad, y su calendario de cuotas es también una curva precomprometida, por profundidad, ajustada a mano en lugar de optimizada por cadena. El linaje pasa por este solucionador. ## El hermano de puntuación limpia Las mismas heurísticas impulsaban un segundo programa con una jugada de final de partida distinta: en lugar de deslizar una arista, puede *saltarse una casilla*, es decir, dejar una celda vacía y seguir. El nombre es suyo ([message 7321](https://groups.io/g/eternity2/message/7321)). Ese es el cazador de puntuación limpia (sin discordancias). Con él, Verhaard rellenó 14 filas completas más dos piezas, un parcial impecable de 226 piezas y el récord que conocía en aquel momento ([groups.io message 6303](https://groups.io/g/eternity2/message/6303)). En un regreso de un día en diciembre de 2009, tras estimar unos 2000 parciales de 248 por cada 249, obtuvo tres 249 seguidos y se detuvo, situando un 250 alrededor de 4000 veces más difícil ([message 7306](https://groups.io/g/eternity2/message/7306)). Preguntado al respecto una década más tarde, confirmó que el 249 de su sitio es real: alrededor de una semana de cómputo en una sola máquina ([message 9890](https://groups.io/g/eternity2/message/9890)). ## La reproducción pública: 82 días hasta un 467 Como el binario era público, el 467 es el raro récord de la era del concurso con una reproducción independiente y cuantificada. JSA ejecutó eii de forma continua en un solo PC y registró la distribución de puntuaciones a medida que se acumulaba: - **43 días:** 2 008 484 veces 463 · 109 195 veces 464 · 6048 veces 465 · 250 veces 466 · nada más alto ([groups.io message 6571](https://groups.io/g/eternity2/message/6571)) - **62 días:** 427 veces 466, llegando a razón de unos 5 a 6 por día, y todavía ningún 467 ([message 6653](https://groups.io/g/eternity2/message/6653)) - **82 días:** dos 467, junto a 4 017 182 veces 463 · 227 245 veces 464 · 13 637 veces 465 · 625 veces 466 ([message 6687](https://groups.io/g/eternity2/message/6687)) Ese último registro es la medición pública más nítida de la escalera exponencial de rareza cerca de la cima: cuatro millones de 463 por cada par de 467, y un peldaño 466→467 que le llevó a una sola máquina casi tres meses. La despedida de JSA, «Felicidades a Louis por un algoritmo bien pensado», hace también las veces de veredicto de verificación. ## Lo que le enseñó a la comunidad Más allá de la puntuación, eii sentó un precedente: cuando estás atascado, publica el solucionador y deja que las máquinas de la comunidad cacen, con el reparto del premio como contrato. El 467 lo encontraron *usuarios* de un binario publicado, más de 40 veces, antes de ganar nada. Doce años después [Joshua Blackwood repitió el patrón](/es/research/lab/experiments/joshua-blackwood/solver/), publicando un 468 y abriendo el código del motor pocos días después, y obtuvo la misma recompensa: una oleada de récords comunitarios sobre su propio algoritmo. La otra lección es metodológica y recorre toda esta página: Verhaard ajustó su solucionador contra *modelos* en lugar de contra meras intuiciones (el panel de control del pico de nodos, el evaluador por cadena de Markov), en una época en que esa disciplina era rara. ## Dónde vive el código, y por qué no se ejecutará aquí El hogar original, fingerboys.se, era el sitio de su banda; cuando la banda dejó de mantener el sitio, el solucionador desapareció con él durante meses. En enero de 2010 Verhaard lo volvió a publicar, sin cambios, en [shortestpath.se/eii](http://www.shortestpath.se/eii/) ([groups.io message 7439](https://groups.io/g/eternity2/message/7439)); esa dirección sigue siendo su hogar, y la fuente de primera mano detrás de la fila del 467 en [la tabla de récords](/es/research/records/). Una nota operativa de las preguntas y respuestas que siguieron: el solucionador no guarda memoria de posiciones pasadas, de modo que sus miles de tableros a 463–465 no están deduplicados ([message 7451](https://groups.io/g/eternity2/message/7451)). Lo que «el código vive ahí» oculta es que ningún *código fuente* vive en ninguna parte. Lo que Verhaard distribuyó es `eii-1.0-win32.zip`: un `eii.exe` de Windows, un léeme, y algunos archivos `.bat`. Hay **cero archivos fuente**, y es solo Win32. No se ejecuta en Apple silicon, y no hay en esta máquina ninguna capa de Windows ni de emulación bajo la cual ejecutarlo. Su artefacto es, aquí, inejecutable, y no hay nada suyo que recuperar y compilar. Los órdenes de relleno en peine y el calendario de deslizamiento condicionado por la profundidad descritos más arriba se convirtieron en canon comunitario precisamente porque se recuperaron de sus mensajes y, cuando eran numéricos, byte a byte de las cadenas dentro de `eii.exe`, ya que ese binario es el único registro superviviente de ellos. Así que «ejecutar a Verhaard» siquiera significa reconstruir su método a partir de esa documentación. Eso es lo que hace la [reimplementación de Verhaard](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/), y en el puzzle real de cinco pistas alcanza 438 de 480, en un solo núcleo. Ese motor está archivado aquí junto a esta página, atribuido a Raphaël, porque es una lectura del método de Verhaard reescrita como código de Raphaël. Nombrar esa distinción forma parte del hallazgo: de los tres motores comunitarios estudiados aquí, el suyo es el que no puede ejecutarse en absoluto. ## Relacionado - [Reimplementación de Verhaard](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/) — Una reimplementación desde cero del método eii de Louis Verhaard, ya que su propio binario no incluye código fuente y no se ejecuta aquí. Recocido por intercambio de composición de conjunto bajo la métrica de teselado 2×2; en el puzzle real de cinco pistas alcanza 438 de 480, en un solo núcleo. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [El deslizamiento de arista](https://eternity2.dev/es/research/build/reduce/edge-slipping/) — La jugada premiada de Louis Verhaard: dejar que el backtracker coloque una pieza no concordante, pero solo a profundidades escogidas cerca del final del tablero. Cada deslizamiento permitido cuesta un punto de puntuación y multiplica de forma astronómica el número de tableros objetivo. Por eso su 467 se encontró más de cincuenta veces, y el ancestro directo de las rupturas de Blackwood. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Cómo buscan los solucionadores récord](https://eternity2.dev/es/research/build/solvers/) — Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. --- # Reimplementación de Verhaard > Una reimplementación desde cero del método eii de Louis Verhaard, ya que su propio binario no incluye código fuente y no se ejecuta aquí. Recocido por intercambio de composición de conjunto bajo la métrica de teselado 2×2; en el puzzle real de cinco pistas alcanza 438 de 480, en un solo núcleo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/ - Actualizado: 2026-07-21 - Temas: speed, local-search - Reproducir: `just experiments single-core-benchmark` - Fuente: Motor ejecutable + resultados versionados + scripts (directorio de referencia de este experimento) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark - Fuente: Detalles del solucionador eii de Louis Verhaard (el original, solo Win32) — https://www.shortestpath.se/eii/eii_details.html --- > **De quién es este trabajo** > > El **método** es [de Louis Verhaard](/es/research/lab/experiments/louis-verhaard/eii/). El **código** que aquí se presenta es una reimplementación desde cero de [Raphaël Anjou](/es/research/people/raphael-anjou/). Está archivado aquí, en la sección de Verhaard, junto al método que reconstruye, como una reconstrucción: una lectura de su método, no su programa. La firma sigue siendo la de Raphaël, porque el código es suyo; la sección es la de Verhaard, porque la idea lo es. El eii original de Verhaard es un binario de Windows sin código fuente que [no se ejecuta aquí](/es/research/lab/experiments/louis-verhaard/eii/). La única manera de ejecutar su enfoque es reconstruirlo, y esto es precisamente esa reconstrucción: el mismo motor que aparece como `verhaard` en la [grilla](/es/research/lab/experiments/single-core-benchmark/). ## Qué reimplementa El método documentado de Verhaard: el **recocido por intercambio de composición de conjunto** bajo la métrica de teselado 2×2. Se elige un subconjunto interior de unas 180 piezas, se recuece su composición mediante intercambios hasta maximizar localmente el número de subteselados 2×2 alcanzables, se colocan primero las piezas más problemáticas y luego se busca el resto bajo ese armazón. Las constantes numéricas del motor se recuperaron bit a bit a partir de las cadenas contenidas en `eii.exe`, ya que ese binario es el único registro que se conserva de ellas. Decir que se "ejecuta Verhaard" es un atajo que conviene reconocer: es una lectura de su método, no de su código. Que esta sea la única manera de ejecutar su enfoque forma parte del hallazgo. ## Qué logra en el puzzle real de cinco pistas En un solo núcleo, 120 segundos, con las cinco pistas oficiales fijadas: - **438 / 480** aristas emparejadas, un tablero **completamente colocado** (256 de 256 piezas). - Las cinco pistas respetadas (una solución estricta de pistas), 42 aristas rotas, a unos 40 millones de nodos por segundo. La ejecución y el tablero resultante están versionados en el [directorio de referencia](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark) del motor, y `just experiments single-core-benchmark` la vuelve a ejecutar, de modo que el 438 es verificable en lugar de afirmado. Se trata de la instancia de cinco pistas, un puzzle más difícil que las variantes con esquinas fijadas que puntúa la [clasificación](/es/research/lab/experiments/single-core-benchmark/), donde el mismo motor alcanza un mejor resultado de 451. Encontró 438 en unos doce segundos y luego se estancó durante el resto del presupuesto: un auténtico óptimo local para esa semilla y ese tiempo. Es la única de las tres reimplementaciones comunitarias presentes aquí que resuelve bien el puzzle real de cinco pistas, en lugar de una versión más fácil, pero las tres no miden lo mismo, así que la comparación exige cautela. [Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) se mide sobre la misma base, aristas emparejadas con las pistas fijadas, y se atasca cerca de 45. [McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) no: su cifra es una *profundidad* de colocación (unas 204 de 256 piezas alcanzadas), no una puntuación de aristas emparejadas, de modo que no puede leerse en el mismo eje que el 438 de aquí, y los dos números no son directamente comparables. Lo que las tres comparten es solo el veredicto de que el puzzle restringido es mucho más difícil que el no restringido; los números que sustentan ese veredicto están en escalas diferentes. ## Relacionado - [El eii de Verhaard: el solucionador que ganó el único premio](https://eternity2.dev/es/research/lab/experiments/louis-verhaard/eii/) — El motor detrás del 467, la única puntuación de Eternity II jamás premiada, reconstruido a partir de los propios mensajes de Louis Verhaard en la lista de correo: poda prospectiva, órdenes de relleno en peine, deslizamiento de arista condicionado por la profundidad, un calendario de deslizamiento ajustado por cadena de Markov. Y por qué su propio binario Win32, sin código fuente, no puede compilarse ni ejecutarse en esta máquina en absoluto. - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # Cómo publica el laboratorio > El estándar editorial de este cuaderno abierto: cómo una investigación sobre Eternity II pasa de ser un trabajo no publicado a una página publicada. De qué tipo de contribución se trata, si se publica, en qué nivel y dónde reside. Un estándar común, concebido para escalar a muchos autores. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/methodology/ - Actualizado: 2026-07-21 --- Esta página es el estándar editorial que sustenta todo lo que contiene el laboratorio. Existe para que un hallazgo llegue al lector como un objeto redactado, y no como una nota en bruto, y para que las mismas reglas se apliquen sin importar quién lo escriba. ## Lo que se publica, y lo que no La regla de base sobre la que todo se apoya: - **El trabajo no publicado no aparece aquí.** El lugar donde un investigador conserva su trabajo en curso solo le concierne a él. Sencillamente no figura en este repositorio. No hay ningún borrador a medias en el cuaderno publicado. - **El trabajo publicado reside en el laboratorio.** Público, decantado, escrito para un lector. Llegó hasta aquí tras una revisión. La publicación se realiza mediante pull request. Un investigador abre una PR que añade o promueve una página, y es en la revisión de esa PR donde se decide la publicación, y en qué nivel. Nada entra en el registro público sin una PR, y es en la PR donde un segundo lector la coteja con el estándar descrito más abajo. Esto mantiene la revisión como algo colegiado en lugar de una barrera pesada, y escala a muchos autores. ## Tres ejes describen cada página Mantenerlos separados es todo el método. Es fácil difuminar «pulido», «reproducible» y «revisado» en una noción vaga de «terminado». No son lo mismo. 1. **Contribución:** ¿de qué tipo de resultado se trata? 2. **Nivel:** ¿hasta dónde ha llegado la revisión? 3. **Rigor y reproducibilidad:** ¿con qué firmeza se sustenta la afirmación? Más la atribución: quién hizo qué. ## Eje 1: la contribución No todo resultado es un solucionador, y el cuaderno dejó de fingir lo contrario. Una página declara su contribución: - **solucionador:** produce un tablero competitivo mediante búsqueda. Su puntuación es un verdadero resultado de búsqueda. Solo estos ganan una fila en la clasificación. - **análisis:** demuestra o calcula una propiedad de un tablero existente o de la instancia. No produce un tablero nuevo. - **reconstrucción:** decodifica o reconstruye el trabajo conocido de la comunidad para extraer una idea. El número es de ellos, decodificado. - **teoría:** una propiedad matemática, una ley o una prueba de imposibilidad. - **método:** una técnica descrita para su reutilización, no una ejecución con puntuación. - **medición:** un benchmark o una observación empírica sobre solucionadores o instancias. - **negativo:** un callejón sin salida explorado con rigor. De pleno derecho, no una nota al pie. - **herramienta** y **exposición:** un artefacto de software, o una explicación. La distinción que carga el peso opone el solucionador a todo lo demás. Un solucionador de bandas por encuentro en el medio (meet-in-the-middle) que prueba que un final de partida es óptimo es un análisis, no un solucionador, y no tiene cabida en un gráfico de puntuaciones aunque emita un número. Ajustar bien este eje es lo que hace que la clasificación signifique una sola cosa. Este eje es además una superficie de navegación: el [índice por contribución](/es/research/lab/experiments/by-contribution/) reúne las páginas según la etiqueta que declaran, de modo que los análisis, la teoría, las mediciones, y los [callejones sin salida guardados como resultados negativos de pleno derecho](/es/research/lab/experiments/by-contribution/negative/) tienen cada uno su propio estante. ## Eje 2: el nivel Una vez publicada, una página lleva un nivel que indica con qué firmeza ha sido revisada: - **Informe técnico:** público, pero la revisión solo confirmó que es sólido y está presentado con honestidad, no que haya sido verificado de forma independiente. La página lleva una insignia de «informe técnico», del mismo modo que un preprint se estampa como «aún no revisado». Un estado de reposo legítimo: no todo necesita ir más lejos. - **Hallazgo revisado:** un segundo lector, o el mismo autor tras un periodo de decantación, confirmó que se sostiene. Citado, tratado como casi inmutable; las correcciones se hacen sobre el terreno, anotadas. Dos principios se trasladan de cómo funciona la publicación científica en otros ámbitos. El nivel está estampado en la página, de modo que el lector siempre sabe qué tiene ante sí. Y la promoción se juega sobre el rigor, no sobre el resultado: un método sólido que no encontró nada se publica como resultado negativo, mientras que un resultado llamativo obtenido con un método poco sólido no se publica. ## Eje 3: rigor y reproducibilidad Cada página indica con qué firmeza está establecida su afirmación central (probada, medida o conjeturada) y hasta qué punto es reejecutable. Para todo lo cuantitativo el criterio es simple: un número solo se publica cuando su configuración exacta y su semilla están archivadas y puede reejecutarse a partir de la documentación. Una puntuación de benchmark sin configuración reejecutable no se publica. Las contribuciones más baratas llevan un listón más ligero: un resultado negativo o una explicación necesita un razonamiento sólido y límites claramente enunciados, no un script de reproducción. ## La atribución, concebida para más autores Las páginas de cada investigador se agrupan automáticamente en su página de colaborador, derivadas de la firma, nunca listadas a mano. Añadir un autor consiste en añadir una entrada al registro y escribir páginas a su nombre. Cuando una página tiene más de una mano, un rol de colaborador ligero (quién la ejecutó, quién la analizó, quién la validó, quién la redactó) registra el reparto, para que el crédito se mantenga justo a medida que el laboratorio crece. ## La decisión, en resumen Cuando un trabajo está terminado: 1. **Nombrar la contribución.** Solucionador, análisis, reconstrucción, teoría, método, medición, negativo, herramienta o exposición. 2. **Decidir si se publica.** Se publica sobre el rigor, no sobre el entusiasmo. Un callejón sin salida sólido se publica. Un número sin configuración reejecutable espera. 3. **Abrir una PR en un nivel.** Informe técnico si está redactado pero aún no verificado de forma independiente; hallazgo revisado una vez que un segundo lector lo avala. 4. **Situarlo.** Los solucionadores y sus afines bajo los experimentos; los resultados estructurales bajo por qué es difícil; las técnicas bajo construir un solucionador; las mediciones entre solucionadores con los benchmarks. 5. **Llevarlo al gráfico solo si es un solucionador.** Ese es todo el estándar. Es deliberadamente ligero, porque el propósito es elevar el suelo de cada página sin frenar el cuaderno. ## Relacionado - [El laboratorio](https://eternity2.dev/es/research/lab/) — El cuaderno abierto del wiki: hallazgos estructurales y experimentos de búsqueda con nombre propio, cada uno atribuido al investigador que lo llevó a cabo y reproducible desde el código fuente. Un rincón de la investigación más amplia de la comunidad. - [Experimentos](https://eternity2.dev/es/research/lab/experiments/) — Los experimentos de búsqueda con nombre del laboratorio, una sección por investigador. Cada uno es un run real contra Eternity II con su idea, su mejor tablero y las preguntas que dejó abiertas. El cuaderno de Raphaël Anjou está aquí completo; el cuaderno queda abierto a cualquier otra persona. - [Contribuye con tus investigaciones](https://eternity2.dev/es/research/contribute/) — Este wiki es el hogar de investigación de la comunidad, y hay sitio en él para tu trabajo. Tres formas de publicarlo, desde un mensaje en la lista de correo hasta una pull request, más el pequeño conjunto de reglas de la casa que mantiene cada página digna de confianza. --- # El motor de Peter McGavin > El backtracker en C que el propio Peter McGavin escribió, el solucionador en bruto más rápido que la comunidad ha medido. Obtenido de la lista de correo, compilado en un M1 y ejecutado sobre el verdadero Eternity II. Su código, su algoritmo; ejecutado y documentado aquí. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/ - Actualizado: 2026-07-15 --- Esta sección es el propio solucionador de [Peter McGavin](/es/research/people/peter-mcgavin/): el backtracker en C que publicó en la lista de correo y que, según las mediciones de la comunidad, es el motor en bruto más rápido que nadie haya ejecutado. El algoritmo y el código son suyos. Lo que se añade aquí es la ejecución: obtenido desde las fuentes, compilado en una sola máquina y apuntado al puzzle real, con las cifras documentadas. ## Páginas de esta sección - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. --- # El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí > El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/ - Actualizado: 2026-07-21 - Temas: speed, backtracking - Reproducir: `fetch genbody71.zip from groups.io msg 11749; gcc -Ofast -DG then without -DG` - Fuente: El genbody71.zip de Peter McGavin (groups.io msg 11749, la fuente original) — https://groups.io/g/eternity2/message/11749 - Fuente: La receta de optimización de Mike Field: «Brute force does not work» (groups.io message 3098, 2007) — https://groups.io/g/eternity2/message/3098 - Fuente: McGavin reencuentra el hilo de Field: «I found the old thread» (groups.io message 11338) — https://groups.io/g/eternity2/message/11338 - Fuente: El método 10×10 y las estadísticas: 180 años-núcleo (groups.io message 9688) — https://groups.io/g/eternity2/message/9688 - Fuente: El anuncio del 469: unos días en un par de centenares de núcleos (groups.io message 10045) — https://groups.io/g/eternity2/message/10045 - Fuente: Tabla de rendimiento multinúcleo, del Raspberry Pi al doble Xeon (groups.io message 11369) — https://groups.io/g/eternity2/message/11369 - Fuente: Velocidades de un solo núcleo en nueve combinaciones CPU/compilador (groups.io message 11643) — https://groups.io/g/eternity2/message/11643 - Fuente: El truco del contador y el manual del compilador (groups.io message 11751) — https://groups.io/g/eternity2/message/11751 - Fuente: 295M colocaciones/s medidas en el código de McGavin (groups.io message 11750) — https://groups.io/g/eternity2/message/11750 --- > **De quién es este trabajo** > > El algoritmo y el C son el motor autogenerado de **Peter McGavin** en persona, publicado en la lista de correo. Según su propio testimonio, se apoya en una receta de optimización que Mike Field publicó en 2007 ([message 3098](https://groups.io/g/eternity2/message/3098)), una deuda que reconoció en dos ocasiones ([message 11338](https://groups.io/g/eternity2/message/11338), [message 11780](https://groups.io/g/eternity2/message/11780)). Un récord queda deliberadamente excluido de esa estirpe: su 469 salió de ejecutar el [solucionador de Joshua Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/), no el suyo ([message 10045](https://groups.io/g/eternity2/message/10045)). Esta página es [Raphaël Anjou](/es/research/people/raphael-anjou/) compilando y ejecutando el código de McGavin en una sola máquina y documentando lo que hizo; los únicos cambios a su fuente son los dos pequeños que se describen más abajo. Desde finales de 2010 hasta hoy, Peter McGavin ha sido la mesa de teoría de la lista de correo y su cronómetro. Es quien maquetó la [teoría compleja](/es/research/why/complex-theory/) de Brendan Owen en un artículo LaTeX ([message 9188](https://groups.io/g/eternity2/message/9188)), la reimplementó como referencia en C en 2024 ([message 11197](https://groups.io/g/eternity2/message/11197)), resolvió el [benchmark](/es/research/build/benchmarks/) abierto más difícil de la comunidad y estableció el récord de 469 que se mantuvo hasta el 470 de Blackwood. Pero bajo todo eso corre un proyecto más discreto, de veinte años: un simple backtracker de recorrido por filas en C, afinado hasta contar colocaciones de piezas por cientos de millones por segundo. Esta página recorre ese proyecto a través de sus propios números publicados (de dónde vino la velocidad, qué reportó y qué dijo él mismo que nunca podría lograr), luego lo compila aquí y lo apunta al puzzle real. ## La receta es de 2007, y él lo dice En octubre de 2007, respondiendo a la pregunta «¿dónde has oído hablar de 70 millones de piezas por segundo?», Mike Field publicó un manual completo de optimización bajo el punzante título «Brute force does not work» ([message 3098](https://groups.io/g/eternity2/message/3098)). Sus ingredientes: una tabla de búsqueda indexada por los colores norte y oeste de una celda, de modo que encontrar las piezas candidatas es un único acceso a memoria; un orden de búsqueda **fijo** explotado sin piedad (colocar una pieza solo actualiza a sus vecinas sur y este); ningún bucle en absoluto, sino código monolítico *generado* de forma procedimental, un bloque en línea recta por celda; estado mínimo (reconstruir la bonita salida después, no almacenarla en la ruta crítica); los lados de una pieza empaquetados en un solo entero; y la lectura del ensamblador generado a la caza de vaciados de pipeline y fallos de caché L1. El código de Field se compilaba en unas 33 instrucciones por celda y corría a 60-80 millones de colocaciones por segundo y por núcleo en un ordenador de escritorio de 2007, con picos cercanos a los 100 millones cuando el conjunto de trabajo se mantenía en la caché L1. Ese mensaje es el genoma del motor de McGavin. Cuando mostró un fragmento de su «horrible código fuente autogenerado» en 2024, se reconocía el mismo organismo: un bloque etiquetado por celda (`cell_9_2_next:`), una tabla `LookupNW` indexada por los colores norte y oeste, un arreglo `tileFree`, indicaciones `register` y un `goto` de vuelta al bloque de la celda anterior al agotarse ([message 11337](https://groups.io/g/eternity2/message/11337)). Se puso a buscar el origen minutos después y publicó el enlace: «I found the old thread» ([message 11338](https://groups.io/g/eternity2/message/11338)); en 2026 repitió la atribución: su código C de backtracker optimizado «is based on» el mensaje de Mike de 2007 ([message 11780](https://groups.io/g/eternity2/message/11780)). El propio Field aporta la referencia de la época. En 2011 reportó su propio backtracker a 75 millones de piezas colocadas por segundo y por núcleo en un AMD a 2 GHz, unos 26 ciclos de reloj por pieza, con más de la mitad del tiempo detenido en espera de acceso a memoria ([message 9003](https://groups.io/g/eternity2/message/9003)). Ese número, grosso modo 40 a 80 millones por núcleo, es lo que un motor comunitario serio dio durante la década siguiente, incluido el de McGavin. ## Lo que él añadió, en sus propias palabras La receta era pública; la capitalización fue de McGavin. Los refinamientos que ha descrito en la lista, más o menos en el orden en que van apareciendo: - **Un generador de código, no un programa.** El C por celda se regenera para cada puzzle, conjunto de pistas y [ruta de colocación](/es/research/build/backtracking/fill-order/). Su flujo de trabajo de 2026 es un ciclo de compilar/ejecutar/compilar/ejecutar: la primera pasada reconstruye `body.c`, el código de celda en línea recta, y la segunda compila el solucionador que lo incorpora. Sáltese un paso tras cambiar un archivo de entrada y el programa «won't be doing anything sensible» ([message 11751](https://groups.io/g/eternity2/message/11751), [message 11782](https://groups.io/g/eternity2/message/11782)). En enero de 2026 publicó el conjunto en la lista con el nombre `genbody71.zip`: 1455 líneas de `genbody.c` más un README, compilado con `-DG` para emitir `body.c` y de nuevo sin él para construir el solucionador que lo incluye. Su propia advertencia encabeza el README: «This is experimental development code that evolved over several years --- not nice, elegant code at all» ([message 11749](https://groups.io/g/eternity2/message/11749)). - **Un contador que casi no cuesta nada.** `ntpll` («number of tile placements per second long long», según su propia glosa) no se incrementa directamente. Un registro de 16 bits se aumenta en cada colocación, y se suma `0x10000` al contador de 64 bits cada vez que desborda: un vestigio de las máquinas de 32 bits, donde un incremento de 64 bits desperdiciaba registros o tocaba RAM lenta. Cronometró ambos enfoques hace años; el truco ganó. En las primeras máquinas de 64 bits era incluso más rápido instalar las bibliotecas de compatibilidad de 32 bits y compilar con `gcc -m32` ([message 11751](https://groups.io/g/eternity2/message/11751)). - **Arqueología del compilador.** Compilar con clang en lugar de gcc dio «a significant speed boost» ([message 11330](https://groups.io/g/eternity2/message/11330)); en ARM, clang-15 le gana a clang-19 y a gcc; añada `-march=native` y `-mtune=native`; pruebe icc e icx; use optimización guiada por perfil ([message 11751](https://groups.io/g/eternity2/message/11751)). Nada de esto cambia la búsqueda. Cambia cuántas búsquedas compra un euro de electricidad. - **La ruta de colocación como una decisión medida.** El recorrido por filas es el mejor para E2, pero la espiral hacia dentro gana en los puzzles de pistas 1 y 3, el borde primero en los 2 y 4, y la espiral hacia fuera en las variantes sin marco; él lo comprueba ejecutando el solucionador o consultando la teoría compleja, tras descubrirse «poor at judging solving orders» a ojo ([message 9703](https://groups.io/g/eternity2/message/9703), [message 9713](https://groups.io/g/eternity2/message/9713)). ## Los números, de 2007 a 2026 Cada cifra de abajo proviene del archivo, en las propias unidades de su autor. | Cuándo | Cifra | Contexto | Fuente | | --- | --- | --- | --- | | 2007-10 | 60–80M colocaciones/s/núcleo, ~100M pico | Receta de Mike Field, AMD X2 3800+ | [3098](https://groups.io/g/eternity2/message/3098) | | 2011-02 | ~38M colocaciones/s/núcleo (2300 × 10⁶/min) | McGavin contando esquinas 5x5 del 10x10 de Brendan, 4 núcleos; 8672 es su propia corrección de las unidades (colocaciones, no soluciones) | [8672](https://groups.io/g/eternity2/message/8672) | | 2011-06 | ~50M nodos/s, un solo núcleo | AMD Phenom II, recorrido por filas, 8x8 de Brendan | [8863](https://groups.io/g/eternity2/message/8863) | | 2011-11 | 75M/s/núcleo (~26 ciclos/pieza) | Referencia de Field, AMD a 2 GHz, detenido en memoria | [9003](https://groups.io/g/eternity2/message/9003) | | 2013-06 | 44.6M nodos/s sostenidos | una prueba de primera fila 10x10 de 683 mil millones de nodos | [9167](https://groups.io/g/eternity2/message/9167) | | 2014-04 | 67M colocaciones/s, un solo núcleo | Benchmark de Arnaud Carré: las 4 soluciones en menos de un minuto | [9263](https://groups.io/g/eternity2/message/9263) | | 2024-10 | 60–140M colocaciones/s por backtracker | «depending on CPU type» | [11329](https://groups.io/g/eternity2/message/11329) | | 2024-11 | 99M → 10,160M nodos/s por máquina | Raspberry Pi 4 (4 procesos) a doble Xeon Gold 6338 (128) | [11369](https://groups.io/g/eternity2/message/11369) | | 2025-09 | 38–84M colocaciones/s, un solo núcleo | nueve combinaciones OS/compilador/CPU en el 8x8 de Brendan | [11643](https://groups.io/g/eternity2/message/11643) | | 2026-01 | ~225M colocaciones/s, un solo núcleo | Orange Pi 6 Plus en puzzles pequeños; «halves on 16x16» | [11751](https://groups.io/g/eternity2/message/11751) | | 2026-01 | 295M colocaciones/s, un solo núcleo | Joe ejecutando el código de McGavin en una CPU más reciente, frente a su propio C# a 27–37M | [11750](https://groups.io/g/eternity2/message/11750) | | 2026-02 | 44.0M frente a 105.1M piezas/s | árbol idéntico de 2.12 billones de nodos: Phenom II de 2010 frente a Ryzen 5 5600H | [11782](https://groups.io/g/eternity2/message/11782) | Dos lecturas de esa tabla. Primero, el titular: la cifra de ~295M/s (la que cita nuestra [página de récords](/es/research/records/)) es real, pero es la medición de Joe, hecha en enero de 2026 cuando McGavin compartió su fuente y Joe la ejecutó en hardware más reciente que cualquier cosa que McGavin posea; el propio solucionador C# de Joe alcanzaba 27–37M/s en la misma máquina, y la mejor velocidad que había visto mencionada en la lista era 70–90M/s ([message 11750](https://groups.io/g/eternity2/message/11750)). La mejor cifra del propio McGavin son los ~225M/s del Orange Pi en puzzles pequeños ([message 11751](https://groups.io/g/eternity2/message/11751)). Segundo, la lectura más discreta y más instructiva: la velocidad de un solo núcleo apenas se movió durante quince años. McGavin lo dijo él mismo al publicar la tabla de 2025: las velocidades en las CPU más recientes «are only a little faster» que en su Phenom II de 2010 ([message 11643](https://groups.io/g/eternity2/message/11643)). El motor ya estaba cerca del muro de memoria que Field describió en 2011. Lo que realmente creció fue el número de núcleos que podía apuntar a un problema. ## Cientos de núcleos con un presupuesto de aficionado El capítulo de McGavin en la [historia de la resolución distribuida](/es/research/build/faster/distributed-solving/) de la comunidad es de un encanto doméstico. Para la campaña 10×10 empezó con una veintena de núcleos en casa, luego añadió tres Odroid XU4 de ocho núcleos y veinticinco Orange Pi Lite de cuatro núcleos a 12 dólares cada uno (más de 130 núcleos, cada núcleo ARM valiendo alrededor de un tercio de la velocidad de un núcleo de PC) y, cuando se le permitía, servidores multinúcleo en el trabajo, para un total de más de 400 ([message 9688](https://groups.io/g/eternity2/message/9688)). Los Orange Pi funcionaban con cargadores USB de 12 puertos (mató definitivamente un cargador al enchufar doce placas ejecutando 48 backtrackers, y bajó a ocho por cargador) con red WiFi: un solo cable por placa, para la alimentación ([message 9690](https://groups.io/g/eternity2/message/9690)). La orquestación son dos scripts de shell: uno arranca tantos backtrackers como núcleos tenga un nodo, el otro lo lanza en ~20 nodos por ssh, cada uno con 16 a 48 núcleos, aunque «well, they are hyperthreads, strictly speaking» ([message 9753](https://groups.io/g/eternity2/message/9753)). En el pico, «more than 400 backtrackers running at once» ([message 9751](https://groups.io/g/eternity2/message/9751)). ## Lo que la velocidad reportó **Los recuentos verificados, primero.** Las enumeraciones completas rápidas son lo que le permite a la comunidad confrontar la teoría con la realidad. En 2011, una ejecución nocturna contó 4,739,821,621,743 bloques de esquina 5×5 del 10×10 de Brendan, frente a una estimación de la teoría compleja de 5.0077 × 10¹², «pretty close… if I do say so myself» ([message 8672](https://groups.io/g/eternity2/message/8672)). En 2014 su único núcleo barrió el árbol del benchmark de 256 piezas de Arnaud Carré (3,979,209,754 colocaciones, las 4 soluciones) en menos de un minuto ([message 9263](https://groups.io/g/eternity2/message/9263)). En 2026, dos máquinas distintas recorrieron el mismo árbol de 2,120,424,701,160 nodos de un puzzle parecido a E2 y encontraron la misma única solución: el determinismo como característica, el recuento de nodos como suma de verificación ([message 11782](https://groups.io/g/eternity2/message/11782)). **El 10×10, por encima de todo.** El 10×10 set_1 de Brendan, un benchmark que llevaba una década abierto, cayó en septiembre de 2017 bajo exactamente esta maquinaria: enumerar ~20 millones de primeras filas candidatas, clasificarlas por las soluciones por nodo de búsqueda de la teoría compleja, y dejar que la granja las pruebe una por una, alrededor de un día-núcleo cada una. La solución llegó en la prueba de fila ~92,907 de una prevista de una entre 70,000, tras casi 2 × 10¹⁷ nodos, unos **180 años-núcleo**, menos del 0.5 % del árbol entero ([message 9686](https://groups.io/g/eternity2/message/9686), [message 9688](https://groups.io/g/eternity2/message/9688)), repartidos a lo largo de unos cuatro años ([message 9804](https://groups.io/g/eternity2/message/9804)). Su resumen: «no new methods, just systematic persistence and the law of large numbers.» La [página de benchmarks](/es/research/build/benchmarks/) cuenta esa historia como la validación más fuerte de la teoría compleja; aquí se yergue como el punto culminante de la historia del rendimiento. **Y un récord, en el motor de otro.** En septiembre de 2020, días después de que Joshua Blackwood liberara el código de su solucionador, McGavin lo ejecutó «for a few days on about a couple of hundred cores and hit the jackpot. New record score of 469!» ([message 10045](https://groups.io/g/eternity2/message/10045)), con estadísticas de ejecución acordes (2832 tableros alcanzando 252 piezas, uno con 255, uno con 256: [message 10049](https://groups.io/g/eternity2/message/10049)). Note lo que se combinó allí: las [heurísticas de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) aportaron la forma de la búsqueda; la granja de McGavin aportó las colocaciones. Su propio motor en C no ostenta ningún récord de puntuación de E2; sus 226 en recorrido por filas de febrero de 2020 igualaron la vieja marca de colocaciones consecutivas de [Verhaard](/es/research/lab/experiments/louis-verhaard/eii/), nada más ([message 10523](https://groups.io/g/eternity2/message/10523)). ## Lo que la velocidad no pudo comprar McGavin es también el testigo más consistente del archivo *en contra* de la velocidad bruta. Sus propios números arman el caso. Con el orden de recorrido por filas, la teoría compleja sitúa el árbol de búsqueda completo de E2 en unas 1.6 × 10⁴⁷ colocaciones ([message 9710](https://groups.io/g/eternity2/message/9710)), unas 9.3 × 10⁴² por solución esperada ([message 9713](https://groups.io/g/eternity2/message/9713)). Incluso en su mejor ruta de colocación de 5 pistas (un árbol mucho más pequeño, unos 3.1 × 10⁴⁰ nodos) calculó 4.9 × 10³² años a 100 millones de nodos por segundo, y añadir miles de millones de núcleos sigue dejándote «orders of magnitude longer than the age of the Universe» ([message 11201](https://groups.io/g/eternity2/message/11201)). Había sacado la conclusión mucho antes, en 2013: «It seems clear to me that E2 will not be solved by brute force. If it is to be solved at all, it will be by deep analysis and/or clever insight, in my opinion» ([message 9117](https://groups.io/g/eternity2/message/9117)). Por eso la mayor aceleración aislada que jamás reportó no fue en absoluto una aceleración. Para las cacerías de sub-soluciones sin marco, usó la teoría compleja como una anticipación al estilo del ajedrez: estimar las soluciones por nodo en cada hoja 13 o 14 jugadas por delante, cachear las estadísticas repetidas y dirigirse hacia la mejor rama. Ganancia global: un factor de alrededor de 25 a la profundidad 81 ([message 9751](https://groups.io/g/eternity2/message/9751)). Ninguna opción de compilador le dio jamás 25×. Dar forma al árbol le ganó a reducir los nanosegundos. Esa es la [lección central](/es/research/why/prune-vs-speed/) de este sitio, reportada aquí como el experimento de veinte años de un profesional: construyó el motor más rápido de la historia de la comunidad, lo midió todo y concluyó que la brecha hasta 480 nunca se jugó en el reloj. ## Ejecutándolo aquí Todo lo anterior está sacado del archivo. El resto de esta página es ese mismo motor, compilado en mi máquina y apuntado al puzzle real, para que la historia del rendimiento lleve una medición de primera mano y no solo una retransmitida. ### De dónde vino el código La fuente es `genbody.c`, adjunta como `genbody71.zip` al [message 11749 de groups.io](https://groups.io/g/eternity2/message/11749). Son 1455 líneas de C, con un README, un archivo de piezas y un archivo de pistas. No está copiada en este repositorio: se queda en la lista, donde su autor la puso. Es un programa de dos pasadas, y el README es franco sobre el estilo («dreadful C source code ... it really needs a lot of work to clean it up»). Compilado con `-DG`, genera un segundo archivo C, `body.c`, especializado para un puzzle. Recompilado sin `-DG`, incluye ese archivo generado y ejecuta la búsqueda. Ese flujo de dos pasadas es exactamente el diseño de generador de código descrito más arriba, ahora frente a mí. ### Qué se cambió para ejecutarlo Dos cosas, ambas pequeñas: - **Nada, para compilarlo.** Compila limpio en silicio de Apple con `clang` (una advertencia de variable sin usar). El display de estado POSIX que usa, `setitimer` y `termios`, funciona en macOS sin ningún adaptador. - **El puzzle que lee.** Los nombres de archivo estaban codificados en duro hacia el puzzle de prueba de Joe. Hice que se leyeran desde la línea de comandos para poder alimentarlo con el Eternity II real, y escribí las piezas y pistas oficiales en su formato `.puz` / `.hnt` a partir del archivo canónico del puzzle. Su ruta de búsqueda se construye de forma genérica (celdas de pista primero, luego un recorrido por filas), así que no hizo falta ningún otro cambio. ### Qué hace en el puzzle de Joe Configurado tal como se entrega, en el puzzle de prueba 16×16 de 18 pistas de Joe, es muy rápido y termina: - **~279 millones de colocaciones de piezas por segundo**, un solo núcleo. - Resuelve el puzzle hasta el final en unos 13 segundos (3.577 mil millones de colocaciones hasta la primera solución), de forma idéntica en cada ejecución. Ese es el número que la comunidad quiere decir con «McGavin es rápido». Es real, y es en hardware actual, no en una máquina de siete años: justo en línea con los ~295M/s que midió Joe, y cómodamente por encima de los ~225M/s del propio Orange Pi de McGavin. ### Qué hace en el Eternity II real Alimentado con el puzzle real de 256 piezas, una vez solo con la pista central obligatoria y otra vez con las cinco pistas oficiales: su solucionador solo guarda un tablero cuando encuentra una solución **completa**, y el puzzle real nunca ha sido resuelto, así que no guarda nada y corre sin detenerse. Lo que sí reporta, en vivo, es lo más profundo que ha llegado a colocar: | Puzzle | Colocación más profunda, 30 s | Ritmo | Soluciones | | --- | --- | --- | --- | | E2 real, 1 pista | **205 / 256** | ~108 M colocaciones/s | 0 | | E2 real, 5 pistas | **204 / 256** | ~109 M colocaciones/s | 0 | Dos cosas conviene decir con claridad. Primero, esto es una **profundidad** (hasta dónde llegó la búsqueda antes de retroceder), no una puntuación de aristas sobre 480: su programa no emite un tablero parcial para volver a puntuar. Segundo, el ritmo en el puzzle real es de unos 109 millones de colocaciones por segundo, aproximadamente el 40 % de su velocidad en el puzzle de Joe, porque las restricciones del puzzle real podan con más dureza. El número de pistas apenas lo mueve: 205 con una pista, 204 con cinco. Esta es la misma lección a la que llegan sus propios mensajes, ahora en mi propio hardware: el motor en bruto es soberbio recorriendo un árbol y no dice nada, por sí solo, sobre dónde se esconde un tablero de alta puntuación. ### Un solo núcleo, confirmado El binario enlaza solo con la biblioteca del sistema, no tiene primitivas de threading en su fuente y mantiene una CPU al 100 % (no al 800 %) con un único hilo de principio a fin. La velocidad es la de un núcleo. Esa es la unidad justa para comparar motores, y es la que usa el [benchmark de un solo núcleo](/es/research/lab/experiments/single-core-benchmark/) para poner este motor junto al [de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) y la [reimplementación de Verhaard](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/). Los tres no miden el mismo eje (el número de McGavin es una profundidad de colocación, no una puntuación de aristas coincidentes), así que lea la comparación con cuidado. Una posdata de primera mano sobre el propio rendimiento. Reconstruido sin pantalla (su pantalla de terminal en vivo, resulta, le cuesta ~2,7×) y apuntado a un tablero fácil y a uno difícil, este motor C fija el listón frente al cual se midió luego un [backtracker de generación de código en Rust portable](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) en el mismo M1: el Rust lo iguala en tableros difíciles y profundos como el rompecabezas real (~105–110 M cada uno) y queda ~2,3× por detrás en los fáciles y poco ramificados (~287 M frente a ~122 M). Una calibración útil de cuánto de la ventaja de este motor es oficio portable y cuánto es la forma del tablero sobre el que corre. ## Relacionado - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - [Cómo buscan los solucionadores récord](https://eternity2.dev/es/research/build/solvers/) — Cómo buscan en realidad los solucionadores que ostentan los récords. Todos son, en el fondo, backtrackers en profundidad; lo que los distingue es el orden en que prueban las cosas y cómo doblan las reglas al acercarse al final. --- # Los experimentos de Raphaël Anjou > Un cuaderno de experimentos de búsqueda sobre Eternity II, organizado en torno a los motores compartidos sobre los que se ejecutan, las pipelines de combinación que persiguen la puntuación, cuatro estudios que desmontan un paradigma de búsqueda una decisión a la vez, y resoluciones exactas de final de partida. Cada uno expone su idea, su mejor tablero y las preguntas que deja abiertas. El mejor alcanza 463 de 480. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/ - Actualizado: 2026-07-22 --- Este es el cuaderno de experimentos de búsqueda sobre Eternity II de [Raphaël Anjou](/es/research/people/raphael-anjou/). Algunos son ideas originales; otros reimplementan fielmente una técnica conocida de la comunidad para medir con exactitud lo que aporta. Cada uno registra su idea, el tablero que alcanzó y las preguntas que deja abiertas, y cada tablero es real y comprobable en el [visor](/viewer/). El mejor alcanza **463 de 480** aristas casadas; el mejor de la comunidad en el mismo puzzle es 470. Los métodos y los tableros están aquí al completo, sin ocultar nada. Es un cuaderno, no un resultado único, así que conviene conocer cómo está organizado antes de adentrarse en él. > **[Interactive: RecentlyAdded]** Rendered on the canonical page (link above); not shown in this markdown export. ## Qué contiene esta sección Aquí conviven dos tipos de cosas: el **aparato** sobre el que se ejecutan los experimentos, y los **experimentos** mismos. Estos últimos vienen en tres variantes: pipelines que persiguen la puntuación del tablero completo, estudios que aíslan una decisión de búsqueda a la vez, y resoluciones exactas que *prueban* una región pequeña en lugar de adivinarla. Empieza allí donde esté la pregunta que te importa.
- [Los motores](/es/research/lab/experiments/raphael-anjou/engines/) — La maquinaria compartida sobre la que se ejecutan los experimentos: un productor constructivo por haz, una búsqueda local de destrucción y reparación, y una familia de preajustes CSP. Documentada una sola vez aquí para que cada estudio pueda remitirse a ella en lugar de reexplicar la máquina. Empieza aquí si quieres saber cómo funciona una búsqueda antes de leer qué hizo un estudio con ella. - [Pipelines de combinación](/es/research/lab/experiments/raphael-anjou/pipelines/) — Las ejecuciones con nombre que hacen subir la puntuación. Cada una es una pipeline, no un algoritmo aislado: construir un tablero con un motor y luego elevarlo o rematarlo con otro. El interés reside en el reparto del trabajo entre construcción, reparación y un final de partida exacto. De aquí salen los tableros que se acercan al récord. - [El estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/) — El backtracking en profundidad, diseccionado. Una familia de backtrackers partiendo de cero, separados cada uno por un solo cambio (orden de relleno, heurística, política de ruptura), ejecutados sobre las mismas diez variantes con un presupuesto fijo, para poner precio a lo que vale cada idea. - [El estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/) — Su hermano, para la búsqueda local de destrucción y reparación: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, de qué tablero partir. El bucle con el que los récords alcanzan de verdad la cima, desmontado una decisión a la vez. - [Aprender de los tableros fuertes](/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio vuelto hacia adentro: en lugar de variar la búsqueda, variar lo que se le permite *saber*. Cinco experimentos minan el corpus de tableros fuertes en busca de estructura y la reinyectan, y los cinco chocan contra el mismo muro. - [El estudio de las pistas](/es/research/lab/experiments/raphael-anjou/hint-study/) — Dar gratis a un backtracker cinco piezas correctas, en la geometría de pistas del propio puzzle. Medidas contra la ausencia total de pistas, nunca ayudan a un backtracker cronológico en estos tableros; pueden costar de 10 a 20 puntos a un barrido compacto y hundir en unos 345 puntos un orden que corre hacia las pistas, porque una pieza fijada es una restricción dura que un orden de relleno fijo debe satisfacer al llegar. - [Encuentro en el medio](/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/) — Resoluciones exactas de final de partida: enumerar una región desde dos extremos y unirla en la costura para hallar la verdadera mejor compleción, con una prueba de que ninguna puntúa más alto. Miden con exactitud una región pequeña en lugar de perseguir la puntuación del tablero completo. - [Ir rápido](/es/research/lab/experiments/raphael-anjou/going-fast/) — La otra palanca: no una búsqueda más astuta, sino más rápida. Un backtracker en Rust portable que genera y compila Rust propio de cada rompecabezas, llevado peldaño a peldaño hasta un rendimiento de la clase de McGavin - a la par del C más afinado a mano de la comunidad en tableros difíciles y realistas, desde un lenguaje seguro. Un resultado de velocidad, en un eje propio, distinto de las puntuaciones de arriba.
Los dos motores constructivos, el productor por haz y la etapa de pulido ALNS, todavía no tienen su propio exposé; allí donde una pipeline dirige uno, su propia página indica qué hace ese motor al nivel que el estudio necesita. Los preajustes CSP son el único motor documentado y medido por completo. Aparte de este aparato, el pequeño [motor de referencia](/es/research/lab/experiments/raphael-anjou/engine/) que impulsa las demos en vivo del sitio y recomprueba cada cifra tiene su propia página. ## Hallazgos e instrumentos No todo aquí es una pipeline o un estudio. Tres páginas se sostienen solas, una línea cada una: - [FROSTLINE](/es/research/lab/experiments/raphael-anjou/frostline/): una energía libre de propagación de creencias sobre las piezas sobrantes de la última fila, que predice por rango hasta qué punto la fila puede aún terminarse, y cuya señal muere más allá de una fila. - [LEDGER](/es/research/lab/experiments/raphael-anjou/ledger/): una poda correcta, color a color, de la oferta frente a la demanda para un DFS con presupuesto de rupturas, cuyos ahorros se componen con la profundidad. - [La escalera de tamaños](/es/research/lab/experiments/raphael-anjou/scaling-ladder/): un banco que ejecuta un solver sin cambios sobre tableros plantados, totalmente resolubles, de N = 8 a 14, para hallar dónde se derrumba el método antes de dedicar semanas al 16x16 real. Otros dos hallazgos viven en el estante de las pipelines: [hacer un productor beam 10x mejor](/es/research/lab/experiments/raphael-anjou/pipelines/beam-width/), donde la anchura misma resultó ser la respuesta a presupuesto igual, y [el marco fluido](/es/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/), donde un borde perfecto resultó no ser un arreglo único sino una variedad conexa de intercambios gratuitos. ## Dónde está el cuaderno Leído como una sola investigación, el cuaderno sigue tres líneas. Los constructores desde cero y las pipelines de combinación se estancan en una banda de 436 a 460 aristas casadas: la construcción sola se atasca, y lo que las pipelines ganaron vino del reparto del trabajo entre construcción, reparación y un final de partida exacto, no de ningún motor en particular. La [línea de aprendizaje sobre corpus](/es/research/lab/experiments/raphael-anjou/learning/) alcanza 460 a 463, y sus cinco experimentos se detienen en el mismo [muro de rigidez](/es/research/why/rigidity-wall/). Las resoluciones exactas de [encuentro en el medio](/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/) son un resultado de otra naturaleza: sus tableros de 437 a 448 llegan con una prueba sobre una región pequeña, no con una persecución de la puntuación del tablero completo. La pregunta abierta del cuaderno es qué tendría que cambiar un próximo experimento para pasar de 463; variar la búsqueda y variar lo que sabe han chocado ambas con muros, así que la palanca probablemente no sea ninguna de las dos por separado. La brecha que queda es con el 470 de la comunidad, en la [página de récords](/es/research/records/). El cuaderno cuenta sus puntuaciones en dos convenciones, que no señalan el mismo máximo. En aristas emparejadas, el mejor es 463 ([PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/)). Bajo la convención estricta de las cinco pistas, donde las cinco pistas oficiales deben ocupar sus casillas, el mejor es 461: un productor de orden en peine alcanza 457 y un pulido de destrucción y reparación lo eleva por 459 y 460. Ambos números quedan por debajo de las mejores marcas de la comunidad; la [página de récords](/es/research/records/) mantiene al día las convenciones y la clasificación. ## Próximas redacciones Hay resultados en el laboratorio que aún no tienen su página, en el orden probable de llegada: el linaje estricto 461 de arriba, el finalizador exacto que sella las últimas filas de un tablero producido, el haz de doble ruptura y el productor de cuencas por novedad. Cada uno llegará con su reproducción ejecutable, como las páginas de arriba. ## Cómo leer las puntuaciones El gráfico y la tabla de abajo contienen dos tipos de número que nunca deben confundirse, por lo que se dibujan como grupos separados. - **Exploración** es el mejor tablero que cada método alcanzó en ejecuciones exploratorias sobre 8 núcleos, sin registrar el tiempo de reloj. Son los números destacados que citan los exposés, y culminan en el 463 de PALIMPSEST. - **Banco** es el banco de pruebas estandarizado de un solo núcleo: un núcleo, sesenta segundos, cada tablero re-puntuado por el mismo baremo canónico. Más bajo, y *directamente comparable* entre métodos de una forma que los números de exploración no permiten. No todos los experimentos merecen una fila. Los estudios varían una perilla a lo largo de una rejilla en lugar de producir un solo tablero, de modo que los estudios [DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/) y de [reparación](/es/research/lab/experiments/raphael-anjou/repair-study/) llevan sus propias clasificaciones en vez de una fila en el gráfico; aquí solo aparece su mejor resultado de banco. [El estudio de las pistas](/es/research/lab/experiments/raphael-anjou/hint-study/) lleva igualmente sus propias tablas en sus páginas y no tiene fila en el gráfico. Los cinco experimentos de [aprendizaje](/es/research/lab/experiments/raphael-anjou/learning/) alcanzan cada uno un tablero puntuado, así que conservan sus filas además de su hogar de estudio. Las filas de banco de arriba son resultados de estudio, no páginas autónomas, de modo que solo aparecen en el gráfico. > **[Interactive: ExperimentScoreChart]** Rendered on the canonical page (link above); not shown in this markdown export. Los experimentos con nombre en forma de tabla ordenable (haz clic en una cabecera de columna para reordenar por puntuación, nombre, método o mes). El autor, el mes, el rigor y la reproducibilidad se leen de la propia página de cada experimento, de modo que este resumen se mantiene al día con ellas. s.group !== "bench")} /> ## Páginas de esta sección - [Los motores compartidos](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/engines/) — Los motores compartidos que sustentan los experimentos de Raphaël Anjou. Los experimentos con nombre son estudios que se ejecutan sobre ellos; este es el aparato que comparten. Los preajustes CSP y la reimplementación de Verhaard están documentados por completo, junto al motor de referencia, el backtracker JIT, una guía de la velocidad y el arnés de la escalera de tamaños; los motores constructivos aún no están publicados. - [El motor de referencia que impulsa este sitio](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/engine/) — El backtracker de Rust a WebAssembly que anima cada demo en vivo y verifica cada número de este wiki. No una máquina de récords sino un motor de referencia, portado cuatro veces y validado byte a byte, construido para que las afirmaciones de aquí puedan volver a ejecutarse. - [Pipelines de combinación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/) — Siete experimentos de búsqueda con nombre propio que persiguen la puntuación, cada uno un pipeline más que un único algoritmo: construye un tablero con un motor y luego lo eleva o lo remata con otro. Junto a ellos, dos hallazgos desmontan la maquinaria en la que los pipelines se apoyan. Cada página deja constancia de su idea, de su tablero y de las preguntas que deja abiertas. - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - [El estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/) — Darle a un backtracker cinco piezas correctas gratis, en la geometría misma de las pistas del puzzle. Resulta que no ayuda, y según el orden de relleno puede dañar gravemente, porque una pieza fijada es una restricción dura que un orden de relleno fijo debe satisfacer al llegar. Una familia de órdenes de relleno, ejecutada sobre los mismos tableros con pistas, un solo núcleo, medida contra la ausencia total de pistas. - [El estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/) — La hermana del estudio DFS, para la otra manera en que se ataca Eternity II: destruir parte de un tablero, reconstruirla, conservar el cambio si ayuda. Una pregunta, planteada con cuidado. Qué aporta cada decisión de ese bucle: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, cuándo reiniciar, y desde qué tablero partir. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - [Meet in the middle](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/) — Experimentos exactos de final de partida que se encuentran en el medio: enumeran una región desde dos extremos y las unen por la costura, para hallar la verdadera mejor terminación con una prueba en lugar de la mejor conjetura de una heurística. Miden con exactitud una región pequeña en vez de perseguir la puntuación del tablero completo. - [Ir rápido: cuando un solucionador gasta su presupuesto en velocidad](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/going-fast/) — Algunos motores de Eternity II vuelcan su esfuerzo en recorrer el árbol de búsqueda lo más rápido posible; otros lo gastan en el criterio sobre dónde buscar. Este es el alegato a favor de los primeros - qué compra el rendimiento bruto, las tres cosas distintas que la gente llama «rápido» y por qué el motor más rápido jamás construido sigue sin poder resolver el rompecabezas. - [El backtracker JIT: Rust portable a la par del C afinado a mano en tableros difíciles](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profundidad, seguro y portable, especializado en tiempo de ejecución al emitir y compilar Rust propio de cada rompecabezas, llevado de 43 a 123 millones de nodos de búsqueda por segundo en un núcleo. Medido con justicia frente al C de Peter McGavin en la misma máquina: un empate en tableros difíciles y profundos como el Eternity II real, y alrededor del 44 % de su velocidad en los fáciles. Cada peldaño recorre el árbol idéntico; toda la ganancia es código, no algoritmo. - [Una poda correcta por conteo de colores para la búsqueda tolerante a rupturas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/ledger/) — Llevar, color a color, la oferta de semiaristas frente a la demanda del frente en un DFS con presupuesto de rupturas, y podar en cuanto el déficit o su paridad superan las rupturas restantes. Correcto por construcción; la ganancia se compone con la profundidad. - [Leer el futuro de una fila en sus piezas sobrantes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/frostline/) — Una energía libre de propagación de creencias, calculada sobre las piezas sobrantes de la última fila, predice el rango del mejor final posible. La señal no es un proxy del puntaje bruto, sobrevive a un cambio de productor y muere más allá de una fila. - [La escalera de tamaños](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/scaling-ladder/) — Un banco que ejecuta cualquier solucionador, sin cambios, sobre tableros plantados totalmente resolubles con N = 8, 10, 12, 14, cada uno con un techo probado de 2N(N-1): el tamaño de colapso de un método se mide antes de gastar semanas en el 16×16 real. --- # El estudio DFS > Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/ - Actualizado: 2026-07-16 - Temas: backtracking, search-space, speed - Reproducir: `just experiments dfs-study` - Fuente: Motor ejecutable + resultados versionados + scripts (el directorio de respaldo de este estudio) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study --- Todo solucionador de Eternity II poseedor de un récord (Blackwood, Verhaard, McGavin) es un backtracker en profundidad. Lo que los distingue de un backtracker del primer trabajo de la semana no es su naturaleza, sino un puñado de decisiones: el orden en que rellenan las celdas, la anticipación que aplican y el hecho de dejar o no que una arista *rompa*. Este estudio desmonta esas decisiones. Construye desde cero una familia de backtrackers en profundidad, cada uno separado de su vecino por un único cambio, y los ejecuta a todos sobre las mismas diez variantes con esquinas fijadas del puzzle oficial, en un solo núcleo, sesenta segundos por ejecución. La puntuación máxima es de 480 aristas casadas. El objetivo no es ganar. La variante más fuerte que aquí se presenta ronda de media los 430 justos, muy por debajo de los 464 de la comunidad sobre estas cinco pistas, porque sesenta segundos en un núcleo son apenas una fracción ínfima del cómputo que exigieron los récords. El objetivo es aislar *lo que vale cada idea* cambiando una sola cosa a la vez y midiendo el resultado con el mismo solucionador canónico de puntuación para cada tablero. > **[Interactive: StartingPuzzleCarousel]** Rendered on the canonical page (link above); not shown in this markdown export. ## La familia, y el clasificatorio Cuatro familias, dispuestas de modo que los vecinos difieran en una sola decisión. **Baseline** es el backtracker más crudo posible, acompañado de un gemelo especializado a mano que pone precio al coste de la ingeniería de bajo nivel. **Path order** fija todo salvo la secuencia en que se rellenan las celdas. **Heuristic** fija el orden y añade un propagador cada vez. **Break** es el eje de élite: el mecanismo de ruptura de arista con umbral de profundidad sobre el que se apoyan los récords. Los motores récord de la comunidad, el C de McGavin y el C# de Blackwood, son ellos mismos backtrackers de ruptura, de modo que ocupan su lugar en la familia break, y no en una categoría aparte. De quién es el código de un motor sigue siendo cuestión de etiquetado, no de color. Ambos aparecen en el clasificatorio con su puntuación de esquinas fijadas, marcados con una insignia allí donde se derrumban, y de nuevo sobre una rejilla sin fijación más abajo, donde funcionan tal como fueron diseñados. > **[Interactive: DfsStudyLeaderboard]** Rendered on the canonical page (link above); not shown in this markdown export. ## Lo que el estudio encontró - **El orden de recorrido es la mayor palanca gratuita, y el orden equivocado es catastrófico.** Un simple recorrido fila por fila promedia 377; un relleno estricto de borde primero o en espiral, sin heurística que lo rescate, se estanca cerca de 67. Mismo motor, mismo presupuesto, una oscilación de más de 300 puntos debida al solo orden de relleno. - **La heurística de la celda más restringida (MRV) es lo que hace viable el borde primero.** Eleva un borde primero estancado desde los sesenta hasta una media de 324, a un coste de tres órdenes de magnitud en el rendimiento de nodos. El rendimiento de nodos y la puntuación son dos ejes distintos, una distinción sobre la que el estudio vuelve de principio a fin. - **Más propagación no compró más puntuación con este presupuesto.** El forward-checking, la arco-consistencia y el razonamiento por color aterrizan a un punto unos de otros (322, 321, 321), una brecha muy dentro de la dispersión de una ejecución a otra, de modo que una anticipación más pesada ni ayudó ni perjudicó claramente. Gasta los sesenta segundos en demostrar regiones pequeñas en lugar de descender más profundo. - **Las rupturas descienden más profundo que cualquier búsqueda estricta.** Los backtrackers estrictos se topan con un techo en los 200 justos (el más rápido, NAIVE-CODEGEN, en 216); un presupuesto de ruptura con umbral de profundidad supera 245 y promedia los 430 justos, porque puede forzar el paso más allá de una arista localmente incasable en lugar de retroceder para salir de ella. El factor decisivo es el *calendario* de las rupturas: desbloquear las rupturas demasiado pronto (la escalera de Verhaard, media 399) puntúa muy por debajo de la escalera más tardía de Blackwood (media 431). Elevar el tope por celda de uno a dos no ayudó con este presupuesto, un resultado nulo reportado como medido. Cada uno de estos puntos tiene su propia página: cómo se construye el motor y qué significa cada estadística registrada está en la [página de método](/es/research/lab/experiments/raphael-anjou/dfs-study/method/), y las comparaciones de recorrido, heurística y ruptura se desarrollan en la [página de resultados](/es/research/lab/experiments/raphael-anjou/dfs-study/findings/). ## Cómo leer las cifras Cada tablero se vuelve a puntuar con un único solucionador canónico de puntuación, y no se da por buena la puntuación autodeclarada de ningún motor. El rendimiento se reporta en nodos de búsqueda por segundo y **nunca se compara de una familia a otra**, porque un nodo que ejecuta una arco-consistencia completa no es la misma unidad de trabajo que una colocación ingenua. La profundidad es la colocación más profunda que alcanzó una variante, sobre 256. El número de rupturas merece una definición precisa, porque es fácil enunciarlo de forma vaga. La *puntuación* de un tablero es el número de sus aristas interiores casadas, y la brecha `480 − score` es el déficit total de aristas no casadas del tablero. Sobre un tablero **completado**, cada arista no casada es una ruptura genuina, de modo que allí la puntuación vale exactamente `480 − #breaks`. Sesenta segundos rara vez bastan para rellenar el tablero, sin embargo, de manera que la mayoría de los tableros de las variantes de ruptura aquí presentados son parciales, y su déficit está dominado por aristas simplemente aún vacías más que rotas. Este estudio reporta por tanto el **verdadero número de rupturas**, es decir, los desapareamientos interiores que la búsqueda comprometió efectivamente bajo su presupuesto, seguidos por la propia búsqueda en lugar de inferidos de la puntuación. Ese número se mantiene pequeño incluso cuando el déficit es grande. Cada tablero lleva una `.url` bucas que se abre en el [visualizador](/viewer/), de modo que tanto la puntuación como las aristas rotas pueden verificarse directamente. Todo el aparato (el espacio de trabajo del motor, las diez variantes, los resultados por ejecución versionados y los scripts de la rejilla) reside bajo el [directorio de respaldo](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study) del estudio, y `just experiments dfs-study` reconstruye el motor y relanza toda la rejilla. ## Páginas de esta sección - [Cómo está construido el estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/method/) — El motor detrás del estudio DFS: un backtracker componible donde una variante es un cambio declarado sobre un padre, una capa IO compartida que cada algoritmo habla, y las definiciones de cada estadística que el estudio plantea: tasa de nodos, profundidad, rupturas. - [Qué mostró el estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/findings/) — Las tres comparaciones en el corazón del estudio DFS, llevadas hasta el final: el orden de relleno (el recorrido por filas gana, un mal orden es catastrófico), las heurísticas (MRV rescata el borde primero pero cuesta rendimiento; más propagación no aportó nada) y las rupturas (rompen el muro de profundidad; el calendario de rupturas es la palanca, no el tope por celda). ## Relacionado - [Los experimentos de Raphaël Anjou](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/) — Un cuaderno de experimentos de búsqueda sobre Eternity II, organizado en torno a los motores compartidos sobre los que se ejecutan, las pipelines de combinación que persiguen la puntuación, cuatro estudios que desmontan un paradigma de búsqueda una decisión a la vez, y resoluciones exactas de final de partida. Cada uno expone su idea, su mejor tablero y las preguntas que deja abiertas. El mejor alcanza 463 de 480. - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? --- # Qué mostró el estudio DFS > Las tres comparaciones en el corazón del estudio DFS, llevadas hasta el final: el orden de relleno (el recorrido por filas gana, un mal orden es catastrófico), las heurísticas (MRV rescata el borde primero pero cuesta rendimiento; más propagación no aportó nada) y las rupturas (rompen el muro de profundidad; el calendario de rupturas es la palanca, no el tope por celda). - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/findings/ - Actualizado: 2026-07-16 - Temas: backtracking, search-space, speed - Fuente: Resultados por ejecución versionados (results.jsonl) e informe por familia (report.md) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study/results --- Tres comparaciones sostienen el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/). Cada una aísla una decisión manteniendo todo lo demás fijo. Todas las puntuaciones son el número medio de aristas apareadas sobre las diez variantes con esquinas fijadas, un solo núcleo, sesenta segundos. El rendimiento se mide en nodos de búsqueda por segundo y nunca se compara entre familias. ## Qué aporta la especialización de bajo nivel: rendimiento, y solo eso Las dos referencias ejecutan el *mismo* algoritmo estricto de recorrido por filas: `NAIVE-CLEAN` como motor general legible, `NAIVE-CODEGEN` como bucle caliente 16×16 especializado a mano, reservado al recorrido por filas. La especialización entrega lo que debe en el eje que persigue. `NAIVE-CODEGEN` es notablemente más rápido por nodo, hasta un tercio más en algunas instancias. En cuanto a la *puntuación*, las dos empatan, a un punto o dos de distancia a sesenta segundos y bien dentro de la dispersión entre ejecuciones, que es la lectura rigurosa más que una afirmación de que la especialización *perjudique*. A tiempo de reloj fijo, un motor más rápido alcanza un punto distinto del mismo árbol, y la mejor solución parcial de un backtracker no varía de forma monótona con la velocidad a la que llegó allí. Las referencias son, por tanto, una comparación limpia de *velocidad* y deliberadamente no se presentan como una comparación de *puntuación*. Los efectos sobre la puntuación que merece la pena estudiar están todos en los ejes de abajo, donde la búsqueda misma cambia. ## Orden de relleno: el recorrido por filas gana, y el orden equivocado es catastrófico Fijemos el motor (estricto, sin heurísticas) y cambiemos solo el orden en que se rellenan las celdas. Los seis órdenes solo se diferencian en el lugar donde la búsqueda envía su frente, que se muestra abajo. > **[Figure]** Los seis órdenes de relleno, trazados como el camino que recorre la búsqueda — interactive: PathOrderDiagram. Rendered on the canonical page (link above); not shown in this markdown export. - **El recorrido por filas** es la referencia fuerte, con una media de 377. Su zona de daño se mantiene constante, ya que cada celda nueva tiene las dos mismas celdas vecinas ya colocadas, de modo que alcanza gran profundidad antes del muro estricto. - **Un relleno estricto de borde primero o en espiral se colapsa.** Rellenar primero el anillo del borde, sin anticipación, conduce directo a las restricciones de esquina y de borde más duras y se atasca casi de inmediato, cerca de una media de 67 a una profundidad de 66 aproximadamente. La espiral paga el mismo impuesto de cierre. - **El recorrido por filas de abajo hacia arriba va aún peor en esta geometría de pistas** (media 226, pero tan bajo como 18 en algunas variantes), porque las pistas fijadas se sitúan en filas que el relleno de abajo hacia arriba alcanza pronto y no puede satisfacer. Mismo motor, mismos sesenta segundos, una oscilación de más de 300 puntos debida únicamente al orden de relleno. Esta es la forma medida de un saber de la comunidad: el borde primero solo es bueno *con* una heurística para elegir las celdas dentro del anillo. Por sí solo es uno de los peores órdenes disponibles. Prueba la palanca tú mismo: elige uno de los nueve órdenes de recorrido del motor abajo y observa cómo el mismo backtracker real alcanza una profundidad distinta en el mismo puzzle. > **[Interactive: DfsScanOrderLab]** Rendered on the canonical page (link above); not shown in this markdown export. ## Heurísticas: MRV rescata el borde primero, pero el rendimiento se desploma Fijemos ahora el camino cerca del marco y añadamos una cosa cada vez. La mayor palanca es **MRV**, que rellena a continuación la celda vacía más restringida, elegida dinámicamente. Convierte el borde primero atascado (media 67) en una búsqueda cuya media es 324 (mejor 341) a una profundidad de 190 aproximadamente. También recalcula la celda más restringida sobre todo el frente en cada paso, de modo que el rendimiento en nodos cae tres órdenes de magnitud, de decenas de millones de nodos por segundo a unos pocos miles. Cada nodo vale mucho más, y se visitan muchos menos. El ritmo de nodos y la puntuación son ejes distintos. Añadir una anticipación más pesada por encima **no** aportó más puntuación con este presupuesto. - **La verificación hacia delante** (rechazar una colocación que vacíe el dominio de una vecina) obtuvo una media de 322. - **La consistencia de arco** y la **verificación de suministro por color** obtuvieron cada una una media de 321. Con una dispersión de puntuación por variante de unos 11 puntos sobre las diez instancias, esa diferencia de un punto está bien dentro del ruido: los tres propagadores son aquí estadísticamente indistinguibles, de modo que la lectura rigurosa es que una anticipación más pesada ni ayudó ni perjudicó claramente, más que la verificación hacia delante hubiera ganado. - Una ordenación de valores de **colores raros primero** fue inerte, no mejor que el simple orden de inserción, haciendo eco al resultado negativo repetido de la comunidad sobre los órdenes de valores dentro de un mismo cubo. La lección no es que la propagación sea inútil. Es que con un presupuesto pequeño y fijo, sobre esta instancia, la poda útil más barata (la verificación hacia delante) ya capta cualquier beneficio disponible, y un razonamiento más caro no recupera su coste adicional por nodo en sesenta segundos. ## Rupturas: más allá del muro, y el calendario es la palanca El backtracking estricto, sea cual sea su orden o su heurística, choca contra un muro muy antes de un tablero completo: el recorrido por filas se estanca en torno a la profundidad 208 de 256, e incluso la variante estricta más rápida (NAIVE-CODEGEN) solo alcanza 216. Los motores recordistas lo superan *rompiendo*: permiten un número acotado de incompatibilidades de aristas interiores, liberadas según un calendario de profundidad, con una regla que impide que una celda cargue con demasiadas aristas rotas. La puntuación de un tablero completo es entonces `480 − #rupturas`. - **Las rupturas superan el muro.** Un presupuesto de rupturas condicionado por la profundidad alcanza más allá de la profundidad 245 y ronda los 430 bajos (ruptura-1 da 431 de 480, mejor 435), una gran ganancia sobre los 370 altos del estricto, sobre las mismas instancias y presupuesto. Este es el mecanismo tras los backtrackers recordistas de la comunidad, no un paradigma distinto sino una relajación de la regla de apareamiento condicionada por la profundidad. - **Permitir una segunda ruptura por celda no ayudó aquí.** Una ruptura y dos rupturas alcanzan el mismo mejor tablero (435), y sus medias (431,3 frente a 428,5) se sitúan dentro de la dispersión propia de la variante de dos rupturas, de modo que ninguna domina en media. Lo que sí las separa es la regularidad: la variante de una ruptura está estrechamente agrupada (nunca por debajo de 427), mientras que la variante de dos rupturas desciende hasta 402. La geometría de doble ruptura que emplean los tableros 460 de la comunidad parece necesitar más de sesenta segundos para dar fruto; con este presupuesto, la libertad adicional sobre todo ensancha el ramaje sin alcanzar mejores tableros. Es un resultado nulo, reportado tal como se midió y no como cabría esperar. - **El calendario es la palanca decisiva.** La escalera de deslizamiento de Verhaard desbloquea las rupturas mucho antes que la de Blackwood (profundidad 193 frente a 201) y aquí puntúa notablemente peor (media 399 frente a 431), porque desbloquear pronto gasta el presupuesto en rupturas superficiales. Cuándo y con qué rapidez se abren las rupturas es una decisión de ajuste más que un detalle. Estas cifras de rupturas conviven con las de las reimplementaciones al estilo Blackwood y al estilo Verhaard, rehechas desde cero, del benchmark hermano, que alcanzan los 430 altos sobre las mismas cinco pistas. La concordancia de un motor independiente valida de forma cruzada la maquinaria de rupturas aquí. ## Dónde se sitúan los motores de la comunidad: dos rejillas Blackwood y McGavin son la gama alta de esta misma familia, y ambos se compilan y ejecutan en esta máquina, de modo que este estudio los hizo correr tanto en una rejilla fijada como en una no fijada, con cada puntuación recalculada canónicamente a partir del tablero propio del motor. El resultado es un hallazgo por derecho propio, y tiene dos mitades. **En la rejilla fijada, se colapsan.** El C de McGavin, compilado con las propias opciones ARM de su autor (ajuste nativo más optimización en tiempo de enlace), alcanza la profundidad 211 en el puzzle de pista central simple a unos 85 millones de piezas por segundo, muy por delante de nuestro motor estricto más rápido, y sin embargo fijar tres esquinas lo colapsa a la profundidad 21, una puntuación canónica de 13. Su camino de recorrido generado nunca visita las esquinas pronto, de modo que una esquina fijada restringe su vecindad de inmediato y bloquea el camino fijo casi al instante. El C# de Blackwood codifica en duro su conjunto de piezas y su recorrido, de modo que ni siquiera puede expresar una fijación de esquina arbitraria; sobre la restricción de cinco pistas correspondiente, su heurística de rupturas se agita hasta la profundidad 47, una puntuación canónica de 75, porque está ajustada para la instancia de una pista, casi sin restricciones, donde se estableció su récord de 470. > **[Figure]** El colapso al fijar las esquinas: celdas colocadas de 256 — interactive: PinCollapseDiagram. Rendered on the canonical page (link above); not shown in this markdown export. Ese colapso es justamente el punto. Un motor recordista construido en torno a una configuración de pistas no se transfiere a otra, y un camino de recorrido fijo no puede absorber una fijación arbitraria. Nuestros motores rehechos desde cero tratan una fijación como una celda pre-colocada que el recorrido simplemente salta, razón por la cual son ellos, y no los binarios de la comunidad, los sustitutos en la rejilla fijada. **En una rejilla no fijada equitativa, corren como se diseñaron.** Dad a cada motor las piezas oficiales con la única pista central obligatoria, y nada se bloquea en una esquina. En sesenta segundos sobre un núcleo, McGavin alcanza 392, nuestro motor de rupturas más fuerte 344, la reimplementación de Verhaard 286, y Blackwood 214. Leed esas cifras como lo que un solo núcleo compra en un minuto desde arranque en frío, no como el techo de ningún motor: el 470 de Blackwood y las ejecuciones profundas de McGavin vinieron de días sobre cientos de núcleos, que este presupuesto no puede mostrar. Lo que la rejilla sí muestra es que los cuatro corren correctamente una vez desaparecidas las fijaciones que rompen un camino de recorrido fijo, que es exactamente lo que la rejilla fijada les negaba a los dos motores ajenos. Ambas rejillas figuran en la clasificación del estudio de arriba. ## El hilo conductor Un tema atraviesa las tres comparaciones: **el número de nodos no es la puntuación.** Las variantes más rápidas por nodo (la referencia en codegen y el motor estricto de recorrido por filas) no alcanzan los mejores tableros; la más lenta por nodo (MRV con propagación) alcanza otros mucho mejores; y las rupturas que ganan lo hacen cambiando *qué* rama es legal, no visitando ramas más rápido. La velocidad bruta es un factor constante, mientras que dónde y si a la búsqueda se le permite ir es el factor exponencial. ## Relacionado - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - [Cómo está construido el estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/method/) — El motor detrás del estudio DFS: un backtracker componible donde una variante es un cambio declarado sobre un padre, una capa IO compartida que cada algoritmo habla, y las definiciones de cada estadística que el estudio plantea: tasa de nodos, profundidad, rupturas. - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? - [Una poda correcta por conteo de colores para la búsqueda tolerante a rupturas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/ledger/) — Llevar, color a color, la oferta de semiaristas frente a la demanda del frente en un DFS con presupuesto de rupturas, y podar en cuanto el déficit o su paridad superan las rupturas restantes. Correcto por construcción; la ganancia se compone con la profundidad. --- # Cómo está construido el estudio DFS > El motor detrás del estudio DFS: un backtracker componible donde una variante es un cambio declarado sobre un padre, una capa IO compartida que cada algoritmo habla, y las definiciones de cada estadística que el estudio plantea: tasa de nodos, profundidad, rupturas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/method/ - Actualizado: 2026-07-16 - Temas: backtracking, speed - Fuente: El espacio de trabajo del motor (dfs-engine, dfs-run) sobre la biblioteca compartida e2-core / e2-io — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study/engine --- Esta página es el aparato detrás del [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/): cómo está construido el motor, por qué una nueva variante cuesta poco añadir, y qué significa cada número entre los resultados. Nada de esto depende del motor del [benchmark de un solo núcleo](/es/research/lab/experiments/single-core-benchmark/) vecino. Todo el objetivo era reimplementar la familia desde cero, manteniendo la ingeniería de software limpia y el relato del «qué se apila sobre qué» explícito. ## Una variante es un cambio declarado sobre un padre Cada algoritmo del estudio es el *mismo* backtracker recursivo en profundidad, parametrizado por cuatro elecciones independientes: - **orden de recorrido**: la secuencia en que se rellenan las celdas (por filas, en espiral, borde primero, el peine de Verhaard, o dinámico por celda más restringida); - **orden de valores**: el orden en que se prueban las piezas candidatas de una celda; - **propagador**: la anticipación ejecutada tras cada colocación (ninguna, verificación hacia adelante, arco-consistencia, razonamiento por color); - **política de ruptura**: si una arista puede ser discordante, y bajo qué presupuesto condicionado por la profundidad. Una variante es un pequeño registro que nombra esas cuatro elecciones, junto con **el padre del que deriva y una descripción de una línea del cambio único que añade**. Añadir una variante equivale a añadir un registro al registro, sin nuevo código de búsqueda a menos que la idea sea una estrategia genuinamente nueva. La matriz del «qué se apila sobre qué» de la página de resultados se genera a partir de esas descripciones, de modo que no puede divergir del código que se ejecutó. Eso es lo que mantiene un estudio extenso, con decenas de variantes a un solo cambio de distancia, mantenible en lugar de un montón de solucionadores copiados y pegados. ## Una capa IO, y conversiones entre motores Cada algoritmo del estudio consume un único tipo de instancia y emite una única salida: el mejor tablero, su puntuación canónica, y una URL bucas. Alrededor de eso se articula una capa IO compartida con convertidores sin pérdida entre los formatos que hablan los demás motores del sitio: el JSON con el esquema del sitio del benchmark, el CSV de los motores comunitarios autónomos, las URL bucas, y los archivos de pistas. El estudio lee las *mismas* diez variantes con esquinas fijadas que usa el benchmark de un solo núcleo, a través de esta capa, de modo que los dos experimentos son directamente comparables. Una pequeña utilidad `dfs-convert` expone las conversiones desde el shell, de modo que la salida de cualquier motor del blog puede alimentar a cualquier otro. ## El scorer es la única fuente de verdad Ningún score auto-reportado por un motor es digno de confianza. Cada tablero, estricto o roto, es re-puntuado por un único scorer canónico: las adyacencias interiores, no de borde, concordantes, contadas a la derecha y hacia abajo por cada celda. Es, byte por byte, la misma fórmula que la del scorer del sitio y la del benchmark, verificada por un test que re-puntúa un tablero de 469 conocido y exige 469. Esto es lo que permite que puntuaciones de variantes distintas, y las del benchmark vecino, se asienten sobre un solo eje. ## Las estadísticas que el estudio plantea Para cada ejecución, el motor registra, y los resultados los llevan hasta la página: - **puntuación**: aristas concordantes canónicas (de 480). Para un tablero completo con rupturas, esto equivale a `480 − #breaks`. - **rendimiento de nodos**: nodos de búsqueda por segundo, un nodo por colocación intentada. Reportado por variante y **nunca comparado entre familias**, porque un nodo que ejecuta arco-consistencia completa no es la misma unidad de trabajo que una colocación ingenua. Una propagación pesada intercambia rendimiento por calidad de nodo, y el estudio mide ambos ejes en lugar de fundirlos en uno solo. Las variantes más lentas llevan una salvedad que vale la pena enunciar con franqueza: el motor MRV elige la celda más restringida recorriendo la lista de candidatos de cada celda vacía en cada nodo, lo cual es intrínsecamente más pesado que un orden de relleno fijo. Dos optimizaciones que preservan el comportamiento lo acercan a unas pocas veces el coste de los motores rápidos, en lugar de los miles de veces que valía antes: la búsqueda de la celda más restringida deja de contar los candidatos de una celda en cuanto superan la mejor celda encontrada hasta ahora (una búsqueda de mínimo nunca necesita el recuento exacto de una celda que no puede ganar), y evita reverificar las aristas sobre las que la lista de candidatos ya está indexada. Lo que aún no hace es mantener el recuento de candidatos de cada celda de forma plenamente incremental de una colocación a otra, cosa que sí haría un solucionador CSP de producción; ese último paso tendría que rastrear cómo una pieza recién usada afecta al recuento de cada celda, y se deja de lado aquí para mantener el motor legible. La clasificación por puntuación no depende de nada de esto, puesto que el rendimiento es un eje aparte, pero la tasa de nodos MRV debe leerse como la de este motor limpio y no como la mejor posible de MRV. - **profundidad máxima alcanzada**: la colocación más profunda que hizo la búsqueda, de 256, la medida del estudio de cuánto avanzó una variante. El backtracking estricto choca contra un muro en los 200 bajos (por filas 208, la variante estricta más rápida 216); las rupturas lo empujan mucho más allá, hasta 243 a 245. - **profundidad a la expiración**: dónde se hallaba el frente de búsqueda cuando el reloj dio la hora, de modo que una variante que nunca termina registra igualmente dónde estaba trabajando. - **número de rupturas**: las aristas interiores en las que la búsqueda realmente *rompió* en el mejor tablero. Es cero para una variante estricta, y para una variante con rupturas es el recuento que su propia contabilidad de presupuesto comprometió, en lugar del déficit de puntuación. En un tablero completado equivale a `480 − score`; en un parcial expirado el déficit cuenta además las aristas todavía vacías, así que el estudio reporta en su lugar el verdadero número de rupturas. La URL bucas de cada tablero hace ambos verificables en el [visualizador](/viewer/). - **retrocesos**: repliegues fuera de una celda tras agotarse sus candidatos. ## Las dos referencias, y lo que cuesta la especialización La variante más cruda, `NAIVE-CLEAN`, es un motor general legible: listas de candidatos por celda sin centinela, indexadas por los dos vecinos ya colocados, una caché de aristas resueltas para que ninguna rotación se recompute en el camino caliente, y ninguna asignación dentro de la búsqueda. Su gemela, `NAIVE-CODEGEN`, es el *mismo algoritmo* reexpresado como un bucle caliente especializado a mano, solo 16×16, por filas, mantenido como programa separado para que el motor general se conserve limpio. Ponerlos a competir cara a cara pone precio a la ingeniería de bajo nivel: en este puzzle compra una ganancia de rendimiento modesta y dependiente de la instancia y, notablemente, ninguna mejor puntuación. Los números están en la [página de hallazgos](/es/research/lab/experiments/raphael-anjou/dfs-study/findings/). ## Corrección de los propagadores La verificación hacia adelante, la arco-consistencia y el control de suministro por color son correctos *por construcción*. Cada uno solo rechaza un estado en el que alguna celda ya tiene un dominio vacío, una celda que ninguna pieza no usada puede rellenar, de modo que ninguno de ellos puede eliminar una rama que lleve a una finalización real. La revisión de arco-consistencia es deliberadamente prudente allí donde es imprecisa: dondequiera que pudiera estar insegura, poda *menos* en lugar de más, quedándose del lado seguro. Los propagadores son correctos solo bajo colocación estricta, porque bajo un presupuesto de rupturas una anticipación local puede podar una rama que el presupuesto global aún podría rescatar, así que las variantes con rupturas deliberadamente no ejecutan ningún propagador. El registro lo impone: una variante que empareja rupturas con un propagador reservado al modo estricto falla al compilar. Los tests del motor comprueban esa restricción así como la contabilidad de la puntuación y de las rupturas, aunque la corrección de la poda en sí descansa sobre el argumento anterior y no sobre un test. ## Reproducibilidad El espacio de trabajo del motor, las diez variantes, los resultados por ejecución commiteados y los scripts de la grilla viven todos bajo el [directorio de soporte](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study) del estudio. `just experiments dfs-study` reconstruye el motor y reejecuta toda la grilla; la ejecución es determinista con semilla fija, y la disposición de las esquinas es el único eje de diversidad. ## Relacionado - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - [Qué mostró el estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/findings/) — Las tres comparaciones en el corazón del estudio DFS, llevadas hasta el final: el orden de relleno (el recorrido por filas gana, un mal orden es catastrófico), las heurísticas (MRV rescata el borde primero pero cuesta rendimiento; más propagación no aportó nada) y las rupturas (rompen el muro de profundidad; el calendario de rupturas es la palanca, no el tope por celda). - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? --- # El motor de referencia que impulsa este sitio > El backtracker de Rust a WebAssembly que anima cada demo en vivo y verifica cada número de este wiki. No una máquina de récords sino un motor de referencia, portado cuatro veces y validado byte a byte, construido para que las afirmaciones de aquí puedan volver a ejecutarse. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/engine/ - Actualizado: 2026-07-17 - Temas: backtracking, speed - Fuente: El repositorio eternity2 en GitHub — https://github.com/raphael-anjou/eternity2 --- > **De quién es este trabajo** > > Esta página trata del motor detrás del sitio que estás leyendo, escrita por la persona que lo escribió, [Raphaël Anjou](/es/research/people/raphael-anjou/). No es un solucionador de récords de la comunidad: esos se estudian en otro lugar de este laboratorio ([Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/), [McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/), [Verhaard](/es/research/lab/experiments/louis-verhaard/eii/)). Este se sitúa entre ellos como un par, y un par modesto: los solucionadores de récords tienen los récords; este tiene los comprobantes. Donde los [experimentos con nombre](/es/research/lab/experiments/raphael-anjou/) plantean cada uno una pregunta y los [motores compartidos](/es/research/lab/experiments/raphael-anjou/engines/) son el aparato sobre el que corren esos estudios, esta página es una tercera cosa: el pequeño motor de referencia que impulsa el sitio mismo, verifica las cifras que citan las otras páginas y anima cada demo en vivo. No marca ningún récord. Su misión es la verificabilidad y la enseñanza. ## Qué es Un pequeño crate de Rust compilado a WebAssembly, corriendo en vivo en tu navegador en cada página interactiva de este wiki. Implementa los clásicos, sin rodeos: el conjunto oficial de piezas 16×16, un generador que construye puzzles resolubles de cualquier tamaño (con un modo opcional al estilo del E2 real que restringe los colores de borde a la banda del marco), nueve órdenes de visita de celdas, un backtracker en profundidad estricto, un puntuador y una variante tolerante a rupturas de la búsqueda, una reimplementación de la idea del índice de ruptura del [solucionador de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/), construida para que los laboratorios de aquí puedan demostrarla. Una decisión de diseño importa más que los algoritmos: el solucionador es una máquina que avanza por pasos, no una función recursiva. Quienes lo invocan lo hacen avanzar un paso acotado a la vez, una colocación o un retroceso, y leen el tablero entre pasos. Eso es lo que permite que una página web anime una búsqueda real en lugar de una grabación enlatada: [la página de observación](/playground/watch/) hace avanzar exactamente este motor, y no un vídeo de él. ## Un motor, muchos portes El sitio ejecuta un solo motor: el crate Rust/WASM, la referencia canónica. Pero el repositorio conserva toda una colección de reimplementaciones fieles de ese motor en otros lenguajes: un porte en TypeScript puro (cero WASM), un porte en C, un porte en C++, y estudios más pequeños en Python, Lua, COBOL, e incluso Brainfuck. Cada uno se valida byte a byte contra los datos de referencia que produce el crate de Rust: puzzles generados hasta la salida del RNG, los nueve caminos de relleno en varios tamaños y ejecuciones completas del solucionador con los conteos exactos de nodos, intentos y retrocesos. Esa disciplina existe por una sola razón: una demo interactiva que no puedes contrastar no es más que una animación. Dos implementaciones independientes que concuerdan hasta el último retroceso son mucho más difíciles de equivocar de la misma manera dos veces, y ocho lo son aún más. Los portes son una pieza de exposición, no opciones de build (el sitio siempre ejecuta Rust), y viven juntos en la colección `engine-ports/` del repositorio. Algunos (el backtracker en Brainfuck sobre todo) están ahí por gusto. ## Lo que no reclama Esto no es una máquina de récords, y sería engañoso presentarlo como tal. El solucionador estricto no lleva ninguno de los calendarios de cuotas ajustados a mano ni las estrategias de reinicio que hacen del [solucionador de Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/) el motor detrás de los mejores tableros de la comunidad. La mejor puntuación producida por [los experimentos de aquí](/es/research/lab/experiments/) es 463 de 480; la mejor de la comunidad sobre el mismo puzzle es 470. Los solucionadores de récords estudiados en este laboratorio son sencillamente mejores encontrando tableros. El rendimiento es un eje aparte, uno que este motor de referencia deliberadamente no persigue - pero un experimento hermano sí. El [backtracker JIT](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) pregunta cuán rápido puede ir una búsqueda Rust *portable*, y alcanza un [rendimiento de la clase de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) en los tableros difíciles y profundos que se parecen al rompecabezas real - a la par de su C afinado a mano en la misma máquina (su C sigue siendo ~2,3× más rápido en los tableros fáciles). Es un resultado de velocidad, no de resolución: se estanca donde se estanca todo backtracker estricto. Velocidad y puntuación son [ejes distintos](/es/research/lab/experiments/raphael-anjou/going-fast/), y el motor de esta página no optimiza ninguno - solo el ser verificable. La misión de este motor es otra: la verificabilidad y la enseñanza. Cuando este wiki enuncia un conteo de nodos, una cifra de factibilidad o una puntuación, la afirmación la verifica este motor, y como corre en tu navegador y su código fuente es público, tú también puedes verificarla. ## Cómo impulsa el wiki Cada elemento interactivo de esta sección de investigación es este motor: las demos de DFS en vivo, las carreras de orden de relleno en [la página de caminos](/playground/paths/), el laboratorio del índice de ruptura en [el centro de solucionadores](/es/research/build/solvers/), la puntuación y la verificación del visor de tableros, y los conteos de referencia versionados que citan las páginas de investigación. La propia suite de pruebas del motor contrasta contra tableros reales de la comunidad, de modo que un cambio que rompiera la puntuación o las convenciones de rotación fallaría ruidosamente en lugar de corromper en silencio las cifras del sitio. ## Dónde conseguirlo Todo está en un solo repositorio, [github.com/raphael-anjou/eternity2](https://github.com/raphael-anjou/eternity2), y [ejecútalo tú mismo](/es/research/build/run-it-yourself/) recorre la construcción del motor, la ejecución de sus pruebas y la reproducción de los resultados publicados, comando por comando. Una salvedad sobre el estado actual: las ejecuciones de experimentos citadas en este laboratorio fueron exploratorias, sus tableros, cuando están enlazados, son verificables en el visor, y todavía no se distribuye una reproducción empaquetada de un solo comando de esas ejecuciones. ## Qué lo impulsa El motor no crece según su propio calendario; crece cuando [un experimento](/es/research/lab/experiments/) necesita algo. El solucionador tolerante a rupturas existe porque demostrar los índices de ruptura requería uno; el generador restringido al marco existe porque un laboratorio necesitaba puzzles que se comportaran como el borde real del E2. Eso mantiene el motor pequeño, y mantiene cada funcionalidad ligada a una pregunta que alguien realmente hizo. ## Relacionado - [Los motores compartidos](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/engines/) — Los motores compartidos que sustentan los experimentos de Raphaël Anjou. Los experimentos con nombre son estudios que se ejecutan sobre ellos; este es el aparato que comparten. Los preajustes CSP y la reimplementación de Verhaard están documentados por completo, junto al motor de referencia, el backtracker JIT, una guía de la velocidad y el arnés de la escalera de tamaños; los motores constructivos aún no están publicados. - [Ejecútalo tú mismo](https://eternity2.dev/es/research/build/run-it-yourself/) — Todo el sitio, el motor y cada resultado de esta sección se ejecutan desde un único repositorio. Aquí tienes cómo ponerlo en marcha, recompilar el motor WebAssembly y reproducir las cifras. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # Los motores compartidos > Los motores compartidos que sustentan los experimentos de Raphaël Anjou. Los experimentos con nombre son estudios que se ejecutan sobre ellos; este es el aparato que comparten. Los preajustes CSP y la reimplementación de Verhaard están documentados por completo, junto al motor de referencia, el backtracker JIT, una guía de la velocidad y el arnés de la escalera de tamaños; los motores constructivos aún no están publicados. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/engines/ - Actualizado: 2026-07-22 --- Los [experimentos](/es/research/lab/experiments/raphael-anjou/) son estudios: cada uno plantea una pregunta y da cuenta del tablero que alcanzó. Pero la mayoría no se construyen desde cero. Se ejecutan sobre un pequeño conjunto de motores compartidos, y el mismo motor reaparece experimento tras experimento. Esta página documenta ese aparato una sola vez, para que los estudios puedan apuntar aquí en lugar de reexplicar la máquina cada vez. El motor de referencia que impulsa las demostraciones en vivo del sitio es una máquina distinta y tiene [su propia página](/es/research/lab/experiments/raphael-anjou/engine/); aparece abajo en su papel de aparato.
- [Los preajustes CSP, medidos](/es/research/lab/experiments/single-core-benchmark/csp-presets/) — Un único motor de propagación de restricciones con ordenamientos y propagadores intercambiables: consistencia de arco, emparejamiento por grafo de colores, varios órdenes de relleno. Reimplementaciones fieles de técnicas conocidas de la comunidad, ejecutadas bajo una docena de preajustes sobre las diez variantes, de modo que el coste exacto de cada parámetro figure en la tabla de clasificación en lugar de discutirse. - [La reimplementación de Verhaard](/es/research/lab/experiments/louis-verhaard/verhaard-reimpl/) — Una reimplementación desde cero del método eii de Louis Verhaard, ya que su propio binario no incluye código fuente y no se ejecuta aquí. Recocido por intercambio sobre composición de conjuntos bajo la métrica de teselado 2×2; sobre el verdadero puzzle de cinco pistas alcanza 438 de 480, en un solo núcleo. - [El motor de referencia que impulsa este sitio](/es/research/lab/experiments/raphael-anjou/engine/) — La máquina de verificación y demostración del wiki, distinta de los motores de búsqueda compartidos: el backtracker de Rust a WebAssembly que ejecuta cada demostración en vivo y comprueba cada número citado en estas páginas, portado cuatro veces y contrastado byte a byte. - [El backtracker JIT](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profundidad, seguro y portable, especializado en tiempo de ejecución emitiendo y compilando Rust propio de cada puzzle, llevado de 43 a 123 millones de nodos de búsqueda por segundo en un núcleo y medido frente al C afinado a mano de Peter McGavin en la misma máquina. - [Ir rápido](/es/research/lab/experiments/raphael-anjou/going-fast/) — Una guía de campo de los solucionadores centrados en velocidad: qué compra el rendimiento bruto, las tres cosas distintas que la gente entiende por "rápido", y por qué el motor más rápido jamás construido sigue sin poder resolver el puzzle. - [La escalera de tamaños](/es/research/lab/experiments/raphael-anjou/scaling-ladder/) — El arnés que ejecuta cualquier solucionador, sin cambios, sobre tableros plantados totalmente resolubles con N = 8, 10, 12, 14, de modo que el tamaño de colapso de un método se mida antes de gastar semanas en el 16×16 real.
Los dos motores constructivos en los que estos estudios también se apoyan, el productor por haz y la etapa de pulido ALNS, aún no tienen su propia presentación aquí; esas páginas están retenidas por ahora, y ninguno de los dos figura en la tabla de clasificación del benchmark. Allí donde un experimento dirige a uno de ellos, su propia página dice qué hace ese motor al nivel que el estudio necesita, de modo que nada de lo que sigue depende de leer una página que aún no está aquí. Los dos motores documentados y medidos por completo son los preajustes CSP y la reimplementación de Verhaard. ## Por qué documentar los motores aparte de los experimentos Un estudio y su motor responden a preguntas distintas. El motor responde a *cómo funciona la búsqueda*: las estructuras de datos, el orden de relleno, los propagadores, y se reutiliza sin cambios en muchos estudios. El estudio responde a *qué ocurre cuando se apunta ese motor a una idea concreta*: un prior aprendido, un borde fijo, una máscara de ruptura. Mantenerlos aparte significa que un lector que quiera entender el prior de PRIOR no tenga que releer cómo funciona un haz, y que un lector que quiera el motor lo obtenga en un solo lugar, actualizado y completo. Allí donde estos motores compiten cara a cara bajo un presupuesto fijo, aparecen en el [benchmark de un solo núcleo](/es/research/lab/experiments/single-core-benchmark/). La teoría general que hay detrás de cada método vive en la sección [construir-un-solucionador](/es/research/build/); estas páginas son los motores específicos tal como se construyeron y midieron aquí. --- # Leer el futuro de una fila en sus piezas sobrantes > Una energía libre de propagación de creencias, calculada sobre las piezas sobrantes de la última fila, predice el rango del mejor final posible. La señal no es un proxy del puntaje bruto, sobrevive a un cambio de productor y muere más allá de una fila. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/frostline/ - Actualizado: 2026-07-22 - Temas: construction, structure, search-space - Reproducir: `just research-frostline` - Fuente: Yedidia, Freeman, Weiss: Understanding Belief Propagation and its Generalizations (MERL TR2001-22) — https://www.merl.com/publications/docs/TR2001-22.pdf - Fuente: Reproducción versionada: plan, script y resultados (este proyecto) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/tail-finishability-frostline --- Un constructor ordena sus tableros parciales por aristas emparejadas. Ese número no dice nada sobre si las piezas sobrantes todavía pueden terminar bien las celdas restantes. FROSTLINE pregunta si una cantidad barata tomada de la física estadística, la energía libre de Bethe de un modelo de propagación de creencias sobre las piezas sobrantes de la última fila, predice el mejor puntaje que esa fila aún puede alcanzar. En una fila, sí: rho de Spearman cerca de -0,75, con validación cruzada, y la señal sobrevive a un cambio de productor. ## Cómo funciona Se congelan las primeras quince filas de un tablero completo y se toma como reserva las dieciséis piezas que el propio tablero había colocado en la fila 15, lo que garantiza que la última fila sigue siendo completable. Después se calculan dos números por tablero: - **La etiqueta.** Un solver exacto (una programación dinámica con máscaras de bits sobre subconjuntos de piezas y colores de costura, exacta en milisegundos con 16 celdas) da el mejor puntaje de cola alcanzable: las 15 aristas internas de la última fila más las 16 aristas de costura contra la fila 14, sobre 31. - **El predictor.** Un grafo de factores sobre las dieciséis celdas vacías, con estados tomados de la reserva y factores de pareja que premian el acuerdo de color a temperatura inversa beta. Sobre él corre propagación de creencias suma-producto y se lee la energía libre de Bethe. Menor energía libre debería significar una cola más terminable. Dos decisiones de modelado importan. La cola es un problema de emparejamiento máximo, no de restricciones duras: un desacuerdo de color cuesta un punto en vez de estar prohibido, así que el grafo es un modelo blando a beta finito y no una instancia de satisfacibilidad. Y la costura contra las filas congeladas debe ser un factor blando; el estudio fuente midió que un filtro de costura duro se contradice en 5 de 16 celdas de cimas reales casi óptimas. En una fila, el grafo residual es una cadena: allí la propagación de creencias es exacta y la energía libre es el verdadero logaritmo de la función de partición. ## El resultado El estudio fuente encontró el efecto en 103 cimas distintas de un haz de anchura 2048, puntajes brutos de 446 a 452. La reproducción versionada lo regenera todo en otro régimen: 120 cimas voraces con semilla, puntajes brutos de 361 a 396, etiquetas de cola de 16 a 22. La columna esperada cita el estudio fuente; la columna medida es esta ejecución. > **[Figure]** Esperado vs medido, última fila (16 celdas) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. El umbral prerregistrado (|rho| de al menos 0,4, o AUC por encima de 0,75 o por debajo de 0,25) se supera con cada beta probado, con el signo de la fuente. Dos lecturas de la tabla: - **No es un proxy del puntaje bruto.** Controlando el conteo de aristas del propio tablero, la correlación parcial se queda en -0,74. En el régimen voraz el puntaje bruto casi no informa sobre la cola (+0,08 frente al +0,605 de la fuente), lo que hace este control más estricto aquí, no más débil. - **Mide el tablero, no el productor.** La señal se encontró en cimas de haz y se reproduce en cimas voraces, un productor distinto con una distribución de calidad más baja y más ancha. Una estadística que sobrevive a ese intercambio está leyendo las piezas sobrantes, no un artefacto de cómo se construyó el tablero. Tableros sueltos hacen concreto el punto: la [peor cima de cola](/viewer/?puzzle_size=16&board_edges=abeaachbadpcadidaftdabjfaeibaeteafoeaemfaeueabveacsbadtcadhdaacdencahhunptwhhjnttrujjkgrillkthjlourhmhjuuqlhvntqspwnpskphvjscafvcidaujsiwgsjnnpgujuogisjliwijurirsmtjprsllkptjoqwwvgksmwjuhsfadudweasoqwsujopmmuulwmslrlwvwlrnkvmpjnrilpkkgiokvkvulkmhgihrphdabmepcaqgmpjiggmrwmwvlrrtkvwvwtkvwvjgwvlorggllovmqllljmghhlpnqrbacrcocamjvogtgiwushlplukrwpwhtrwkuhwhqkruhhlgvvqmqgjovmpproqrqpcabhckfasiukgqiivprqlmtpwuhmtmsuujvmqovjhmkqvwppquiwvgourtrgqvgtbacvfjbaunrqigpnringtvvihnlvsvpnvlwvhwqlkrvwphkriqphoqnqrtrqgwstdafwbtearkgtpgnkntovvphtlsnppgmswqngqwtqjhhwkprhppjpnvokrkhvsntkfacnendarkmnnhskomnihmrmnwlmmsownhlsttkmhustsrtujminorrmhmortlgmcafhdofamnlosnnnnvjnriliwtgiopstloupklwosuhltnpgiiwgrluqqttlgkogfacrfubalrqwnpmojijpjjmiqphjsuvpkjhuttpjjistqwoiwolluisogmkiokqmcacpbtfaqikljvvijklquwokpmiwrgtmhsspqugssgruoslgkqjsssskkrvmqhwmcadgfufakounvuwolijjowuiinqwtkknsoiigtnqrvmtusuvgvgshunvvtkuwuwsdadsfgfauqnontmqjkqtugolqooiriqoommisommlnkojronijjrnvijktnlqosneabobdaagdadteadqbaegbabjbabqeacseaepbaepcablfaeqfafqeafpdaehbafcaad) de la reproducción puntúa 375 en bruto con un mejor final de 16, mientras que la [mejor](/viewer/?puzzle_size=16&board_edges=adcaadhdadsdadidacidabhcacsbadpcadgdaendabveabgbabjbacvbadtcaacdcqeahwmqsoqwiqwoiklqhvrkmqlvphjqgimhngrivvlggsgvjprsvwpptwvwcafvepdammupqgqmwwvglwvwtqqwlhuqjlthmnwlrqunlhwqgwqnrjkgpppjvulkfafudofauploqgmpvomjvuwoqnoukolnttkmwhptunvhsnnnqoqnkuwojvmulwvvfacrfhcalghhmkigmnrknpgnoqtjjklqkgikpnigvoknnjroqovjwmsomsomvpnscaepchbahruhijurrijjgqiittlqlgmtiiwgisoikqjsrtrqvvitssphouisnhhueafqbjfaumhjulwmjmllinjmlktnrwpkwgsjouvgjtrurgrtisjgpgmsigtghmkqfaemfqfahnlvhsknlgosjigguksipgnksqugvgtqrusgrhoujnthmpjnpskpkssseaesfgfallogkillommiiwpmstgwnqgtuiwqliwistjiopsttnpgjnnvkvrnswuweadwfjbaovmjlrwvmorrpprogwvjksmwutmsrsmtjuhssthuplmtrqwlrqpqooiqdafwboeamniopmonrgtmolugsnhltkknqtjkmqnthmrmhiqpmorhwuiooujuinqwfacneqbailprorgltkvruvtkmkrvuhwkjnvilomnriqolirirqvpvntqjmijqkwhcacobpcajttpgiwtvwvkollwrlslwoklvntomokqqrlukgtrgkogtvphijvvjlijcadgcrbatusrhmwuvwkrlsuhuvuskokvtrwhpnqrplsnulpllkplprhkvmtrmrwmdaftbmdasiujjpjikrphunkoushwhvjswjhhhukjsntkpwnspsuvnqosujoshhrpfadubdaaueaencaepcackfachbaftfabubafteabteaelfaeoeafibaeteadpbaeeaab) puntúa 372 en bruto con un final de 22. El tablero con menos puntaje bruto tiene el mejor final. ## Lo que no se sigue - **La señal muere más allá de una fila.** Con la misma etiqueta y el corte más arriba, la correlación de la fuente se degrada de -0,74 con 16 celdas residuales a -0,19 con 32 y -0,12 con 48, mientras el dominio medio por celda crece de 12,5 a 32,6 y 72,2. FROSTLINE es un oráculo de final de última fila, no una señal de dirección a mitad de construcción. - **No compra (todavía) mejores tableros.** En el estudio fuente, usarlo para elegir qué parciales reciben cómputo exacto no supera la elección por puntaje bruto: el puntaje final realizado lo domina la dispersión del puntaje bruto, mientras la energía libre solo predice un pequeño delta de cola. El discriminador es real; el valor de selección, en esta forma, no. - **Las cantidades secundarias dependen del régimen.** La correlación de la entropía de Bethe cambia de signo entre regímenes, y dos cantidades nulas en cimas de haz llevan señal débil en cimas voraces. Nada de esto toca el resultado principal, pero todo queda anotado como salvedad en el plan versionado. - Nada de esto mueve un puntaje de tablero completo; para el estado real de la frontera, ver la [página de récords](/es/research/records/). ## Reproducir La ejecución lleva semilla y es determinista: `just research-frostline` regenera las 120 cimas, las etiquetas exactas y la tabla completa de correlaciones en unos dos minutos con un núcleo, y reproduce el `frostline_r15.json` versionado. Es una reproducción de nivel cualitativo: se regeneran el signo y la banda de fuerza del efecto; el conjunto de cimas de haz del estudio fuente, no. La lista completa de números esperados y el argumento de fidelidad de escala viven en el plan enlazado arriba. ## Relacionado - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). --- # Ir rápido: cuando un solucionador gasta su presupuesto en velocidad > Algunos motores de Eternity II vuelcan su esfuerzo en recorrer el árbol de búsqueda lo más rápido posible; otros lo gastan en el criterio sobre dónde buscar. Este es el alegato a favor de los primeros - qué compra el rendimiento bruto, las tres cosas distintas que la gente llama «rápido» y por qué el motor más rápido jamás construido sigue sin poder resolver el rompecabezas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/going-fast/ - Actualizado: 2026-07-20 - Temas: speed, backtracking - Fuente: McGavin: even at 100M nodes/s, the 5-hint tree is 4.9×10³² years (groups.io msg 11201) — https://groups.io/g/eternity2/message/11201 - Fuente: Razvan's epitaph for the 2025 speed thread: 'we will not make a dent' (groups.io msg 11657) — https://groups.io/g/eternity2/message/11657 --- Todo solucionador de Eternity II tiene un presupuesto fijo de esfuerzo humano y tiempo de máquina, y gasta ese presupuesto en uno de dos lugares. Puede gastarlo en **velocidad** - recorrer el árbol de búsqueda tan rápido como permita el hardware, probar miles de millones de colocaciones por segundo - o en **criterio** - ser más astuto sobre *qué* colocaciones probar, para recorrer un árbol más pequeño y mejor. Esta página es el alegato a favor de los primeros: qué compra de veras ir rápido, qué no compra, y cómo hablar de ello sin engañarse. Es también el hogar conceptual de un resultado concreto: un [backtracker de Rust portable que iguala el C afinado a mano de McGavin en tableros difíciles](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) - el motor más rápido de la historia de la comunidad - y corre a alrededor del 44 % de su velocidad en los fáciles. Aquella página es el diario de ingeniería; esta es lo que el diario *significa*. ## Tres cosas que la gente llama «rápido» La mayor fuente de confusión en veinte años de discurso sobre la velocidad es que «rápido» nombra tres cantidades sin relación. Mantenerlas separadas es ganar casi toda la batalla. > **Los tres ejes, y por qué no se convierten** > > **1 · Colocaciones por segundo (alias piezas/s, nodos/s).** Cuán rápido *avanza* la búsqueda. Es un número de motor-*y-tablero*: el C de McGavin hace ~287 M en un tablero fácil pero ~105 M en uno difícil; el [motor JIT presentado aquí](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) hace ~122 M en el fácil y ~110 M en el difícil - igualando al C justo donde el rompecabezas es difícil. Mayor significa más rápido, pero siempre *en el mismo tablero*. **2 · Aristas casadas sobre 480.** Cuán *bueno* es un tablero. Ahí viven los [récords](/es/research/records/) - el techo es 470. No tiene nada que ver con el eje 1: un motor lento puede encontrar un tablero mejor que uno rápido, y lo hace a menudo. **3 · Colocaciones agregadas por segundo.** Un número de *flota* - muchas máquinas sumadas. El famoso «~300 M/s» de la comunidad que a veces se atribuye a un solo motor es en realidad el [enjambre del Eternity 2 Syndicate](/es/research/build/faster/distributed-solving/): ~20 máquinas sumadas, no un núcleo. Un número alto en el eje 1 no dice nada del eje 2, y el eje 3 no es en absoluto una velocidad de motor. Toda afirmación rigurosa de velocidad dice sobre qué eje va. Para la historia precisa y documentada de cómo la comunidad fijó su definición de «nodo» - piezas *colocadas*, al estilo del ajedrez, y por qué incluso eso favorece los órdenes de llenado por fila - véase la sección sobre disciplina de medición del [registro de ingeniería de solucionadores](/es/research/build/faster/solver-engineering/). Esta página da ese vocabulario por sentado y pregunta para qué sirve la velocidad. ## Qué compra la velocidad Cosas reales, y vale la pena ser concreto, porque el alegato *en contra* de la velocidad solo cala una vez que se respeta el alegato *a favor*. - **La enumeración verificada.** Un motor rápido y determinista puede recorrer un árbol de referencia hasta el último nodo y *contarlo*, convirtiendo la teoría en hecho comprobado. Los [benchmarks](/es/research/build/benchmarks/) de la comunidad - protocolos de censo, el 10×10 que por fin cayó tras ~180 años-núcleo - son victorias de rendimiento. No se verifica lo que no se puede terminar. - **El determinismo como suma de comprobación.** Dos motores rápidos que recorren el mismo árbol deben reportar el mismo número de nodos. Esa igualdad es como los portados, las reescrituras y el hardware nuevo demuestran que recorren el mismo árbol antes de que su velocidad signifique algo - es la columna vertebral de la [escalera de optimización del motor JIT](/es/research/lab/experiments/raphael-anjou/jit-backtracker/), donde cada peldaño se detiene en el número de nodos idéntico. - **Más intentos por segundo bajo una heurística.** La velocidad es un multiplicador del criterio: un buen bucle de reparación que corre el doble de rápido tiene el doble de oportunidades de un tablero mejor en el mismo tiempo de reloj. La velocidad no *reemplaza* al criterio, pero amplifica el que ya se tiene. ## Qué no puede comprar la velocidad El muro. Y nadie ha sido más claro al respecto que quien construyó el motor más rápido. En su mejor camino de colocación de cinco pistas - ya un árbol mucho más pequeño que el rompecabezas en bruto - McGavin calculó que incluso a cien millones de nodos por segundo la búsqueda tardaría unos **4,9 × 10³² años**, y que echarle miles de millones de núcleos aún deja «órdenes de magnitud más allá de la edad del Universo» ([msg 11201](https://groups.io/g/eternity2/message/11201)). Cuando el hilo sobre velocidad de 2025 se apagó, Razvan escribió su epitafio: por rápido que podamos verificar, «no le haremos mella» al espacio ([msg 11657](https://groups.io/g/eternity2/message/11657)). La aritmética es implacable y es la [lección central](/es/research/why/prune-vs-speed/) del sitio: una aceleración de factor constante, por muy trabajada que sea, se *multiplica contra* un número tan grande que ningún factor constante importa. Duplicar la velocidad de recorrido de una búsqueda que tardaría 10³² años da una búsqueda que tarda 5 × 10³¹ años. Encoger el *árbol* es la única palanca con exponentes. ## El experimento controlado Por eso justamente el [resultado del backtracker JIT](/es/research/lab/experiments/raphael-anjou/jit-backtracker/) se plantea como un experimento de velocidad y nada más. Responde una pregunta nítida y acotada - *¿puede el Rust portable y seguro alcanzar el rendimiento del C afinado a mano?* - y la respuesta depende del tablero: en los tableros difíciles y profundos como el rompecabezas real lo **iguala**, recorriendo el árbol idéntico; en los fáciles y poco ramificados el C es unas 2,3× más rápido. Zanja una pregunta abierta menor que la comunidad había dejado en pie: si la famosa ventaja de ~4× del motor de McGavin sobre los solucionadores «típicos» era **oficio de generación de código** o simplemente **hardware más nuevo**. Manteniendo el hardware fijo y alcanzando su velocidad *en tableros difíciles* desde código portable, se demuestra que era oficio - el mismo oficio, reproducible en un lenguaje seguro, consignado peldaño a peldaño. (También muestra dónde rinde más el oficio: en los tableros fáciles, donde el trabajo por nodo es casi gratis, su generación de código más ajustada sigue ganando.) Y luego se detiene, con honestidad, donde se detiene todo motor rápido: apuntado al rompecabezas real, se estanca en los 300 altos sobre 480, porque un backtracker estricto es un magnífico recorredor de árboles y un pobre solucionador. Los récords pertenecen a los motores que gastan su presupuesto del *otro* modo - en el [criterio de destrucción-reparación](/es/research/lab/experiments/raphael-anjou/repair-study/) y en [lo que a una búsqueda se le permite aprender](/es/research/lab/experiments/raphael-anjou/learning/) - y llegan allí a una fracción de la velocidad. Ese es todo el trato. La velocidad es real, aprendible y merece dominarse; el motor JIT prueba que se puede dominar en un lenguaje seguro. Pero en Eternity II, el carril rápido y el carril ganador no son el mismo carril. Por eso la pregunta de ingeniería interesante nunca es solo «cuán rápido» - es «rápido *¿en qué?*, y ¿es eso el obstáculo?» Una nota sobre lo que se distribuye hoy: las ejecuciones detrás de estas cifras fueron exploratorias, cualquier tablero enlazado desde estas páginas es verificable en el visor, y todavía no existe una reproducción empaquetada de un solo comando. ## Relacionado - [El backtracker JIT: Rust portable a la par del C afinado a mano en tableros difíciles](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profundidad, seguro y portable, especializado en tiempo de ejecución al emitir y compilar Rust propio de cada rompecabezas, llevado de 43 a 123 millones de nodos de búsqueda por segundo en un núcleo. Medido con justicia frente al C de Peter McGavin en la misma máquina: un empate en tableros difíciles y profundos como el Eternity II real, y alrededor del 44 % de su velocidad en los fáciles. Cada peldaño recorre el árbol idéntico; toda la ganancia es código, no algoritmo. - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. - [Ingeniería de solucionadores: el oficio bajo el algoritmo](https://eternity2.dev/es/research/build/faster/solver-engineering/) — Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. --- # El estudio de las pistas > Darle a un backtracker cinco piezas correctas gratis, en la geometría misma de las pistas del puzzle. Resulta que no ayuda, y según el orden de relleno puede dañar gravemente, porque una pieza fijada es una restricción dura que un orden de relleno fijo debe satisfacer al llegar. Una familia de órdenes de relleno, ejecutada sobre los mismos tableros con pistas, un solo núcleo, medida contra la ausencia total de pistas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/ - Actualizado: 2026-07-21 - Temas: backtracking, search-space, structure - Reproducir: `just experiments hint-study` - Fuente: Generador ejecutable + resultados versionados + scripts (el directorio de respaldo de este estudio) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study --- Hay una respuesta popular a cómo hacer Eternity II más fácil: darle al solucionador algunas piezas correctas. La siguiente pregunta natural es *cuántas*, y la propia [discusión comunitaria sobre la geometría de las pistas](/es/research/why/hint-geometry/) ya la afinó en *dónde*. Este estudio plantea algo más básico, que ambas preguntas pasan por alto: en nuestros propios tableros generados, ¿ayudan las pistas *en absoluto*? Para un backtracker cronológico, la respuesta es **no**. Sémbrelo con las cinco piezas de las pistas oficiales en sus posiciones reales del tablero, mídalo luego contra exactamente el mismo tablero sin pistas, y rinde peor en cada orden de relleno probado, sin excepción. En un barrido compacto fila por fila, las cinco piezas correctas cuestan solo de diez a veinte aristas casadas; en el orden que un recién llegado escogería primero, "llegar a las pistas y conectarlas entre sí", cuestan alrededor de trescientos cuarenta y cinco, convirtiendo uno de los mejores órdenes sin pistas en el peor. La razón es simple una vez vista: para un solucionador que rellena las celdas en un orden fijo, una pieza fijada no es información gratuita sino una **restricción dura que debe satisfacer en el momento en que llega a ella**, y a veces no puede. ## Verlo: cinco pistas, cuatro órdenes Cada tablero de abajo se rellena siguiendo un orden distinto, en bucle. Nada se está *resolviendo*; esto es solo el orden en que la búsqueda visitaría las celdas, hecho visible. La celda brillante es la recién colocada, y la estela tras ella es el **frente de onda** reciente, de modo que puede verse cuánto borde abierto mantiene cada orden mientras avanza. Ese borde abierto, la frontera, es lo que un backtracker paga: su ramificación crece con la frontera, y una frontera pequeña es también lo que deja a la búsqueda margen para rodear un fijado hostil. > **[Interactive: HintPathFill]** Rendered on the canonical page (link above); not shown in this markdown export. Un barrido fila por fila mantiene una sola frontera delgada y la hace rodar por el tablero, de modo que cuando encuentra una pieza fijada puede ajustar la única fila que está construyendo. Los órdenes que buscan las pistas hacen lo contrario. Espiralar hacia dentro o hacia fuera arrastra un anillo entero como frontera, y trazar las pistas dispersa su frente de onda por el tablero desde el primer movimiento, comprometiéndose en todas partes antes de poder saber si los compromisos son consistentes. El barrido compacto sobrevive a las cinco pistas; los órdenes que las buscan quedan deshechos por ellas. ## Qué mide el estudio Dos comparaciones emparejadas, ejecutadas sobre los mismos tableros generados: - **¿Ayudan las pistas, y qué orden les sobrevive?** Fijar las pistas (cinco, en la forma de las cinco pistas del propio Eternity II) y variar solo el orden de relleno, medido contra el tablero idéntico sin pistas. Esta es la columna vertebral del estudio: muestra que las pistas nunca ayudan, y que cuánto dañan lo determina el orden de relleno y su frontera abierta. - **El número.** ¿Ayuda añadir *más* pistas? Algo, pero la forma ingenua de medirlo está *confundida*. Un bloque de pistas agrupadas acumula gratis un montón de aristas correctas por el mero hecho de estar fijado; ese "suelo" gratuito halaga a las disposiciones agrupadas en puntuación bruta sin decir nada sobre si el tablero se volvió más fácil de *terminar*. La [página de método](/es/research/lab/experiments/raphael-anjou/hint-study/method/) define el suelo y las métricas inmunes a él (tasa de resolución y puntuación ganada) que ven a través de él. Todo aquí está construido y medido desde cero: nuestro propio generador paramétrico de tableros, nuestra propia familia de backtrackers, nuestro propio puntuador canónico, y un solucionador de haz como contraste no backtracker. No se usa ningún tablero, puzzle ni motor comunitario; solo la *forma* de la disposición de cinco pistas se toma prestada de la discusión de la lista, como geometría a probar. ## Cómo leer las cifras Cada tablero se vuelve a puntuar con un único puntuador canónico de aristas casadas que nunca cuenta una costura orientada al borde (gris), la misma convención que el [benchmark](/es/research/lab/experiments/single-core-benchmark/) y el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/). El máximo es 480. Cada una de las quince semillas es una instancia generada genuinamente distinta, no meramente una semilla de solucionador diferente, de modo que la dispersión entre semillas es varianza real de instancia a instancia y se reporta como tal. No se da por buena ninguna puntuación autodeclarada. Las comparaciones se desarrollan en la [página de resultados](/es/research/lab/experiments/raphael-anjou/hint-study/findings/); cómo se generan los tableros, por qué la receta de colores se mantiene fiel a todos los tamaños, y qué significa cada métrica están en la [página de método](/es/research/lab/experiments/raphael-anjou/hint-study/method/). ## Páginas de esta sección - [Cómo se construye el estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/method/) — El aparato detrás del estudio de las pistas: un generador paramétrico de tableros fiel a la receta de colores de Eternity II en todos los tamaños, la familia de backtrackers por orden de relleno, el único puntuador canónico, y la pieza de aritmética que mantiene significativo el eje del número, el suelo de costuras fijadas. - [Qué mostró el estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/findings/) — Los resultados, desarrollados: en estos tableros las cinco pistas con forma de pistas oficiales nunca ayudan a un backtracker, van de un coste moderado a una catástrofe, y el orden de relleno decide cuánto daño hacen; las puntuaciones son bimodales, no un gradiente suave; y la pregunta por el número de pistas está confundida por un suelo gratuito de costuras fijadas. ## Relacionado - [Los experimentos de Raphaël Anjou](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/) — Un cuaderno de experimentos de búsqueda sobre Eternity II, organizado en torno a los motores compartidos sobre los que se ejecutan, las pipelines de combinación que persiguen la puntuación, cuatro estudios que desmontan un paradigma de búsqueda una decisión a la vez, y resoluciones exactas de final de partida. Cada uno expone su idea, su mejor tablero y las preguntas que deja abiertas. El mejor alcanza 463 de 480. - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - [Dónde colocas las pistas importa más que cuántas](https://eternity2.dev/es/research/why/hint-geometry/) — En un puzzle de 16×16 construido como Eternity II, dieciocho pistas repartidas por el tablero lo resuelven en minutos, mientras que amontonarlas en filas contiguas necesita un centenar solo para bajar la búsqueda a decenas de miles de millones de colocaciones. La posición, no la cantidad, es la palanca, y apunta directamente a la fase final. --- # Qué mostró el estudio de las pistas > Los resultados, desarrollados: en estos tableros las cinco pistas con forma de pistas oficiales nunca ayudan a un backtracker, van de un coste moderado a una catástrofe, y el orden de relleno decide cuánto daño hacen; las puntuaciones son bimodales, no un gradiente suave; y la pregunta por el número de pistas está confundida por un suelo gratuito de costuras fijadas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/findings/ - Actualizado: 2026-07-21 - Temas: backtracking, structure, search-space - Fuente: Resultados por ejecución versionados (results.jsonl) y el script de análisis — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study --- El estudio fija cinco pistas en la forma de las cinco pistas del propio Eternity II, ejecuta ocho órdenes de relleno sobre los tableros idénticos, y hace una pregunta simple: ¿qué valen esas cinco pistas? Cada número de abajo es sobre quince instancias generadas distintas, un solo núcleo, ocho segundos por ejecución, re-puntuado sobre 480 por un único puntuador canónico. La comparación es emparejada, cada orden de relleno ve los mismos tableros, y la dispersión por instancia se muestra en lugar de promediarse, porque resulta que importa más que cualquier mediana. ## Las pistas no ayudan, y el orden de relleno decide cuánto dañan Empecemos por la distribución. Cada punto es un tablero; la marca es la mediana. > **[Interactive: HintStudyCharts]** Rendered on the canonical page (link above); not shown in this markdown export. Dos cosas se ven de inmediato. Primero, las puntuaciones son **bimodales**: en la mayoría de los órdenes, un tablero o trepa a los 360 o se atasca en los dos dígitos, con poco término medio. Una mediana trazada a través de eso resume una brecha, no un centro, que es exactamente por lo que se muestran los puntos. Segundo, los órdenes se separan con fuerza: los tres barridos compactos (fila por fila, su espejo de abajo arriba, el peine de Verhaard) quedan altos en la mayoría de los tableros; los órdenes fragmentadores quedan bajos de principio a fin. Pero la separación compacto-contra-fragmentador no es el verdadero hallazgo, porque invita a la pregunta equivocada, "¿qué orden *usa* mejor las pistas?". La pregunta que importa es si las pistas ayudan *en absoluto*. El segundo gráfico la responde, y la respuesta es no. Muestra el **cambio emparejado** de añadir las cinco pistas: la puntuación de cada orden en un tablero menos su puntuación en el *mismo tablero sin pistas*. Cada barra está en cero o por debajo. Las cinco pistas con forma de pistas oficiales no ayudan a un solo orden de relleno. En los barridos compactos cuestan solo de diez a veinte puntos. En la espiral hacia fuera cuestan unos noventa. Y en los dos órdenes que buscan las pistas son ruinosas: el orden `trace-hints`, que dibuja un esqueleto entre las pistas antes de rellenar, pierde unos trescientos veinticinco, y la inundación `connect-hints-first` pierde aproximadamente **trescientos cuarenta y cinco**, llevando un orden que puntúa entre los *mejores* de los ocho sin pistas al *peor* con ellas. Cuanto más deliberadamente un orden persigue las pistas, más le cuestan. Entregar al solucionador cinco piezas correctas, en la geometría misma de las pistas del puzzle, hizo peor cada versión de él. ## Por qué una pista correcta hace daño Una pieza fijada no es información gratuita para un backtracker cronológico; es una **restricción dura que el orden de relleno fijo debe satisfacer al llegar**. Cuando un barrido compacto baja rodando hasta una celda interior fijada, la pieza ya está allí, y la fila que acaba de construir tiene que casar con las caras de esa pieza. La mayor parte del tiempo puede, a un coste pequeño: el barrido esquiva la restricción y pierde unas decenas de puntos. Pero en algunos tableros la pieza fijada contradice aquello a lo que la frontera ya se comprometió, y no hay reparación local: la búsqueda choca contra un muro que no puede cruzar y se revuelve por debajo de él. Ese es el modo atascado, y son las pistas las que lo crean. En fila por fila, los tableros que se hunden a los dos dígitos son precisamente aquellos donde un fijado con forma de pista cae donde el barrido no puede honrarlo; el mismo tablero sin fijados trepa a los 360 y 370. Esto reencuadra el resultado sobre el orden de relleno. El orden sigue importando (un barrido compacto sobrevive a las restricciones de las pistas con una cicatriz de diez a veinte puntos mientras `connect-hints-first` queda destruido por ellas), pero lo que el orden compra no es "usar bien las pistas". Es **sobrevivirlas**. La frontera es el porqué: un orden que mantiene una única frontera prieta tiene margen para rodear un fijado adverso; un orden que ya se ha fragmentado en cinco manchas abiertas se ha comprometido en todas partes a la vez y no puede. Esa relación con la frontera, a través de los ocho órdenes, es llamativamente limpia, y merece mostrarse precisamente porque la frontera puede computarse desde la geometría de un orden sin ningún solucionador, y confrontarse luego con las puntuaciones medidas: > **[Interactive: FrontierPhaseChart]** Rendered on the canonical page (link above); not shown in this markdown export. La frontera abierta media que un orden mantiene predice de cerca su puntuación mediana a través de estos ocho órdenes. Es una relación descriptiva fuerte, no una ley probada sobre ocho puntos, y deja de zanjar el orden de llegada entre los órdenes fragmentadores de la derecha (la espiral hacia dentro mantiene una frontera mayor que la espiral hacia fuera y sin embargo puntúa más alto). Pero la dirección es exactamente la que el mecanismo predice: el coste de ramificación es multiplicativo en la frontera, así que un orden que mantiene la frontera pequeña conserva el margen para absorber un fijado hostil. Como contraste, el solucionador de haz, que no es un backtracker cronológico y no paga el coste de la frontera de la misma manera, alcanza una mediana en los 450 sobre estos mismos tableros con pistas. Las pistas y los tableros no están ni cerca de ser irresolubles. Es específicamente el backtracker *cronológico de orden fijo* el que no puede convertir cinco piezas correctas en progreso. ## El número: un umbral, no un gradiente, y un suelo que lo esconde La misma pregunta un nivel más allá: ¿ayuda añadir *más* pistas? La respuesta no es un suave "cuantas más, mejor", y el número bruto esconde qué parte es real. El gráfico inferior de arriba divide la puntuación de cada disposición en dos partes. El **suelo** son las costuras que los fijados completan gratis, porque sus dos extremos están fijados a la solución verdadera; la parte **ganada** es lo que la búsqueda encontró de verdad. Un bloque agrupado macizo acumula un suelo alto (cinco bloques de 4×4 fijan un cuarto de las costuras de todo el tablero antes de que la búsqueda dé un solo paso), mientras que una retícula dispersa, cuyas pistas nunca se tocan, no acumula nada. Así que una comparación de puntuación bruta regala a las disposiciones agrupadas una ventaja de cien puntos que no dice nada sobre si la búsqueda avanzó. Lea la columna ganada a través de las retículas dispersas, cuyo suelo es cero de modo que lo ganado *es* la puntuación, y aparece un umbral. Una dispersión escasa, de cuatro a dieciséis pistas, no gana casi nada (en los veintitantos): los fijados son solo restricciones dispersas con las que el barrido tropieza una y otra vez, exactamente el efecto de las cinco pistas. Pero siga añadiendo y el cuadro se invierte. Veinticinco pistas dispersas ganan 127, y treinta y seis, una retícula de seis por línea, **resuelven el tablero por completo en la mayoría de las instancias**. Por debajo del umbral las pistas dispersas solo estorban; por encima, por fin hay suficientes para trocear el tablero en piezas lo bastante pequeñas como para que el barrido las termine. No es un gradiente de ayuda, sino un muro que el número tiene que superar. Los bloques agrupados muestran la imagen especular. Su puntuación bruta es sobre todo *suelo*: cinco bloques de 4×4 (ochenta pistas, un cuarto del tablero) sí resuelven cada instancia, pero han fijado tanto tablero que lo han medio resuelto a mano. Quite el suelo y las disposiciones agrupadas por debajo de ese extremo ganan solo dos dígitos, viviendo de las costuras gratuitas. Así que la verdadera historia del número no es "más pistas ayudan" ni "más pistas dañan", sino: hace falta *un montón* de pistas correctas, dispersas o agrupadas, para mover a un backtracker cronológico, y hasta alcanzar esa cantidad los fijados extra tienen tantas probabilidades de hacer tropezar la búsqueda como de acelerarla. La [página de método](/es/research/lab/experiments/raphael-anjou/hint-study/method/) desarrolla al completo la aritmética del suelo. ## Disperso contra contiguo: obtenemos lo contrario La [redacción comunitaria sobre la geometría de las pistas](/es/research/why/hint-geometry/) formula una versión más afilada de la afirmación sobre la colocación: dieciocho pistas *dispersas* en una retícula resuelven en minutos un puzzle 16×16 de tipo E2, mientras que dieciocho apiladas en filas superiores *contiguas* apenas ayudan, y hacen falta ochenta o más pistas contiguas para igualar a las dieciocho dispersas. Ese resultado se midió en un puzzle concreto con un motor concreto. Pusimos sus dos disposiciones exactas, la retícula dispersa de las filas {1,3,5} y el bloque superior de dieciocho celdas, sobre nuestros propios tableros generados y solucionadores para ver si la dirección se sostiene. > **[Interactive: HintGeoComparison]** Rendered on the canonical page (link above); not shown in this markdown export. No se sostiene. En nuestros tableros, las dieciocho **contiguas** puntúan *más alto* que las dieciocho dispersas en siete de los ocho órdenes de relleno, y por un margen amplio: un barrido fila por fila alcanza una mediana de 377 con el bloque contiguo y solo 138 con la retícula dispersa. Esto parece una contradicción frontal, y merece la pena ser preciso sobre por qué no lo es del todo. Los dos estudios miden cosas distintas. El resultado comunitario trata del *tiempo hasta una solución completa*: las pistas dispersas alcanzan el final de partida profundo donde un backtracker gasta casi todo su tiempo, así que podan la parte cara, mientras que un bloque contiguo superior poda solo la apertura barata. Nuestro número es *puntuación de aristas casadas a presupuesto corto*, y a ocho segundos ninguno de estos backtrackers estrictos llega al final de partida. Lo que un bloque contiguo anclado arriba sí compra, de inmediato, es una gran región correcta contra la que el barrido fila por fila puede construir, así que la puntuación sube rápido aunque la parte difícil del tablero quede intacta. Las pistas dispersas, en cambio, fragmentan el relleno temprano exactamente como lo hacía la forma de cinco pistas. Así que los dos resultados son consistentes en cuanto se separa "resuelve todo el tablero con el tiempo" de "puntúa bien en los primeros ocho segundos": la colocación dispersa ayuda a lo primero y perjudica a lo segundo. La sección siguiente hace visible esa separación. ## Resolverlo: donde lo disperso por fin gana A 16×16 nada se resuelve en ocho segundos, así que la puntuación es siempre una instantánea de una búsqueda todavía en su apertura. Para ver el efecto de *final de partida* que la comunidad reportó, necesitamos un tablero que se resuelva por completo. Un 8×8 construido con la misma receta de colores lo hace, en bastante menos de un segundo, así que sobre él podemos medir la cantidad que de verdad importa: el número de nodos de búsqueda que un backtracker fila por fila necesita para alcanzar una solución completa. Menos nodos significa que las pistas hicieron trabajo real de poda. Abajo, una retícula dispersa y un bloque contiguo emparejado, a números de pistas crecientes. > **[Interactive: SolveSpeedChart]** Rendered on the canonical page (link above); not shown in this markdown export. Esta es toda la historia en un gráfico, y por fin encaja con la afirmación comunitaria. Con cuatro pistas la retícula dispersa es *peor* que inútil, resolviendo solo dos de treinta tableros, el mismo efecto de pistas-escasas-que-hacen-tropezar de cada uno de los otros ejes, mientras que el bloque contiguo emparejado los resuelve casi todos. Pero cruce un umbral en torno a dieciséis pistas y las líneas se intercambian con fuerza: una retícula dispersa de dieciséis pistas se resuelve en unos cuatro mil nodos, mientras que el bloque contiguo emparejado todavía muele casi dos millones, una diferencia de quinientas veces al mismo número de pistas. Empuje más lejos y ambas disposiciones se vuelven fáciles (con treinta y seis pistas un cuarto del tablero está fijado y cualquiera de las dos se resuelve en unos cientos de nodos), así que la ventaja dispersa es una ventana, la más ancha donde el número basta para alcanzar la búsqueda profunda pero no es tan grande que el tablero esté medio resuelto a mano. En esa ventana, las pistas dispersas alcanzan la parte de la búsqueda con la que un backtracker de verdad batalla y la cortan de raíz, exactamente como Joe y Peter McGavin lo describieron; un bloque contiguo solo poda la apertura fácil. La comparación de puntuaciones a 16×16 solo pareció contradecirlos porque a presupuesto corto la búsqueda nunca vive lo suficiente para llegar a la región donde la colocación dispersa rinde. ## Lo que dice y lo que no dice Este es un resultado sobre **backtrackers estrictos, cronológicos, en profundidad**, sobre tableros 16×16 generados con la receta de colores de Eternity II, a presupuesto corto (ocho segundos). Cada una de esas palabras de acotación se gana su lugar. *Cronológico*: el resultado es específico de los solucionadores que rellenan celdas en un orden fijo y deben satisfacer una pieza fijada cuando la alcanzan, un solucionador de haz, que no lo hace, llega a los 450 en los mismos tableros. *Generado*: los tableros comparten la receta de colores de E2 y la *forma* de sus cinco pistas, pero no son el puzzle oficial, y el estudio no le transfiere ningún número. *Presupuesto corto*: ninguno de estos backtrackers estrictos resuelve en ocho segundos, así que esto mide hasta dónde llega cada uno, no una carrera hacia 480; si el efecto "las pistas dañan" sobrevive a presupuestos mucho más largos queda sin probar aquí. Dentro de ese ámbito la lección es sólida y, creemos, contraintuitiva: para un backtracker cronológico, cinco piezas correctas colocadas en la geometría misma de las pistas del puzzle no son un regalo sino una restricción, y pueden costar mucho más de lo que dan. Lo que decide el daño no son las pistas sino el orden de relleno que tiene que vivir con ellas, y el orden paga una pista como paga todo lo demás, en el tamaño de la frontera que mantiene abierta. Es una lectura más de [por qué el puzzle se resiste](/es/research/why/hint-geometry/): incluso la información correcta solo ayuda a un solucionador construido para recibirla. ## Relacionado - [El estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/) — Darle a un backtracker cinco piezas correctas gratis, en la geometría misma de las pistas del puzzle. Resulta que no ayuda, y según el orden de relleno puede dañar gravemente, porque una pieza fijada es una restricción dura que un orden de relleno fijo debe satisfacer al llegar. Una familia de órdenes de relleno, ejecutada sobre los mismos tableros con pistas, un solo núcleo, medida contra la ausencia total de pistas. - [Cómo se construye el estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/method/) — El aparato detrás del estudio de las pistas: un generador paramétrico de tableros fiel a la receta de colores de Eternity II en todos los tamaños, la familia de backtrackers por orden de relleno, el único puntuador canónico, y la pieza de aritmética que mantiene significativo el eje del número, el suelo de costuras fijadas. - [Dónde colocas las pistas importa más que cuántas](https://eternity2.dev/es/research/why/hint-geometry/) — En un puzzle de 16×16 construido como Eternity II, dieciocho pistas repartidas por el tablero lo resuelven en minutos, mientras que amontonarlas en filas contiguas necesita un centenar solo para bajar la búsqueda a decenas de miles de millones de colocaciones. La posición, no la cantidad, es la palanca, y apunta directamente a la fase final. - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. --- # Cómo se construye el estudio de las pistas > El aparato detrás del estudio de las pistas: un generador paramétrico de tableros fiel a la receta de colores de Eternity II en todos los tamaños, la familia de backtrackers por orden de relleno, el único puntuador canónico, y la pieza de aritmética que mantiene significativo el eje del número, el suelo de costuras fijadas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/method/ - Actualizado: 2026-07-21 - Temas: backtracking, structure, search-space - Fuente: El generador paramétrico y el motor de órdenes de relleno (el directorio de respaldo de este estudio) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study --- Esta página es el aparato detrás del [estudio de las pistas](/es/research/lab/experiments/raphael-anjou/hint-study/): cómo se generan los tableros, por qué se mantienen fieles a Eternity II en todos los tamaños, la familia de órdenes de relleno, y la pieza que más importa para leer correctamente los resultados, la aritmética del *suelo de costuras fijadas*, que es lo que separa un efecto real de un artefacto de medición en el eje del número. ## Los tableros: un generador fiel, paramétrico en tamaño Cada instancia se genera desde cero, con semilla y determinista: el mismo triplete `(size, colours, seed)` produce el mismo tablero en cualquier máquina. Un tablero generado es un tablero *resuelto*, la pieza $i$ ocupa la celda $i$ con rotación cero, cuyos identificadores de pieza se reetiquetan después mediante una permutación con semilla, de modo que una pista para la celda `pos` fija la pieza verdadera (reetiquetada), y un solucionador no puede simplemente recorrer la colocación identidad. La receta de colores refleja exactamente la estructura del puzzle oficial. En un tablero $n\times n$ hay $$ E(n) \;=\; 2\,n\,(n-1) $$ costuras interiores (las aristas casadas; $E(16) = 480$). Estas se dividen en una **banda de marco**, las costuras que unen dos piezas de borde a lo largo del perímetro, y el interior profundo. Los cinco *colores de borde* están confinados a la banda de marco y nunca aparecen en el interior; los *colores interiores* aparecen tanto en el interior profundo como en la cara orientada hacia dentro de las piezas de borde. Este es el hecho estructural definitorio de un tablero Eternity II real, y el generador lo reproduce y se testea contra él. ### Por qué el censo está automáticamente equilibrado (una afirmación que conviene enunciar con cuidado) Es tentador, y las primeras redacciones lo hicieron, presentar el censo de colores *par* de Eternity II como un regalo especialmente afinado: cada color aparece un número par de veces, de modo que los emparejamientos $\sum_c N_c / 2$ de una solución perfecta encajan con holgura cero. La paridad par es real, pero **no** es un logro de afinado. Está forzada. Un color pintado sobre $k$ costuras interiores aparece en exactamente $2k$ caras de pieza, una a cada lado de cada costura. Así que para todo color $c$, $$ N_c \;=\; 2\,k_c \quad\text{es par, para cualquier coloreado de costuras.} $$ La paridad de holgura cero es por tanto automática para *cualquier* tablero construido coloreando costuras; no dice nada especial sobre Eternity II. Las propiedades que de verdad soportan carga, y que el generador debe conseguir, son tres: los colores de borde confinados a la banda de marco, los recuentos por color mantenidos **equilibrados** (para que ningún color sea tan escaso que sobre-restrinja), y cada pieza **distinta salvo rotación** (para que una pista fijada nombre una pieza única). La redacción del estudio es precisa en esto donde el encuadre anterior no lo era. ### Escalar la receta sin cambiar la dificultad El generador y el solucionador son ambos paramétricos en tamaño, el tablero puede ser $8\times8$ o $12\times12$ con la misma facilidad que $16\times16$, lo que abre una continuación natural: ¿se *refuerza* el efecto de la colocación conforme el tablero crece? Responder eso limpiamente necesita una receta de colores que no cambie la *dificultad* del puzzle cuando cambia el tamaño. Mantener simplemente fijos los *recuentos* de colores mientras crece $n$ haría el puzzle estructuralmente *más fácil* a $n$ grande: con más costuras y la misma paleta, cada color se repite más a menudo, la celda media acepta más vecinos y la restricción se afloja. Eso confundiría tamaño con dificultad. En su lugar, la receta mantiene la **multiplicidad por color** aproximadamente constante. Escribiendo $F(n)$ para el número de costuras de la banda de marco y $E(n) - F(n)$ para el interior, el número de colores de borde e interiores se elige como $$ b(n) \;=\; \operatorname{round}\!\Big(\tfrac{F(n)}{12}\Big), \qquad i(n) \;=\; \operatorname{round}\!\Big(\tfrac{E(n) - F(n)}{24}\Big), $$ apuntando a las multiplicidades que el propio Eternity II usa en $n=16$ (borde $\approx 12$, interior $\approx 24$). En $n=16$ esto devuelve exactamente la receta oficial, cinco colores de borde y diecisiete interiores. Conseguir esto en tableros pequeños exigió una corrección del generador. La paleta de Eternity II es *de dominante interior*, cinco colores de borde frente a diecisiete interiores, pero el generador por defecto limita el número de colores de borde a cinco y toma todo lo demás como interior, lo que en un tablero pequeño invierte la proporción: en $8\times8$ la receta quiere ocho colores, y el tope los repartiría en cinco de borde y uno interior, un mar interior casi uniforme que no se comporta en nada como E2. El generador acepta ahora un número explícito de colores de borde, y la receta mantiene el interior en aproximadamente el triple del borde en cada tamaño ($8\times8 \to$ dos de borde, seis interiores; $16\times16 \to$ cinco y diecisiete, sin cambio). Con eso, los tableros pequeños son fieles *y* plenamente resolubles, que es de lo que depende la comparación de velocidad de resolución de la [página de resultados](/es/research/lab/experiments/raphael-anjou/hint-study/findings/). Los resultados principales de órdenes y número están todos a $16\times16$; el tablero $8\times8$ se usa solo donde hace falta una resolución completa. ## Las geometrías de pistas Cada disposición es una función pura del tamaño del tablero, de modo que la misma geometría puede dibujarse, medirse y escalarse de forma consistente. La galería de abajo las renderiza todas desde la única primitiva de tablero compartida. > **[Interactive: HintLayoutGallery]** Rendered on the canonical page (link above); not shown in this markdown export. ## El suelo de costuras fijadas: mantener significativo el eje del número Aquí está la sutileza que remodeló el estudio. Pregunte "¿ayudan más pistas?" y el movimiento obvio es comparar puntuaciones finales con distintos números de pistas. Pero una pista hace dos cosas distintas a la vez, y la puntuación las confunde: 1. **retira una pieza** de la búsqueda (la parte útil, poda el árbol); 2. **puede completar una costura gratis**, si una celda vecina también está fijada. El segundo efecto es un puro regalo contable. Definamos el **suelo de costuras fijadas** de una disposición como el número de costuras interiores con *ambos* extremos fijados: $$ \text{suelo} \;=\; \#\{\, \text{costuras interiores } (u,v) : u \text{ y } v \text{ ambas con pista} \,\}. $$ Como los fijados son piezas de la solución verdadera, cada una de esas costuras está garantizada correcta antes de que el solucionador arranque. Un bloque agrupado macizo de $k\times k$ aporta $2k(k-1)$ de ellas; cinco bloques de $k{=}4$ acumulan $5 \cdot 24 = 120$ costuras correctas, un **cuarto de las 480 totales**, gratis. Una retícula dispersa, cuyas pistas nunca se tocan, tiene un suelo de **cero**. Así que una comparación de puntuación bruta **halaga** sistemáticamente a las disposiciones agrupadas: parten con más de cien puntos de ventaja por pura contabilidad, con independencia de si el tablero se volvió más fácil de *terminar*. Es la misma familia de error que contar las costuras del perímetro en un tablero parcial, un suelo que infla el número sin reflejar progreso. El conmutador de la galería de arriba dibuja esas costuras acumuladas para que la puntuación gratuita sea visible. El estudio, por tanto, no clasifica las disposiciones por puntuación bruta en el eje del número. Usa dos métricas inmunes al suelo: - la **tasa de resolución**, la fracción de instancias que un orden completa de verdad hasta 480; - la **profundidad alcanzada**, cuánto avanzó la búsqueda más allá de las celdas fijadas, sobre 256. Ambas miden si la búsqueda hizo *un progreso que los fijados no le regalaron*. En el eje de los órdenes, donde cada disposición comparada comparte las *mismas* pistas y por tanto el mismo suelo, la puntuación bruta es directamente comparable y se usa. ## Medir contra la ausencia de pistas, emparejado por instancia La pregunta "¿qué valen las pistas?" solo tiene respuesta relativa a *no* tenerlas. Así que el eje de los órdenes se ejecuta dos veces en cada tablero: una con las cinco pistas en forma de pistas oficiales, otra sin ninguna (`baseline_00`), y el efecto reportado es la **diferencia emparejada**, la puntuación con pistas menos la puntuación sin pistas sobre el *mismo* tablero generado. Emparejar por instancia elimina la varianza de dificultad de tablero a tablero, que en estos tableros bimodales es lo bastante grande como para ahogar el efecto si las dos condiciones se compararan sobre semillas distintas. Una diferencia emparejada negativa significa que las pistas hicieron ese orden de relleno peor de lo que era con un interior en blanco, que es lo que reportan los resultados. Todas las comparaciones usan el conjunto común de semillas que llegaron a término, de modo que cada orden y cada disposición se agregan sobre las instancias idénticas. ## Los órdenes de relleno, y por qué la frontera es la palanca El motor es el [backtracker DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/) hermano de este estudio, ejecutado en estricto (sin rupturas, sin propagación) de modo que **el orden de relleno sea lo único que cambia**. Los órdenes probados son fila por fila, su espejo de abajo arriba, la espiral hacia dentro, la espiral hacia fuera, borde primero, el peine de Verhaard, un control de filas-de-pistas-primero, y el orden propio del estudio que busca las pistas, `connect-hints-first`. ¿Por qué importa tanto el orden? El coste de un backtracker lo gobierna la **frontera abierta**: el conjunto de celdas ya rellenas todavía adyacentes a una vacía. Cuando la siguiente celda se coloca contra una frontera de tamaño $f$, el número de tableros parciales que la búsqueda puede tener que considerar crece multiplicativamente en $f$, la ramificación es exponencial en la frontera, no en el tablero. Un único barrido compacto mantiene $f$ en torno a una fila ($\approx n$); un orden que abre manchas alrededor de $k$ pistas dispersas lleva $k$ fronteras a la vez, y $$ \text{trabajo} \;\sim\; \prod_{j} b^{\,f_j} \;=\; b^{\sum_j f_j}, $$ de modo que fragmentar el relleno en regiones desconectadas multiplica el coste, no lo suma. Esto es exactamente por lo que `connect-hints-first`, el orden que *busca* las pistas, es el peor: alcanzar las pistas pronto vale mucho menos que mantener la frontera pequeña, y conectar anclas dispersas hace justo lo contrario de mantenerla pequeña. ## Cómo leer las cifras Cada tablero se vuelve a puntuar con un único puntuador canónico de aristas casadas que nunca cuenta una costura orientada al borde (gris). El máximo es $E(n)$ ($480$ en $16\times16$). Cada una de las quince semillas es una instancia generada distinta, así que la dispersión entre semillas es varianza genuina de instancia. El rendimiento, donde se reporta, es en nodos de búsqueda por segundo y nunca se compara entre órdenes distintos, porque un nodo bajo un orden no es la misma unidad de trabajo que bajo otro. Todo el aparato, generador, disposiciones, resultados por ejecución y el script de rejilla, vive en el [directorio de respaldo](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study) del estudio, y `just experiments hint-study` lo relanza todo. ## Relacionado - [El estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/) — Darle a un backtracker cinco piezas correctas gratis, en la geometría misma de las pistas del puzzle. Resulta que no ayuda, y según el orden de relleno puede dañar gravemente, porque una pieza fijada es una restricción dura que un orden de relleno fijo debe satisfacer al llegar. Una familia de órdenes de relleno, ejecutada sobre los mismos tableros con pistas, un solo núcleo, medida contra la ausencia total de pistas. - [Qué mostró el estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/findings/) — Los resultados, desarrollados: en estos tableros las cinco pistas con forma de pistas oficiales nunca ayudan a un backtracker, van de un coste moderado a una catástrofe, y el orden de relleno decide cuánto daño hacen; las puntuaciones son bimodales, no un gradiente suave; y la pregunta por el número de pistas está confundida por un suelo gratuito de costuras fijadas. - [Dónde colocas las pistas importa más que cuántas](https://eternity2.dev/es/research/why/hint-geometry/) — En un puzzle de 16×16 construido como Eternity II, dieciocho pistas repartidas por el tablero lo resuelven en minutos, mientras que amontonarlas en filas contiguas necesita un centenar solo para bajar la búsqueda a decenas de miles de millones de colocaciones. La posición, no la cantidad, es la palanca, y apunta directamente a la fase final. --- # El backtracker JIT: Rust portable a la par del C afinado a mano en tableros difíciles > Un backtracker Rust en profundidad, seguro y portable, especializado en tiempo de ejecución al emitir y compilar Rust propio de cada rompecabezas, llevado de 43 a 123 millones de nodos de búsqueda por segundo en un núcleo. Medido con justicia frente al C de Peter McGavin en la misma máquina: un empate en tableros difíciles y profundos como el Eternity II real, y alrededor del 44 % de su velocidad en los fáciles. Cada peldaño recorre el árbol idéntico; toda la ganancia es código, no algoritmo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/jit-backtracker/ - Actualizado: 2026-07-20 - Temas: speed, backtracking - Reproducir: `cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- --puzzle P.json --chain2 --opt native` - Fuente: Peter McGavin's genbody71.zip — the C reference this engine chases (groups.io msg 11749) — https://groups.io/g/eternity2/message/11749 - Fuente: rust-lang/rust#80630 — LLVM cannot lower loop+match to a computed goto (why the function-chain design exists) — https://github.com/rust-lang/rust/issues/80630 - Fuente: The eternity2 repository on GitHub — https://github.com/raphael-anjou/eternity2 --- > **Qué es este experimento, y qué no es** > > Es un experimento de **velocidad**, no de resolución. Plantea una sola pregunta: ¿puede un backtracker de Rust *seguro y portable* alcanzar el rendimiento del motor más rápido de la comunidad - el [C afinado a mano de Peter McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) - sin salir de Rust ni bajar a ensamblador? La respuesta depende del tablero: en los tableros **difíciles y profundos como el Eternity II real, iguala a su C**; en los fáciles y poco ramificados, su C es unas **2,3× más rápido**. No dice nada de los *puntajes*: recorrer el árbol rápido y encontrar un tablero de alto puntaje son [ejes completamente distintos](/es/research/lab/experiments/raphael-anjou/going-fast/). Lo mejor que este motor alcanza en el rompecabezas real está en los 300 altos sobre 480, justo donde un backtracker estricto debe detenerse - los tableros récord vienen de metaheurísticas, no de recorrer más rápido. Todo motor rápido de Eternity II es, por debajo, el mismo backtracker en profundidad: llenar celdas en un orden fijo, probar cada pieza que encaja, descender, retroceder al primer callejón sin salida. La [página de McGavin](/es/research/lab/experiments/peter-mcgavin/backtracker/) cuenta la historia del rendimiento del motor C que lleva años ostentando la corona de velocidad mononúcleo de la comunidad. Esta página es la otra cara: cuánto puede acercarse el *Rust portable*, y dónde cae la línea rigurosa. El resultado depende del tablero, y ahí está lo interesante. Medido en mi Apple M1, en un núcleo, ambos motores compilados sin pantalla con generación de código nativa y ejecutados uno tras otro: | Tablero | C de McGavin (sin pantalla) | Este motor | Resultado | | --- | --- | --- | --- | | Fácil (71.puz de Joe, 18 pistas) | ~287 M/s | ~122 M/s | McGavin **~2,3×** | | **Difícil (16×16 profundo, como el E2 real)** | **~102–105 M/s** | **~104–111 M/s** | **~empate** | En los tableros que de veras se parecen a Eternity II - profundos, densamente restringidos, donde la búsqueda pasa el tiempo retrocediendo - un motor Rust seguro y portable **iguala al C afinado a mano**. En los tableros fáciles y poco ramificados, donde casi no hay nada que hacer por nodo, el C en línea recta de McGavin es más del doble de rápido. Ambos números son reales; la ingeniería de abajo es lo que llevó a Rust al empate en tableros difíciles. Todo lo que sigue es **generación de código y disposición de datos**, no una búsqueda más astuta: cada peldaño recorre el árbol *idéntico* y, en un tablero de prueba soluble, se detiene en el *mismo número de nodos*. Ese invariante es la columna vertebral de todo el experimento, así que conviene enunciarlo primero. > **Mide la referencia a plena velocidad, o te engañarás a ti mismo** > > Una versión anterior de este trabajo informó que *superábamos* a McGavin sin más. Era falso, y la razón es instructiva. El motor de McGavin trae una pantalla de terminal en vivo (`#define INTERACTIVE`): un estado que redibuja sin cesar. Esa pantalla le cuesta cerca del **2,7× de su rendimiento** - su velocidad sin pantalla es ~287M en el tablero fácil, pero con la pantalla lee ~106M. La primera comparación enfrentó nuestro motor sin pantalla con su binario *frenado* y produjo una victoria fantasma. Reconstruido sin pantalla (`-mcpu=native`), el cuadro real es el de arriba: gana el tablero fácil con holgura, y empatamos en los difíciles. La lección es general: construye siempre la referencia tal como corre a plena velocidad antes de fiarte de un cociente. ## La regla del juego: el mismo árbol, en cada peldaño Un backtracker en profundidad es determinista. Dado un tablero y un orden de llenado fijo, visita exactamente una secuencia de nodos, en cualquier máquina, en cualquier lenguaje. Existe pues una prueba implacable para saber si una «optimización» es de veras solo una aceleración y no un cambio silencioso de la búsqueda: **el número de nodos no debe moverse.** A lo largo de este trabajo, el oráculo fue un 16×16 soluble con 60 pistas. Cada versión del motor lo resuelve a 480 y reporta **251 815 nodos** - el mismo número, hasta el dígito, desde la referencia más lenta hasta el build fusionado más rápido. Todo cambio que moviera ese número era un fallo disfrazado y se revirtió. Esa sola disciplina es lo que permite leer la escalera de velocidad de abajo como una comparación en igualdad de condiciones, y no como una colección de programas de comportamiento distinto. > **Aquí la corrección es un invariante de base, no un hito** > > El motor verifica las cuatro aristas de cada colocación contra cada vecino ya fijado (pieza colocada o el borde del marco), y prohíbe que una arista de borde/gris mire hacia el interior. No son optimizaciones «añadidas después» - son la definición de una colocación legal de Eternity II, presente en cada versión de esta página. La escalera solo varía la velocidad de una búsqueda fija y correcta. ## La idea central: generar el programa, no interpretar el rompecabezas Un backtracker genérico paga, en cada nodo, preguntas cuya respuesta nunca cambia durante una ejecución: *¿en qué celda estoy? ¿dónde están sus vecinos? ¿qué reserva de candidatos leo?* Un bucle guiado por tablas las busca en arreglos, por nodo, sin fin. El C de McGavin las responde **una vez, al compilar**, generando un programa especializado para un rompecabezas: `genbody -DG` escribe un segundo archivo C con un bloque en línea recta por celda, las direcciones de los vecinos grabadas como constantes, y cadenas de `goto` enlazando los bloques. Esa especialización es la fuente de su velocidad - mismo algoritmo, ejecutado a ras del metal. Este motor hace lo mismo en Rust, en tiempo de ejecución: 1. `emit_program(&instance)` escribe un **programa Rust autónomo y especializado para el rompecabezas** - piezas, reservas de candidatos, pistas y orden de llenado todo grabado como datos `const`, sin crates externas. 2. La envoltura lo compila con `rustc -O` (unos 0,15 s para el build simple, ~1,7 s para el fusionado). 3. El binario generado ejecuta la búsqueda e imprime su resultado. Es el flujo `genbody -DG → compila → ejecuta` de McGavin, en Rust, invocado como una biblioteca. Nada exótico - solo sacar los hechos fijos del rompecabezas del bucle caliente y ponerlos en manos del compilador. Todo lo que sigue es exprimir factores constantes del código generado, y cada exprimido es un cambio pequeño y autónomo que un diff ilustra mejor. ## La escalera, un cambio a la vez Los diffs de abajo están **simplificados para leer**: el motor real emite su bucle interno como Rust generado (constantes como la posición de una celda y sus vecinos van grabadas por celda, y la fuente son unos cientos de líneas por rompecabezas). Cada diff muestra la idea del cambio, no el texto generado literal - ejecuta el motor con `--emit-src out.rs` para ver el código real de un tablero dado. ### 1 · Empaquetar cada candidato en una palabra El primer bucle generado aún perseguía un puntero: leer un índice `u32`, seguirlo hasta un arreglo `oriented[]` por el `(id, rotación, aristas)` de la pieza, *y luego* probar si la pieza ya estaba usada. Tres cargas dependientes para considerar un candidato. ```diff - let idx = pool[i]; // load an index … - let (pid, rot, edges) = oriented[idx as usize]; // … chase it into a second array … - if !used[pid] { /* consider */ } // … then test usage + let cand = pool[i]; // one contiguous load: pid<<48 | rot<<40 | edges<<8 + let pid = (cand >> 48) as usize; + if free[pid] != 0 { let edges = (cand >> 8) as u32; /* consider */ } ``` Cada candidato pasa a ser un único `u64` empaquetado, guardado directamente en su reserva `(up, left)`. El bucle caliente hace **una** carga, extrae el id de la pieza y prueba el uso *antes* de desempaquetar las aristas - el patrón «verificar `tileFree` primero» de McGavin. **+12 %**, y sienta la representación empaquetada de la que depende todo el resto del trabajo. ### 2 · Guardar las celdas del tablero en un `u32`, no cuatro bytes El tablero guardaba las cuatro aristas de cada celda como `[u8; 4]`. Leer la arista de un vecino para compararla exigía cuatro cargas de byte separadas. McGavin guarda las aristas de cada ficha colocada como **un solo `u32`** y las empuja a los vecinos con desplazamientos. ```diff - let cell: [[u8; 4]; N]; // four byte loads to read one neighbour - let up_edge = cell[up_pos][2]; // …and index arithmetic each time + let cell: [u32; N]; // one u32 per cell, URDL packed, empty = 0xFFFF_FFFF + let up_edge = (cell[up_pos] >> 8) as u8; // one load + one shift ``` Fue la mayor palanca de disposición de datos: **34 → 57 M nodos/s, +67 %**. Número de nodos sin cambios. Representar bien la estructura de datos más caliente (el tablero) importó más que cualquier micro-optimización posterior. ### 3 · Emitir una función por celda - el punto de inflexión Este es el gesto que hizo «igualar a McGavin» plausible. El impuesto restante era el propio bucle guiado por tablas: `free_order[level]`, `cursor[level]`, `score_at[level]` - cargas de arreglos indexados en *cada nodo*, para valores que McGavin tiene como constantes de compilación. La forma obvia de grabarlos - un único `loop { match level { …256 ramas… } }` enorme - no funciona: `rustc` tarda más de un minuto en compilar una sola función gigante, y [LLVM no sabe rebajar un `loop`/`match` a un goto calculado](https://github.com/rust-lang/rust/issues/80630) de todos modos, así que ni reproduciría la estructura de `goto` de McGavin. La forma que *sí* funciona es emitir **una pequeña función `#[inline(never)]` por celda**: ```diff - // one generic loop, indexing arrays by depth on every node - loop { - let pos = free_order[level]; - let (up_pos, left_pos) = neigh[level]; - // …scan, place, advance level, or back out… - } + // one function per cell; its position and neighbours are baked constants + fn cell_37(st: &mut St, left_arg: u8) -> bool { + const POS: usize = 138; const UP: usize = 122; // this cell's facts, as constants + for cand in POOL_UL[/* up*COLORS+left */] { // its exact candidate pool + // place … + if cell_38(st, right_edge) { return true; } // advance = call the next cell + // unplace … + } + false // exhausted = plain return (backtrack) + } ``` Avanzar es una llamada a la función de la celda siguiente; retroceder es un simple `return`. Unas 256 funciones *pequeñas* compilan en unos dos segundos (una cadena de 200 funciones compila en ~1 s; la función gigante única tardaba >60 s). Es el código en línea recta por celda de McGavin, expresado como una cadena de funciones diminutas que Rust sí compilará. **58 → 92 M nodos/s, +56 %** - la mayor palanca de la escalera. Número de nodos sin cambios. ### 4 · Dejar de recalcular lo que ya se cargó Dos cambios menores, mismo tema: nunca releer de memoria algo que ya se tiene en un registro. El **vecino de la izquierda** de una celda es, el 94 % del tiempo (240 de las 256 celdas, todas salvo los inicios de fila), exactamente la pieza que la celda *llamadora* acaba de colocar. La llamadora pasa entonces su propia arista derecha como argumento, y la celda deriva su restricción izquierda sin ninguna lectura del tablero: ```diff - let left_edge = (cell[LEFT] >> 24) as u8; // re-read the neighbour we just placed + fn cell_38(st: &mut St, left_arg: u8) -> bool { // caller handed us its right edge + let left = left_arg; // …no board read ``` Y la **ganancia de coincidencia** - cuántas aristas recién casadas añade una colocación - releía los cuatro vecinos. Pero las aristas de arriba y de la izquierda *ya estaban cargadas* para elegir la reserva de candidatos, y en el orden por fila esos vecinos siempre están colocados (o una arista de marco, sin ganancia). Así que la ganancia arriba/izquierda pasa a ser dos sumas `bool → u32` sin ramas sobre valores ya en mano; solo vecinos abajo/derecha realmente fijados cuestan una lectura: ```diff - let gain = matched(up) + matched(left) + matched(down) + matched(right); // 4 reads + let gain = u32::from(e_up == up) + u32::from(e_left == left) // 0 reads: cached + + need_down_read + need_right_read; // only if pinned ``` Juntos: **92 → 106 M nodos/s** - en el tablero difícil, esto empareja con el C sin pantalla de McGavin (~102–105 M allí). Número de nodos sin cambios. ### 5 · Un arreglo de bytes para el conjunto de piezas usadas El motor rastreaba las piezas colocadas con un mapa de bits `u64`: desplazar, enmascarar, y, probar. McGavin usa un `unsigned char tileFree[256]` plano; su prueba es una carga de byte y una comparación con cero. ```diff - if used[pid >> 6] & (1u64 << (pid & 63)) == 0 { /* free */ } // shift, mask, and, test + if free_pc[pid] != 0 { /* free */ } // one byte load + compare ``` **106 → 108 M.** Número de nodos sin cambios. ### 6 · Fusionar celdas para amortizar la llamada - la jugada ganadora Lo último entre la cadena de funciones y el `goto` de McGavin era la propia llamada: un `goto` a la celda anterior es un salto desnudo; un `return` de función restaura primero los registros guardados por el llamado. Así que **fusionemos varias celdas en una función** - anidemos el barrido de la segunda celda *dentro* del bucle de colocación de la primera, la tercera dentro de la segunda, y así, para tener una `call` por *grupo* de celdas colocadas en vez de una por celda: ```diff - fn cell_37(st){ for c in pool { place; if cell_38(st, r) {return true} unplace } } - fn cell_38(st){ for c in pool { place; if cell_39(st, r) {return true} unplace } } + fn cells_37_38_39(st){ // three cells, one function, one call in/out + for c37 in pool37 { place37; + for c38 in pool38 { place38; + for c39 in pool39 { place39; + if next_group(st, r) {return true} + unplace39 } + unplace38 } + unplace37 } ``` La fusión cambia menos llamadas por más presión sobre los registros, de modo que hay un óptimo, y es poco marcado. Barriendo el tamaño del grupo en `bench-hard`, tres pruebas cada uno, uno tras otro: | grupo | 1 | 2 | 4 | 6 | 8 | | --- | --- | --- | --- | --- | --- | | nodos/s | ~102 M | ~107 M | **~110 M** | ~108 M | ~108 M | La fusión bate claramente a la ausencia de fusión (grupo 1), pero más allá del grupo 2 las diferencias caen dentro del ruido de una ejecución a otra: el pico vaga entre los grupos 4 y 6 según el tablero y el humor del asignador de registros de LLVM, y nunca supera un par de por ciento. El valor por defecto de `--chain2` es el grupo 6; el grupo 4 se adelantó en este tablero concreto. Lo que importa es el salto desde el grupo 1, no el ganador exacto. El número de nodos se preserva a través del anidamiento en cualquier caso. ## La escalera de un vistazo Tres puntos de anclaje se revierifican hoy sobre los tableros `bench-*.json` commitidos; los pasos entre ellos son los deltas tomados durante el desarrollo (cada uno un commit autónomo), que derivan un par de por ciento según el estado de la máquina - así que lee las filas del medio como la *forma* de la subida, no como constantes de laboratorio. | Peldaño | Motor | Cambio | estado | | --- | --- | --- | --- | | **naive-clean** | recursivo | DFS Rust portable simple, la referencia rigurosa | **~44 M, verificado** | | **JIT guiado por tablas** | codegen | programa generado, bucle interno por tablas | **~61 M, verificado** | | celdas del tablero en u32 | codegen | una carga + desplazamiento por vecino | +~65 % (diario) | | cadena de funciones | codegen | una función por celda | +~55 % (diario) ★ | | arriba/izquierda en caché + bytes | codegen | dejar de releer los vecinos colocados | +~15 % (diario) | | **fusión (grupo 4–6)** | codegen | **una llamada por varias celdas** | **~108–110 M difícil / ~122 M fácil, verificado** | | *C de McGavin (sin pantalla)* | C | *misma máquina, como referencia* | *~102 M difícil / ~287 M fácil* | Dos motores comparten esta tabla: `naive-clean` es un backtracker recursivo aparte (ejecutable con `run_dfs --algo naive-clean`), y todo desde «JIT guiado por tablas» es el camino codegen del que trata esta página (`run_dfs_codegen_jit`). El resumen honesto es una **mejora de ~2,5× de la referencia naive-clean al campeón fusionado en el tablero difícil** (~44 M → ~110 M) y **~2,8× en el fácil** (~44 M → ~122 M) - aterrizando, en el difícil, a la par del C sin pantalla de McGavin. De ello salen tres meta-lecciones, la parte transferible: 1. **La representación pesa más que las micro-operaciones.** Las dos mayores ganancias aisladas - celdas u32 (+67 %) y cadena de funciones (+56 %) - trataban ambas de la *forma* de los datos y del código, no de recortar instrucciones. Ningún ajuste de ramas se le acercó. 2. **Reutilizar lo que ya se calculó.** La ganancia en caché y la izquierda-como-argumento fueron puras ganancias de «deja de recargarlo». 3. **La estructura pesa más que los ciclos.** La fusión atacó la *estructura de llamada*, no un ciclo aislado - y eso fue lo que llevó a Rust a la par del C afinado a mano en tableros difíciles. ## Reprodúcelo El motor y dos tableros de referencia commitidos viven en el repositorio público bajo `research/experiments/dfs-study/engine/crates/dfs-codegen` (`bench/bench-easy.json`, `bench/bench-hard.json`, y un `bench/README.md` con la receta completa). Los tres puntos de anclaje de la escalera - la referencia naive-clean, el piso codegen y el campeón fusionado - son ejecutables directamente, para que cualquiera pueda rejugarlos en su propia máquina, uno tras otro. Desde `research/experiments/dfs-study/engine`: ```bash # naive-clean: la referencia rigurosa (backtracker recursivo simple aparte) ~44 M cargo run --release -p dfs-run --bin run_dfs -- \ --puzzle crates/dfs-codegen/bench/bench-hard.json --algo naive-clean --seed 1 --budget-s 10 # piso JIT guiado por tablas: el camino codegen sin cadena/fusión ~61 M cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- \ --puzzle crates/dfs-codegen/bench/bench-hard.json --budget-s 15 --opt native # campeón fusionado (grupo = 6): el motor del que trata esta página ~108–110 M difícil, ~122 M fácil cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- \ --puzzle crates/dfs-codegen/bench/bench-hard.json --budget-s 15 --chain2 --opt native # cualquier ancho de fusión, para barrer los grupos tú mismo cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- \ --puzzle crates/dfs-codegen/bench/bench-hard.json --budget-s 15 --group 4 --opt native ``` Apunta `--puzzle` a `bench-easy.json` y cada configuración imprime `score=480` con el **mismo número de nodos** (3 577 121 570) - la igualdad que prueba que la escalera es una escalera de velocidad y nada más. En el `bench-hard.json` no terminante, imprimen el mismo puntaje parcial a `nps` distintos. (Dale un presupuesto real: uno muy corto mide el calentamiento del compilador, no el rendimiento. El tablero fácil pide ≥30 s para resolverse.) Los tres micro-pasos intermedios de la tabla de arriba - candidatos empaquetados, ganancia en caché, conjunto usado en bytes - no son banderas separadas; son la secuencia de commits en `bench/README.md`, reproducible con `git checkout`. Para reproducir con justicia la comparación con McGavin, construye **su** motor sin pantalla - comenta `#define INTERACTIVE` cerca del inicio de `genbody.c` para que la pantalla en vivo no lo frene - y luego lee el rendimiento real: ```bash # McGavin, sin pantalla + nativo: emitir el C especializado, luego enlazar y ejecutar gcc -o genbody genbody.c -lm -Ofast -mcpu=native -DG # emite body.c para este puzzle ./genbody PUZZLE.puz HINTS.hnt gcc -o solve genbody.c -lm -Ofast -mcpu=native # enlaza body.c, corre la búsqueda ./solve PUZZLE.puz HINTS.hnt # lee la línea «Rate:» (= colocaciones / tiempo) en un tablero difícil, o el resumen # final «tiles/second» en uno soluble — esa es su velocidad real ``` Con la pantalla activa, el mismo binario lee alrededor de un tercio de eso - que es exactamente la trampa que produjo el falso «lo superamos». > **Primero: ¿acaso contamos lo mismo?** > > Una comparación de velocidad no tiene sentido si ambos motores no cuentan los mismos eventos, así que antes de confiar en cualquier razón leímos la fuente de McGavin. Su contador (`ntp`, el famoso truco de desbordamiento de 16 bits) se incrementa **una vez por pieza colocada en el tablero** - después de que el candidato ha pasado la tabla de coincidencia de colores y el control de uso, en el instante en que se coloca (`genbody.c`, el `ntp++` justo tras `square[x][y].tile = t`). Nuestro `st.nodes` hace exactamente lo mismo: se incrementa después de que un candidato pasa los controles de aristas y de uso, al colocar la pieza. Ninguno cuenta los candidatos que fallan esos controles; ambos cuentan las colocaciones que luego se deshacen. Así que las «fichas colocadas por segundo» de McGavin y nuestros «nodos de búsqueda por segundo» son **la misma medida** - colocaciones efectivas, no intentos. (La única asimetría: él cuenta el puñado de colocaciones de pistas forzadas y nosotros las extraemos - ≤18 sobre un recuento de miles de millones, es decir, nada.) El número del que hay que desconfiar es el «M/s» de un *tercer* motor: ahí «colocaciones intentadas» y «colocaciones efectuadas» pueden diferir en un orden de magnitud, que es la vieja advertencia de la comunidad sobre [qué es un «nodo»](/es/research/build/faster/solver-engineering/). > **Medir con honestidad, o no medir** > > El rendimiento absoluto en nodos/s deriva con la carga y la temperatura de la máquina y - como muestra la corrección de arriba - con cómo se construye el motor de *referencia*. **Solo los cocientes tomados en el mismo estado, uno tras otro, sin pantalla, con la máquina por lo demás en reposo, son fiables.** Cada comparación de esta página se tomó sin nada más en marcha, ambos motores compilados sin pantalla con generación de código nativa y ejecutados con segundos de diferencia. El viejo folclore «McGavin es 5× más rápido» también era un espejismo, en el otro sentido: comparaba su ejecución en un rompecabezas fácil con la nuestra en uno difícil. Iguala el tablero, iguala el build, mide uno tras otro - o el número no significa nada. ## La brecha del tablero fácil es una palanca real y abierta ¿Por qué el C de McGavin gana el tablero fácil por 2,3× pero solo empata en los difíciles? Porque en un tablero poco ramificado casi no hay nada que hacer por nodo - elegir el candidato o dos, colocar, avanzar - y su código en línea recta, con la lista de candidatos de cada celda reducida a una consulta por hash perfecto mínimo, lo hace con el menor número de instrucciones posible. Nuestro trabajo por nodo (indexar la reserva, calcular la ganancia, verificar el borde) es barato pero no *nulo*, y cuando el árbol es poco profundo y ancho ese sobrecosto se nota. En un tablero difícil, los mismos nodos están dominados por el retroceso y los fallos de caché, donde ambos motores convergen. Cerrar la brecha del tablero fácil significaría adoptar su generación de lista de candidatos más ajustada - un paso siguiente concreto, no un muro. Queda consignado aquí como abierto en vez de disimulado. ## Qué vale la velocidad Apuntado al Eternity II real de 256 piezas - seis núcleos, quince minutos, la pista central obligatoria fijada - este motor recorre el árbol a decenas de millones de nodos por segundo por núcleo y se estanca, de una semilla a otra, en los 300 altos sobre 480. No es una decepción; es [todo el sentido de la lección central del sitio](/es/research/why/prune-vs-speed/). Un backtracker estricto es un magnífico recorredor de árboles y un pobre solucionador: el espacio de búsqueda es tan vasto que ninguna velocidad alcanzable le hace mella, que es justo por lo que los récords vienen de las [heurísticas y la reparación](/es/research/lab/experiments/raphael-anjou/repair-study/), no del rendimiento bruto. Por eso el resultado aquí es deliberadamente estrecho y, creo, merece decirse con franqueza: un motor Rust *seguro y portable* puede **igualar al C afinado a mano en los tableros difíciles y profundos que se parecen al rompecabezas real**, recorriendo el mismo árbol en el mismo hardware - mientras que el C aún gana por ~2,3× en los fáciles. Y aun a la par, no sabe resolver Eternity II, porque la velocidad nunca fue el obstáculo. El argumento más largo sobre esa disyuntiva - por qué unos algoritmos gastan su presupuesto en velocidad y otros en criterio - tiene su propia página: [ir rápido](/es/research/lab/experiments/raphael-anjou/going-fast/). ## Relacionado - [El backtracker en C de McGavin: la historia del rendimiento, reconstruida aquí](https://eternity2.dev/es/research/lab/experiments/peter-mcgavin/backtracker/) — El backtracker en C de Peter McGavin, el más rápido de la comunidad: una receta de optimización de 2007 capitalizada durante dos décadas mediante código generado, tablas de búsqueda y trucos de contador, luego compilada en mi M1 y apuntada al puzzle real de 256 piezas, donde en un solo núcleo supera las 200 de 256 piezas a ~109M colocaciones/s. - [Ir rápido: cuando un solucionador gasta su presupuesto en velocidad](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/going-fast/) — Algunos motores de Eternity II vuelcan su esfuerzo en recorrer el árbol de búsqueda lo más rápido posible; otros lo gastan en el criterio sobre dónde buscar. Este es el alegato a favor de los primeros - qué compra el rendimiento bruto, las tres cosas distintas que la gente llama «rápido» y por qué el motor más rápido jamás construido sigue sin poder resolver el rompecabezas. - [Ingeniería de solucionadores: el oficio bajo el algoritmo](https://eternity2.dev/es/research/build/faster/solver-engineering/) — Todos los solucionadores récord ejecutan el mismo backtracking en profundidad. Lo que los distingue es la capa de debajo: tablas de consulta, hashes perfectos, structs a medida del caché, código generado, arqueología del compilador. Ese oficio decide si un nodo cuesta 26 ciclos o 2.600. Veinte años del registro de ingeniería de la comunidad, técnica por técnica, y lo que todo ello rindió. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. --- # Aprender a partir de tableros fuertes > Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/ - Actualizado: 2026-07-16 - Temas: learning, construction --- La mayor parte de este cuaderno busca Eternity II desde cero: un beam construye un tablero a partir de una rejilla vacía, un backtracker excava y retrocede, un bucle de reparación pule un tablero completo mediante jugadas. Cada uno razona solo a partir de las reglas del puzzle y del tablero que tiene delante. Este estudio es la excepción, y es un estudio y no un conjunto suelto de runs porque sus cinco experimentos plantean una misma pregunta desde ángulos distintos: **¿qué puede aprender una búsqueda de los tableros que la gente ya ha encontrado, y hasta dónde la lleva eso?** La materia prima es un corpus de tableros fuertes, todo arreglo que la comunidad y este proyecto han empujado por encima de 400 de 480. El gesto, en cada experimento aquí, consiste en leer ese corpus en busca de estructura (dónde se sitúan las piezas, qué piezas se tocan, qué patrones locales se repiten, qué acuerdos son trampas) y reinyectar la estructura en una búsqueda como un sesgo. Está más cerca del aprendizaje por imitación que del diseño de búsqueda, y merece su propio hogar porque el mismo puñado de ideas sigue regresando, cada una un poco más afilada que la anterior. El corpus en sí está [publicado](/es/research/build/dataset/): 7658 tableros distintos que puntúan de 400 a 469, publicados bajo CC0, con el control de diversidad que impide que una señal aprendida se limite a recodificar un solo tablero. La exposición agnóstica al método de cada técnica vive en la sección teórica sobre [aprender a partir de tableros fuertes](/es/research/build/learning/); las páginas aquí son su vertiente de laboratorio, los runs que ponen cada técnica sobre el tablero real de 16×16, con sus puntuaciones y las preguntas que dejaron abiertas. ## Los cinco experimentos, de la señal más simple a la más sutil El estudio se lee como una secuencia. Cada experimento aprieta una vuelta de tuerca más que el anterior, y las páginas están ordenadas para leerse en ese orden. | # | Experimento | La señal aprendida | Alcanzado (de 480) | |---|---|---|---| | 1 | [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) | dónde tiende a situarse cada pieza, un simple recuento de posiciones | 460 | | 2 | [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/) | tres señales (posición, adyacencia, parche 2×2) votando juntas | 460 | | 3 | [LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/) | qué piezas sirven a una demanda de color escasa, una brújula tenue | 451 | | 4 | [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) | los malos hábitos compartidos que limitan los tableros, minando la trampa y no la estructura | 463 | | 5 | [REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/) | la única jugada que un tablero récord empleó y que nuestra búsqueda no sabía hacer | 460 | **[PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/)** es la forma más simple que la idea puede adoptar, un recuento: sobre los tableros fuertes, ¿con qué frecuencia se sitúa cada pieza en cada celda? Usado como desempate de construcción, levanta un tablero competitivo desde la nada y alcanza 460. **[KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/)** suma señales en lugar de fiarse de una sola, dejando que un recuento de posición, un recuento de adyacencia y una calidad de parche 2×2 aprendida voten sobre cada colocación, lo que lleva una construcción hasta una familia de esquinas que ninguna búsqueda anterior había forzado. **[LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/)** toma el camino inverso, hacia una única señal deliberadamente tenue (un peso de demanda escasa por pieza) y, al hacerlo, encuentra el filo de la navaja que atraviesa todo el estudio: en cuanto una señal aprendida deja de ser un desempate y pasa a ser el objetivo, la búsqueda se derrumba. **[PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/)** es el giro sutil. Todos los experimentos que la preceden confían en el acuerdo entre tableros fuertes; este pregunta qué acuerdos son *trampas*, colocaciones que todo tablero adopta pero que ningún tablero de cabeza conserva, y orienta una búsqueda de reparación para atacarlas. Produjo el mejor tablero de este proyecto, 463. **[REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/)** aprende de un solo tablero y no de una estadística: reconstruir exactamente un récord de la comunidad, y todo lo que tengas que añadir a tu búsqueda para que recorra ese camino es precisamente el ingrediente que le faltaba. Aquí fue el double break, la jugada que hizo pasar la escala estricta de 458 a 460. ## El único muro que los cinco alcanzan El hilo conductor es lo que hace de esto un estudio y no un saco de trucos, y da que pensar. Cada señal aquí es segura solo como un sesgo suave: confía demasiado en ella y la búsqueda se descompone (LODESTONE cae de 451 a 380 a medida que sube su peso; la lista de trampas de PALIMPSEST ayuda como guía y perjudica como prohibición). E incluso usada a la perfección, ninguna de estas señales eleva el techo. Alcanzan la cima del alcance propio de una búsqueda, rápido y de forma fiable, y se detienen, porque el corpus del que aprenden está hecho de tableros que topan todos con el mismo [muro de rigidez](/es/research/why/rigidity-wall/). Aprender a partir de tableros fuertes es el camino más rápido *hacia* la meseta y, por sí solo, ningún camino *más allá* de ella. Ese modo de fallo es el tema de la [síntesis sobre el colapso](/es/research/build/learning/when-learning-collapses/) de la sección teórica, y es la nota sobre la que se resuelve todo el estudio. Este es uno de los tres estudios del [cuaderno de experimentos](/es/research/lab/experiments/raphael-anjou/). Sus hermanos, el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/) y el [estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/), desmontan un único paradigma de búsqueda decisión por decisión; este mantiene el paradigma suelto y hace variar lo que a la búsqueda se le permite *saber*. ## Páginas de esta sección - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [LODESTONE](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/lodestone/) — Una brújula tenue para una búsqueda partida de cero: incitarla a comprometer las piezas raras pronto, allí donde se necesitan. No eleva el techo; hace que la búsqueda alcance de forma fiable la cima de su propio rango. - [PALIMPSEST](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. - [REPLAY](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/replay/) — Reconstruir de forma idéntica los tableros estrictos de 460 de la comunidad y descubrir, de paso, la jugada que los solucionadores corrientes no saben hacer: pagar dos desajustes en una misma celda. ## Relacionado - [Aprender de los tableros fuertes](https://eternity2.dev/es/research/build/learning/) — La mayoría de los ataques a Eternity II buscan partiendo de cero. Una familia distinta hace lo contrario: explora el corpus de tableros que la gente ya ha encontrado en busca de estructura, y luego reinyecta esa estructura en la búsqueda. Priors de posición, ordenación aprendida de jugadas, minería de antipatrones, decodificación de récords y el modo de fallo en el que una señal aprendida se derrumba. - [El conjunto de datos](https://eternity2.dev/es/research/build/dataset/) — Un conjunto de datos público bajo licencia CC0 para Eternity II, en dos partes: catorce instancias de referencia para resolver, y un corpus de 7658 tableros fuertes distintos de los que aprender. Cada puntuación se recalcula a partir del propio tablero, y se verifica que el corpus sea realmente variado, en lugar de mil copias de un mismo tablero. - [Los experimentos de Raphaël Anjou](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/) — Un cuaderno de experimentos de búsqueda sobre Eternity II, organizado en torno a los motores compartidos sobre los que se ejecutan, las pipelines de combinación que persiguen la puntuación, cuatro estudios que desmontan un paradigma de búsqueda una decisión a la vez, y resoluciones exactas de final de partida. Cada uno expone su idea, su mejor tablero y las preguntas que deja abiertas. El mejor alcanza 463 de 480. - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - [El estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/) — La hermana del estudio DFS, para la otra manera en que se ataca Eternity II: destruir parte de un tablero, reconstruirla, conservar el cambio si ayuda. Una pregunta, planteada con cuidado. Qué aporta cada decisión de ese bucle: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, cuándo reiniciar, y desde qué tablero partir. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. --- # KEYRING > Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/ - Actualizado: 2026-07-21 - Temas: construction, learning - Reproducir: `just research-record-boards` - Fuente: La búsqueda en haz como construcción best-first de ancho acotado (página conceptual de este proyecto) — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx --- [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) confiaba en una sola señal aprendida, un conteo de posiciones, para deshacer sus empates. KEYRING es el siguiente paso del [estudio](/es/research/lab/experiments/raphael-anjou/learning/): ¿y si una sola señal no basta? Al construir un tablero pieza a pieza, la parte difícil consiste en decidir qué pieza colocar a continuación cuando varias encajarían, y una única regla empírica, aun aprendida, tiende a llevar la búsqueda a los mismos callejones sin salida una y otra vez. KEYRING lleva tres corazonadas aprendidas distintas a la vez, un llavero de ellas, y las deja votar, lo que evita que la búsqueda confíe en exceso en una sola señal. ## Cómo funciona A partir de la biblioteca de tableros fuertes, KEYRING aprende tres cosas. Primero, dónde le gusta situarse a cada pieza: con qué frecuencia una pieza aparece en cada posición a lo largo de los buenos tableros. Segundo, qué piezas tienden a ser vecinas: con qué frecuencia dos piezas acaban en contacto. Tercero, qué pequeños parches 2×2 aparecen en los buenos tableros frente a los malos. Luego rellena el tablero con una búsqueda en haz, manteniendo muchos tableros parciales vivos a la vez. Cuando tiene que elegir la pieza siguiente, puntúa cada opción según cuántas aristas empareja, ajustada por las tres señales aprendidas en conjunto. Una pequeña dosis de aleatoriedad evita que los muchos intentos paralelos se desplomen sobre un mismo camino. > **[Figure]** Interactivo: el voto de colocación de tres señales — interactive: KeyringDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## El tablero > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado KEYRING alcanzó 460 de 480, y lo hizo en una disposición de esquinas donde ningún tablero había llegado a ese nivel antes, así que no es simplemente otra ruta hacia un tablero conocido, sino una región genuinamente nueva. A lo largo de ejecuciones repetidas logró un tablero fuerte mucho más a menudo que la versión más simple de señal única de la que surgió. No es la mejor puntuación del proyecto (esa es 463), pero encontrar un tablero alto en una familia nueva importa: se sabe que los tableros fuertes están aislados unos de otros, de modo que cada familia nueva es su propio punto de apoyo. ## Método Las tres señales, precisadas, y luego cómo orientan el haz. La más fuerte de las tres es el **prior de parches 2×2**. Sobre el corpus, se separan los tableros en *altos* (puntuación ≥ 460) y *bajos* (< 460), y para cada parche 2×2 $q$ (cuatro piezas con sus rotaciones) se puntúa mediante un cociente de log-odds suavizado a la Laplace: $$ \text{score}(q) = \log\big(\text{count}_\text{high}(q) + \alpha\big) - \log\big(\text{count}_\text{low}(q) + \alpha\big), \quad \alpha = 0.5 $$ Un parche que aparece en los tableros fuertes y no en los débiles obtiene una puntuación positiva; un parche trampa de consenso obtiene una puntuación negativa. (En la ejecución que encontró el 460, el corpus se repartía en 23 tableros altos frente a 1255 bajos.) Las otras dos señales son conteos más simples: una frecuencia de **pieza-en-posición** y una frecuencia de **adyacencia de pares de piezas**, cada una contabilizada sobre el mismo conjunto de tableros fuertes. La construcción es una **búsqueda en haz**: se mantienen $W$ tableros parciales vivos, y en cada paso se extiende cada haz puntuando cada colocación candidata como su ganancia en aristas emparejadas más una suma ponderada de los tres priors, y luego se conservan los $W$ mejores. Un poco de aleatoriedad inyectada impide que los $W$ haces se desplomen sobre un solo camino, que es lo que permitió a KEYRING alcanzar una familia de esquinas *nueva* en lugar de rederivar un tablero conocido. Los parches se compactan en una clave `u64` (pieza ≤ 8 bits, rotación 2 bits, ×4 celdas = 40 bits), de modo que la consulta del prior es un acierto de hash. Como con [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/), la construcción en haz alcanza por sí sola los 450 altos; el tablero 460 confirmado toma esa construcción y le añade encima una cola de refinamiento local, la misma separación construir-luego-refinar que emplean los pipelines de récord. Las tres señales son lo que lleva la *construcción* a una familia nueva; las últimas aristas son del refinamiento. Un límite que vale la pena enunciar: los priors se aprenden de un corpus que es él mismo subóptimo, de modo que codifican tanto el techo de la comunidad como su sabiduría: esa misma doble arista que [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) convierte en una ventaja al separar el buen consenso de las trampas. ## Reproducir `just research-record-boards` verifica byte a byte la puntuación del tablero 460 confirmado a partir de su cadena Bucas almacenada. La búsqueda es estocástica (búsqueda en haz con aleatoriedad inyectada), de modo que una nueva ejecución no reproducirá el mismo tablero; el tablero es el artefacto de referencia. El motor es el productor en haz compartido; el cambio que describe esta página son las tres señales de clasificación aprendidas. Esas señales se extraen de un corpus de tableros fuertes, así que la ejecución no se reproduce desde cero aquí. ## Preguntas abiertas ¿Graduar la señal de parches por grado, en lugar de tratar los parches como simplemente buenos o malos, ayudaría aún más? ¿Podrían los pesos de las tres señales desplazarse a medida que el tablero se llena, confiando más en la estructura al final de la construcción? ¿Y puede empujarse esta nueva familia más allá de 460 con un refinamiento más largo? ## Relacionado - [Ordenación de jugadas aprendida](https://eternity2.dev/es/research/build/learning/learned-value-ordering/) — Cuando varias piezas encajan, ¿cuál colocas a continuación? En lugar de una sola regla empírica, transporta varias señales aprendidas de los buenos tableros y deja que voten. El voto evita que la búsqueda confíe en exceso en una única corazonada y avance hacia el mismo callejón sin salida. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. --- # LODESTONE > Una brújula tenue para una búsqueda partida de cero: incitarla a comprometer las piezas raras pronto, allí donde se necesitan. No eleva el techo; hace que la búsqueda alcance de forma fiable la cima de su propio rango. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/lodestone/ - Actualizado: 2026-07-21 - Temas: construction, search-space, learning - Reproducir: `just research-record-boards` - Fuente: Geografía de los colores raros (este proyecto): dónde viven las demandas (N,O) escasas — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/rare-color-geography.mdx --- [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/) añadía señales; LODESTONE, el tercer experimento del [estudio](/es/research/lab/experiments/raphael-anjou/learning/), se reduce a una única señal deliberadamente tenue, y al hacerlo deja al descubierto el filo de navaja sobre el que cada señal aprendida aquí se sostiene en equilibrio. Los tableros fuertes coinciden discretamente en algo: a medida que la puntuación sube, satisfacen cada vez más un conjunto particular de demandas escasas, lugares donde solo una o dos piezas de todo el juego pueden servir los colores norte y oeste de una celda. LODESTONE se pregunta si informar a una búsqueda partida de cero acerca de esas demandas la ayuda a comprometer las piezas raras correctas antes de que se las roben. ## Cómo funciona A partir del corpus de tableros fuertes, LODESTONE construye un prior: para cada pieza, cuántas veces acaba sirviendo una de esas demandas escasas noroeste en un buen tablero, ponderada fuertemente al alza para las más raras, de modo que una pieza que es el único servidor posible recibe el mayor impulso. La búsqueda por haz clasifica entonces sus colocaciones candidatas según la puntuación habitual de aristas apareadas más un pequeño múltiplo de este prior, de modo que, entre jugadas por lo demás equivalentes, prefiere colocar las piezas que los buenos tableros aprendieron a gastar pronto. El detalle crucial es el tamaño de ese múltiplo. El prior tiene que ser un puro desempate, no una parte del objetivo: desempata entre jugadas que aparean por igual y nada más. > **[Figure]** Interactivo: mapa de atracción de colores raros — interactive: LodestoneRarityLab. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado Con un peso ínfimo, el prior aporta una ganancia pequeña pero constante: a lo largo de cinco semillas, la puntuación mediana partida de cero sube de 449 a 451 y, más útil aún, la dispersión se estrecha, de un esparcimiento 446-451 a un rango fiable 450-451. Hace que el constructor aterrice en la cima de su rango en lugar de tropezar a veces. Sube el peso aunque sea un poco y todo se derrumba (422, luego 380), porque perseguir las demandas escasas del corpus se paga entonces directamente a costa de aparear la arista que tienes delante. Ese fracaso es en sí mismo el hallazgo: la escasez es una señal real para saber *qué* pieza preferir, pero una señal débil, y segura solo como desempate. LODESTONE es modesto sobre su magnitud: mejora la calidad y la regularidad de la construcción en un par de aristas, y no toca el techo de cuenca que detiene a todo método cerca de la cima. ## Método Primero la señal, luego la forma deliberadamente diminuta en que se emplea. **La medición.** Una *demanda escasa* es una celda cuyos colores norte y oeste solo pueden ser servidos por una o dos piezas de todo el juego. Sobre el conjunto del corpus, el número de demandas escasas satisfechas en al menos la mitad de los tableros crece *de forma monótona* con la puntuación, aproximadamente 1 → 2 → 3 → 10 a medida que los tableros trepan hacia 458+. Los tableros fuertes no colocan bien las piezas raras solo por casualidad; satisfacen cada vez más las *mismas* demandas escasas. Es una estructura real, correlacionada con la puntuación, que ningún constructor anterior había integrado. **El prior.** Para cada pieza, se pondera cuántas veces sirve una de esas demandas escasas noroeste en un buen tablero, con un fuerte refuerzo para las más raras (una pieza que es el *único* servidor posible recibe el mayor peso). El haz clasifica los candidatos según la ganancia habitual de aristas apareadas más un pequeño múltiplo de este peso. **El ajuste es toda la historia.** El múltiplo debe ser un puro *desempate*: decide entre jugadas que aparean por igual y nada más. Con un peso ínfimo: puntuación mediana partida de cero 449 → 451 a lo largo de cinco semillas, y la dispersión se estrecha de 446-451 a un rango fiable 450-451. Sube el peso y todo se derrumba (422, luego 380), porque perseguir las demandas escasas se paga entonces directamente a costa de aparear la arista que tienes delante. El derrumbe *es* el resultado: la escasez dice *qué* pieza preferir, pero débilmente, segura solo como desempate. ## Reproducir Con semilla fijada; el artefacto reproducible aquí es el *efecto* del desempate (una dispersión más estrecha y una mediana +2 a lo largo de cinco semillas), no un tablero único. El motor es el productor por haz compartido; el cambio que describe esta página es un tenue desempate pieza-rara-pronto. Ese peso de desempate se deriva del juego de piezas y de un corpus, de modo que la ejecución no se reproduce aquí desde cero. ## Preguntas abiertas ¿Podría hacerse el prior consciente de la posición sin que se convierta en parte del objetivo, fuerte solo en las regiones donde las demandas escasas realmente se concentran? Combinarlo con las tres señales de KEYRING, ¿añade un cuarto voto útil o solo más ruido? Y la ganancia de regularidad, ¿vale más que la ganancia de mediana, dado que una búsqueda más estrecha es más fácil de escalonar en escalera? ## Relacionado - [Priors de corpus](https://eternity2.dev/es/research/build/learning/corpus-priors/) — La forma más simple de aprender de los tableros fuertes: contar dónde tiende a situarse cada pieza, o con qué frecuencia satisface una demanda escasa, y usar ese recuento como un suave desempate en la construcción. Debe seguir siendo un desempate; en cuanto pasa a formar parte del objetivo, hace colapsar la búsqueda. - [Cuando el aprendizaje se desmorona](https://eternity2.dev/es/research/build/learning/when-learning-collapses/) — La mitad desencantada de aprender a partir de tableros fuertes. Una señal aprendida alcanza de forma fiable el tope del rango propio de una búsqueda, y ahí se detiene. Confía demasiado en ella y la búsqueda se desmorona; incluso usada a la perfección no eleva el techo, porque el techo no es algo que el corpus conozca. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. --- # PALIMPSEST > Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/ - Actualizado: 2026-07-21 - Temas: local-search, learning - Reproducir: `just research-record-boards` - Fuente: Ropke & Pisinger 2006, búsqueda adaptativa de gran vecindario (el marco de destrucción-reparación que esto orienta) — https://doi.org/10.1287/trsc.1050.0135 --- Hasta ahora, cada experimento del [estudio](/es/research/lab/experiments/raphael-anjou/learning/) ha confiado en el acuerdo entre tableros fuertes: allí donde los buenos tableros concuerdan, se los sigue. PALIMPSEST es el momento en que esa confianza se examina, y produjo el mejor tablero del proyecto. Cuando muchas búsquedas independientes alcanzan todas un tablero alto pero imperfecto, tienden a coincidir en muchas colocaciones. Parte de ese acuerdo es estructura auténtica, y otra parte es un mal hábito compartido: una elección local que parece buena y mantiene cada búsqueda atascada justo por debajo de la cima. La idea de este experimento es leer todo el corpus de tableros fuertes, separar el acuerdo útil de la trampa, y atacar las trampas. ## Cómo funciona Se toma cada tablero que alguien haya encontrado y que puntúe razonablemente bien, y para cada par de posiciones vecinas se cuenta cuántas veces se sitúa allí un par de piezas dado, ponderado por lo bueno que era el tablero. Emergen dos patrones. Algunas adyacencias aparecen una y otra vez en los mejores tableros: son estructura segura, real. Otras aparecen casi en todas partes pero nunca en los tableros de cabeza: esas son las trampas, las elecciones que parecen acertadas y limitan la puntuación. Las trampas se agrupan en regiones concretas del tablero en lugar de repartirse de forma uniforme. Saber dónde están convierte el corpus en un mapa: qué colocaciones seguir, y cuáles desmontar y reconstruir. Agrupar los tableros según cómo están dispuestas sus esquinas orienta entonces la búsqueda hacia la familia más prometedora a atacar. > **[Figure]** Interactivo: el mapa de trampas, familia de esquinas por familia de esquinas — interactive: PalimpsestDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## El tablero > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado Utilizada como un mapa para orientar la búsqueda, esta aproximación alcanzó 463 de las 480 aristas emparejadas, el mejor tablero que este proyecto ha producido. A título de comparación, el mejor tablero de la comunidad en este puzzle es 470, y una solución completa cuenta 480. Una salvedad que merece señalarse: intentar usar directamente la lista de trampas, forzando la búsqueda a evitar las colocaciones atrapadas, no funcionó por sí solo y tendía a empeorar los tableros. El valor estaba en leer el corpus para elegir dónde concentrar el esfuerzo, no en codificar en duro sus conclusiones dentro de la búsqueda. ## Método Para el lector que quiere el procedimiento exacto. Se ejecuta en dos pasadas. **1. Minería de consenso ponderada por la puntuación y separada por cuenca.** Sobre un corpus de tableros cuya puntuación va de 400 a 480, para cada par de celdas adyacentes $(i, j, \text{dir})$ y cada par de piezas que alguna vez se sitúa allí, se calculan dos frecuencias en lugar de una: $$ \begin{aligned} p_\text{high}(\text{pair}) &= \frac{\#\{\text{boards with the pair, score} \ge 460\}}{\#\{\text{boards with score} \ge 460\}} \\[4pt] p_\text{all}(\text{pair}) &= \frac{\#\{\text{boards with the pair}\}}{\#\{\text{all boards}\}} \end{aligned} $$ junto con un *techo*: la puntuación máxima de cualquier tablero que contenga ese par. Es el techo, y no $p_\text{high}$, lo que separa las dos categorías. El **buen consenso** es un $p_\text{all}$ alto con un techo que alcanza la familia de cabeza, tableros al nivel del mejor del proyecto (463) o a un punto de él: patrones que los tableros más fuertes conservan, así que estructura fiable. Las **trampas de consenso** son un $p_\text{all}$ alto con un techo que se cala un par de puntos más abajo, sin que ningún tablero portador del par supere los 460-y-pico: la elección errónea consensuada que bloquea a toda una familia por debajo del récord. El corte se sitúa entre «alcanza la cima» y «se cala justo por debajo»; en este corpus pequeño (un techo de 463, tableros agrupados desde los 450 altos hasta los 460 bajos) se fija a mano en lugar de barrerse, y $p_\text{high}$ (puntuación $\ge$ 460) se reporta al lado pero no es el discriminante. La vista de frecuencia única (la persistencia sola) no puede distinguirlos; separar por techo es todo el truco. **2. ALNS de destrucción de trampas.** Se toma un tablero de 461 (se sitúa *dentro* de la cuenca de trampas por construcción), se localizan los ~50 pares-trampa mejor clasificados que contiene, y se encuentra la cuña: la posición cuya eliminación rompe la mayor cantidad de pares-trampa mientras preserva los de buen consenso. Luego se perturban esas celdas trampa, se cambian por piezas no atrapadas, introduciendo de 4 a 8 discordancias deliberadas, y se devuelve el tablero a la [búsqueda adaptativa de gran vecindario](/es/research/build/local-search/local-search-alns/). El operador de destrucción de la peor banda de ALNS rasga preferentemente exactamente esas regiones rotas intencionadamente y las reconstruye. Ejecución: 30 minutos × 6 semillas. La complejidad es poco notable: la pasada de minería es lineal en el tamaño del corpus, y el coste real es la búsqueda ALNS que orienta. La contribución reside en el *dónde* dirige esa búsqueda, no en una nueva búsqueda. ## Reproducir El verificador `just research-record-boards` recalcula la puntuación en aristas emparejadas del tablero de 463 versionado a partir de sus aristas Bucas en bruto y comprueba que iguala lo anunciado, de modo que el tablero es reproducible y verificable byte a byte en el visor. La búsqueda que lo *encontró* es una ejecución estocástica del motor ALNS compartido (30 min × 6 semillas), orientada por el mapa de trampas descrito arriba. No reproducirá el mismo tablero, razón por la cual el artefacto de referencia es el tablero, no una nueva ejecución. La orientación se lee de un corpus de tableros fuertes, de modo que la ejecución no se reproduce aquí desde cero. ## Preguntas abiertas ¿Por qué la reconstrucción de las regiones atrapadas tiende a recaer sobre el mismo tablero de cabeza ya conocido en lugar de sobre uno realmente nuevo? ¿Revelaría un mapa distinto por familia de esquinas una estructura que el mapa combinado oculta? ¿Y ayudaría una penalización suave para las colocaciones atrapadas allí donde una prohibición estricta perjudicó? ## Relacionado - [Minería de anti-patrones](https://eternity2.dev/es/research/build/learning/anti-pattern-mining/) — La idea sutil detrás de aprender de los tableros fuertes: no todo acuerdo entre ellos es bueno. Algunos emplazamientos compartidos son estructura real; otros son una trampa común que limita cada búsqueda justo por debajo de la cima. Distinguir ambos y atacar la trampa. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # PRIOR > Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/ - Actualizado: 2026-07-21 - Temas: construction, learning - Reproducir: `just research-record-boards` - Fuente: Búsqueda beam (página de concepto de este proyecto): construcción primero-el-mejor de ancho acotado — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx --- PRIOR abre el [estudio del aprendizaje a partir de los tableros fuertes](/es/research/lab/experiments/raphael-anjou/learning/) con la forma más simple que la idea puede tomar: un conteo. La mayoría de los tableros fuertes de este sitio se encuentran partiendo de un buen tablero existente y mejorándolo. PRIOR plantea una pregunta más difícil: ¿se puede construir un tablero competitivo desde una cuadrícula vacía, sin ningún tablero al que anclarse? El truco consiste en dejar que la multitud de buenos tableros pasados guíe discretamente la construcción sin copiar ninguno en particular, y esa guía no es más que un recuento de dónde tienden a situarse las piezas. ## Cómo funciona A partir de la biblioteca de tableros con buena puntuación, PRIOR aprende una sola cosa muy simple: para cada posición del tablero, con qué frecuencia aparece cada pieza allí. Eso da una preferencia suave, un prior, sobre lo que tiende a ir dónde. Luego construye mediante una búsqueda beam, manteniendo vivos muchos tableros parciales a la vez y extendiéndolos celda a celda. Cuando dos opciones encajan el mismo número de aristas, el prior resuelve el empate a favor de la pieza más típica de los tableros fuertes en ese lugar. Una regla de diversidad evita que los muchos intentos paralelos colapsen sobre el mismo camino. No se copia ningún tablero individual; la guía es estadística. > **[Figure]** Interactivo: el mapa de calor del prior posicional — interactive: PriorDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## El tablero > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado Desde cero, PRIOR alcanza mediados de los 450, y con un prior más afilado construido solo a partir de los mejores tableros sube más alto. Seguido de un refinamiento local, alcanza 460, el tablero mostrado aquí. Que una construcción desde la nada quede tan cerca de los récords es justamente el punto: la estructura de los buenos tableros es en parte aprendible, y no hace falta partir de uno para llegar hasta ahí. No es la puntuación máxima del proyecto (463), y el impulso final aquí se apoya en un paso de refinamiento, lo que la etiqueta del tablero señala. Pero como resultado desde una hoja en blanco es el más fuerte que tiene el proyecto, y es el cimiento del que crecieron los constructores multi-señal posteriores. ## Método El prior es deliberadamente la cosa más simple que podría funcionar: un conteo. Sobre cada tablero del corpus cuya puntuación supera un umbral (440 para el prior base), se acumula una matriz $256 \times 256$ $M[p][c]$, cuántos tableros fuertes colocan la pieza $p$ en la celda $c$. Normalizada por celda, esa es la preferencia usada para resolver los empates. Tres afinamientos, cada uno una variante del mismo conteo: - **Sensible a la rotación.** Se divide cada pieza según sus cuatro rotaciones: un tensor $1024 \times 256$ ($256 \times 4$ filas). El prior ahora prefiere no solo la pieza correcta sino la orientación correcta, 262.144 entradas frente a las 65.536 de base. - **Por familia de esquinas.** Los tableros fuertes se agrupan en familias según sus cuatro piezas de esquina. Construir un prior *separado* a partir de los tableros de una sola familia da una señal que la matriz agrupada difumina por promediado; esto es lo que permitió que la construcción desde cero alcanzara un 460 inédito en lugar del abarrotado cuenco común. - **Umbral más afilado.** Reconstruir el prior solo a partir de los mejores tableros (un corte más alto) eleva el techo de la construcción, a costa de una señal más fina y más ruidosa. La construcción es una [búsqueda beam](/es/research/build/construct/beam-search/): se mantienen $W$ tableros parciales, se extienden celda a celda, y cuando los candidatos empatan en aristas encajadas se deja que $M$ resuelva el empate; una regla de diversidad mantiene los $W$ beams separados entre sí. El 460 obtenido aquí lleva una construcción beam desde cero hasta mediados de los 450, y luego una breve cola de refinamiento local hasta 460. **La novedad se verificó, no se supuso.** El tablero resultante se compara con cada tablero del nivel 460 ya conocido, por permutación de esquinas y distancia de Hamming sobre (pieza, posición); una coincidencia solo cuenta como un nuevo cuenco cuando la familia de esquinas difiere o la distancia de Hamming es grande. El tablero de PRIOR pasó esa prueba: es un cuenco genuinamente distinto, no un redescubrimiento. ## Reproducir `just research-record-boards` verifica exactamente la puntuación del tablero 460 comprometido, arista a arista, a partir de su cadena Bucas almacenada, de modo que el resultado es comprobable aunque la búsqueda que lo encontró no sea determinista (su impulso final usa una cola de refinamiento estocástica). El tablero es el artefacto de referencia. La búsqueda que lo produjo es el productor beam compartido, con el único cambio que describe esta página: el prior posicional aprendido que resuelve sus empates. Ese prior es una matriz extraída de un amplio corpus de tableros fuertes, razón por la cual la ejecución no se reproduce aquí desde cero. ## Preguntas abiertas ¿Hasta dónde puede afilarse el prior antes de sobreajustar? Construido a partir de solo un puñado de tableros de cabeza, la señal es fuerte pero fina. ¿Podría un prior separado por familia de tableros capturar una estructura que el prior combinado difumina por promediado? ¿Y qué parte de la brecha final se debe a la construcción frente al refinamiento que la sigue? ## Relacionado - [Priors de corpus](https://eternity2.dev/es/research/build/learning/corpus-priors/) — La forma más simple de aprender de los tableros fuertes: contar dónde tiende a situarse cada pieza, o con qué frecuencia satisface una demanda escasa, y usar ese recuento como un suave desempate en la construcción. Debe seguir siendo un desempate; en cuanto pasa a formar parte del objetivo, hace colapsar la búsqueda. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [GAUNTLET](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) — Ejecutar la misma búsqueda en haz según nueve órdenes de recorrido distintos, para que aterrice en regiones diferentes en lugar de converger siempre a la misma. El orden en zigzag encontró un tablero 458 inédito. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [PALIMPSEST](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. --- # REPLAY > Reconstruir de forma idéntica los tableros estrictos de 460 de la comunidad y descubrir, de paso, la jugada que los solucionadores corrientes no saben hacer: pagar dos desajustes en una misma celda. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/replay/ - Actualizado: 2026-07-21 - Temas: backtracking, learning - Fuente: Tableros estrictos de 460 de la comunidad (cronología de récords): los testigos que REPLAY reconstruye — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/records.mdx --- REPLAY cierra el [estudio](/es/research/lab/experiments/raphael-anjou/learning/) con una forma de aprendizaje distinta. Cada experimento anterior extraía una *estadística* del corpus completo; REPLAY aprende de un *solo* tablero, y aprende justo lo que una estadística no puede mostrar: la jugada exacta que un récord empleó y que nuestra búsqueda no sabía hacer. Los tableros públicos totalmente pistados que sirvieron de patrón a este proyecto llegan a 460 (el récord comunitario ha avanzado desde entonces hasta 464), pero la propia búsqueda con roturas permitidas de este proyecto se estancaba en 457 o 458, pasara lo que pasara. REPLAY se propuso reproducir esos tableros de 460 de forma idéntica, pieza a pieza, para aprender qué hacían que nuestra búsqueda no sabía hacer. La respuesta resultó ser una única jugada que había pasado inadvertida. ## Cómo funciona Una búsqueda con roturas permitidas normalmente deja que una celda cargue como mucho un desajuste al colocarse. REPLAY relaja esa regla para admitir dos en ciertas celdas y reordena cómo se clasifican los emplazamientos candidatos, de modo que las jugadas que un buen tablero conocido usó de verdad pasan por delante de las que parecen más baratas. Con esos dos cambios puede recorrer el mismo camino que tomó el tablero testigo. Reproducidos de esta manera, los tableros de 460 de la comunidad se reconstruyen de forma idéntica, cada pieza en su sitio, y la puntuación cuadra. La reproducción es la prueba de que el ingrediente que faltaba era real. > **[Figure]** Interactivo: las celdas de doble rotura — interactive: DoubleBreakDiagram. Rendered on the canonical page (link above); not shown in this markdown export. > **[Figure]** Interactivo: reproducir la programación de roturas — interactive: DoubleBreakLab. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado Ambos tableros estrictos de 460 de la comunidad se reproducen exactamente hasta 460. El hallazgo: cada uno contiene cuatro o cinco celdas que pagan dos desajustes a la vez. Una búsqueda que solo permite un desajuste por celda literalmente no puede alcanzar esos tableros, y eso es exactamente por lo que las ejecuciones anteriores del proyecto se saturaban en 457 a 458. Permitir la doble rotura eleva la escala estricta hasta 460. Es una explicación nítida de un estancamiento de larga data y una advertencia: una regla de apariencia razonable (una rotura por celda) vedaba en silencio el acceso a los mismos tableros que perseguíamos. ## Método La reproducción es una búsqueda en profundidad ejecutada en un modo deliberadamente restringido. - **Ordenación prior-sobre-coste.** El DFS corriente tolerante a roturas clasifica los emplazamientos candidatos por coste de desajuste inmediato, el más barato primero. REPLAY invierte la prioridad a *prior-sobre-coste*: los candidatos que el tablero testigo usó de verdad se clasifican por delante de los que parecen más baratos, de modo que la búsqueda es atraída por el buen camino conocido en lugar de desviarse de él. Es el indicador `--prior-over-cost` gobernado por la propia programación del tablero testigo. - **Cola exacta.** Las últimas 14 celdas se resuelven de forma exacta (`--exact-tail 14`) en lugar de heurística, de modo que la fase final que las ejecuciones corrientes chapucean se cierra de forma determinista. - **La relajación que importó.** El presupuesto de desajustes por celda pasa de uno a dos. Ese único cambio es lo que admite los tableros testigo en absoluto. Ejecutados sobre un marco fijo de 460, 8 hilos, una cadencia de reinicio de 5 segundos y un presupuesto por ejecución, ambos testigos estrictos de 460 de la comunidad se reconstruyen pieza a pieza y la puntuación cuadra: la reproducción *es* la prueba de que el ingrediente que faltaba era la doble rotura. **El hallazgo.** Cada testigo contiene cuatro o cinco celdas que pagan dos desajustes a la vez. Una búsqueda limitada a una rotura por celda no puede representar esos tableros, y es precisamente por eso que las ejecuciones anteriores del proyecto, tolerantes a roturas, se saturaban en 457-458. Es un resultado de completitud de búsqueda disfrazado de intento de récord: el muro estaba en el conjunto de jugadas, no en el cómputo. ## Reproducir Esta está inicializada por semilla y más cerca del determinismo que los constructores estocásticos: la reproducción DFS a partir de un marco fijo y una programación de testigo reconstruye los tableros de 460 de forma fiable. Los objetivos que reconstruye son los [récords](/es/research/records/) estrictos de 460 propios de la comunidad, de modo que los propios tableros figuran en la cronología de récords; lo que este experimento añade es la reproducción que los reconstruye. La reproducción necesita dos entradas más allá del puzzle, un marco de borde y el tablero testigo de la comunidad que reconstruye; está previsto un directorio de apoyo ejecutable que entregue ambos. ## Preguntas abiertas ¿Permitir dos roturas por celda abre una vía hacia 461 y más allá, o solo hacia los 460 conocidos? ¿Existen tableros que necesiten una triple rotura? ¿Y se pueden predecir las celdas de doble rotura a partir de un tablero parcial en lugar de descubrirlas por reproducción? ## Relacionado - [Decodificar récords](https://eternity2.dev/es/research/build/learning/decoding-records/) — La forma más literal de aprender de un tablero fuerte: reconstruirlo con exactitud, pieza por pieza, hasta que tu búsqueda sepa reproducirlo. Lo que la reconstrucción te obliga a añadir es el ingrediente que le faltaba a tu búsqueda, y la reproducción es la prueba. - [Aprender a partir de tableros fuertes](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/) — Un estudio en cinco experimentos de una sola idea: en lugar de buscar Eternity II desde cero, extraer estructura del corpus de tableros fuertes ya encontrados y reinyectarla en una búsqueda. Un prior de posición, un voto de jugada aprendido, una brújula de demanda escasa, un minero de antipatrones y un decodificado de récord, ordenados de la señal más simple a la más sutil, y el único muro que los cinco alcanzan. - [LADDER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lanzar cientos de búsquedas cortas y baratas sobre el tablero, conservar solo los arranques más profundos y hacer ascender a los supervivientes a través de rondas cada vez más largas. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Aprendizaje de no-goods: recordar por qué fallaste](https://eternity2.dev/es/research/build/reduce/nogood-learning/) — Un subárbol fallido es un teorema: este estado parcial nunca podrá extenderse. Memorízalo y no vuelvas a entrar en él. La comunidad probó ambas variantes: tablas de transposición al estilo del ajedrez sobre la frontera de búsqueda, y restricciones extraídas del propio puzzle. El balance completo de lo que la memoria compra a la escala de E2, y los tableros pequeños donde realmente rinde. - [PALIMPSEST](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. --- # Una poda correcta por conteo de colores para la búsqueda tolerante a rupturas > Llevar, color a color, la oferta de semiaristas frente a la demanda del frente en un DFS con presupuesto de rupturas, y podar en cuanto el déficit o su paridad superan las rupturas restantes. Correcto por construcción; la ganancia se compone con la profundidad. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/ledger/ - Actualizado: 2026-07-22 - Temas: backtracking, search-space, structure - Reproducir: `just research-ledger-prune` - Fuente: El topic de reproducción ledger-prune: código, plan y resultados en el repositorio — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/ledger-prune --- La búsqueda de puntuaciones altas en Eternity II corre con una tolerancia a rupturas: el DFS puede colocar una pieza discordante mientras el total de rupturas cobradas quepa en un presupuesto. En ese marco casi ninguna poda clásica es correcta, porque el presupuesto es un recurso global; una rama que parece localmente muerta puede salvarse gastando una ruptura en un lugar completamente distinto. Me pregunté si una prueba de conteo puramente global podía podar de todos modos, sin cortar jamás una compleción que quepa en el presupuesto. Se puede: cero disparos erróneos en todas las repeticiones, y reducciones de nodos que se componen con la profundidad, aunque su magnitud depende del motor. ## Cómo funciona En cada nodo la búsqueda lleva un libro de cuentas, color a color: la oferta de semiaristas que aún ofrecen las piezas sin usar (los cuatro lados de cada una) y la demanda del frente (lados expuestos de las celdas colocadas que miran a celdas vacías, más el borde gris que el marco todavía debe). De ahí salen dos condiciones necesarias para toda compleción que respete el presupuesto de rupturas restante r: - **Déficit.** La carencia total, sumada sobre los colores como max(0, demanda menos oferta), nunca puede superar r. Es la forma consciente del presupuesto del fallo "se acabó el color c" que un DFS desnudo solo descubre celda a celda. - **Paridad.** El número de colores cuya diferencia oferta menos demanda es impar nunca puede superar 2r, más un hueco por cada unión de pista no cobrada. Una colocación perfectamente apareada mueve cada balance de color en una cantidad par; la paridad solo cambia en una ruptura cobrada (que voltea exactamente dos colores) o en una unión de pista no cobrada (a lo sumo uno). Si cualquiera de las dos falla, no existe compleción dentro del presupuesto bajo ese nodo y el subárbol entero se salta. Ambas se demuestran con el mismo argumento de invariancia, que es lo que hace la poda correcta y no heurística: nunca necesita adivinar dónde se gastarán las rupturas. ## Qué se midió Tres sondas, todas confirmadas en el topic de reproducción. **La puerta de corrección.** Repetir la cola perfecta conocida de un tablero con holgura cero; como la cola verdadera no necesita rupturas, cualquier disparo es un bug. Ocho tableros generados, 257 profundidades cada uno: cero disparos. La versión original de este estudio, dentro de mi motor de caza de récords, pasó la misma puerta sobre cuatro tableros de alta puntuación (251 celdas juzgadas cada uno), también con cero disparos. **La malla A/B.** Agotar dos veces un sufijo fijado de un tablero generado resuelto, poda apagada y poda encendida, contando todas las compleciones dentro del presupuesto. Los dos brazos deben hallar las mismas compleciones; así fue en los 144 pares sin censura. Las 96 celdas de la malla (sufijos de 20 a 32 celdas, presupuestos 1 a 3, 8 semillas) muestran una razón de nodos por encima de 1: mínimo 1,48x, medianas de 1,8x a 4,1x. La paridad es el disparador dominante en todas partes. **Las filas de certificado.** Los tres tableros 464 comunitarios (recuperados de las URL del [estudio design-recipe](/es/research/why/design-recipe/); el cuadro comunitario vive en la [página de récords](/es/research/records/)) se giraron 180 grados y sus colas se agotaron con presupuestos sin holgura, el protocolo del estudio original. Los tableros se identifican por su huella de rupturas de sufijo; uno lee (2, 5, 6, 7) frente al (2, 5, 6, 8) original, tres profundidades exactas y una desplazada en una sola ruptura por una diferencia de convención de cobro. Ese tablero es el tablero 1 del estudio original. ## El resultado | Afirmación (medida original) | Medido aquí | Estado | |---|---|---| | Cero disparos erróneos repitiendo colas reales con holgura cero | 0 disparos en 8 tableros x 257 profundidades | reproducido | | La poda nunca cambia la respuesta | compleciones idénticas en los 144 pares A/B sin censura | reproducido | | Razón de nodos por encima de 1 con presupuestos pequeños | los 96 pares de la malla por encima de 1 (mín 1,48x) | reproducido | | La razón se compone con la profundidad (1,5x, 140x, 995x, 4.330x) | 1,7x, 19,4x, 45,3x; la fila más profunda censurada | forma reproducida, magnitud ligada al motor | | Nulo con presupuesto grande (~0,1 por ciento de disparos) | la sonda quedó en el régimen activo (76 a 82 por ciento) | no probado aquí | En el tablero 464 identificado, con presupuestos idénticos a los originales (r = 5 y r = 6 en las filas profundas), el agotamiento halló exactamente una compleción en cada profundidad sin censura, la forma de certificado que el original reporta, y la razón se compone: > **[Figure]** Filas de certificado en el tablero 464 (girado 180°, presupuestos sin holgura) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. Un multiplicador que crece con la profundidad es la firma de una reducción del factor de ramificación, la única clase de aceleración que sobrevive al cambio de escala (el argumento está desarrollado en [la poda vence a la velocidad](/es/research/why/prune-vs-speed/)). ## Alcance y límites La corrección es el titular, y es independiente del motor; las magnitudes no lo son. El motor original juzgaba el libro de cuentas por candidato, sobre una actualización incremental, dentro de una búsqueda por cubetas limitada a una discordancia por celda, y midió de 140x a 4.330x en las mismas filas. Este porte juzga una vez por nodo sobre un libro recalculado desde cero, cobra las rupturas por arista sin tope por celda, y alcanza 45,3x antes de que el tope de 300 segundos censure la fila más profunda. Portar el libro incremental por candidato es el siguiente paso declarado; hasta entonces, la cifra de 4.330x se atribuye al motor original, no la confirma este. Dos cosas más no se siguen. Esto no es una afirmación de puntuación: LEDGER poda un DFS con presupuesto de rupturas ya existente (la familia de motores detrás de búsquedas como [la de Joshua Blackwood](/es/research/lab/experiments/joshua-blackwood/solver/)); por sí solo no encuentra nada. Y solo compensa en el régimen de presupuesto pequeño y sufijo profundo: el original midió alrededor de 0,1 por ciento de disparos bajo un presupuesto generoso a escala del tablero, donde la contabilidad es pérdida pura. Mi sonda fuera de régimen ni siquiera pudo alcanzar ese régimen silencioso sobre un sufijo corto (un presupuesto agotable se seca cerca de las hojas, donde vive la mayoría de los nodos); ese nulo queda por tanto sin probar aquí. ## Relacionado - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [Argumentos de paridad](https://eternity2.dev/es/research/build/analysis/parity-arguments/) — Cuente cualquier cosa en un tablero de emparejamiento de aristas dos veces, una desde cada lado, y los totales deben coincidir, entregando pruebas de imposibilidad al precio de una sola pasada. La historia del 479 muestra tanto su poder como su trampa: un argumento de paridad limpio, cierto para todo movimiento interior, derrotado por las sesenta aristas de borde que nadie puntúa. - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - [El solucionador de Blackwood, decodificado y ejecutado aquí](https://eternity2.dev/es/research/lab/experiments/joshua-blackwood/solver/) — El backtracker récord de Joshua Blackwood, decodificado gracias a las notas de Jef Bucas (un calendario de cuotas de color y una tolerancia a desajustes en el tramo final, ajustados casi óptimamente), luego construido y ejecutado en mi M1: tal como se publicó, vuela hasta 248 de 256 piezas ignorando las pistas; fija las cinco pistas oficiales y el mismo motor se atasca cerca de 45. --- # Meet in the middle > Experimentos exactos de final de partida que se encuentran en el medio: enumeran una región desde dos extremos y las unen por la costura, para hallar la verdadera mejor terminación con una prueba en lugar de la mejor conjetura de una heurística. Miden con exactitud una región pequeña en vez de perseguir la puntuación del tablero completo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/ - Actualizado: 2026-07-22 --- La búsqueda heurística conjetura; nunca sabe si tiene la mejor terminación posible. Los experimentos que se recogen aquí adoptan la postura contraria para una región pequeña: la enumeran desde dos extremos, unen las mitades allí donde los colores de su costura coinciden y sus conjuntos de piezas no se solapan, y obtienen la mejor terminación *exacta* junto con una prueba de que nada puntúa más alto. Es el clásico intercambio [meet-in-the-middle](/es/research/build/exact/meet-in-the-middle/) de tiempo por espacio, apuntado al final de partida del puzzle. Estos no son intentos de superar la puntuación. Responden a una pregunta distinta de la de las [combination pipelines](/es/research/lab/experiments/raphael-anjou/pipelines/) y de los [estudios](/es/research/lab/experiments/raphael-anjou/) de búsqueda: no *hasta qué altura puede trepar una heurística*, sino *cuál es la verdadera mejor terminación de esta región y en qué punto los métodos exactos dejan de ser asequibles*. Una respuesta exacta sobre una región pequeña vale aquí más que otro casi acierto sobre el tablero completo. El primer y por ahora único experimento de esa clase es [BANDSAW](/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/). Resolvió con exactitud una banda de filas en un banco de pruebas de 10×10, demostró en qué punto el presupuesto de desajustes deja de ser asequible, y dejó como subproducto un tablero de 437 sin marco (contado en aristas emparejadas), la única página de este cuaderno con rigor demostrado. La sección lleva el nombre de la técnica en lugar del de la única página, porque más ideas exactas de final de partida deberían acompañarla a medida que vayan llegando. ## Páginas de esta sección - [BANDSAW](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Resolver exactamente una banda de filas encontrándose en el medio, para hallar el verdadero mejor final y medir hasta qué punto puede decidirse por anticipado una fin de partida. ## Relacionado - [BANDSAW](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Resolver exactamente una banda de filas encontrándose en el medio, para hallar el verdadero mejor final y medir hasta qué punto puede decidirse por anticipado una fin de partida. --- # BANDSAW > Resolver exactamente una banda de filas encontrándose en el medio, para hallar el verdadero mejor final y medir hasta qué punto puede decidirse por anticipado una fin de partida. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/ - Actualizado: 2026-07-21 - Temas: exact-methods - Fuente: Encuentro en el medio (la página conceptual de este proyecto): la técnica de las dos mitades y la unión — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/exact/meet-in-the-middle.mdx --- La búsqueda heurística adivina; nunca sabe si tiene el mejor final posible. BANDSAW es el experimento opuesto: para una banda de filas cerca del fondo, calcula la mejor completación exacta, con una prueba de que nada puntúa más alto. El objetivo no es la velocidad, sino la certeza, y esa certeza sirve además de regla para medir lo difícil que es realmente la fin de partida. ## Cómo funciona Se corta la banda en una mitad superior y una mitad inferior. Se enumera cada forma de rellenar la mitad superior hasta un pequeño presupuesto de desajustes, indexada por dos cosas: qué piezas empleó y la fila de colores que deja colgando en la costura. Se enumera la mitad inferior de la misma manera, pero solo a partir de las piezas que la mitad superior no usó. Luego se unen las dos mitades allí donde sus colores de costura concuerdan y sus conjuntos de piezas no se solapan. Esa unión de encuentro en el medio halla la mejor completación exacta sin recorrer todo el árbol. Unas tablas de cotas inferiores exactas, calculadas trabajando hacia atrás columna por columna, le permiten podar las ramas que ya no pueden superar el presupuesto, y eleva el presupuesto paso a paso hasta que una ronda no encuentra nada nuevo, lo que prueba la mejor puntuación para esa banda. > **[Figure]** Interactivo: el árbol de fin de partida por encuentro en el medio — interactive: MeetInMiddleDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado En un banco de pruebas 10×10, BANDSAW resuelve la fin de partida de forma exacta y fija el presupuesto justo donde la exactitud deja de ser asumible: el árbol de búsqueda crece unas veinte veces por cada desajuste adicional, en ambos lados, de modo que encontrarse en el medio deja de compensar al tamaño completo del tablero. Ese resultado negativo es la parte útil: te dice exactamente dónde se agotan los métodos exactos y dónde las heurísticas deben tomar el relevo. Las piezas exactas que sobrevivieron, las tablas de cotas inferiores de sufijo y el branch-and-bound podado, se convirtieron en instrumentos reutilizables. Un tablero sin marco que puntúa 437 salió de la misma maquinaria. ## Método La unión es la idea; la poda es lo que la hace asumible. - **Encuentro en el medio.** Se corta la banda en una mitad superior y una inferior. Se enumera cada relleno de la mitad superior hasta un presupuesto de desajustes, indexado por (conjunto de piezas usado, fila de colores de costura). Se enumera la mitad inferior de la misma forma, tomando solo de las piezas que dejó la mitad superior. Se unen las dos mitades allí donde sus colores de costura concuerdan *y* sus conjuntos de piezas son disjuntos. Esa unión halla la mejor completación exacta sin recorrer nunca el árbol entero: el clásico compromiso tiempo-por-espacio del [encuentro en el medio](/es/research/build/exact/meet-in-the-middle/). - **Cotas inferiores de sufijo.** Trabajar hacia atrás columna por columna construye tablas de cotas inferiores exactas, de modo que un parcial que ya no puede superar el presupuesto actual se poda antes de extenderse. - **Trinquete de presupuesto.** Se eleva el presupuesto de desajustes un escalón a la vez y se vuelve a resolver; cuando una ronda no encuentra nada mejor, el mejor anterior queda *probado* como óptimo para esa banda. Esa prueba es la razón por la que esta página está etiquetada como **proven**, y no medida: el resultado es un certificado, no una muestra. El techo medido: cada mitad crece ~20× por unidad adicional de presupuesto, de modo que al tamaño completo de tablero 16×16 la tabla de la mitad superior ya no cabe; es la memoria, no el tiempo, la que es el muro. Ese resultado negativo es el entregable: fija con precisión dónde se agotan los métodos exactos y dónde las heurísticas deben tomar el relevo. El tablero 437 sin marco cayó de la misma maquinaria. ## Reproducir Determinista (`kind: exact`): la resolución por encuentro en el medio y su prueba de optimalidad se reproducen byte a byte para una banda dada, y el tablero 437 es verificable en el visor. El enumerador MITM y las tablas de cotas de sufijo están versionados con el código de investigación. ## Preguntas abiertas ¿Pueden las tablas de cotas inferiores escalar a la fin de partida 16×16 completa, o el espacio de estados de la costura crece demasiado? ¿A qué tamaño de banda pasa a ser la memoria, y no el tiempo, el límite? Y los raros casos en que la unión del medio sí se dispara, ¿pueden detectarse por anticipado y terminarse de forma exacta? ## Relacionado - [STAGED](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [Encuentro en el medio](https://eternity2.dev/es/research/build/exact/meet-in-the-middle/) — Enumerar dos mitades de un problema y unirlas en una interfaz compartida, intercambiando memoria por un exponente reducido a la mitad. El truco clásico de Horowitz–Sahni, qué aspecto tiene sobre bandas del tablero, y qué midió el experimento BANDSAW de este proyecto, incluido el método unilateral que lo superó. --- # Pipelines de combinación > Siete experimentos de búsqueda con nombre propio que persiguen la puntuación, cada uno un pipeline más que un único algoritmo: construye un tablero con un motor y luego lo eleva o lo remata con otro. Junto a ellos, dos hallazgos desmontan la maquinaria en la que los pipelines se apoyan. Cada página deja constancia de su idea, de su tablero y de las preguntas que deja abiertas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ - Actualizado: 2026-07-22 --- Este grupo reúne siete experimentos de pipeline con puntuación y dos hallazgos. Un *pipeline* construye un tablero con un motor y luego lo eleva o lo remata con otro; el interés reside tanto en la *combinación*, en el reparto del trabajo entre construcción, reparación y un remate exacto, como en cualquiera de las etapas por separado. Los dos hallazgos, el estudio de anchura de haz y el marco fluido, no tienen puntuación propia: desmontan la maquinaria en la que esta familia se apoya, el productor por haz en un caso y el borde congelado de CLOISTER en el otro. Las tarjetas de abajo distinguen los dos tipos. Ese encadenado de motores es también lo que separa a este grupo de los cuatro estudios que desmontan cada uno un único paradigma: el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/), el [estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/), [aprender de tableros fuertes](/es/research/lab/experiments/raphael-anjou/learning/) y el [estudio de pistas](/es/research/lab/experiments/raphael-anjou/hint-study/). Comparten los [motores](/es/research/lab/experiments/raphael-anjou/engines/); lo que difiere es cómo cada uno los compone y los gobierna: qué siembra, qué prohíbe, qué demuele y reconstruye. La sección de método de cada página recorre sus etapas en orden. Varios de los constructores que parten de cero se apoyan en el productor en haz, y dos en el bucle de reparación ALNS, motores que todavía no tienen su propia ficha aquí (véase la [página de motores](/es/research/lab/experiments/raphael-anjou/engines/)); cuando un pipeline sí la tiene, su página lo dice con claridad en lugar de remitir a una página que aún no existe. Están ordenados por lo que enseñaron, no por su puntuación. Un pipeline que terminó más abajo pero explicó por qué vale más aquí que uno que arañó un punto sin saber decir cómo. ## Páginas de esta sección - [GAUNTLET](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) — Ejecutar la misma búsqueda en haz según nueve órdenes de recorrido distintos, para que aterrice en regiones diferentes en lugar de converger siempre a la misma. El orden en zigzag encontró un tablero 458 inédito. - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - [CAS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cas/) — Colocar primero un borde perfecto y resolver el tablero hacia adentro, anillo por anillo, cada anillo como un problema de asignación sobre las piezas restantes. - [MIDDEN](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/midden/) — Decidir de antemano no cuándo puede romperse un tablero, sino dónde: confinar cada desajuste a una forma de celdas elegida, y buscar la mejor forma. - [El marco fluido](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/) — Un borde perfecto de 60 piezas no es un objeto rígido. Cada marco completamente apareado admite exactamente 45 intercambios libres a coste de borde cero; un tercio de los marcos perfectos ni siquiera pueden arrancar el interior, y un solo intercambio libre revive cada uno de ellos. - [LADDER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lanzar cientos de búsquedas cortas y baratas sobre el tablero, conservar solo los arranques más profundos y hacer ascender a los supervivientes a través de rondas cada vez más largas. - [Hacer un productor beam 10x mejor: la respuesta es la anchura](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/beam-width/) — Un repaso verificado más mediciones apareadas: ninguna astucia por nodo supera la anchura bruta del haz a igual tiempo de reloj. Los dos únicos aditivos que sobreviven son aleatorizar las claves de truncado empatadas exactamente (gratis) y el remuestreo SMC de los supervivientes (pequeño pero significativo). - [MOSAIC](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/mosaic/) — Dividir el tablero en pequeños bloques, resolver cada uno hasta el óptimo demostrado y volver a pegarlos, pagando las costuras en lugar de prohibirlas. Partiendo de cero, sin ningún récord que copiar, el método alcanza 448. - [STAGED](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. --- # Hacer un productor beam 10x mejor: la respuesta es la anchura > Un repaso verificado más mediciones apareadas: ninguna astucia por nodo supera la anchura bruta del haz a igual tiempo de reloj. Los dos únicos aditivos que sobreviven son aleatorizar las claves de truncado empatadas exactamente (gratis) y el remuestreo SMC de los supervivientes (pequeño pero significativo). - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/beam-width/ - Actualizado: 2026-07-22 - Temas: construction, speed, search-space - Reproducir: `just research-beam-width-smc` - Fuente: Zhang, Complete Anytime Beam Search (AAAI-98) — https://cdn.aaai.org/AAAI/1998/AAAI98-060.pdf - Fuente: Escalado de inferencia con filtros de partículas (2025) — https://arxiv.org/html/2502.01618v3 - Fuente: Dirección por Monte Carlo secuencial — https://arxiv.org/pdf/2306.03081 --- Buscaba la palanca que hiciera a un constructor de haz ancho diez veces mejor por unidad de cómputo: una puntuación por nodo más lista, un oráculo de completabilidad, una regla de dominancia, lo que fuera. Tras un repaso de la literatura y una campaña de mediciones A/B apareadas, la respuesta es decepcionante y útil a la vez: la palanca es la anchura bruta. Todo lo ingenioso pierde frente a un haz simplemente más ancho a igual tiempo de reloj, con exactamente dos excepciones baratas, ambas cambios en la regla de supervivencia, no en cómo se puntúan los nodos. ## Qué se midió El banco de pruebas es una escalera de instancias N×N plantadas y resolubles, construidas con el generador del kit del proyecto: tableros con marco, el balance de colores real, un óptimo conocido de 2N(N−1) aristas interiores casadas y 5 celdas de la solución fijadas como pistas, a imagen de las pistas oficiales. Un beam por capas rellena el tablero en orden de filas, y tres reglas de supervivencia compiten a anchura y tiempo fijos: truncado top-k determinista (plain), top-k con desempate aleatorio entre claves empatadas exactamente, y remuestreo SMC, donde los supervivientes se sortean en proporción a un softmax de su puntuación, al estilo de un filtro de partículas. Cada tablero terminado se vuelve a puntuar con el marcador canónico que excluye el borde; no se cree ningún autoinforme del solver. Aquí importan dos disciplinas. Primero, todas las comparaciones son apareadas: ambos brazos ven la misma instancia y la misma semilla, y las estadísticas son una t apareada y un Wilcoxon sobre los deltas por semilla. Segundo, el tamaño de peldaño se limita a N=12, porque en N=14 la distribución de puntuaciones es fuertemente bimodal y la varianza de semilla aplasta la varianza de mecanismo; una comparación con pocas semillas ahí es ruido. Cuánto mueve la dureza de la instancia a las puntuaciones medidas es un tema propio; véase [cómo de difícil es esta instancia](/es/research/why/how-hard-is-this-instance/). ## El resultado La anchura es la palanca dominante, y no por poco. En el banco más duro del estudio original, la puntuación media sobre el óptimo sube de forma monótona de 0,210 a anchura 32 hasta 0,346 (anchura 128), 0,527 (anchura 512) y 0,743 (anchura 2048) con un presupuesto fijo de 3 segundos. Las alternativas caras pierden a igual tiempo en ese mismo estudio: un oráculo de completabilidad por emparejamiento de Hall llega a 0,441 con anchura 64 donde un haz plain, con los mismos 10 segundos, alcanza 0,815 con anchura 8192, y una fusión por dominancia al estilo de diagramas de decisión baja la puntuación de 0,679 a 0,657. Su coste por nodo crece con el tamaño del tablero justo donde la profundidad más escasea: el tiempo que queman compra menos que la anchura que podría haber pagado. La reproducción versionada confirma cada signo en el banco del kit: > **[Figure]** Esperado (banco fuente) vs medido (banco del kit) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. Los dos aditivos de la regla de supervivencia son significativos por separado. Aleatorizar las claves de truncado empatadas exactamente no cuesta nada y gana +2,06 aristas a anchura 128. El remuestreo SMC gana +1,75 aristas en N=10 (t = 3,30) y +1,92 en N=12 (t = 5,41), con recuentos de nodos idénticos en ambos brazos: la ganancia no es más cómputo, sino otra elección de parciales supervivientes. Un frente remuestreado se mantiene diverso y vive más profundo antes de morir, donde un frente top-k determinista puede ahogarse pronto con supervivientes casi duplicados. La temperatura hubo que barrerla: T = 1,0 es catastrófica (de 17 a 29 aristas perdidas, pierde cada semilla), y la ganancia vive en una meseta en torno a T en [0,1, 0,2]. El mejor tablero de la campaña, un tablero SMC a N=12 que puntúa [237 de 264](https://eternity2.dev/viewer?puzzle=smc_n12_c22_s34&puzzle_size=12&board_edges=adcaacpdafjcacofafqcadmfaeldabmeaetbacpeabmcaadbcmeaplimjunloswuquismgtulmngmmmmtqhmpwwqmjrwdabjejbaipwjnqopwjsqiiojtskinqusmsoqhmgswukmrtuubadtblbawkolomjksplmolipknulunwnoopngrgokhvrughhdaegbpdaorlpjtwrltntisutukjswstkpvisgltvvtklhwsteafwdlbaltqlwvjhnivouspijumstrnuiwigtwvikkwwsjvkfaejbsbaqjgsjrqjvltrpgqlmmignthmitvtvpntwrhqvkhreabkbgcagpogqhpptvshqwjviwvwhuiovgrunnnghhjnhrohbafrcheajrqhpqkrshiqupnhvkopirhkrklrnutijoouovrofaevekcaqvnkkniviggnnuopqjuuhgqjvlggtsrloqhsrvpmeafvcmfanujqklquglkloitlgvkinsnvgqjsrlpkhomsprqofabrfeaakdaewdadifadgdafweadscaehcacpfacmdafrcadbaac&hints=67.0-62.1-7.2-19.0-112.0), se puede comprobar arista a arista en el visor. ## Qué no se sigue de esto Este es un resultado sobre instancias de escalera, no sobre el 16×16 canónico. Que la ganancia SMC se transfiera a un productor 16×16 real, y a la calidad del vivero que alimenta aguas abajo, sigue explícitamente abierto; ninguna de estas cifras es una reivindicación de récord de ningún tipo (el estado de los tableros que cuentan vive en la [página de récords](/es/research/records/)). Tres salvedades medidas acotan aún más el resultado. Las instancias del kit son bastante más fáciles que el banco fuente (ratios de 0,82 a 0,88 frente a 0,21 a 0,74), lo que comprime el margen por encima del beam plain: la ganancia SMC aterriza aquí en torno a +1 % relativo frente a +6 % allí, mismo signo, significación más fuerte. El coste por nodo de este porte es mayor que el del motor fuente, así que la ley de anchura se reporta a saturación (tope de 12 segundos, cada pasada termina) en lugar del marco a igual tiempo de la fuente; los A/B de la regla de supervivencia no se ven afectados, porque ambos brazos expanden por construcción los mismos nodos a anchura fija. Y el resultado de los desempates autoriza una sola cosa: aleatorizar las claves empatadas *exactamente*. Ensanchar la ventana de tolerancia de la puntuación es otro movimiento, y desastroso sobre el productor 16×16 real en el estudio fuente (450 cae a 290 con tolerancia 2). Aleatoriza los empates; nunca ensanches la ventana. ## Relacionado - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [¿Es NP-completa esta instancia y cómo la codifico?](https://eternity2.dev/es/research/why/how-hard-is-this-instance/) — El emparejamiento de aristas es NP-completo como familia, pero eso no dice nada de un tablero 16×16 fijo: una instancia aislada es una constante, no un problema. Lo que sí es cierto es la dureza en el peor caso de la familia y la dureza empírica de esta instancia, y cómo escribir el puzzle para un solucionador SAT, de cobertura exacta o de PLE, con pequeños esbozos detallados. Una medición con tableros plantados pone cifras a la elección de la formulación: un acantilado de resolubilidad que un paradigma de búsqueda golpea y otro cruza, y que se mueve con el número de colores. - [LADDER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lanzar cientos de búsquedas cortas y baratas sobre el tablero, conservar solo los arranques más profundos y hacer ascender a los supervivientes a través de rondas cada vez más largas. --- # CAS > Colocar primero un borde perfecto y resolver el tablero hacia adentro, anillo por anillo, cada anillo como un problema de asignación sobre las piezas restantes. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cas/ - Actualizado: 2026-07-22 - Temas: construction, local-search - Reproducir: `just research-cas-annular` - Fuente: Tema de reproducción (este proyecto): plan publicado, crate de cómputo y resultados por marco detrás de cada número de esta página — https://github.com/raphael-anjou/eternity2/blob/main/research/topics/cas-annular/article.md --- CAS (concentric annular solving, resolución anular concéntrica) construye el tablero como crece una cebolla: se coloca un borde perfecto y se resuelve hacia adentro, anillo por anillo, hasta que las cuatro casillas centrales cierran el tablero. La pregunta era si ese orden de fuera hacia dentro podía ser un camino hacia los récords. La respuesta fue un no rotundo junto a un sí útil: desde cualquier marco perfecto el pipeline se estanca en una banda estrecha de 429 a 437, y desde ese mismo estado inicial vence a una continuación de destrucción y reparación en todos y cada uno de los marcos. ## Cómo funciona El tablero 16×16 son 8 anillos concéntricos de 60, 52, 44, 36, 28, 20, 12 y 4 casillas. CAS fija primero el anillo más externo como marco perfecto 60/60: las 60 casillas de borde llenas con piezas de borde, cada arista del perímetro gris, y las 60 adyacencias internas del anillo emparejadas. Después resuelve cada anillo interior por turno como un problema de asignación sobre las piezas aún libres, maximizando las aristas emparejadas contra el anillo que lo rodea más las internas del propio anillo. Una vez colocado, un anillo queda congelado; la búsqueda nunca vuelve a él. Las ejecuciones originales (volúmenes de investigación 74 a 79) resolvían cada anillo con un MIP, de 25 a 45 segundos por marco. La reproducción publicada lo sustituye por un beam determinista de anchura 1024 por anillo, que cae en la misma banda, y añade un brazo de comparación: fijar el mismo marco, dejar el interior vacío y entregar ese estado a una [búsqueda local de destrucción y reparación](/es/research/build/local-search/local-search-alns/). ## El resultado Veinte marcos perfectos enumerados, veinte puntuaciones entre 429 y 437 aristas emparejadas de 480 (media 432,8). La auditoría fuente, sobre sus propios 20 marcos, quedó entre 430 y 436 con media 432,4. La banda y la media se reproducen con un punto de margen en cada extremo, y el marco no importa: todo marco 60/60 lleva a la misma meseta. El mejor tablero de la reproducción puntúa 437; puede comprobarse [arista por arista en el visor](/viewer/?puzzle=official_eternity2&puzzle_size=16&board_edges=abdaabjbaeqbadteaftdafgfacrfabpcafubabjfafhbafqfadofadhdaendaabedgdajiggqphitwhptgiwgkogrphkpjppumhjjvomhnlvqgtnouvghmwuniombafjdpcagnnpwlmnhuqlisouoqwshwmqppvwhjqpoqtjlvmqtkuvvulkwswuommsfaemcpcansvpiujsqrluonjrkpgnmonpvmjoqgqmtrkgmhmrunhhlktnwhqkmorheabocnfavhunjlthljmlhukjgsquntksjkqtqmokkigmmhgihruhtrgrqpqrrhkpbachfoeaurhotusrgolukuwopmmukrvmqrtropprgmspgsjwuvusgtqvqvntkokvcacoeteahustsgrulorgwuiogvvlvitvtvphpsuvskpphvrkuwovqlhwnkolkgikcadgencaspwnrilpriliiklqvwvkuiwqooiqijjrprsjrmorinjmhsknoiisiwgidafwcqeawinqliwillkilwolvwlwwmulijjmqwlrtqqwosnqjtrukmttiommgllofaelepbanqrpwoiqklwooupllsnhuhwklsuhhwusqngwnnsnrqunttlqmrgtlslreaesbgbaringigqiwwvgpmiwnnvjvijnuksivrtknkvrssskujoslijjgpnilulpeaeubteanpgtqgmpvgsgisjgvntorkmnsmwktrsmvmtrtplmoslgjuhsnkoulqjkeafqeibagtgimsutsphsjnmptmqnmrwmwpkrstoptpjtlsnptgwshhlgouqnjuoufafubmdagmtlujvmqovjmnloqoqnwmsokqhmoriqjkgrntkkwvwtlrwvqvproknvfackdsdatjisvvijvlwvlkplqjskshvjhrphijurgwvjkrvwwhtrwjhhpjijnthjcadtdcaaidacidadweadpcaesbacveabpdaeufadvcafvbactfabhcafrbachcabdaac&hints=135.0-210.1-34.1-221.2-45.1). > **[Figure]** Esperado frente a medido (20 marcos CAS, 8 marcos de referencia) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. La segunda mitad es el duelo directo. Partiendo del mismo marco fijado con el interior vacío, la continuación por búsqueda local pierde todas las veces. En la medición fuente (alns_only completo, 60 segundos por marco) alcanzó de 385 a 398 y perdió las 8 comparaciones disponibles por 34 a 49 puntos. El proxy más ligero de la reproducción lo hace mejor en términos absolutos (411 a 419) y aun así pierde cada marco, por 13 a 23 puntos. La magnitud de la diferencia no es comparable entre los dos montajes; su dirección y su consistencia en cada marco sí lo son. ## Por qué se detiene La meseta no es un problema de ajuste, ni un hueco en el objetivo: las 480 aristas están todas en el objetivo de CAS. El mecanismo es escasez de piezas. Los anillos exteriores, resueltos con avidez, fijan las piezas según lo bien que encajan hacia fuera, y en los anillos 5 a 7 el conjunto restante sencillamente ya no contiene piezas cuyos perfiles de color encajen con las restricciones orientadas hacia dentro. Es la versión a escala de anillos del [robo de piezas](/es/research/why/piece-theft/): una pieza escasa gastada pronto, anillos antes de la casilla que la necesitaba. Los volúmenes fuente probaron los rescates obvios, y ambos confirman el diagnóstico. Un híbrido CAS-ALNS puntuó 418, peor que CAS solo; una pasada de refinamiento ALNS sobre un tablero CAS terminado llegó a 437-439, una mejora de unos pocos puntos que queda muy por debajo de lo que otros pipelines de este cuaderno alcanzan desde cero en el mismo hardware. Para situar el listón de la comunidad, véase la [página de récords](/es/research/records/). ## Qué se sigue de esto, y qué no CAS es dos cosas a la vez, y ambas mitades son el hallazgo. Como camino hacia los récords queda refutado en cuanto orden voraz: el orden de fuera hacia dentro deja sin piezas a su propio final de partida, desde cualquier marco. Como herramienta de subproblema es la mejor opción que he medido para un estado concreto, un marco perfecto más un interior vacío. Los operadores de destrucción y reparación esperan un tablero completo que mutar; ante un interior vacío primero tienen que construir uno, y lo hacen mal, mientras que CAS es exactamente la herramienta constructiva de ese estado. Qué algoritmo conviene depende del estado de partida; la composición del pipeline importa tanto como sus componentes. [CLOISTER](/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) es el experimento hermano que conserva el marco fijado pero abandona el orden anillo por anillo. Tres salvedades acotan la conclusión. La reproducción fija las cinco piezas pista oficiales; las páginas fuente no registran si las ejecuciones originales lo hacían. Las cinco pistas están en el interior, así que el brazo del marco no se ve afectado, y fijarlas solo puede hacer la reproducción ligeramente conservadora, la dirección segura para una afirmación de meseta. El brazo de referencia es un proxy ligero: solo la dirección de la diferencia y su consistencia en cada marco se trasladan, no su tamaño. Y los números son propiedades del juego de piezas oficial 16×16: el mecanismo vive en los anillos 5 a 7, que un tablero 8×8 (4 anillos) nunca alcanza, de modo que una prueba en tablero pequeño no puede confirmar ni refutar la conclusión. ## Reproducir `just research-cas-annular` vuelve a ejecutarlo todo desde cero: enumera los marcos con un DFS de borde con semilla, corre el brazo CAS de 20 marcos y el brazo de referencia de 8 marcos, y regenera el archivo de resultados publicado con puntuaciones por marco, diferencias y una URL del visor para cada tablero. ## Relacionado - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. --- # CLOISTER > Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/ - Actualizado: 2026-07-21 - Temas: local-search, backtracking - Fuente: Geografía del borde de colores raros (este proyecto): por qué el marco es el corte natural — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/rare-color-geography.mdx --- El borde y el interior suelen resolverse juntos, lo que desperdicia esfuerzo: el interior no deja de proponer piezas que jamás podrán encajar con el borde más adelante. CLOISTER fija primero un marco perfecto de 60 piezas y luego explora el interior 14×14 tomando las aristas del marco orientadas hacia dentro como restricciones reales desde la primera celda, de modo que un interior condenado se rechaza de inmediato en lugar de al final. ## Cómo funciona Se parte de un borde completo y perfectamente apareado. La búsqueda interior es un relleno en profundidad tolerante a rupturas, pero las celdas que bordean la arista interna del marco deben coincidir con el marco, y esa exigencia está activa desde la primera colocación, no verificada solo cuando el interior está terminado. Fases finales exactas evalúan la última región, incluido lo bien que se sella contra el borde. Como el borde queda fijo, la búsqueda recoge algo que un interior reconstruido a posteriori no puede obtener: el puñado de aristas adicionales que surge de que el interior encaja realmente con el borde contra el que se construyó, en vez de injertarse sobre un borde después. > **[Figure]** Interactivo: cómo el marco ancla el interior — interactive: BorderAnchorDiagram. Rendered on the canonical page (link above); not shown in this markdown export. Pruébalo en directo: fija un marco y observa cómo la búsqueda interior se ejecuta frente a él en tu navegador. > **[Figure]** Interactivo: resuelve el interior autónomo en directo — interactive: CloisterLiveLab. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado Como solucionador de interiores autónomo, CLOISTER alcanza una puntuación interior de 453 sin pistas, en minutos, y confirma un efecto real: un interior construido contra su propio borde se adhiere a él con unas pocas aristas apareadas más que el mismo interior, de igual calidad, adherido después. Con las cinco pistas oficiales forzadas se estabiliza entre el tramo alto de los 440 y el bajo de los 450. No bate los mejores récords y satura como todo lo demás al acercarse al muro. Pero aísla y mide con limpieza el acoplamiento borde-interior que la búsqueda sobre el tablero completo difumina. ## Método La búsqueda es un DFS tolerante a rupturas sobre el interior, pero la palanca está en el encuadre y en una campaña de dos fases llevada sobre *muchos* marcos. - **El marco como restricción dura.** Un borde completo de 60 piezas se fija, y los colores del marco orientados hacia dentro se convierten en restricciones duras sobre las celdas del borde desde la primerísima colocación interior, y no en un control diferido al final. Un interior condenado se poda de inmediato. - **Fase final exacta.** La región de la fase final se resuelve exactamente (una cola exacta de 14 celdas), incluida su unión con el borde, de modo que las últimas celdas se cierran de forma determinista en lugar de por heurística. - **Campaña en amplitud sobre los marcos.** En vez de un solo borde, se recorre un directorio de marcos candidatos en dos fases: una sonda de compatibilidad con las pistas, poco costosa (~6 segundos), descarta los marcos incapaces de alojar las pistas, y luego una receta de cola de 30 segundos se ejecuta sobre cada marco superviviente con 8 semillas. Gana el mejor interior. El efecto medido es pequeño pero real, y proviene de una sola cosa: el acoplamiento borde-interior que la búsqueda sobre el tablero completo promedia y borra, pero que una construcción borde-primero puede explotar mientras aún puede. 453 sin pistas; del tramo alto de los 440 al bajo de los 450 con las cinco pistas forzadas. ## Reproducir Con semilla fija y casi determinista dado un marco: la resolución DFS del interior a partir de un marco fijo reproduce su puntuación de forma fiable, y el tablero registrado es verificable arista por arista en el visor. La resolución necesita una entrada más allá del puzzle, un marco de borde perfecto pre-resuelto; se prevé un directorio de soporte ejecutable que entregue ese marco junto al motor. Por ahora la ejecución sigue siendo exploratoria: el tablero 453 es verificable en el visor, pero todavía no se distribuye una reproducción empaquetada de un solo comando. ## Preguntas abiertas ¿Qué parte del bono de compatibilidad con el borde puede recogerse sin fijar primero el borde? ¿Recorrer muchos bordes, en vez de uno solo, encuentra un interior que se adhiera aún mejor? ¿Y de dónde procede exactamente el techo de la versión de pistas estrictas? ## Relacionado - [STAGED](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - [MIDDEN](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/midden/) — Decidir de antemano no cuándo puede romperse un tablero, sino dónde: confinar cada desajuste a una forma de celdas elegida, y buscar la mejor forma. - [Encuentro en el medio](https://eternity2.dev/es/research/build/exact/meet-in-the-middle/) — Enumerar dos mitades de un problema y unirlas en una interfaz compartida, intercambiando memoria por un exponente reducido a la mitad. El truco clásico de Horowitz–Sahni, qué aspecto tiene sobre bandas del tablero, y qué midió el experimento BANDSAW de este proyecto, incluido el método unilateral que lo superó. - [El marco fluido](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/) — Un borde perfecto de 60 piezas no es un objeto rígido. Cada marco completamente apareado admite exactamente 45 intercambios libres a coste de borde cero; un tercio de los marcos perfectos ni siquiera pueden arrancar el interior, y un solo intercambio libre revive cada uno de ellos. --- # El marco fluido > Un borde perfecto de 60 piezas no es un objeto rígido. Cada marco completamente apareado admite exactamente 45 intercambios libres a coste de borde cero; un tercio de los marcos perfectos ni siquiera pueden arrancar el interior, y un solo intercambio libre revive cada uno de ellos. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/ - Actualizado: 2026-07-22 - Temas: structure, local-search - Reproducir: `just research-frame-manifold` - Fuente: Tema de reproducción (este proyecto): plan, código de cómputo y resultados detrás de cada número de esta página — https://github.com/raphael-anjou/eternity2/blob/main/research/topics/frame-manifold/article.md --- Los pipelines de «borde primero» como [CLOISTER](/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) construyen un borde de 60 piezas completamente apareado, lo congelan y entregan sus 56 colores orientados hacia dentro como restricciones duras a la búsqueda interior. Quería saber si ese objeto congelado es de verdad un solo objeto, partiendo de un reflejo simple: cuando el interior se atasca contra el borde, ¿por qué retroceder sobre el borde pudiendo intercambiar una sola pieza del reborde? Medida sobre 500 marcos perfectos frescos, la respuesta es más nítida que la pregunta. Un borde perfecto es una variedad conexa con exactamente 45 salidas libres; un tercio de los bordes perfectos ni siquiera pueden arrancar el interior; y un intercambio libre repara cada marco muerto muestreado, a coste de borde cero. ## Qué se midió Primero las definiciones. Un marco coloca las 4 esquinas y las 56 piezas de borde en las 60 celdas del borde del tablero oficial 16×16, con el gris exactamente hacia fuera. BB cuenta las adyacencias borde-con-borde apareadas a lo largo del anillo, máximo 60; BB = 60 es un marco perfecto. Un intercambio legal permuta dos piezas colocadas de la misma clase (esquina con esquina, pieza de borde con pieza de borde); las rotaciones vienen forzadas por la regla del gris hacia fuera, así que un intercambio queda determinado por el par de celdas. Un intercambio es libre cuando deja BB en 60. El crate de cómputo genera sus propios marcos BB = 60 del juego oficial de 256 piezas (una colocación en profundidad aleatorizada sobre las 60 celdas del borde) y luego mide cada afirmación directamente: 1. cada intercambio legal de la misma clase y su coste en BB, agregado sobre todos los marcos; 2. cadenas de intercambios libres, recalculando el conjunto libre sobre el anillo actual en cada paso, siguiendo BB, el número de movimientos libres y cuánto han derivado el anillo y el vector de colores interiores; 3. la rellenabilidad de cada celda interior que toca el marco: un marco está muerto cuando alguna de esas celdas no puede rellenarse con ninguna de las 196 piezas interiores; 4. una reparación voraz de cada marco muerto usando solo intercambios libres. Pasada principal: 500 marcos generados de forma independiente, paseo de longitud 100, reanimación intentada sobre los primeros 60 marcos muertos. La pasada es determinista; relanzar el comando archivado reproduce el fichero de resultados byte a byte. El primer marco generado puede verse en el [visor](/viewer/?puzzle=official_eternity2&puzzle_size=16&board_edges=abdaaepbacqeadpcabmdacrbacpcafvcafufabtfachbabhcacsbaepcadteaacddtcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaencnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeabofhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababgcidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafhdofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaelfoeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeseqbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeabvbpcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafuckfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafadufqfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadgfjbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaepbjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaetftdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeadwdhdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaendcaaocacrfacgfafqeafmfaewdafsdadidadgcadvbacjbabteabueaeibaeeaab). ## El resultado **Exactamente 45 movimientos libres, en cada marco.** Los 500 marcos perfectos admiten exactamente 45 intercambios libres, nunca 44, nunca 46. Ningún intercambio sube BB jamás (60 es el máximo), y los movimientos libres componen: tras 100 intercambios libres encadenados, BB sigue en 60 y siguen disponibles 45 movimientos libres. El recuento nunca se agota. **Ninguno es cosmético.** Cero de los 45 intercambios libres preserva el color interior de las piezas que toca: cada movimiento libre cambia el vector de restricciones que el borde presenta al interior. Un paseo libre de 100 pasos visitó 99 vectores de objetivos de reborde distintos de 101 posibles sin salir nunca de BB = 60. **Perfecto no es utilizable.** 180 de los 500 marcos perfectos (36 por ciento) tenían al menos una celda interior que ninguna de las 196 piezas interiores podía rellenar, y 46 (9,2 por ciento) estaban muertos en la primera celda que visita un solucionador en orden de barrido: la búsqueda interior muere a profundidad 0 pese a un borde con puntuación perfecta. La reparación voraz solo con intercambios libres revivió 60 de 60 marcos muertos muestreados hasta cero celdas muertas, sin que BB saliera nunca de 60. En el ejemplo trabajado del estudio fuente, un solo intercambio libre llevó un DFS con marco de la profundidad 0 a la profundidad 153 de 196. > **[Figure]** Esperado frente a medido (pasada principal, 500 marcos) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. Una pasada de robustez con semilla independiente (100 marcos frescos, base de semilla 7001) concuerda: 45 intercambios libres en cada marco, ningún aumento, 45 marcos muertos de 100 (histograma 38 / 7), los 45 revividos, y el paseo vuelve a mantener BB = 60 con 45 movimientos libres de principio a fin. La conclusión se sostiene, pues, a través de generadores y semillas: un borde perfecto y un borde utilizable son propiedades distintas, y el marco puede permanecer móvil durante la búsqueda en lugar de deshacerse por retroceso. ## Qué no se sigue de esto - No se afirma que caminar por la variedad o revivir marcos muertos mejore las puntuaciones de tableros completos. El propio A/B del estudio fuente no produjo ningún tablero completo con marco; cualquier efecto sobre la puntuación es una cuestión abierta, y un productor que mantenga el marco fluido durante la búsqueda interior es trabajo futuro. Esta página publica solo el mecanismo. - El 45 se reivindica como propiedad del juego de piezas oficial y se replica aquí sobre marcos de un generador distinto. La tasa de marcos muertos es una propiedad del muestreo del generador: 36,0 por ciento en la pasada principal, 45 por ciento en la de semilla independiente; el enunciado defendible es una tasa entre mediados de los 30 y mediados de los 40 por ciento, no un 36 universal. - El recuento bruto de pares de la misma clase es de 1546 por marco aquí frente a unos 1458 en la fuente, que evidentemente excluía alguna clase de pares sin efecto. Las cuotas y las dos filas que soportan la carga (45 libres, 0 ganancias) concuerdan de todos modos. - Los marcos van aquí sin pistas, como en la medición fuente; la compatibilidad de los marcos con las pistas es un asunto aparte y no forma parte de esta afirmación. ## Relacionado - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - [STAGED](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. - [El equilibrio del borde](https://eternity2.dev/es/research/why/border-balance/) — Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. --- # GAUNTLET > Ejecutar la misma búsqueda en haz según nueve órdenes de recorrido distintos, para que aterrice en regiones diferentes en lugar de converger siempre a la misma. El orden en zigzag encontró un tablero 458 inédito. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/ - Actualizado: 2026-07-21 - Temas: construction - Reproducir: `just research-record-boards` - Fuente: Búsqueda en haz (la página de concepto de este proyecto): la construcción cuyo orden de recorrido se hace variar — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx --- Una búsqueda en haz que rellena siempre el tablero en el mismo orden tiende a descubrir el mismo tipo de tablero, sea cual sea la semilla aleatoria. El orden en que se visitan las celdas decide en silencio en qué región se acaba, y a lo largo de dieciséis semillas, un mismo orden de recorrido produjo una sola familia de disposición de las esquinas. GAUNTLET lo convierte en una herramienta: ejecutar la búsqueda según nueve órdenes de recorrido genuinamente distintos, y así muestrear regiones genuinamente distintas. ## Cómo funciona GAUNTLET deriva el haz constructivo de PRIOR y le confía un orden de recorrido intercambiable: fila, fila invertida, columna, columna invertida, zigzag, zigzag invertido, espiral entrante, espiral saliente y diagonal, nueve en total. Como el orden de las celdas modifica qué tableros parciales sobreviven en cada paso, cada orden explora una trayectoria diferente en lugar de apiñarse en una sola. Un barrido de 9 recorridos × 4 semillas produjo **18 firmas de disposición de esquinas distintas**, frente a una sola a lo largo de dieciséis semillas del haz de recorrido único del que surgió. Cada ejecución completa produce un tablero entero; los más sólidos se pulen luego con un realce ALNS de 30 minutos. La constatación es nítida: *el orden de recorrido es un eje de diversidad más potente que la semilla aleatoria.* Ese es el resorte, y es sobre él que se apoyan KEYRING y PRIOR más adelante. > **[Figure]** Interactivo: el calendario del orden de construcción — interactive: GauntletDiagram. Rendered on the canonical page (link above); not shown in this markdown export. Recorra un orden paso a paso para ver cómo el orden de visita dirige el haz. > **[Figure]** Interactivo: recorrer el orden de construcción — interactive: GauntletStepThrough. Rendered on the canonical page (link above); not shown in this markdown export. O haga competir los nueve órdenes entre sí, en directo, en su navegador. > **[Figure]** Interactivo: competir las estrategias de construcción — interactive: GauntletLiveRace. Rendered on the canonical page (link above); not shown in this markdown export. ## El tablero La búsqueda es estocástica, así que no reproducirá este tablero exacto, pero el tablero que encontró está fijado, incluido aquí y verificable arista por arista. > **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado El orden en zigzag con la semilla 99, realzado, alcanzó 458 de 480 en la disposición de esquinas cp=(3,0,1,2), el primer tablero igual o superior a 458 jamás encontrado en esa disposición dentro de nuestra base de datos. Se sitúa a al menos 246 celdas de 256 de todo lo que teníamos a ese nivel: una cuenca genuinamente nueva, no otra ruta hacia una conocida. Así que la contribución de GAUNTLET es alcance más que un récord: abrió una nueva región de tableros sólidos. Una segunda ronda (32 realces más) topó en 457 sin ningún 461, lo que indica que la nueva familia se satura como las demás, pero la familia en sí era el premio. ## Método El pipeline consta de tres etapas, y los parámetros son lo esencial. **Etapa 1: construcción diversa.** Se deriva el haz de PRIOR y se le confía un orden de recorrido intercambiable sobre las 256 celdas: `row`, `row_rev`, `col`, `col_rev`, `zigzag`, `zigzag_rev`, `spiral_in`, `spiral_out`, `diagonal`, nueve órdenes, cruzados con las semillas `{1, 7, 42, 99}`. Todos comparten un mismo a priori (la matriz `high459`) a baja temperatura de softmax (0,05), de modo que el haz está guiado por el a priori sin ser determinista. El orden modifica qué tableros parciales sobreviven en cada paso, de manera que cada par (recorrido, semilla) recorre una trayectoria diferente. **Etapa 2: realce.** Cada construcción sólida recibe un realce ALNS (operadores de escape del a priori + destrucción/reparación `basic_lkh`), 5 minutos por construcción durante el barrido, más tiempo para los finalistas. **Etapa 3: agrupamiento.** Se agrupan todas las salidas por permutación de las esquinas y se señalan las firmas ausentes de la base de datos existente. Así es como el barrido 9×4 hizo emerger **18 familias de esquinas distintas** allí donde dieciséis semillas de un recorrido único habían hecho emerger una sola, la afirmación medida de que *el orden de recorrido es un eje de diversidad más potente que la semilla.* El tablero ganador, zigzag, semilla 99, realzado, se sitúa en cp = (3, 0, 1, 2), a una distancia de Hamming ≥ 246/256 de todo lo que estaba previamente a ese nivel: una nueva cuenca según el mismo test de permutación de esquinas más Hamming que emplea [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/). ## Reproducir `just research-record-boards` verifica la puntuación del tablero 458 retenido, exactamente, a partir de su cadena Bucas almacenada. El barrido es estocástico (nueve recorridos × cuatro semillas, luego una pasada de pulido), así que no reproducirá el mismo tablero; el tablero es el artefacto de referencia. El motor es el productor en haz compartido, ejecutado según nueve órdenes de relleno; usa el mismo a priori extraído del corpus que [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/), de modo que la ejecución no se reproduce aquí desde cero. ## Preguntas abiertas ¿Presenta esta nueva familia la misma estructura local rígida que las demás, o una forma diferente? ¿Y puede un refinamiento más largo elevarla por encima de 458, como una familia fresca a veces tiene más margen que una bien rodada? ## Relacionado - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [Hacer un productor beam 10x mejor: la respuesta es la anchura](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/beam-width/) — Un repaso verificado más mediciones apareadas: ninguna astucia por nodo supera la anchura bruta del haz a igual tiempo de reloj. Los dos únicos aditivos que sobreviven son aleatorizar las claves de truncado empatadas exactamente (gratis) y el remuestreo SMC de los supervivientes (pequeño pero significativo). --- # LADDER > Lanzar cientos de búsquedas cortas y baratas sobre el tablero, conservar solo los arranques más profundos y hacer ascender a los supervivientes a través de rondas cada vez más largas. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ladder/ - Actualizado: 2026-07-21 - Temas: local-search - Fuente: Halving sucesivo / estrategias de reinicio (la página conceptual sobre reinicios de este proyecto) — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/backtracking/restarts.mdx --- La mayor parte de una búsqueda larga se malgasta en arranques que estaban condenados desde el principio. LADDER gasta casi nada para averiguar qué comienzos vale la pena perseguir. Lanza una avalancha de sondeos muy cortos, conserva los pocos que llegaron más lejos y solo entonces paga por ejecuciones más largas, únicamente sobre esos. Es selección por torneo aplicada a los arranques de búsqueda. ## Cómo funciona La primera ronda son cientos de sondeos de cinco segundos que parten de semillas aleatorias distintas, cada uno intentando trazar una larga tirada de celdas perfectamente encajadas. Conserva los prefijos más profundos y descarta los que son casi duplicados entre sí para que los supervivientes sigan siendo diversos. Promueve esos a una ronda más larga con controles de calidad más estrictos, y luego promueve los mejores de entre ellos a una ejecución de longitud completa. Cada peldaño dedica más tiempo a candidatos menos numerosos y mejores, del mismo modo que los torneos por halving sucesivo asignan el esfuerzo a los contendientes que siguen ganando. > **[Figure]** Interactivo: la progresión peldaño a peldaño — interactive: LadderDiagram. Rendered on the canonical page (link above); not shown in this markdown export. > **[Figure]** Interactivo: ejecutar la búsqueda en escalera en directo — interactive: LadderLiveLab. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado LADDER produjo un tablero de 451 que respeta las cinco pistas oficiales, sin ninguna guía de ningún récord conocido, la primera vez que el proyecto escapó de la banda de 444 a 450 en la que la búsqueda no guiada no dejaba de caer. Los finales quedan determinados por su prefijo: una vez que se guarda una apertura lo bastante fuerte, el resto se sigue. Una ejecución más larga tocó después el 452, una arista más, aunque el 451 es el tablero fijado y reproducible aquí. También cartografió los límites: la reserva de aperturas perfectas se agota, y más allá de cierto punto los peldaños convergen todos hacia el mismo techo. Así que LADDER es una buena manera de encontrar el mejor arranque, no una manera de franquear los muros estructurales que detienen a todo método cerca de la cima. ## Método La escalera es un torneo recursivo por halving sucesivo sobre los *arranques* de búsqueda, puntuados por la profundidad del prefijo. - **Primera ronda: avalancha.** Cientos de sondeos de 5 segundos que parten de semillas distintas, cada uno trazando una tirada tan larga como sea posible de celdas perfectamente encajadas. Se ordena por la profundidad de ese prefijo perfecto; se conservan los más profundos y se descartan los casi duplicados (prefijos demasiado parecidos a un superviviente) para que el conjunto conservado siga siendo diverso. - **Trinquete.** Cada ronda posterior fija el prefijo más profundo guardado en la ronda anterior (una fijación a profundidad 15 en la ejecución registrada) y sondea *más allá* de él, empujando la frontera del prefijo perfecto un paso más. La recursión se detiene cuando una ronda gana menos de cuatro celdas de profundidad: la reserva de aperturas más profundas se ha secado. - **Final.** A partir de los tres prefijos distintos más profundos, se lanzan peldaños largos exact-tail-14 (300 s × 8 semillas cada uno) para convertir la apertura guardada en un tablero completo. El hallazgo es que *el final queda determinado por el prefijo*: una vez que se guarda una apertura perfecta lo bastante profunda, el juego final se sigue. Por eso concentrar el cómputo en encontrar el mejor arranque, en lugar de repartirlo entre ejecuciones completas, permitió escapar de la banda 444-450 en la que la búsqueda no guiada no dejaba de caer. Una ronda de final más larga tocó después el 452; el tablero fijado y reproducible aquí es el 451. ## Reproducir Con semilla fijada; la estructura de sondeo-y-promoción reproduce el *comportamiento* de forma fiable, aunque el tablero exacto depende de las semillas. El tablero 451 fijado es verificable en el visor. La subida no necesita ningún corpus, marco ni testigo: parte del puzzle solo, de modo que está previsto un directorio de acompañamiento ejecutable para ella junto a los demás experimentos partidos de cero. Por ahora la ejecución sigue siendo exploratoria: el tablero 451 es verificable en el visor, pero todavía no se distribuye una reproducción empaquetada de un solo comando. ## Preguntas abiertas ¿Cuál es el verdadero techo de la selección por prefijo primero si se da más cómputo a los primeros peldaños? ¿Podría la regla de diversidad ser más fina sobre qué casi duplicados conservar? ¿Y combinar los prefijos más profundos de familias distintas supera a promover dentro de una sola? ## Relacionado - [REPLAY](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/replay/) — Reconstruir de forma idéntica los tableros estrictos de 460 de la comunidad y descubrir, de paso, la jugada que los solucionadores corrientes no saben hacer: pagar dos desajustes en una misma celda. - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [Reinicios y colas pesadas](https://eternity2.dev/es/research/build/backtracking/restarts/) — Ejecute el mismo backtracker sobre el mismo puzzle dos veces y los tiempos de ejecución diferirán por potencias de diez. La comunidad lo midió en 2007; la literatura CSP ya lo había bautizado. La cura (cortar, rebarajar, reiniciar) es la razón por la que todo solucionador récord desde entonces es un portafolio de reinicios. - [Hacer un productor beam 10x mejor: la respuesta es la anchura](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/beam-width/) — Un repaso verificado más mediciones apareadas: ninguna astucia por nodo supera la anchura bruta del haz a igual tiempo de reloj. Los dos únicos aditivos que sobreviven son aleatorizar las claves de truncado empatadas exactamente (gratis) y el remuestreo SMC de los supervivientes (pequeño pero significativo). - [La escalera de tamaños](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/scaling-ladder/) — Un banco que ejecuta cualquier solucionador, sin cambios, sobre tableros plantados totalmente resolubles con N = 8, 10, 12, 14, cada uno con un techo probado de 2N(N-1): el tamaño de colapso de un método se mide antes de gastar semanas en el 16×16 real. --- # MIDDEN > Decidir de antemano no cuándo puede romperse un tablero, sino dónde: confinar cada desajuste a una forma de celdas elegida, y buscar la mejor forma. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/midden/ - Actualizado: 2026-07-21 - Temas: local-search - Fuente: Robo de piezas (este proyecto): la vista espacial de dónde fallan los tableros, aquello que MIDDEN controla de antemano — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/piece-theft.mdx --- La mayoría de los solucionadores que permiten roturas controlan cuándo se permite un desajuste: a ciertas profundidades, más allá de cierto relleno. MIDDEN controla dónde, en cambio. Fija una máscara, un conjunto de celdas elegido, e impone que los desajustes solo puedan pagarse dentro de ella; en todos los demás sitios la coincidencia debe ser perfecta. Después busca sobre la forma de esa máscara. Los métodos existentes dicen cuándo encajar los daños; este experimento pregunta dónde deben alojarse los daños. ## Cómo funciona Elige una máscara: un par de filas, un par de columnas, un enrejado disperso de celdas, o un conjunto elegido por color. Ejecuta la búsqueda forzando coincidencias perfectas fuera de la máscara y permitiendo desajustes solo dentro de ella. Formas de máscara distintas conducen la búsqueda a partes distintas del espacio, de modo que la máscara se convierte en una perilla de ajuste en lugar de una regla fija. Comparar formas revela qué geometría de daño permitido deja que un tablero haga crecer una serie perfecta larga antes de tener que gastar un desajuste. > **[Figure]** Interactivo: las máscaras de rotura por geometría del daño — interactive: MaskShapeDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado Un enrejado disperso de celdas de daño permitido alarga notablemente más la serie perfecta más larga que concentrar el daño en una fila o dos, empujando el muro perfecto desde alrededor de 150 celdas hasta los 170. El mecanismo es claro; lo que queda abierto es la economía del asunto: convertir una serie perfecta más larga en una puntuación final más alta una vez que el final de partida tiene que absorber el daño diferido. Así que la máscara es una palanca real, el complemento espacial de los controles de tiempo habituales, con un efecto medido sobre hasta dónde permanece perfecto un tablero, pero todavía no una vía acabada hacia un récord. ## Método Cualquier otra búsqueda tolerante a roturas regula el daño por *cuándo*: una profundidad, una fracción de relleno. MIDDEN regula por *dónde*. Es el primer control de daño por conjunto de celdas (DÓNDE) frente a las regulaciones por profundidad (CUÁNDO) de todos los demás. - **La máscara.** Un conjunto de celdas elegido (una máscara de 256 bits) se pasa mediante `--break-cells`. Dentro de la máscara, los desajustes están permitidos; en todos los demás sitios la coincidencia debe ser perfecta. Por lo demás, la búsqueda es un DFS tolerante a roturas estándar, a partir de un marco fijo. - **El barrido.** La *forma* de la máscara se convierte en la variable de diseño: un par de filas, un par de columnas, un enrejado disperso, o un conjunto elegido por color, barridos sobre formas y densidades, cada uno a 300 s × 8 semillas. El resultado medido es una regla de diseño de densidad graduada: un **enrejado disperso** de celdas de daño permitido alarga la serie perfecta más larga de ~153 celdas a 167-174 (**+21**), mucho más que concentrar el daño en una fila o dos. El mecanismo es claro; la economía que queda abierta es el final de partida: una serie perfecta más larga solo ayuda si la cola puede absorber el daño diferido, y la máscara dispersa que maximiza el muro no sella por sí sola el final. El paso siguiente natural (componer una máscara de cuerpo dispersa con una cola abierta) es exactamente lo que el barrido MIDDEN-v2 se propuso probar. ## Reproducir Sembrado a partir de un marco fijo; el efecto de alargamiento del muro se reproduce de una máscara a otra, aunque el tablero exacto depende de las semillas, y el tablero 452 confirmado es verificable en el visor. Como [CLOISTER](/es/research/lab/experiments/raphael-anjou/pipelines/cloister/), necesita un marco de borde ya resuelto (más la máscara de celdas de rotura, que es una entrada literal); se prevé un directorio de respaldo ejecutable que incluya el marco. Por ahora la ejecución sigue siendo exploratoria: el tablero 452 es verificable en el visor, pero todavía no se distribuye una reproducción empaquetada de un solo comando. ## Preguntas abiertas ¿Qué formas de máscara convierten una serie perfecta más larga en aristas realmente coincidentes al final, en lugar de solo diferir el daño? ¿Se pueden combinar máscaras espaciales con controles de tiempo, de modo que un tablero quede regulado tanto en dónde como en cuándo puede romperse? ¿Y existe una máscara que refleje el lugar donde los mejores tableros conocidos portan realmente sus desajustes? ## Relacionado - [LADDER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lanzar cientos de búsquedas cortas y baratas sobre el tablero, conservar solo los arranques más profundos y hacer ascender a los supervivientes a través de rondas cada vez más largas. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. --- # MOSAIC > Dividir el tablero en pequeños bloques, resolver cada uno hasta el óptimo demostrado y volver a pegarlos, pagando las costuras en lugar de prohibirlas. Partiendo de cero, sin ningún récord que copiar, el método alcanza 448. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/mosaic/ - Actualizado: 2026-07-21 - Temas: exact-methods - Fuente: RC2 MaxSAT (el solucionador de bloques exacto): un algoritmo MaxSAT ponderado guiado por núcleos — https://doi.org/10.3233/SAT190116 --- Eternity II no posee ninguna estructura local que se pueda explotar a escala global, pero una pequeña ventana de ella, un bloque 4×4, se resuelve hasta la optimalidad perfecta en segundos. MOSAIC es un experimento construido sobre ese único hecho: si sabes resolver un bloque exactamente, ¿puedes componer dieciséis bloques exactos en un tablero entero? ## Cómo funciona El tablero 16×16 se recorta en dieciséis bloques 4×4, que se rellenan uno a uno. Cada bloque se entrega a un solucionador MaxSAT exacto, que encuentra la mejor colocación posible de las piezas que contiene. El truco está en cómo un bloque se encuentra con sus vecinos ya colocados: esas aristas compartidas no son requisitos estrictos, sino objetivos *suaves* que el bloque es recompensado por igualar. Así un bloque nunca puede volverse imposible; simplemente paga por cualquier costura que no pueda igualar, y siempre se completa. La segunda idea combate directamente el robo de piezas. Antes de rellenar un bloque, MOSAIC retiene las piezas globalmente más escasas, de modo que a los últimos bloques no les falten las piezas raras que sus costuras exigirán. Ajustar cuánto reservar es la única perilla real; demasiado poco y la esquina se queda sin recursos, demasiado y los primeros bloques lo sufren. > **[Figure]** Interactivo: la búsqueda de ensamblaje de bloques — interactive: MosaicBlockLab. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado La primitiva de ventana cumple su promesa: un bloque 4×4 se resuelve hasta su óptimo de 24 aristas en unos treinta segundos, un 3×3 en once, confirmando que el puzzle es efectivamente tratable a pequeña escala. Compuesto sobre todo el tablero, desde cero y sin arranque en caliente, MOSAIC alcanza 448 de 480. El punto óptimo de reserva se sitúa en torno al ocho por ciento del reservorio. El déficit es informativo: casi todo él está en los tres últimos bloques de la esquina inferior derecha, donde el reservorio finalmente se agota: el robo de piezas de nuevo, ahora visible como un único punto brillante en el tablero. La exactitud a pequeña escala sí compone, pero el orden de composición gasta su libertad temprano y la paga al final, la misma forma con la que se topa cada método aquí. ## Método La exactitud es genuina, y también lo es el backtracking que la cose. - **Bloques exactos.** Cada bloque 4×4 se codifica como un problema *MaxSAT ponderado* y se resuelve con RC2, un solucionador guiado por núcleos, hasta un relleno demostrablemente óptimo. Las aristas compartidas con los vecinos ya colocados son cláusulas *suaves* (recompensadas, no exigidas), de modo que un bloque nunca puede ser inviable: paga por cualquier costura que no pueda igualar y siempre se completa. - **Backtracking sobre las soluciones.** MOSAIC no es un pegado de un solo tiro. Cada nivel de bloque mantiene un *enumerador* de soluciones MaxSAT, las mejores primero, mediante RC2 más cláusulas de bloqueo que descartan los rellenos ya vistos. Cuando un bloque posterior se queda sin recursos o un nivel se agota, la búsqueda retrocede y extrae la *siguiente* solución del bloque anterior (liberando un conjunto de piezas distinto). Es una búsqueda por backtracking gruesa sobre 16 niveles, donde cada nodo es un bloque entero óptimo. - **Reserva por escasez.** Antes de rellenar, MOSAIC retiene las piezas globalmente más escasas, de modo que a los bloques finales no les falten las piezas raras que sus costuras exigen. Esa fracción de reserva es la única perilla real; el punto óptimo medido es ~8% del reservorio. La primitiva de ventana es real: un bloque 4×4 alcanza su óptimo de 24 aristas en ~30 s, un 3×3 en ~11 s, el puzzle *es* tratable a pequeña escala. Compuesto desde cero alcanza 448, con el déficit residual concentrado en los tres últimos bloques de la esquina inferior derecha: el [robo de piezas](/es/research/why/piece-theft/) hecho visible como un único punto brillante. ## Reproducir Determinista: las resoluciones de bloque MaxSAT y la composición por backtracking son exactas, de ahí `kind: exact`; el tablero de 448 se reproduce y se verifica arista por arista en el visor. El motor de bloque funciona a partir del puzzle solo, sin corpus ni tablero de partida, siendo su única dependencia externa un solucionador MaxSAT, por lo que se prevé un directorio ejecutable de respaldo para él junto a los demás experimentos exactos. Por ahora la ejecución sigue siendo exploratoria: el tablero 448 es verificable en el visor, pero todavía no se distribuye una reproducción empaquetada de un solo comando. ## Preguntas abiertas ¿Un orden de bloques no por filas, en espiral hacia el interior o resolviendo primero la esquina más restringida, desplazaría el agotamiento fuera del bloque más difícil? ¿Podrían solaparse los bloques, de modo que las costuras se resuelvan dos veces y se reconcilien? ¿Y haría una primitiva más rápida (en Rust) asequible un tamaño de bloque mayor, con su garantía de exactitud más fuerte? ## Relacionado - [BANDSAW](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Resolver exactamente una banda de filas encontrándose en el medio, para hallar el verdadero mejor final y medir hasta qué punto puede decidirse por anticipado una fin de partida. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. --- # STAGED > Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/ - Actualizado: 2026-07-21 - Temas: construction - Reproducir: `just research-record-boards` - Fuente: Búsqueda por haz (la página-concepto de este proyecto): la primitiva de construcción por etapas — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx --- Casi todos los solucionadores empiezan por bloquear el borde, porque el borde es la parte más restringida y fijarlo reduce la búsqueda. STAGED es un experimento que rechaza esa muleta. Construye el tablero por etapas, de arriba hacia abajo, con las 256 piezas libres, y nunca se compromete con un borde hasta el final, cuando el borde simplemente cae de lo que queda. La pregunta que responde: ¿se puede alcanzar un tablero sólido sin anclarse nunca a un marco? ## Cómo funciona La construcción se desarrolla en cuatro etapas. Las dos primeras llenan la mitad superior del tablero con una búsqueda simple y rápida, guardando los tableros parciales que sobreviven. En el relevo, una estimación admisible de bajo coste descarta cualquier parcial que claramente no puede terminarse bien, de modo que las etapas posteriores solo trabajan sobre arranques prometedores. La tercera etapa hace crecer la siguiente banda de filas a partir de esos supervivientes. La cuarta es un finalizador exacto sobre las filas de abajo que minimiza las discrepancias, y elige el borde inferior al final, contra las piezas que aún quedan sin usar. Así, el marco no se diseña de antemano; emerge como consecuencia de todo lo que está por encima. > **[Figure]** Interactivo: la construcción etapa por etapa — interactive: StageBuildDiagram. Rendered on the canonical page (link above); not shown in this markdown export. ## El resultado STAGED alcanza 436 de 480 desde cero, con un borde emergente y las cinco pistas oficiales respetadas, construido de principio a fin sin ningún marco en el que apoyarse. Eso queda muy por debajo de los récords, y esa brecha es el hallazgo: mide cuánto vale el anclaje habitual del marco-primero, y demostró que la maquinaria sin marco funciona a plena escala. Por el camino fijó la anatomía de los mejores tableros: son un bloque perfecto que cubre casi todo el tablero más una fina banda de discrepancias concentrada en unas pocas filas superiores. Esa forma es la que los constructores posteriores buscan reproducir a propósito. ## Método Cuatro etapas, cada una entregando sus supervivientes a la siguiente a través de un filtro admisible. 1. **Beams de la mitad superior (etapas 1–2).** Llenar la mitad superior con una búsqueda simple y rápida, guardando los tableros parciales que sobreviven. Las 256 piezas están libres, ningún marco está fijado. 2. **Relevo admisible.** En cada frontera de etapa, una estimación *admisible* de bajo coste (una cota superior optimista sobre el mejor final posible) descarta cualquier parcial que, de forma demostrable, no puede completarse bien. Como la estimación nunca subestima la puntuación alcanzable, la eliminación es segura: solo retira los parciales que no pueden ganar. 3. **Crecimiento de banda (etapa 3).** Prolongar los parciales supervivientes hacia abajo, sobre la siguiente banda de filas. 4. **Finalizador exacto (etapa 4).** Resolver exactamente las filas de abajo, minimizando las discrepancias, y *elegir el borde al final* entre las piezas restantes. El marco no se diseña de antemano; cae de todo lo que está por encima. El resultado es 436 desde cero con un borde emergente, las cinco pistas respetadas, muy por debajo de los récords, y esa brecha es la medida: cuantifica cuánto vale el anclaje habitual del marco-primero. El subproducto importó más que la puntuación: STAGED fijó la anatomía de los mejores tableros, un gran bloque perfecto más una fina banda de discrepancias en unas pocas filas superiores, la forma objetivo a la que los constructores posteriores apuntan deliberadamente. ## Reproducir Estocástico (los beams de la mitad superior deshacen los empates de forma aleatoria), por lo que una nueva ejecución no reproducirá el tablero exacto; el tablero 436 versionado es el artefacto de referencia y puede verificarse en el visor. El motor es el productor por haz compartido, ejecutado por etapas para que el borde emerja al final en lugar de fijarse primero. No necesita corpus ni tablero de partida, así que se prevé un directorio de soporte ejecutable para todo el pipeline por etapas junto a los demás constructores desde cero. ## Preguntas abiertas ¿Puede un generador que gaste deliberadamente sus discrepancias en las filas superiores, para mantener el resto perfecto, alcanzar los 450 sin marco? ¿Qué parte de la brecha de 436 a los récords se debe al anclaje de marco ausente, frente al final de partida más difícil? ¿Y una estimación aprendida de la calidad del final selecciona mejores supervivientes que la estimación admisible de bajo coste? ## Relacionado - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. - [BANDSAW](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Resolver exactamente una banda de filas encontrándose en el medio, para hallar el verdadero mejor final y medir hasta qué punto puede decidirse por anticipado una fin de partida. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. - [El marco fluido](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/) — Un borde perfecto de 60 piezas no es un objeto rígido. Cada marco completamente apareado admite exactamente 45 intercambios libres a coste de borde cero; un tercio de los marcos perfectos ni siquiera pueden arrancar el interior, y un solo intercambio libre revive cada uno de ellos. --- # El estudio de la reparación > La hermana del estudio DFS, para la otra manera en que se ataca Eternity II: destruir parte de un tablero, reconstruirla, conservar el cambio si ayuda. Una pregunta, planteada con cuidado. Qué aporta cada decisión de ese bucle: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, cuándo reiniciar, y desde qué tablero partir. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/ - Actualizado: 2026-07-16 - Temas: local-search, search-space, speed - Reproducir: `just experiments repair-study` - Fuente: Motor ejecutable + resultados commiteados + scripts (el directorio de referencia de este estudio) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study --- Hay dos maneras concretas en que se ataca Eternity II. La primera consiste en construir un tablero celda a celda y retroceder cuando falla; el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/) lo disecciona. La segunda consiste en sostener un tablero entero y *repararlo*: arrancar una región, reconstruirla, conservar el cambio si ayudó, y repetir. La reparación es la última etapa de las cadenas construir-y-luego-refinar que hay detrás de los tableros casi récord de este proyecto, y es el método al que recurre la literatura en cuanto un tablero es demasiado bueno para que el desplazamiento de una sola pieza lo mejore. Este estudio disecciona el bucle de reparación de la misma manera en que su hermana diseccionó el backtracking: una decisión a la vez, sobre las mismas diez variantes con esquinas fijadas, un núcleo, sesenta segundos por ejecución. La puntuación máxima es de 480 aristas apareadas. El bucle en sí es corto. Una iteración, recorrida a continuación. > **[Figure]** Una iteración de destrucción-reparación, paso a paso — interactive: RepairLoopDiagram. Rendered on the canonical page (link above); not shown in this markdown export. El objetivo no es ganar. La mayoría de las variantes terminan entre 360 y 379, y la que mejor lo hace (446) lo logra partiendo de un tablero sólido obtenido por backtracking en lugar de uno construido, lo que constituye en sí la lección central del estudio. Reparar un simple tablero voraz en un núcleo durante un minuto es poca cosa frente a las cadenas que emplean los récords; lo que el estudio mide es *cuánto vale cada decisión del bucle*, cambiando una cosa a la vez y midiendo el resultado con el mismo puntuador canónico que usan el estudio DFS y el resto del sitio. ## La familia, y la clasificación Cinco familias, dispuestas de modo que las vecinas difieran por una sola decisión, todas ramificándose de un mismo bucle ancla depurado (arranque voraz, destruir las celdas desapareadas, rellenado voraz, conservar el resultado salvo que pierda puntuación, nunca reiniciar). El **tablero de partida** cambia el punto donde el bucle comienza. El **operador de destrucción** cambia qué celdas levanta cada iteración. La **reparación** cambia la manera en que se reconstruye el hueco. La **aceptación** cambia el momento en que se conserva un movimiento no mejorante. El **reinicio** cambia lo que ocurre una vez que el bucle se estanca. > **[Interactive: RepairStudyLeaderboard]** Rendered on the canonical page (link above); not shown in this markdown export. ## Lo que el estudio encontró - **Partir de un tablero sólido obtenido por backtracking gana el estudio entero.** La variante que dedica sus primeros veinte segundos a ejecutar el break-DFS del estudio DFS, y luego repara el tablero de poco más de 440 que resulta, termina la más alta de todas, con una media de 446 (mejor resultado 449). La reparación solo añade un puñado de aristas por encima de ese tablero, pero el tablero del que parte vale cien puntos más que una construcción voraz, y eso se propaga hasta el final. Es la división del trabajo construir-y-luego-refinar que emplean los récords, reproducida de principio a fin en un núcleo en un minuto. - **Entre las variantes con arranque voraz, la destrucción aleatoria se impone y apuntar a los defectos resulta contraproducente.** Una destrucción ciega a la geometría que levanta doce celdas *aleatorias* termina en una media de 402 (mejor resultado 409) y sigue mejorando bien entrada la ejecución. Todo operador que apunta a las celdas rotas termina por debajo, y cuanto más precisamente se fija, peor lo hace: el ancla de las celdas desapareadas aterriza en 366, una destrucción por componente conexa más grande en 350. Sobre un tablero mediocre hay mejora disponible en todas partes, de modo que explorar vale más que atacar donde ya duele. Eso se invierte en un tablero casi récord, donde los pocos defectos restantes son lo único que queda por corregir. - **El tablero de partida fija el suelo.** Una construcción voraz arranca en torno a 348; una aleatoria arranca cerca de 18, y aunque el bucle la eleva unos espectaculares 308 puntos, aun así termina por debajo de donde el arranque voraz *comenzaba*. La construcción es la palanca, la reparación es el pulido. - **La regla de aceptación es la otra palanca real.** El recocido simulado, que desciende de vez en cuando para dejar una meseta, es la regla de aceptación más fuerte por un margen claro (media 377, mejor resultado 394), muy por delante de una escalada de colina estricta (361). Cuánto se permite un movimiento no mejorante vale una diferencia de dieciséis puntos sobre el mismo bucle. - **Los refinamientos ingeniosos no aportan nada aquí.** Una destrucción de banda entera es inerte (cero mejoras en nueve de diez instancias). Un rellenado *exacto* acotado de un hueco pequeño no supera a un rellenado voraz simple del mismo hueco, un resultado negativo limpio: sus reconstrucciones localmente perfectas cuestan suficientes iteraciones como para que más reconstrucciones voraces y más baratas lleguen igual de lejos. Ni una patada aleatoria ni un retorno-al-mejor ante un estancamiento despegan la puntuación de la referencia sin reinicio. Cada uno de estos puntos tiene su propio tratamiento: cómo está construido el motor y qué significa cada estadística presentada están en la [página de método](/es/research/lab/experiments/raphael-anjou/repair-study/method/), y las comparaciones de destrucción, reparación, aceptación, reinicio y tablero de partida se desarrollan en la [página de resultados](/es/research/lab/experiments/raphael-anjou/repair-study/findings/). ## Cómo leer los números Cada tablero se vuelve a puntuar con el único puntuador canónico, y no se confía en la puntuación autodeclarada de ningún motor. El bucle mantiene su puntuación de forma incremental a medida que coloca y levanta piezas, pero el número publicado es siempre una nueva puntuación canónica del tablero producido. El rendimiento se reporta en iteraciones de reparación por segundo y **nunca se compara entre familias**, porque una iteración que ejecuta un rellenado exacto no es la misma unidad de trabajo que una que ejecuta un rellenado voraz. El eje a vigilar es el *estancamiento*: la iteración en la que el mejor global mejoró por última vez, frente al total de iteraciones ejecutadas. Cuando la primera es de unos pocos miles y la segunda de cientos de miles, la ejecución encontró su respuesta pronto y luego molió la misma cuenca durante el resto del minuto. Esa brecha es la forma medida de una observación de larga data sobre este rompecabezas: la destrucción-reparación es una exploradora de cuencas soberbia y prácticamente nunca escapa de la cuenca en la que aterriza. Todo el aparato (el motor, las diez variantes, los resultados por ejecución commiteados y los scripts de la grilla) reside bajo el [directorio de referencia](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study) del estudio, y `just experiments repair-study` reconstruye el motor y reejecuta toda la grilla. El tablero, el puntuador y la capa de E/S provienen de una [biblioteca compartida](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/common) que usa también el estudio DFS, de modo que un tablero reparado y uno obtenido por backtracking se puntúan con exactamente el mismo código. ## Páginas de esta sección - [Cómo está construido el estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/method/) — El motor detrás del estudio de reparación: un único bucle componible de destrucción-reparación donde una variante es un cambio declarado sobre un padre, la IO y el scorer que comparte con el estudio DFS, un mapa de desajustes mantenido de forma incremental, y las definiciones de cada estadística que el estudio pone de relieve. - [Qué mostró el estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/findings/) — Las cinco comparaciones en el corazón del estudio de reparación, desarrolladas: la destrucción aleatoria ciega gana mientras que todo operador que apunta a los conflictos pierde; la construcción fija el suelo; el recocido simulado es la regla de aceptación más fuerte; y los refinamientos ingeniosos (recarga exacta, reinicios) no aportan nada con este presupuesto. ## Relacionado - [Los experimentos de Raphaël Anjou](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/) — Un cuaderno de experimentos de búsqueda sobre Eternity II, organizado en torno a los motores compartidos sobre los que se ejecutan, las pipelines de combinación que persiguen la puntuación, cuatro estudios que desmontan un paradigma de búsqueda una decisión a la vez, y resoluciones exactas de final de partida. Cada uno expone su idea, su mejor tablero y las preguntas que deja abiertas. El mejor alcanza 463 de 480. - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # Qué mostró el estudio de la reparación > Las cinco comparaciones en el corazón del estudio de reparación, desarrolladas: la destrucción aleatoria ciega gana mientras que todo operador que apunta a los conflictos pierde; la construcción fija el suelo; el recocido simulado es la regla de aceptación más fuerte; y los refinamientos ingeniosos (recarga exacta, reinicios) no aportan nada con este presupuesto. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/findings/ - Actualizado: 2026-07-16 - Temas: local-search, search-space, speed - Fuente: Resultados por ejecución versionados (results.jsonl) e informe por familia (report.md) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study/results --- Cinco comparaciones sostienen el [estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/). Cada una aísla una decisión manteniendo las otras cuatro fijas en un bucle de referencia simple: inicio voraz, destruir las celdas en desajuste, recarga voraz, conservar el resultado salvo que pierda puntuación, nunca reiniciar. Todas las puntuaciones son el número medio de aristas concordantes sobre las diez variantes con esquinas fijadas, un solo núcleo, sesenta segundos. La tasa de iteración nunca se compara entre familias. ## El tablero de partida: la palanca que el bucle no puede reemplazar Cambie solo el tablero desde el que arranca el bucle, y todo lo demás de la ejecución se deriva de él. Una construcción voraz empieza en torno a 348 y el bucle la eleva a una media de 366. Un tablero aleatorio empieza cerca de 18 y el bucle lo eleva unos enormes 308 puntos, hasta una media de 326. Esa elevación mayor no es el bucle haciéndolo mejor; es el bucle haciendo mal el trabajo de la construcción. El inicio aleatorio, tras millones de iteraciones, todavía termina por debajo de donde el inicio voraz *empezaba*. Este es el primer resultado del estudio, y el más firme: **la construcción es la palanca, la reparación es el pulido.** Una construcción voraz de "color más escaso primero" (la heurística de Selby y Riordan según la cual un color escaso debe gastarse allí donde queda forzado) empieza un poco más alto aún y termina en una media de 373, la mejor de los inicios *voraces*. La prueba más nítida de este punto es partir de un tablero genuinamente fuerte en lugar de uno voraz. La última variante de tablero de partida entrega al bucle un tablero construido por el break-DFS del [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/): la ejecución dedica sus primeros veinte segundos a hacer backtracking hasta un tablero en torno a 440, y luego lo repara durante los cuarenta restantes. Ese inicio está cien puntos por encima de una construcción voraz, y se propaga directamente hasta la llegada. Es la variante de mayor puntuación de todo el estudio, con una media de 446 (mejor 449), muy por encima de los 402 del bucle de destrucción aleatoria, y zanja la pregunta de construir-y-luego-refinar en torno a la cual gira el resto del estudio: la reparación *sí* añade unas pocas aristas sobre un tablero fuerte obtenido por backtracking, pero solo unas pocas, y el tablero del que parte decide casi todo. Esta es exactamente la división del trabajo que emplean los récords, y este estudio la reproduce de principio a fin en un núcleo en un minuto: un backtracker para construir un buen tablero, y luego un bucle de reparación para exprimir de él las últimas aristas. ## El operador de destrucción: atacar las roturas puede volverse en contra Ahora fijemos el inicio voraz y cambiemos solo qué celdas levanta cada iteración. Este es el eje que porta el resultado más sorprendente del estudio. > **[Figure]** Los cuatro operadores de destrucción, sobre un mismo tablero de junturas rotas — interactive: DestroyOperatorDiagram. Rendered on the canonical page (link above); not shown in this markdown export. - **Una destrucción aleatoria ciega a la geometría gana la comparación de destrucción, con una media de 402 (mejor 409).** Al levantar doce celdas *aleatorias* en lugar de las rotas, sigue muestreando nuevas regiones del tablero, acepta casi tres cuartas partes de sus movimientos, y su mejor puntuación sigue mejorando bien entrada la ejecución: su última mejora llega más allá de tres millones de iteraciones, allí donde toda variante dirigida por conflictos hace tiempo que se ha congelado. Es la mejor de todas las variantes que parten de un tablero voraz (solo el inicio sembrado por DFS, una palanca completamente distinta, termina más alto). - **Todo operador dirigido por conflictos termina por debajo de ella, y cuanto más se fija en las roturas, peor le va.** El ancla de "celdas en desajuste", que levanta hasta una docena de las celdas rotas, promedia 366 y se estanca temprano: arranca la misma maraña agrupada, la reconstruye vorazmente en casi la misma disposición, y su mejor puntuación deja de moverse en unos pocos miles de iteraciones. El operador de "componente más halo", que levanta toda una maraña conexa (un hueco mucho mayor), lo hace peor aún, en 350, y su mejor ya no mejora tras la iteración 211: un hueco de ese tamaño entrega a la recarga voraz un subproblema que no sabe mejorar, de modo que casi nada llega a conservarse. - **Una destrucción de banda entera es inerte.** Levantar las dos filas con más roturas deja a la recarga voraz un subproblema casi tan difícil como el propio puzzle; en nueve de las diez instancias no hace *ninguna* mejora en todo el minuto, de modo que su puntuación reportada es simplemente su tablero de partida. El patrón es limpio y merece enunciarse sin rodeos: sobre este inicio voraz mediocre, cuanto más precisamente un operador apunta a las roturas existentes, peor le va, y la destrucción aleatoria ciega gana. Esto es lo contrario de la intuición natural, y de lo que funciona sobre un tablero *cercano al récord*, donde todo el tablero está próximo al óptimo y donde el ajuste de la comunidad halló que los operadores dirigidos por conflictos y por componentes eran los más valiosos, precisamente porque los pocos desajustes restantes son lo único que queda por corregir. Este estudio nunca alcanza ese régimen. Sesenta segundos sobre un tablero mediocre dejan un amplio margen de mejora en todas partes, y ahí un operador que reataca sin cesar el mismo grupo roto, o que arranca un hueco demasiado grande para reconstruirlo bien, pierden ambos frente a uno que simplemente sigue intentando nuevas regiones pequeñas. El hallazgo no es "la destrucción dirigida por conflictos es mala" sino "qué operador gana depende de lo bueno que ya sea el tablero, y sobre un tablero mediocre, explorar supera tanto a fijarse como a sobredestruir". ## Reparación: cómo se reconstruye el hueco Fijemos la destrucción y cambiemos solo la recarga. Romper los empates exactos de puntuación de la recarga voraz con una moneda sembrada, en lugar de forma determinista, añade un poco de exploración y ayuda ligeramente, hasta una media de 365. La comparación más tajante es voraz contra recarga *exacta*, y hay que montarla con cuidado para que sea una prueba limpia de un solo eje: la recarga exacta solo compensa cuando el hueco es lo bastante pequeño para explorarlo, así que el estudio la empareja con una destrucción pequeña (a lo sumo seis celdas en desajuste) y la compara contra la *misma* destrucción pequeña recargada vorazmente, de modo que lo único que cambia entre ambas es la recarga. Montada así, la recarga exacta corre en cada iteración en lugar de replegarse a la voraz, reconstruyendo cada hueco pequeño a su verdadero óptimo. El resultado es un negativo limpio. La recarga exacta (media 360) **no** supera a la recarga voraz del mismo hueco pequeño (media 363); si acaso queda un matiz por detrás. Dos cosas lo explican. La recarga exacta acepta casi cada iteración, porque una reconstrucción localmente óptima de un hueco de seis celdas casi nunca baja la puntuación, de modo que el bucle deriva lateralmente en lugar de escalar. Y compra esa optimalidad local a alrededor de un tercio del número de iteraciones, de modo que en un minuto fijo explora menos el tablero. Sobre este puzzle, con este presupuesto, una reconstrucción localmente perfecta de una región minúscula no vale lo que cuesta: las reconstrucciones más baratas y ligeramente peores de la recarga voraz, ejecutadas más a menudo, llegan igual de lejos. Esta es la misma pregunta de "la tasa de nodos no es la puntuación" que plantean los motores heurísticos del estudio DFS, y aquí la respuesta cae del lado de más iteraciones, más baratas, lo cual merece consignarse precisamente porque tan a menudo se supone lo contrario. ## Aceptación: cuánto se permite un movimiento no mejorante importa Fijemos el bucle y cambiemos solo cuándo se conserva un candidato no mejorante. De los cinco ejes, este es el que más mueve la puntuación después del operador de destrucción. - **Una escalada de colina estricta, que conserva solo las mejoras estrictas, es la más débil, con una media de 361.** Rechazar todo movimiento lateral la encierra en la primera cuenca que encuentra; su tasa de aceptación es esencialmente cero. - **Permitir movimientos iguales o mejores (el ancla) lo hace mejor, en 366.** Los movimientos laterales le permiten derivar a través de las mesetas de puntuación igual que dominan este paisaje. - **Una regla de recocido simulado con enfriamiento es la aceptación más fuerte por un margen claro, en 377 (mejor 394), entre las mejores de las variantes de inicio voraz.** Permitir movimientos *empeorantes* ocasionales al principio, y luego enfriar, le permite abandonar una meseta en la que la pura deriva lateral queda atrapada, y su mejor puntuación sigue mejorando hasta alrededor de la iteración veinte mil en lugar de congelarse en los primeros miles. Una regla de aceptación tardía, que compara con la puntuación de unas decenas de iteraciones atrás, se sitúa entre las dos en 369. Así que la regla de aceptación es aquí una palanca real, no un detalle: de estricta a recocido hay un vaivén de dieciséis puntos sobre el mismo bucle (361 a 377). Eso merece enunciarse frente a una observación conocida del propio ajuste ALNS de la comunidad: que a lo largo de un amplio rango de temperaturas de recocido las puntuaciones finales eran esencialmente idénticas. Las dos no están en conflicto. Ese ajuste se hizo sobre tableros cercanos al récord, donde el paisaje es un mar de mesetas de puntuación igual y cualquier temperatura acepta casi todo; el tablero de partida mediocre de este estudio todavía tiene estructura cuesta abajo real que explotar, de modo que si la regla dará un paso cuesta abajo para escapar de una meseta importa genuinamente. Qué regla de aceptación gana, como qué operador de destrucción gana, depende de lo bueno que ya sea el tablero. ## Reinicio: ninguna perturbación mueve la aguja Fijemos el bucle y cambiemos solo lo que ocurre una vez que se estanca. No hacer nada deja a la ejecución triturando la misma cuenca durante el resto del minuto. Un *golpe* aleatorio, que desplaza y recarga aleatoriamente un par de docenas de celdas cuando el mejor no se ha movido en un rato, y un *retorno al mejor tablero hasta el momento*, que reataca al titular, son las dos perturbaciones probadas. Ambas caen a un punto del ancla sin reinicio (365 y 365, frente al 366 del ancla). Este es un resultado nulo limpio: atornillar un detector de estancamiento y una perturbación al bucle voraz-desajuste no lo ayuda, porque la perturbación o bien tira la estructura que hacía bueno al tablero (el golpe) o bien retorna a un tablero en el que el mismo operador ya se ha estancado (el retorno). Ninguna convierte el bucle en un evasor de cuencas; sobre este puzzle, escapar de una cuenca requiere un movimiento distinto de perturbar-y-reparar, que es exactamente lo que explican el [muro de rigidez](/es/research/why/rigidity-wall/) y la [estructura de σ-ciclos](/es/research/why/sigma-cycles/). ## El hilo conductor Dos temas atraviesan las cinco comparaciones. El primero es que **las dos decisiones que mueven la puntuación son el operador de destrucción y la regla de aceptación**, y ambas la mueven en la misma dirección contraintuitiva: las elecciones ganadoras son las que mantienen el bucle *explorando* en lugar de *explotando*. La destrucción aleatoria supera a todo operador que apunta a las roturas; el recocido, que da un paso cuesta abajo para abandonar una meseta, supera a toda regla que solo se mueve lateralmente o cuesta arriba. Refinar la recarga y atornillar un reinicio, las dos decisiones que intentan ser más ingeniosas acerca de una región en la que el bucle ya está atascado, no aportan nada. El segundo es por qué explorar gana aquí mientras que fijarse gana sobre un tablero cercano al récord: **el bucle de reparación es un explorador de cuencas, no un evasor de cuencas.** Sobre un tablero mediocre hay amplia estructura cuesta abajo en todas partes, de modo que los movimientos que cubren más de ella ganan; sobre un tablero cercano al récord no queda ninguna salvo un único ciclo entrelazado, de modo que los movimientos que lo apuntan con precisión ganan. Ninguno de los dos regímenes permite a perturbar-y-reparar escapar de una cuenca una vez que está en una. Por eso los pipelines de construir-y-luego-refinar que alcanzan los mejores tableros de este proyecto dividen el trabajo como lo hacen: un productor constructivo fuerte para elegir una buena cuenca, y la reparación como último kilómetro dentro de ella, nunca requerida a salir de ella. ## Relacionado - [El estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/) — La hermana del estudio DFS, para la otra manera en que se ataca Eternity II: destruir parte de un tablero, reconstruirla, conservar el cambio si ayuda. Una pregunta, planteada con cuidado. Qué aporta cada decisión de ese bucle: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, cuándo reiniciar, y desde qué tablero partir. - [Cómo está construido el estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/method/) — El motor detrás del estudio de reparación: un único bucle componible de destrucción-reparación donde una variante es un cambio declarado sobre un padre, la IO y el scorer que comparte con el estudio DFS, un mapa de desajustes mantenido de forma incremental, y las definiciones de cada estadística que el estudio pone de relieve. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # Cómo está construido el estudio de la reparación > El motor detrás del estudio de reparación: un único bucle componible de destrucción-reparación donde una variante es un cambio declarado sobre un padre, la IO y el scorer que comparte con el estudio DFS, un mapa de desajustes mantenido de forma incremental, y las definiciones de cada estadística que el estudio pone de relieve. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/method/ - Actualizado: 2026-07-16 - Temas: local-search, speed - Fuente: El espacio de trabajo del motor (repair-engine, repair-run) sobre la biblioteca compartida e2-core / e2-io — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study/engine --- Esta página es el aparato que hay detrás del [estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/): cómo está construido el motor, por qué una nueva variante es barata de añadir, y qué significa cada número de los resultados. Es el gemelo deliberado de la [página de método del estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/method/), y se apoya en la *misma* biblioteca compartida: el tablero, el conjunto de piezas, el único scorer canónico y el contrato de IO provienen todos de un crate `e2-core` / `e2-io` común que usa también el estudio de backtracking. Un tablero reparado y un tablero obtenido por backtracking se puntúan, por tanto, con el código idéntico, que es lo que permite que los números de ambos estudios se sitúen sobre un mismo eje. ## Una variante es un cambio declarado sobre un padre Cada algoritmo del estudio es el *mismo* bucle de destrucción-reparación, parametrizado por cinco elecciones independientes: - **tablero inicial**: el tablero desde el que arranca el bucle (aleatorio, construcción voraz, o una construcción voraz que prioriza el color más raro); - **operador de destrucción**: qué celdas retira cada iteración (aleatorias, las celdas en desajuste, la peor banda de filas, o una componente conexa de desajustes más su halo); - **reparación**: cómo se rellena el hueco (voraz con el más restringido primero, el mismo con desempates con ruido, o un relleno exacto acotado para huecos pequeños); - **aceptación**: si un candidato reemplaza al tablero de trabajo (conservar si no es peor, solo mejoras estrictas, recocido simulado, o aceptación diferida); - **reinicio**: qué ocurre ante un estancamiento (nada, una sacudida aleatoria, o una vuelta al mejor tablero obtenido hasta el momento). Una variante es un pequeño registro que nombra esas cinco elecciones, junto con **el padre del que deriva y una descripción en una línea del único cambio que añade**. Añadir una variante consiste en añadir un registro al registro, sin código de bucle nuevo salvo que la idea sea una estrategia genuinamente nueva. La matriz de «qué se apila sobre qué» de la página de resultados se genera a partir de esas descripciones, de modo que no puede divergir del código que realmente se ejecutó. ## El mapa de desajustes, mantenido de forma incremental Un backtracker construye un tablero desde la nada; un bucle de reparación siempre sostiene un tablero *completo* y lo edita. Las celdas que merece la pena atacar son las que tocan una arista rota, así que el motor mantiene un recuento vivo, por celda, de las aristas interiores rotas incidentes a ella. Colocar o retirar una pieza actualiza solo las aristas alrededor de esa única celda, nunca el tablero entero, de modo que un operador de destrucción guiado por conflictos puede preguntar «¿qué celdas tocan un desajuste?» sin volver a recorrer todo. La puntuación en curso se mantiene del mismo modo: cada colocación la ajusta según el puñado de costuras que cambiaron. Un rebarrido completo ocurre exactamente una vez, cuando se construye el tablero inicial; a partir de ahí el bucle es incremental. Esto es lo que hace posibles cientos de miles de iteraciones en sesenta segundos, y es la misma disciplina que la [página teórica sobre ALNS](/es/research/build/local-search/local-search-alns/) describe como mantener la destrucción a un coste proporcional al hueco, no al tablero. ## El scorer es la única fuente de verdad No se confía en la puntuación autodeclarada de ningún motor. La puntuación incremental del bucle es un dispositivo de rendimiento; el número *publicado* es siempre una repuntuación canónica fresca del tablero de salida, a través del mismo scorer que usan el sitio y el estudio DFS (aristas apareadas, no bordurías, adyacencias interiores, contadas a la derecha y hacia abajo por celda). Un test comprueba que la puntuación incremental y la puntuación canónica coinciden tras miles de colocaciones-y-retiradas aleatorias, de modo que se pueda confiar en que el camino rápido sigue la verdad en vez de apartarse de ella. ## Las estadísticas que el estudio pone de relieve Para cada ejecución el motor registra, y los resultados lo transportan hasta la página: - **puntuación final**: las aristas canónicamente apareadas (de 480) del mejor tablero encontrado. - **ganancia**: la puntuación final menos la puntuación del tablero inicial. Esto aísla la contribución propia del bucle de reparación respecto de la construcción de la que partió: una variante que arranca alta puede añadir poco y aun así terminar alta, y es la ganancia la que distingue a las dos. - **el estancamiento (última iteración récord vs iteraciones totales)**: la iteración en la que el mejor global mejoró por última vez, comparada con cuántas iteraciones compró el presupuesto. Este es el eje estrella del estudio: cuando el primero está muy por debajo del segundo, la ejecución halló su respuesta pronto y luego no movió nada. - **tasa de aceptación**: la fracción de iteraciones que la regla de aceptación conservó. Una tasa cercana a cero significa que el bucle propone cambios que casi siempre rechaza, a menudo señal de que está reatacando la misma región. - **tamaño medio de destrucción**: celdas retiradas por iteración, para que un operador de hueco grande no se compare en silencio con uno de hueco pequeño. - **iteraciones por segundo**: reportadas por variante y **nunca comparadas entre familias**, porque una iteración que ejecuta un relleno exacto no es la misma unidad de trabajo que una que ejecuta un relleno voraz. - **reinicios**: perturbaciones disparadas, cero para una variante sin política de reinicio. La página también traza una **curva de convergencia** para unas pocas variantes representativas: la mejor puntuación obtenida hasta el momento, muestreada cada doscientas iteraciones, a medida que avanza una ejecución típica. Es la imagen más clara del estancamiento: la curva sube con fuerza, luego se aplana mientras el recuento de iteraciones sigue trepando. ## Honestidad sobre la velocidad del motor voraz Como el motor MRV del estudio DFS, el bucle de reparación de aquí está escrito primero para la claridad. El relleno voraz vuelve a recorrer el reservorio de piezas restantes por cada celda que rellena, en vez de mantener listas de candidatos de forma incremental, así que sus iteraciones por segundo son las de este motor de código limpio, no lo mejor que un núcleo de reparación afinado podría alcanzar. La clasificación por puntuación no depende de ello, puesto que el rendimiento es un eje aparte nunca mezclado con la comparación de puntuaciones, pero las cadencias de iteración deben leerse como las de este motor, no como el techo de la destrucción-reparación. ## Lo que este estudio se abstiene deliberadamente de afirmar Este es un estudio del bucle de reparación *desnudo*, una decisión a la vez, con un presupuesto fijo pequeño. No es el pipeline récord: los tableros que alcanzan mediados de los 450 y más allá combinan un productor constructivo potente, ejecuciones más largas, y la reparación como pulido final, y varias de las observaciones sobre los operadores que aparecen aquí se leerían de otro modo en un tablero cercano al récord que en el mediocre arranque voraz del que parte el bucle. Allí donde un resultado depende de la calidad del tablero inicial, la página de observaciones lo dice. El propio afinamiento de la comunidad halló, por ejemplo, que los operadores guiados por conflictos y por componentes son valiosos precisamente en tableros casi óptimos, donde los pocos desajustes restantes son lo único que queda por corregir, el régimen que las cortas ejecuciones de este estudio nunca alcanzan. ## Reproducibilidad El motor, las diez variantes, los resultados por ejecución versionados y los scripts de rejilla viven todos bajo el [directorio de soporte](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study) del estudio. `just experiments repair-study` reconstruye el motor y vuelve a lanzar toda la rejilla; la ejecución es determinista a una semilla fija, y la disposición de las esquinas es el único eje de diversidad. ## Relacionado - [El estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/) — La hermana del estudio DFS, para la otra manera en que se ataca Eternity II: destruir parte de un tablero, reconstruirla, conservar el cambio si ayuda. Una pregunta, planteada con cuidado. Qué aporta cada decisión de ese bucle: qué región destruir, cómo reconstruirla, cuándo conservar un movimiento, cuándo reiniciar, y desde qué tablero partir. - [Qué mostró el estudio de la reparación](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/repair-study/findings/) — Las cinco comparaciones en el corazón del estudio de reparación, desarrolladas: la destrucción aleatoria ciega gana mientras que todo operador que apunta a los conflictos pierde; la construcción fija el suelo; el recocido simulado es la regla de aceptación más fuerte; y los refinamientos ingeniosos (recarga exacta, reinicios) no aportan nada con este presupuesto. - [Búsqueda local y ALNS](https://eternity2.dev/es/research/build/local-search/local-search-alns/) — Destruir una parte del tablero, reconstruirla mejor y dejar que el algoritmo aprenda qué demoliciones rinden. La búsqueda de gran vecindario adaptativa es el pulidor más fiable de este proyecto, y la demostración más nítida del muro donde el pulido se detiene. --- # La escalera de tamaños > Un banco que ejecuta cualquier solucionador, sin cambios, sobre tableros plantados totalmente resolubles con N = 8, 10, 12, 14, cada uno con un techo probado de 2N(N-1): el tamaño de colapso de un método se mide antes de gastar semanas en el 16×16 real. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/raphael-anjou/scaling-ladder/ - Actualizado: 2026-07-22 - Temas: structure, backtracking - Reproducir: `just research-scaling-ladder` - Fuente: Ansótegui et al., la transición de fase en los puzles de emparejamiento de bordes (contexto del umbral de dificultad) — https://doi.org/10.1007/978-3-540-85958-1_42 --- El 16×16 real es un lugar caro para descubrir que un método no escala. La escalera de tamaños plantea antes una pregunta más barata: ejecuta cualquier solucionador, sin modificarlo, sobre tableros plantados totalmente resolubles con N = 8, 10, 12 y 14, cada uno con un techo probado, y lee el tamaño en el que el método colapsa. Los dos solucionadores de referencia incluidos se separan con nitidez y se degradan de forma monótona al subir la escalera: exactamente la lectura que el banco existe para producir. ## Cómo funciona Cada peldaño se construye hacia atrás desde una solución plantada, así que es resoluble por construcción, y su objetivo de resolución completa sale gratis: una malla N×N tiene exactamente 2N(N-1) adyacencias internas, el tablero plantado las empareja todas y ningún tablero puede emparejar más. Los cuatro peldaños llevan techos de 112, 180, 264 y 364. No hace falta ningún solucionador externo para certificar nada; antes de cada solucionador, el banco vuelve a puntuar el tablero plantado con el mismo puntuador (borde excluido) que los solucionadores afrontarán y comprueba que alcanza el techo exactamente. Esa comprobación está viva: un primer borrador colocó un tablero pequeño en una malla de ancho 16, puntuó 28/60 y fue atrapado por ella. Cinco celdas de la solución se fijan como pistas al estilo del puzle oficial, cada solucionador recibe un presupuesto fijo de 12 segundos de reloj en un solo núcleo, y cada tablero devuelto se vuelve a puntuar de forma independiente desde sus bordes; el auto-informe del solucionador no se usa nunca. Una fila JSON por (solucionador, N, semilla) registra la puntuación verificada, el techo, su cociente, si la resolución fue completa, el número de nodos y un enlace al tablero. Cada tablero se abre en el [visualizador](/viewer/): aquí hay un [peldaño plantado N=8](/viewer/?puzzle=ladder_n8_c22_s1&puzzle_size=8&board_edges=adcaabtdacrbafkcabofabmbaflbaadfcnfatrunrsgrkwisohuwmgvhlqjgdadqfmcaupimgnupikonujvkvrnjjoordadocheaikrhujikokujvvlknqpvopsqdaepehbarglhinwgulsnltnlpkmtspskeaepbidaljqiwvojstivnwhtmjpwstljeaetdhbaqmvhoqwmimrqhqgmpsuqlgtseadgbeaavbaewfabrfafgcafucactcacdaac) y el [mejor parcial N=14](/viewer/?puzzle=ladder_n14_c22_s5&puzzle_size=14&board_edges=abdaaclbafncadkfabqdafibacufadhcafkdadhfacqdaewcacueaadcducalijunowikwsoqjkwihpjuvjhhnnvkqonhihqqqqiwmsqunumdaenctbajrptwrlrsisrkroipwtrjpjwnlopouvlhvnuqrtvsjgruttjeaftbpbapmnplkwmsiskothitsltjlosovvlvgpvnqhgtosqgkootrgkfaerbwbanslwwnkssghnhiggljmiotjjvmttpmgmhwgmsrvwokhrgpukeafpbiealpuikvwphluvgrslmurrjskutmgsgknmghlkvijhhgiiuhhgfabhescauupswvjuukjvsjikrrwjkokrglqonmollwlmjoiwinwohqjnbaeqcidapgvijirgjsuiisnswlnskhmlqlthottlloptiswownusjhrneaehdgfavtwgrjhtuuwjnkmunqnkmirqtmtitglmpqggwpoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaocaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&hints=56.2-186.0-114.3-53.2-37.0) producido por esta ejecución. Los dos solucionadores incluidos cubren las dos familias que el estudio original separa: una vuelta atrás en profundidad que solo coloca piezas que encajan por completo (el miembro más simple de la familia propagativa) y un rellenador voraz fila a fila, sin ninguna vuelta atrás. ## El resultado En la ejecución original de trece métodos (13 métodos × 11 instancias × 3 semillas = 429 trabajos), la escalera separó las familias de solucionadores por un peldaño entero: la familia propagativa, guiada por restricciones, mantuvo un cociente perfecto de 1.000 hasta N=12 incluido (264 aristas de 264), los órdenes de «borde primero» ya habían colapsado hacia 0.15 a 0.22 a ese tamaño, y en N=14 todos los métodos cayeron entre 0.055 y 0.157. La reproducción archivada vuelve a ejecutar el banco de punta a punta con los dos solucionadores de referencia: > **[Figure]** Esperado vs medido (4 peldaños × 8 semillas × 2 solucionadores, presupuesto mononúcleo de 12 s) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export. Toda la mecánica se reproduce: el techo probado gratuito, la certificación de cada tablero plantado con el mismo puntuador que afrontan los solucionadores, la re-puntuación independiente de cada tablero devuelto y la degradación monótona del DFS, perfecto en N=8 y sin ninguna resolución completa en N=14, mientras el voraz no resuelve por completo en ningún sitio. La dispersión entre semillas es amplia en los peldaños altos (0.216 a 1.0 en N=12, 0.047 a 0.613 en N=14 para el DFS); por eso cada peldaño conserva 8 semillas. ## Lo que no se sigue - **El éxito con N pequeño no predice nada sobre el 16×16.** Los métodos perfectos en N=12 valen casi nada un peldaño más arriba; el entregable es la curva de degradación, nunca una clasificación a un solo tamaño. Para el estado de la instancia real, véase [la página de récords](/es/research/records/). - **Escaleras de generadores distintos no son intercambiables.** La profundidad del colapso depende del perfil de la instancia. Los peldaños originales seguían el perfil de colores del puzle real (22 colores interiores, 5 colores raros confinados al anillo adyacente al marco) y llevaban hasta 10 u 11 piezas duplicadas en N=14; el generador del kit no produce ningún duplicado ni anillo de colores raros, y el colapso en N=14 es visiblemente menos profundo en sus peldaños (parciales cerca de 0.6 frente a un suelo de 0.157 en la malla original). Las formas de las curvas se transfieren; los puntos de ruptura exactos, no. - **Que un solucionador de referencia débil falle un peldaño no refuta nada.** Las filas perfectas hasta N=12 pertenecen a solucionadores propagativos concretos aún no portados al kit; un solucionador infradimensionado solo puede quedarse por debajo. ## Reproducir `just research-scaling-ladder` reconstruye los cuatro peldaños desde el generador con semillas (un binario por peldaño, porque el motor compartido fija el tamaño del tablero en tiempo de compilación) y vuelve a ejecutar los dos solucionadores con el presupuesto de 12 segundos, escribiendo una fila JSONL por ejecución más un censo de peldaños con el enlace al visualizador de cada tablero plantado. Reproduce la mecánica del banco y la forma de las curvas; una igualdad celda a celda con la tabla original de trece métodos exige el conjunto de instancias original archivado y el registro de solucionadores portado, como detalla el plan de reproducción. ## Relacionado - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [¿Es NP-completa esta instancia y cómo la codifico?](https://eternity2.dev/es/research/why/how-hard-is-this-instance/) — El emparejamiento de aristas es NP-completo como familia, pero eso no dice nada de un tablero 16×16 fijo: una instancia aislada es una constante, no un problema. Lo que sí es cierto es la dureza en el peor caso de la familia y la dureza empírica de esta instancia, y cómo escribir el puzzle para un solucionador SAT, de cobertura exacta o de PLE, con pequeños esbozos detallados. Una medición con tableros plantados pone cifras a la elección de la formulación: un acantilado de resolubilidad que un paradigma de búsqueda golpea y otro cruza, y que se mueve con el número de colores. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. --- # Benchmark mono-núcleo > Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/ - Actualizado: 2026-07-13 - Temas: speed, construction, backtracking - Reproducir: `just experiments single-core-benchmark` - Fuente: Motor ejecutable + resultados commiteados + scripts (el directorio de soporte de este experimento) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark --- Dele a cada solucionador el mismo presupuesto, un núcleo y un minuto: ¿cuál gana? La respuesta desmonta la intuición evidente. Varios solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, se ejecutaron cada uno una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, en mono-hilo, 60 segundos por ejecución. Cada tablero se volvió a puntuar con un único solucionador canónico; no se confía en la puntuación autodeclarada de ningún motor. La puntuación máxima posible es 480. > **Cada motor aquí es código nuestro** > > `blackwood_style` y `verhaard_style` son **nuestras implementaciones reescritas desde cero** de los algoritmos publicados por Joshua Blackwood y Louis Verhaard, no los programas propios de los autores. El `eii` de Verhaard solo se distribuyó como binario Win32, así que una reimplementación (cuyas constantes se recuperaron de `eii.exe`) es la única forma de ejecutarlo siquiera. El C# real de Blackwood sí *es* [público](https://github.com/jblackwood345/EternityII_Solver), pero codifica de forma fija sus 256 piezas y su número de hilos, de modo que no puede leer las variantes de esta cuadrícula ni fijarse a un solo núcleo sin editarlo. Las puntuaciones de aquí miden nuestra lectura de cada algoritmo, no la ingeniería de los autores, y no deben citarse como «Blackwood obtiene N». El ranking siguiente muestra los métodos que compiten por puntuación. Una segunda familia, los preajustes CSP (un motor de arco-consistencia ejecutado bajo una docena de perillas de ordenamiento), es una categoría distinta: su mejor preajuste alcanza alrededor de 183, menos de la mitad de la puntuación de un contendiente, por lo que no merece ninguna fila en el ranking. Ese barrido de preajustes es un estudio por derecho propio, en su [propia página](/es/research/lab/experiments/single-core-benchmark/csp-presets/). ## Lo que compra un minuto de un núcleo Los dos backtrackers récord dominan este presupuesto. Nuestro motor de estilo Verhaard alcanza una media de **440,8** (mejor 451) y nuestro motor de estilo Blackwood **436,4** (mejor 440), ambos explorando de 20 a 40 millones de nodos de búsqueda por segundo. Nada más se acerca: el DFS ingenuo se posa en **365,6**, y el mejor preajuste CSP en torno a **183**. La brecha entre esos dos grupos es el hallazgo. Las cuatro familias ven el mismo puzzle y los mismos 60 segundos, y terminan separadas por 250 puntos. Lo que las distingue no es la velocidad: los motores CSP son tres órdenes de magnitud más lentos por nodo que los backtrackers y aun así vencen al DFS ingenuo en las variantes favorables, porque cada nodo se poda en lugar de solo visitarse. El número de nodos y la puntuación no son el mismo eje. Lo que esta cuadrícula no puede decirte es dónde está el techo. El mejor tablero de aquí (451) sigue quedándose a 13 puntos del récord de 5 pistas de la comunidad, 464, y la media del mejor motor se sitúa unos 24 por debajo; los récords no se establecieron en un minuto, vinieron de granjas de cómputo y meses de esfuerzo. Esto mide la eficiencia por núcleo con un presupuesto pequeño y fijo, nada más. > **[Figure]** El ranking: puntuación media sobre diez variantes de esquinas, un solo núcleo, 60 s — interactive: BenchmarkLeaderboard. Rendered on the canonical page (link above); not shown in this markdown export. ## Leer la tabla Los dos backtrackers encabezan este tablero y se mantienen ahí con estabilidad: el motor de estilo Verhaard abarca de 437 a 451 a lo largo de las diez variantes, el motor de estilo Blackwood de 431 a 440. La referencia ingenua es el suelo: un 365 rápido y lleno de basura que muestra a qué se parece un simple recuento de aristas emparejadas sin ninguna calidad de tablero. Las unidades de rendimiento difieren según la familia y nunca se comparan entre sí. Los backtrackers cuentan nodos de búsqueda por segundo, los motores CSP lo mismo pero entre 5 y 10 mil, porque cada uno de sus nodos ejecuta una arco-consistencia completa. La familia CSP cambia rendimiento por poda, y por eso explora muchísimos menos nodos y aun así vence al DFS ingenuo en las buenas variantes. ## Qué hace cada contendiente - **Verhaard y Blackwood (backtrackers, puestos 1 y 2).** DFS con ruptura controlada por la profundidad, a 20 a 40 millones de nodos por segundo. Empujan hasta 437 a 451 pero chocan contra un muro: el final de partida necesita mucho más cómputo del que permiten 60 segundos. Blackwood encontró su 470 tras alrededor de un mes en un solo PC, y lo calificó de «golpe de suerte» ([mensaje 10194](https://groups.io/g/eternity2/message/10194)). - **DFS ingenuo (la referencia).** Rellena todo el tablero permitiendo cada ruptura. En orden fila por fila (`anjou-naive_rowmajor`) alcanza un recuento elevado de aristas emparejadas (365) pero un tablero de baja calidad lleno de rupturas. Rápido, y basura. Se asienta en el tablero como un suelo: el número que un método tiene que superar para valer algo. (La sensibilidad del DFS ingenuo al orden de visita, y por qué la variante en espiral se desploma a 78, está en la [página de preajustes CSP](/es/research/lab/experiments/single-core-benchmark/csp-presets/) junto a las demás ablaciones del mismo motor.) ## Dónde se sitúan estos números Esta cuadrícula limita cada motor a un núcleo durante 60 segundos, muy por debajo del cómputo que produjo los récords de abajo. Mide la eficiencia por núcleo y la calidad heurística, no la puntuación máxima alcanzable. Un motor que se clasifica alto aquí alcanza buenos tableros a bajo coste; los números récord necesitan muchos núcleos multiplicados por horas. Cada variante de aquí fija las 5 pistas oficiales (más 3 esquinas, es decir 8 pistas en total), de modo que el techo pertinente es el **récord de 5 pistas de la comunidad, 464**, y no el 470 con todas las pistas (que usa más que las 5 pistas). Ese 464 es lo que marca la línea discontinua del ranking. | referencia | puntuación | condiciones | |:--|--:|:--| | Récord comunitario de 5 pistas | 464 | Benjamin Riotte, julio de 2026 (las mismas 5 pistas que fijan estas variantes) | | Mejor de esta cuadrícula (estilo Verhaard) | 451 | un núcleo, 60 s (media 440,8 sobre 10 variantes) | | Estilo Blackwood en esta cuadrícula | 440 | un núcleo, 60 s (media 436,4 sobre 10 variantes) | | Techo comunitario con todas las pistas | 470 | Blackwood, ~1 mes en un solo PC, usa más que 5 pistas | ## Método y reproducibilidad Cada una de las diez variantes es el puzzle oficial más tres celdas de esquina fijadas (disposiciones distintas de las piezas de esquina), de modo que las diez comparten el conjunto de 256 piezas y las 5 pistas pero difieren en tres restricciones de esquina. Se emiten tanto en JSON con el esquema del sitio (para los motores nativos) como en CSV (para los motores autónomos) desde un único generador, de manera que cada algoritmo ve instancias idénticas. Una ejecución por puzzle, semilla fija; la disposición de las esquinas es el único eje de diversidad. Cada ejecución emite una `.url` bucas, y la puntuación es el recuento canónico de aristas emparejadas producido por el mismo solucionador, nunca la autodeclaración del motor. No hubo ningún fallo en las 150 ejecuciones. Cada motor de la cuadrícula es nuestro propio código de código abierto y se ejecuta desde este repositorio, incluidos los dos escritos a partir de los algoritmos publicados por la comunidad; ningún solucionador de terceros está integrado aquí. La cuadrícula los mide todos; el ranking de arriba solo muestra los cinco que compiten por puntuación, y la [página de preajustes CSP](/es/research/lab/experiments/single-core-benchmark/csp-presets/) muestra el resto. El workspace de crates, las diez variantes, los resultados commiteados por ejecución y los scripts de la cuadrícula residen todos bajo el [directorio de soporte](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark) del experimento, y `just experiments single-core-benchmark` compila los motores y relanza toda la cuadrícula. La familia nativa (el ingenuo y los preajustes CSP) es un único binario seleccionado por preajuste; los dos backtrackers son un binario cada uno, gobernados por un pequeño wrapper. Ambos hablan el mismo contrato de puzzle-de-entrada, url-bucas-de-salida, y cada tablero se vuelve a puntuar con el único solucionador canónico. ## Hallazgos complementarios El perfilado situó el 96,6 por ciento del tiempo de la familia CSP en un único bucle AC-3 fuertemente preoptimizado. Ese motor ya está en su techo de rendimiento; las velocidades del benchmark son sus velocidades reales, no una brecha de implementación. Por otra parte, las constantes Blackwood de la comunidad no se transfieren de un etiquetado de colores a otro: sus colores privilegiados publicados obtuvieron 387 en nuestro etiquetado frente a 435 para un reajuste, una brecha de 48 puntos que nuestro Blackwood cierra reajustando solo los ID de color relativos al etiquetado y respetando cada elemento estructural de la especificación publicada. ## Trabajo abierto La cuadrícula ejecuta nuestras implementaciones. Dos de los tres motores récord de la comunidad pueden en principio ejecutarse directamente, y esa es la siguiente medición evidente: - **El generador en C de Peter McGavin.** Publicó el código fuente en la lista en enero de 2026 como `genbody71.zip` ([mensaje 11749](https://groups.io/g/eternity2/message/11749)). Compila en Apple silicon con `clang` y su pasada de generación emite un `body.c` de 10 363 líneas especializado para un solo puzzle. Es el motor más rápido que la comunidad ha medido, a 295 M de colocaciones/s en la CPU de Joe ([mensaje 11750](https://groups.io/g/eternity2/message/11750)), y está ausente de esta cuadrícula. - **El C# de Joshua Blackwood.** [Público y bajo GPL-3.0](https://github.com/jblackwood345/EternityII_Solver); compila sin modificar en .NET 8. Pero codifica de forma fija las 256 piezas en `Util.cs`, fija `number_virtual_cores = 64`, y no toma argumentos, de modo que fijarlo a un solo núcleo o alimentarlo con las variantes de esta cuadrícula supone editar su código fuente, punto en el que el artefacto ya no es puramente suyo. Ejecutarlo tal como se publicó, sobre el puzzle simple, es la forma fiel de esa medición. - **El `eii` de Louis Verhaard** no puede ejecutarse en absoluto: la descarga desde su propio sitio entrega `eii.exe` y ningún código fuente, razón por la cual nuestro motor lo reconstruye a partir del binario. Ninguno de estos motores está integrado en este repositorio; ambos se descargan y ejecutan localmente en el momento de la medición. ## Páginas de esta sección - [Presets CSP, medidos](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/csp-presets/) — Un solo motor de propagación de restricciones, ejecutado bajo una docena de presets de ordenación y de propagadores, sobre las mismas diez variantes con esquinas fijadas que el ranking. Un estudio de lo que aporta cada ajuste, mantenido fuera del ranking principal porque el mejor preset alcanza menos de la mitad de la puntuación de un contendiente. ## Relacionado - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. - [Búsqueda en haz](https://eternity2.dev/es/research/build/construct/beam-search/) — Mantener con vida los K tableros parciales más prometedores a la vez y hacerlos crecer celda a celda. La búsqueda en haz es el motor de los constructores desde cero de este proyecto, y una ilustración nítida de por qué la anchura por sí sola se estanca en las profundidades del interior. --- # Presets CSP, medidos > Un solo motor de propagación de restricciones, ejecutado bajo una docena de presets de ordenación y de propagadores, sobre las mismas diez variantes con esquinas fijadas que el ranking. Un estudio de lo que aporta cada ajuste, mantenido fuera del ranking principal porque el mejor preset alcanza menos de la mitad de la puntuación de un contendiente. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/csp-presets/ - Actualizado: 2026-07-15 - Temas: backtracking, search-space - Reproducir: `just experiments single-core-benchmark` - Fuente: Motor ejecutable + resultados versionados + scripts (el directorio de respaldo de este experimento) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark --- El ranking del [benchmark mono-núcleo](/es/research/lab/experiments/single-core-benchmark/) muestra los métodos que compiten en puntuación. Esta página muestra el resto: una docena de presets de un solo motor de satisfacción de restricciones, más el DFS ingenuo en su orden de visita más débil. No son una docena de solucionadores. Son un único núcleo de arco-consistencia con distintas cabezas puestas, conservado para que el coste exacto de cada técnica clásica se lea en un número en lugar de discutirse. > **[Figure]** Presets CSP: puntuación media sobre diez variantes con esquinas, un núcleo, 60 s — interactive: BenchmarkLeaderboard. Rendered on the canonical page (link above); not shown in this markdown export. ## Lo que aporta cada ajuste Los presets varían dos cosas: el orden en que el motor asigna las celdas, y con cuánta fuerza propaga antes de comprometerse. Manteniendo fijos el puzzle y el presupuesto, la diferencia de puntuación entre dos presets es el valor de ese único ajuste. - **La ordenación por el valor menos restrictivo ayuda.** `anjou-gacolor_ac3_lcv` alcanza una media de 114 frente al simple `anjou-gacolor_ac3` en 76: elegir el valor que descarta la menor cantidad de vecinos vale aquí unos 38 puntos. - **Algunos ajustes son inertes a esta profundidad.** Tres presets (`anjou-gacolor_ac3`, `anjou-gacolor_ac3_ns1`, `anjou-verhaard_preferred`) produjeron tableros idénticos al byte en este puzzle. NS-1 y la ordenación preferida no añaden nada en 60 segundos: el motor nunca busca lo bastante hondo para que muerdan. - **La ordenación borde primero es el preset más fuerte.** `anjou-border_first_lcv` y `anjou-rare_color_first` encabezan el barrido en torno a 183, al fijar el marco sobre-restringido antes que el interior libre. Aun así es menos de la mitad de la puntuación de un contendiente. ## Por qué ninguno compite Cada preset es bimodal. En una disposición de esquinas favorable, la búsqueda por arco-consistencia alcanza de 340 a 349; en una hostil, se desploma hasta unos 55, atrapada en una cuenca mala de la que no puede salir en 60 segundos. La media se mantiene baja porque las esquinas malas la arrastran hacia abajo, y ningún ajuste de ordenación corrige el problema de la cuenca. Esa es la verdadera historia de esta familia: la propagación hace que cada nodo esté bien podado pero sea costoso, de modo que la búsqueda es fuerte donde la instancia es indulgente e impotente donde no lo es. Los motores constructivos del ranking nunca caen en esa trampa, razón por la cual un preset en 183 está en una página distinta de la de los contendientes del ranking, que llegan hasta 451. ## El DFS ingenuo también está aquí, por una sola razón La búsqueda en profundidad ingenua con todas las rupturas permitidas no es un preset CSP, pero su orden de visita pertenece a la misma lección. En orden por filas (`anjou-naive_rowmajor`, en el ranking como referencia) alcanza 365; el mismo DFS en orden de visita en espiral (`anjou-naive_spiral`) se desploma a una media de 78. La sola elección del orden de visita cuesta a la búsqueda ingenua casi 290 puntos, la misma clase de sensibilidad a la ordenación que muestran los presets CSP, a mayor escala. ## Método y reproducibilidad Estos presets se ejecutaron en la misma cuadrícula que el ranking: diez variantes del puzzle oficial, cada una con tres celdas de esquina fijadas, un núcleo, 60 segundos, semilla fija, una ejecución por variante. Cada tablero se vuelve a puntuar con el único puntuador canónico de aristas emparejadas, nunca con la auto-declaración del motor. El motor, las diez variantes, los resultados versionados por ejecución y los scripts viven bajo el [directorio de respaldo](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark) del experimento, y `just experiments single-core-benchmark` reejecuta la cuadrícula entera, contendientes y presets juntos. ## Relacionado - [Benchmark mono-núcleo](https://eternity2.dev/es/research/lab/experiments/single-core-benchmark/) — Quince solucionadores, los nuestros y nuestras implementaciones de los dos backtrackers récord de la comunidad, cada uno ejecutado una vez sobre diez variantes del puzzle oficial con las esquinas fijadas, un solo núcleo, 60 segundos por ejecución. El hallazgo: el número de nodos no es la puntuación. - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? --- # Problemas abiertos > La frontera abierta de Eternity II reunida en un solo lugar: cada ángulo que todavía merece un intento, el muro que ataca, qué se ha probado y dónde se detuvo, y si es un objetivo accesible para principiantes o uno difícil y bien cartografiado. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/open-problems/ - Actualizado: 2026-07-21 - Fuente: Archivo de la lista de correo eternity2 (groups.io): donde se anuncian y discuten los objetivos abiertos — https://groups.io/g/eternity2 --- Este es el tablero de los ángulos abiertos: una fila por cada dirección que todavía merece un intento. Cada entrada plantea la pregunta en una línea, nombra el muro que ataca (tomado de [por qué es difícil](/es/research/why/)), remite a lo que ya se ha probado y a dónde se detuvo (en el [mapa de muros y métodos](/es/research/why/walls-and-methods/) y los [callejones sin salida](/es/research/build/dead-ends/)), y etiqueta su accesibilidad. Las etiquetas dicen lo que dicen: **accesible para principiantes** es un objetivo que puedes tomar sin una década de contexto; **difícil, bien cartografiado** es un objetivo que muchos intentos sólidos han trazado sin que ninguno lo cruzara; **sin atender** es un ángulo en el que nadie trabaja activamente, algo distinto de uno que fue atacado y resistió. Para el estado del arte, la puntuación vive en la página de [records](/es/research/records/); esta página solo muestra lo que sigue abierto. ## La brecha de 470 a 480 > **¿Puede algún método cruzar del techo de 470 a un 480 completo?** > > La vía canónica. El mejor tablero que respeta solo la pista de inicio obligatoria está en 470/480 desde que la comunidad lo alcanzó, y un 480 diseñado es un hecho dado: la editorial construyó el puzle a partir de una solución, así que un tablero perfecto existe y solo su ubicación queda abierta. **Muro.** [Rigidez](/es/research/why/rigidity-wall/): los tableros record son islas localmente congeladas, y las diez aristas que faltan están al otro lado de [todos los muros estructurales a la vez](/es/research/why/walls-and-methods/). **Probado, y dónde se detuvo.** Todo método del [mapa de muros y métodos](/es/research/why/walls-and-methods/) termina contra la rigidez; las construcciones desde cero y desde el corpus se estancan entre 458 y 463, y ninguna cruza el techo. La fuerza de cálculo bruta tampoco lo cierra, lo que queda registrado bajo [lanzar más cálculo contra el muro](/es/research/build/dead-ends/). **Etiqueta.** Difícil, bien cartografiado. Es la cumbre de todo el puzle: se sabe mucho sobre por qué resiste, y por eso mismo un cruce nuevo sería noticia. ## El objetivo estricto de cinco pistas, de 464 a 465 > **¿Puede un tablero que honra las cinco pistas oficiales superar 464?** > > La línea estricta de cinco pistas se sigue por separado de la línea abierta de 470, porque [la mayor parte del avance en el record abierto se hizo sin las pistas](/es/research/build/clue-puzzles/). El mejor tablero que respeta las cinco colocaciones es 464. **Muro.** [Rigidez](/es/research/why/rigidity-wall/) de nuevo, más las colocaciones de pistas que estrechan la región alcanzable: menos tableros satisfacen las cinco, así que el pajar es más pequeño, pero la aguja también. **Probado, y dónde se detuvo.** El 464 es la marca vigente de la línea estricta en la página de [puzles con pistas](/es/research/build/clue-puzzles/); las construcciones estrictas y re-compresiones del proyecto alcanzan la clase de los 460 sin pasarla, como se traza en el [mapa de muros y métodos](/es/research/why/walls-and-methods/). **Etiqueta.** Difícil, bien cartografiado, pero un paso más corto que la brecha de 470 a 480: de 464 a 465 es una sola arista, en una línea donde la región alcanzable es más ceñida y por tanto más fácil de razonar que el record abierto. ## El 10x10 sin pistas set_2 de Brendan Owen > **Resolver set_2, el 10x10 sin pistas que nunca se ha resuelto.** > > Brendan Owen publicó un par de 10x10 generados sin pistas con sus estadísticas. Uno (set_1) cayó; el otro (set_2) nunca se ha resuelto y sigue siendo el próximo peldaño acordado por la comunidad por debajo del 16x16 completo. **Muro.** La misma dificultad de emparejar aristas que el puzle completo, a un tamaño que una sola máquina sí puede terminar. Set_1 exigió una búsqueda amplia pero acotada, así que set_2 es un objetivo de ingeniería de búsqueda, no uno estructural. **Probado, y dónde se detuvo.** La historia completa está en la página de [benchmarks](/es/research/build/benchmarks/#los-1010-de-brendan-uno-cayó-el-otro-sigue-en-pie): set_1 se resolvió, las estadísticas de set_2 se conocen, y [sigue en pie](/es/research/build/benchmarks/#los-1010-de-brendan-uno-cayó-el-otro-sigue-en-pie). **Etiqueta.** Accesible para principiantes. Es el único objetivo abierto dimensionado para una máquina personal y un backtracker bien afinado en lugar de un clúster de cálculo, así que es el primer intento real recomendado. ## Cruzar una cuenca de rigidez > **¿Existe algún camino local de una cuenca record a otra?** > > Cada tablero record vive en una cuenca que las pruebas MIP muestran localmente óptima hasta un halo de varias celdas. La pregunta abierta es si alguna secuencia de pequeños movimientos legales alcanza otra cuenca en absoluto. **Muro.** [Rigidez](/es/research/why/rigidity-wall/) en su forma más nítida, y [por qué saltar de cuenca parece imposible](/es/research/why/sigma-cycles/): el paso de un gran tablero a uno mejor es un único intercambio gigante e indivisible, sin gradiente que seguir. **Probado, y dónde se detuvo.** El teorema de rigidez registra pruebas MIP de optimalidad de halo en varias cuencas, y la búsqueda de una cadena corta de escape entre cuencas falló por una razón estructural expuesta en [por qué saltar de cuenca parece imposible](/es/research/why/sigma-cycles/). La entrada [recombinar dos buenos tableros](/es/research/build/dead-ends/) es el mismo muro visto desde el lado del cruce. **Etiqueta.** Difícil, bien cartografiado. Un solo movimiento de cruce, o una prueba de que ninguno existe, cambiaría cómo se juzga todo método de búsqueda local. ## El muro de memoria del meet-in-the-middle > **¿Pueden las dos mitades de una búsqueda meet-in-the-middle encontrarse a tamaño real?** > > Hacer que dos búsquedas parciales se encuentren en el medio es completo en principio, pero el número de tableros parciales a almacenar crece unas veinte veces por cada error de emparejamiento adicional tolerado, así que las mitades dejan de encontrarse mucho antes del 16x16 completo. **Muro.** El coste de la exactitud medido directamente: el enfoque [meet-in-the-middle](/es/research/build/exact/meet-in-the-middle/) es exacto, pero su memoria supera lo que cualquier máquina puede contener. **Probado, y dónde se detuvo.** BANDSAW resolvió una banda de final de partida a optimalidad probada y, al hacerlo, midió el crecimiento de unas veinte veces por error en ambos lados, así que encontrarse en el medio deja de compensar a tamaño real; ese resultado es la [fila BANDSAW](/es/research/why/walls-and-methods/) del mapa. Una mejor representación, o un encuentro con pérdida que siga siendo correcto, es la palanca abierta. **Etiqueta.** Difícil, bien cartografiado. El muro aquí está cuantificado, así que el progreso es medible: cualquier codificación que baje el factor de crecimiento por error es una ganancia real, incluso sin una resolución completa. ## Un eje de diversidad más allá del parallel tempering > **¿Existe un mecanismo de búsqueda que encuentre cuencas nuevas de forma fiable, más allá del parallel tempering?** > > Casi todo método redescubre el mismo puñado de cuencas. En un barrido completo de métodos, solo el parallel tempering produjo de forma fiable cuencas genuinamente nuevas, y aun él se estanca pronto. **Muro.** [Rigidez](/es/research/why/rigidity-wall/) vista como un cuello de botella de diversidad: la restricción no es la puntuación que un método alcanza, sino el número de cuencas distintas que sabe encontrar, y el arsenal estándar encuentra demasiado pocas. **Probado, y dónde se detuvo.** El estudio de diversidad está escrito en el [mapa de muros y métodos](/es/research/why/walls-and-methods/): la búsqueda local adaptativa, la colocación en serpiente y la parte alta de la distribución de un generador entrenado recaen todas en las cuencas conocidas, y solo el parallel tempering escapa de forma fiable. [Generar tableros con un transformador](/es/research/build/dead-ends/) es uno de los intentos de diversidad que no se sostuvieron. **Etiqueta.** Sin atender, y abierto. A diferencia de los objetivos cartografiados de arriba, este no tiene una lista de ataques trazada esperando a ser batida: un mecanismo de diversidad realmente nuevo es una idea que nadie ha plantado todavía, lo que lo convierte en la entrada más especulativa y la menos restringida por el trabajo previo. ## ¿Es la rigidez local una consecuencia del colapso de distinción de la ley de área? > **¿Los tableros record se congelan porque los parciales distintos colapsan, o es una coincidencia de escala?** > > Los movimientos más pequeños que separan los mejores tableros conocidos y la escala a la que colapsan los tableros parciales realmente distintos son ambos un parche de unos cientos de celdas. La pregunta abierta es si eso es un vínculo causal, la rigidez derivada de la ley de área, o dos hechos independientes que por casualidad comparten una escala de longitud. **Muro.** [Rigidez](/es/research/why/rigidity-wall/) y [la ley de área](/es/research/why/entropy-area-law/). La rigidez se establece de forma independiente, por pruebas MIP de optimalidad de halo y un halo SAT depositado; la ley de área es una estimación de distinción. Reducir una a la otra las ataría, pero nada en el sitio lo deriva. **Probado, y dónde se detuvo.** La [página de la ley de área](/es/research/why/entropy-area-law/) observa la escala compartida y enlaza a [por qué el salto de cuenca parece imposible](/es/research/why/sigma-cycles/); no afirma que la rigidez esté causada por el colapso. El resultado de rigidez es exacto y región por región, y se sostiene solo sin invocar la ley de área. Ninguna página afirma el puente causal, que es justo por lo que figura aquí como pregunta. **Etiqueta.** Difícil, bien cartografiado. Ambos extremos están entre los muros más estudiados de la sección; la parte abierta es la arista entre ellos, y cerrarla en cualquier sentido replantearía cómo se leen los dos muros. ## ¿Produce el pico de dificultad el perfil de ramificación de sin movimientos forzados? > **¿El alto factor de ramificación viene impuesto por situarse en el pico de una solución?** > > Cada celda interior conserva de 73 a 137 piezas legales, y el puzzle se sitúa en la transición de fase de alrededor de una solución esperada. Ambos se agrupan como «nada local que podar», pero ninguna derivación ata el conteo de ramificación a situarse en unos 17 colores interiores. **Muro.** [Sin movimientos forzados](/es/research/why/no-forced-moves/) y [el pico de dificultad](/es/research/why/phase-transition/). El conteo de ramificación es un conteo de candidatos por celda sobre el conjunto de piezas; el pico es un enunciado sobre el número de soluciones a 17 colores. Un puzzle podría en principio tener uno sin el otro. **Probado, y dónde se detuvo.** [Poda contra velocidad](/es/research/why/prune-vs-speed/) y el [mapa muro-método](/es/research/why/walls-and-methods/) agrupan ambos muros bajo el mismo tema, que no hay nada local que podar, lo cual es una unión temática y no una afirmación causal. Ninguna página deriva el perfil de ramificación del conteo de colores. **Etiqueta.** Difícil, bien cartografiado. Los dos muros están medidos con exactitud cada uno; la pieza que falta es la derivación que los conecta, la cual convertiría un tema compartido en un mecanismo. ## ¿Limita la geometría de los sigma-ciclos la búsqueda constructiva, no solo la reparación local? > **¿Es el muro de los sigma-ciclos la razón de que los productores beam y DFS también saturen, o solo la búsqueda local?** > > El movimiento entre dos tableros record es un ciclo indivisible de muchas celdas, y cada prefijo propio puntúa menos; eso muestra por qué la reparación local no puede cruzar entre cuencas. La pregunta abierta es si la misma geometría limita a los productores DFS y beam constructivos, que saturan entre 458 y 463 por razones calculadas solo entre tableros terminados, no dentro del árbol de búsqueda. **Muro.** [Sigma-ciclos](/es/research/why/sigma-cycles/) y [rigidez](/es/research/why/rigidity-wall/), vistos en el eje de diversidad. El resultado de los sigma-ciclos es un enunciado exacto sobre cada par de tableros incluidos, pero se calcula entre tableros record terminados, no sobre el árbol de búsqueda constructivo que los produce. **Probado, y dónde se detuvo.** El [mapa muro-método](/es/research/why/walls-and-methods/) documenta que los productores desde cero y beam saturan como los demás, y la encuesta de diversidad halló que el arsenal estándar redescubre una y otra vez las mismas cuencas. Extender el mecanismo de los sigma-ciclos para explicar ese techo constructivo, en lugar de solo el de la reparación local, no está probado y no se afirma en ninguna parte del sitio. **Etiqueta.** Difícil, bien cartografiado, y cercano a la pregunta de diversidad de arriba: una prueba de que la misma geometría de ciclo gobierna la saturación constructiva unificaría dos techos observados de forma independiente. ## De dónde salieron, y dónde escribir uno Cada afirmación de arriba se apoya en una página ya presente en este wiki: los muros en [por qué es difícil](/es/research/why/), los intentos detenidos en el [mapa de muros y métodos](/es/research/why/walls-and-methods/) y los [callejones sin salida](/es/research/build/dead-ends/), los objetivos de referencia en la página de [benchmarks](/es/research/build/benchmarks/). Si tomas uno de ellos y se mueve, [el cuaderno está abierto](/es/research/contribute/) y hay un lugar para el informe. ## Relacionado - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. - [Encuentro en el medio](https://eternity2.dev/es/research/build/exact/meet-in-the-middle/) — Enumerar dos mitades de un problema y unirlas en una interfaz compartida, intercambiando memoria por un exponente reducido a la mitad. El truco clásico de Horowitz–Sahni, qué aspecto tiene sobre bandas del tablero, y qué midió el experimento BANDSAW de este proyecto, incluido el método unilateral que lo superó. - [Contribuye con tus investigaciones](https://eternity2.dev/es/research/contribute/) — Este wiki es el hogar de investigación de la comunidad, y hay sitio en él para tu trabajo. Tres formas de publicarlo, desde un mensaje en la lista de correo hasta una pull request, más el pequeño conjunto de reglas de la casa que mantiene cada página digna de confianza. --- # Artículos > La literatura académica sobre Eternity II y los puzzles de emparejamiento de aristas, extraída de las notas de investigación del proyecto y de la lista de lecturas de la comunidad, y ordenada según lo útil que resulta realmente cada artículo si tu objetivo es escribir un solucionador. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/papers/ - Actualizado: 2026-07-15 - Temas: exact-methods, search-space --- En resumen: los resultados de complejidad explican por qué el problema es difícil, los artículos SAT/CSP muestran por qué los solucionadores genéricos chocan contra un muro, y son los artículos sobre propagación de restricciones y grandes vecindarios cuyas ideas reaparecen en los solucionadores más potentes. > **[Interactive: PapersView]** Rendered on the canonical page (link above); not shown in this markdown export. --- # Quién es quién en la investigación de E2 > Dos décadas de investigación sobre Eternity II fueron obra de personas concretas, en una lista de correo. Esta página es la galería: quiénes son, qué aportó cada una y dónde leerlo en sus propias palabras. Un agradecimiento tanto como un índice. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/people/ - Actualizado: 2026-07-02 - Fuente: Brendan Owen deriva el diseño 17+5 como el puzzle más difícil posible (mensaje groups.io 1947) — https://groups.io/g/eternity2/message/1947 - Fuente: El relato en primera persona de Louis Verhaard sobre el 467: «fue mi programa el que hizo el trabajo» (mensaje groups.io 6891) — https://groups.io/g/eternity2/message/6891 - Fuente: Peter McGavin resuelve el benchmark 10×10 de Brendan Owen (mensaje groups.io 9686) — https://groups.io/g/eternity2/message/9686 - Fuente: El 470 de Joshua Blackwood, el récord vigente (mensaje groups.io 10117) — https://groups.io/g/eternity2/message/10117 - Fuente: Al Hopfer enuncia el equilibrio de borde NS-1 (mensaje groups.io 10754) — https://groups.io/g/eternity2/message/10754 - Fuente: Brendan Owen regresa a la lista tras catorce años (mensaje groups.io 11500) — https://groups.io/g/eternity2/message/11500 --- Las [páginas de historia](/es/research/community/hunt/) cuentan la aventura de la comunidad en orden cronológico; esta página la cuenta por persona. Casi todo lo que este wiki sabe (cada récord, cada teoría, cada herramienta y cada [callejón sin salida documentado](/es/research/build/dead-ends/)) se remonta a alguien que lo publicó en la [lista de correo eternity2](https://groups.io/g/eternity2), casi siempre de forma gratuita, a menudo durante años. Considera esta galería un índice y un agradecimiento a la vez. Los nombres aparecen tal como cada cual firmaba sus mensajes públicos; cada afirmación enlaza a un mensaje. Muchas de las personas de abajo tienen su propia página de contribuidor: un nombre en **negrita con enlace** la abre, reuniendo su perfil, sus mensajes con fuente y todas las páginas que hayan escrito aquí. [Raphaël Anjou](/es/research/people/raphael-anjou/), que mantiene el wiki y dirige los experimentos del laboratorio, tiene la suya también, un investigador más entre los demás. Los nombres sin enlace están documentados directamente aquí, en esta página. ## Los fundadores y los analistas del lanzamiento (2000–2007) ### [Brendan Owen](/es/research/people/brendan-owen/) El fundador. Owen creó el grupo eternity_two en octubre de 2000, seis años y medio antes de que el puzzle existiera ([msg 384](https://groups.io/g/eternity2/message/384)), y le dio su tono científico: en los dos días siguientes al anuncio de enero de 2007 ya había derivado la fórmula del número esperado de soluciones que convierte la dificultad en un parámetro de diseño ([msg 38](https://groups.io/g/eternity2/message/38)), y el fin de semana del lanzamiento digitalizó las piezas reales y publicó la primera estimación del número de soluciones ([msg 987](https://groups.io/g/eternity2/message/987)). Sus resultados emblemáticos: la prueba de que un reparto de colores 17+5 es el 16×16 más difícil posible ([msg 1947](https://groups.io/g/eternity2/message/1947)), el modelo exacto del árbol de búsqueda que hoy se llama [teoría compleja](/es/research/why/complex-theory/) ([msg 5197](https://groups.io/g/eternity2/message/5197), [msg 5209](https://groups.io/g/eternity2/message/5209)), los [puzzles de referencia](/es/research/build/benchmarks/) 9×9/10×10 en los que la comunidad todavía compite, y la prueba en forma cerrada de la profundidad de pico 256 × (1 − 1/e) ([msg 8125](https://groups.io/g/eternity2/message/8125)). Tras una despedida al cierre del concurso ([msg 8429](https://groups.io/g/eternity2/message/8429)), regresó en 2025, afinando su propio modelo ([msg 11500](https://groups.io/g/eternity2/message/11500), [msg 11546](https://groups.io/g/eternity2/message/11546)). ### [Günter Stertenbrink](/es/research/people/gunter-stertenbrink/) Un veterano de Eternity I y el primero en provocar las estimaciones del grupo: en 2001 preguntó, años antes de los hechos, cómo se diseñaría un puzzle dotado de un premio colosal y con solo un ~1 % de probabilidades de ser resuelto en diez años ([msg 15](https://groups.io/g/eternity2/message/15)), y recibió las afirmaciones de prensa de 2005 con «So we can conclude, the end of the universe is in several years.» ([msg 34](https://groups.io/g/eternity2/message/34)). Durante dos décadas verificó los números de la lista, desde las conversiones a cobertura exacta de 2007 hasta el registro de hardware de «nodos por vatio» de la década de 2010. ### [Dave Clark](/es/research/people/dave-clark/) Autor del solucionador distribuido ESolve para Eternity I, se reincorporó en 2001 ([msg 21](https://groups.io/g/eternity2/message/21)) y construyó eternity2.net, el proyecto BOINC que fue el rostro público de la comunidad en 2007 ([msg 756](https://groups.io/g/eternity2/message/756)). Lo cerró con una contabilidad completa: 1,6 TFlops, más de 10^19 operaciones, ninguna solución ([msg 3511](https://groups.io/g/eternity2/message/3511)). Liberó el código de su solucionador ([msg 3716](https://groups.io/g/eternity2/message/3716)) y dejó a los archivos su mejor fuente primaria sobre la creación del puzzle: su conversación telefónica con Monckton, describiendo cómo se generó la solución y se guardó bajo llave ([msg 4177](https://groups.io/g/eternity2/message/4177)). ### Txibilis Angel de Vicente, que firmaba Txibilis, construyó la suite estándar de tableros de referencia de tipo E2 ([msg 1886](https://groups.io/g/eternity2/message/1886)) y era el mejor diseñador manual de [órdenes de relleno](/es/research/build/backtracking/fill-order/) de la comunidad. Su duelo con el optimizador automatizado de doc_s_smith hizo caer los recuentos de nodos de la búsqueda exhaustiva en varios órdenes de magnitud ([msg 2928](https://groups.io/g/eternity2/message/2928)). La cultura del benchmark que más tarde validó la teoría compleja comienza con él. ### doc_s_smith En pleno duelo, la lista descubrió quién era doc_s_smith: Dietmar Wolz, el descubridor de la mayoría de las soluciones conocidas de Eternity I ([msg 2972](https://groups.io/g/eternity2/message/2972)). Su optimizador de estrategia automatizado estableció récords de benchmark en 2007 ([msg 2896](https://groups.io/g/eternity2/message/2896)); de vuelta en 2010, publicó una caja de herramientas Java que convirtió la lista en un taller de algoritmos ([msg 7755](https://groups.io/g/eternity2/message/7755)) y dio a la era del posconcurso su objetivo de trabajo: «beat 468 matching edges» ([msg 7803](https://groups.io/g/eternity2/message/7803)). ### kubzpa Autor del primer artículo serio sobre el recuento de soluciones, que situaba a E2 en cerca de 15 millones de soluciones ([msg 3497](https://groups.io/g/eternity2/message/3497)), y del resultado de imposibilidad más pulcro de la época: el argumento de paridad que muestra que ningún tablero puede puntuar exactamente 479 por sus costuras interiores ([msg 1640](https://groups.io/g/eternity2/message/1640)). Se sostuvo diecisiete meses, hasta que Verhaard señaló el único resquicio ([msg 6317](https://groups.io/g/eternity2/message/6317)): dar la vuelta a una pieza de borde cuyas dos aristas de borde exteriores comparten un color, y el tablero se lee como un 479 mientras esas aristas de borde no puntuadas quedan intactas. Es un tecnicismo del borde no puntuado, no una brecha en el cálculo de paridad interior, que sigue en pie, como el propio Verhaard señaló: 479 «cannot be achieved in another way» ([msg 6319](https://groups.io/g/eternity2/message/6319)). ### mjqxxxx Michael Quist era el árbitro matemático de la lista. Publicó el primer marco de recuento plenamente riguroso para los puzzles de tipo E2 ([msg 1221](https://groups.io/g/eternity2/message/1221)), afinó la teoría del equilibrio de borde ([msg 2098](https://groups.io/g/eternity2/message/2098)), y sus revisiones detectaron los fallos que hicieron sólidos los resultados de los demás. Kubzpa enmendó su artículo sobre el recuento de soluciones después de que su revisión detectara una ejecución Monte Carlo defectuosa ([msg 3589](https://groups.io/g/eternity2/message/3589)). ## Los años del premio (2007–2010) ### [Louis Verhaard](/es/research/people/louis-verhaard/) La única persona a la que el puzzle pagó jamás. Su solucionador eii, hecho público «because I am stuck» ([msg 5940](https://groups.io/g/eternity2/message/5940)), encontró el 467 que ganó el premio de escrutinio de 10 000 $, inscrito bajo el nombre de su esposa, Anna Karlsson, como él mismo confirmó: «Anna is my wife… it was my program that did the job» ([msg 6349](https://groups.io/g/eternity2/message/6349), [msg 6891](https://groups.io/g/eternity2/message/6891), [msg 7451](https://groups.io/g/eternity2/message/7451)). Sus métodos se volvieron canónicos: los órdenes de relleno en peine (comb-search) ([msg 6112](https://groups.io/g/eternity2/message/6112)) y el deslizamiento de aristas controlado por la profundidad ([msg 7321](https://groups.io/g/eternity2/message/7321)). Fue también el defensor más acérrimo de la teoría compleja: «the finest work that has ever been published about E2» ([msg 7810](https://groups.io/g/eternity2/message/7810)), y su 467 se sostuvo doce años. ### Yannick Kirschhoffer Autor del Eternity II Editor, el editor y la interfaz de solucionador Java multiplataforma publicados en febrero de 2008 ([msg 4544](https://groups.io/g/eternity2/message/4544)) que se convirtió en la herramienta de tablero estándar de la comunidad durante años. Todavía ofrecía ayuda con su código cuando este resurgió en 2012 ([msg 9064](https://groups.io/g/eternity2/message/9064)). ### Fred Firmando como Eternity Blogger, Fred construyó E2Lab en una ráfaga de publicaciones casi diarias en el otoño de 2009 ([msg 7148](https://groups.io/g/eternity2/message/7148)), un editor/solucionador cuya retirada deliberada de su propio «botón mágico», «to respect the game rules», dice mucho sobre la ética de la lista ([msg 7150](https://groups.io/g/eternity2/message/7150)). Su blog alojó las tablas de la comunidad durante los años del posconcurso. ### [Al Hopfer](/es/research/people/al-hopfer/) Un habitual desde 2008 y el teórico del borde de la comunidad. Su «doctrina del equilibrio» para la generación de puzzles aparece en 2009 ([msg 6842](https://groups.io/g/eternity2/message/6842), [msg 6844](https://groups.io/g/eternity2/message/6844)); en 2022 enunció la condición exacta que este wiki llama el [equilibrio de borde NS-1](/es/research/why/border-balance/) ([msg 10754](https://groups.io/g/eternity2/message/10754), [msg 10757](https://groups.io/g/eternity2/message/10757)), y la respaldó con un parcial de 222 piezas con el borde completado, enteramente documentado ([msg 10862](https://groups.io/g/eternity2/message/10862)). ## La larga década (2010–2019) ### [Peter McGavin](/es/research/people/peter-mcgavin/) El pilar de la época, y posiblemente el investigador más determinante del puzzle después de Owen. Su trabajo tiene [su propia página](/es/research/lab/experiments/peter-mcgavin/backtracker/). Calculó el número canónico de aproximadamente 14 702 soluciones esperadas ([msg 8924](https://groups.io/g/eternity2/message/8924)), transcribió la teoría compleja a LaTeX ([msg 9188](https://groups.io/g/eternity2/message/9188)) y más tarde a código C exacto ([msg 11197](https://groups.io/g/eternity2/message/11197)), que este sitio adapta. En 2017 resolvió el 10×10 sin pistas de Owen en unos 180 años-núcleo, dentro de las barras de error de la teoría, su validación más fuerte hasta la fecha ([msg 9686](https://groups.io/g/eternity2/message/9686), [msg 9688](https://groups.io/g/eternity2/message/9688)), y en 2020 ostentó el récord él mismo: «New record score of 469! Only 11 breaks!» ([msg 10045](https://groups.io/g/eternity2/message/10045)). ### Tony Wauters La academia en persona. Publicó el artículo hiperheurístico de su equipo, revisado por pares (461/480 en una hora), y se quedó a responder preguntas ([msg 9017](https://groups.io/g/eternity2/message/9017), [msg 9023](https://groups.io/g/eternity2/message/9023)), y su equipo continuó con los trabajos de MILP y Max-Clique de 2017 ([msg 9683](https://groups.io/g/eternity2/message/9683)). ### Michael Field Un veterano de los solucionadores más rápidos de los primeros años, convertido en el realista del hardware del grupo: su diseño de backtracker sobre FPGA proyectaba unos 5 G emplazamientos por segundo y por chip ([msg 9226](https://groups.io/g/eternity2/message/9226)), y sus análisis de capacidad de las vías GPU y FPGA le dijeron a la lista qué podía y qué no podía comprar el silicio ([msg 9003](https://groups.io/g/eternity2/message/9003)). ### Arnaud Carré Llegó en 2009 y redefinió el estándar de velocidad en 2014 con un solucionador mononúcleo de 114,5 millones de recursiones por segundo, ofrecido como referencia de comparación ([msg 9233](https://groups.io/g/eternity2/message/9233)), y regresó en 2018 para las carreras de benchmark. ### Adam Miles El flanco GPU. Al llegar en 2017, pasó de los trucos de bits en CPU a un solucionador de cómputo DirectX 12 que corría en una Xbox One X ([msg 9811](https://groups.io/g/eternity2/message/9811)) y volvió a verificar de forma exhaustiva en GPU el conjunto 9×9 número 1 de Owen: las mismas 2 soluciones que el censo de CPU de 2014, en 25,4 horas ([msg 9822](https://groups.io/g/eternity2/message/9822)). ### JSA El verificador de la comunidad y, más tarde, su salvador. En 2009 reprodujo el 467 con el solucionador público de Verhaard, unos 82 días en un solo PC, registrando con precisión cuánto se enrarece el aire por encima de 466 ([msg 6687](https://groups.io/g/eternity2/message/6687)). Cuando Yahoo anunció que borraría los archivos en 2019, JSA pagó la tarifa de transferencia a groups.io, ofreciendo «I can pay for the first 5 years» ([msg 2](https://groups.io/g/eternity2/message/2)), y aún redacta los mensajes de bienvenida del grupo ([msg 11771](https://groups.io/g/eternity2/message/11771)). ### Ole Knudsen Kronjuvel (Kron) estuvo ahí desde los primerísimos años, reivindicó a posteriori un parcial de 231 piezas de octubre de 2007 ([msg 7563](https://groups.io/g/eternity2/message/7563)) y, como propietario del grupo, creó el nuevo hogar en groups.io durante la migración de 2019. El mensaje de bienvenida de 2026 se abre con un homenaje a él; ha desaparecido de la lista desde 2023 ([msg 11771](https://groups.io/g/eternity2/message/11771)). ## La ola de récords y la era moderna (2019–2026) ### [Joshua Blackwood](/es/research/people/joshua-blackwood/) El desconocido que puso fin al congelamiento de doce años. Ignorado por la lista, anunció un 468 en Reddit en agosto de 2020 ([msg 10032](https://groups.io/g/eternity2/message/10032)), liberó el código de su solucionador días después ([msg 10037](https://groups.io/g/eternity2/message/10037)) junto con raros resultados negativos (SAT, GPU y cachés 2×2 todos medidos y descartados, [msg 10056](https://groups.io/g/eternity2/message/10056)), y en marzo de 2021 publicó el 470 que aún se mantiene ([msg 10117](https://groups.io/g/eternity2/message/10117)), hallado con el código público exacto ([msg 10161](https://groups.io/g/eternity2/message/10161)). Su algoritmo está [decodificado en este wiki](/es/research/lab/experiments/joshua-blackwood/solver/). ### [Jef Bucas](/es/research/people/jef-bucas/) La infraestructura de la era moderna. Dio la alarma que desencadenó la migración de los archivos ([msg 9920](https://groups.io/g/eternity2/message/9920)), construyó el visualizador de tableros [e2.bucas.name](https://e2.bucas.name) que se convirtió en el libro de récords de la comunidad ([msg 9955](https://groups.io/g/eternity2/message/9955)), reescribió el solucionador de Blackwood en C bajo el nombre de libblackwood, duplicando grosso modo su velocidad y alimentando la ola de 469 de noviembre de 2020 ([msg 10065](https://groups.io/g/eternity2/message/10065), [msg 10078](https://groups.io/g/eternity2/message/10078), [msg 10067](https://groups.io/g/eternity2/message/10067)), e igualó el 470 en 2024 ([msg 11401](https://groups.io/g/eternity2/message/11401)), acreditando siempre a Blackwood. Su estudio de parámetros wrapper_blackwood se republica [en este wiki](/es/research/lab/experiments/joshua-blackwood/solver/) con su permiso ([msg 11905](https://groups.io/g/eternity2/message/11905)). ### Carlos Fernandez El cirujano de tableros. Produjo un 469 mediante el intercambio de una sola pieza del tablero récord de McGavin ([msg 10074](https://groups.io/g/eternity2/message/10074)), una variante 470 de borde reorganizado ([msg 11403](https://groups.io/g/eternity2/message/11403)), resoluciones de cuadrante 14×14 en cuatro minutos ([msg 10802](https://groups.io/g/eternity2/message/10802)) y peldaños altos de la escalera de las cinco pistas ([msg 11068](https://groups.io/g/eternity2/message/11068)). ### Bruno Gauthier Un veterano de la velocidad de la época de 2014, cuyo solucionador en Forth corría a 80–90 millones de nodos por segundo ([msg 9265](https://groups.io/g/eternity2/message/9265)), ostentó el récord más estricto de los anales durante más de tres años: 460/480 con las cinco piezas de pista en sus posiciones oficiales, desde 2023 ([msg 11074](https://groups.io/g/eternity2/message/11074)) hasta el 464 de Benjamin Riotte en julio de 2026. ### Benjamin Riotte Poseedor del récord estricto de las cinco pistas. En julio de 2026 llevó el mejor tablero que respeta los cinco emplazamientos de pistas desde el 460 de larga data de Gauthier hasta **464/480** (16 aristas rotas), con su propio DFS Blackwood modificado ([groups.io](https://groups.io/g/eternity2/message/11919)). Igor Pejic alcanzó el mismo rango 463–464 de forma independiente en el mismo hilo. Fue el primer movimiento en la línea estrictamente canónica en más de tres años. ### [Marijn Heule](/es/research/people/marijn-heule/) El punto de contacto del mundo SAT. En el hilo SAT de largo recorrido, un colaborador de Marijn Heule informó de que el equipo de Heule había reimplementado y mejorado la codificación tras los resultados de benchmark SAT de 2008 ([msg 10969](https://groups.io/g/eternity2/message/10969)), el estado del arte del flanco de los métodos exactos, que aún debatía codificaciones CNF de 4 GB el último día de los archivos ([msg 11822](https://groups.io/g/eternity2/message/11822)). ### [Raphaël Anjou](/es/research/people/raphael-anjou/) Mantiene este wiki y dirige los experimentos catalogados en [el laboratorio](/es/research/lab/); sus informes se reúnen en su [página de contribuidor](/es/research/people/raphael-anjou/), un investigador más entre los demás. ### [William Millilaw](/es/research/people/william-millilaw/) Llevó a cabo una densa campaña de solucionador de dos semanas en 2026, registrada en su mayor parte como refutaciones de métodos que no descifran el puzzle. Dos de sus resultados afinan el techo: una prueba de congelación por réplica y una prueba de residuo SAT en halo que muestra que los tableros récord son óptimos locales estrictos. Reprodujimos la segunda sobre los tableros públicos, y aterriza en el [muro de rigidez](/es/research/why/rigidity-wall/) junto a las pruebas de programación entera ([reproducción](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/rigidity-sat-halo)). ### onesmallstep Fundó el servidor de Discord de la comunidad en noviembre de 2021 y lo mantuvo con vida durante los años tranquilos (reportado en el Discord de la comunidad, noviembre de 2021; sin enlace a mensaje público). Solucionador dedicado por derecho propio (mejor puntuación autodeclarada en torno a 466–467), es también la razón por la que el wiki en su día arrastró por error un «470 de 2025»: un *relevo* de récord malinterpretado como una *reivindicación* de récord, corregido aquí a partir del propio archivo de Discord. ### Reinout Annaert El cazador metódico de la era Discord: una mejor puntuación autodeclarada de 469, la subcultura de las series lineales (parciales consecutivos de 229 y 230 piezas) y el hombre que zanjó de dónde vienen los emplazamientos de las pistas: «They directly come from Tomy's Hint Puzzles» (reportado en el Discord de la comunidad, diciembre de 2024; sin enlace a mensaje público). En la lista de correo confirma que conserva figuras de soluciones que puntúan por encima de 467/480 ([msg 11549](https://groups.io/g/eternity2/message/11549)). Sus sugerencias también moldearon la hoja de ruta del área de juego de este sitio. ## Y muchos más Ninguna galería de este tamaño está completa. Entre los muchos que aquí tienen su lugar: Alan O'Donnell, que tuvo el primer solucionador funcional pocas semanas después del anuncio ([msg 64](https://groups.io/g/eternity2/message/64)); Max, el compañero de entrenamiento de Verhaard en la carrera hacia el 467, cuyo propio mejor fue 465 ([msg 6348](https://groups.io/g/eternity2/message/6348)); istarinz, que superó los 558 millones de emplazamientos por segundo en 2008 y se convirtió en la autoridad del grupo en verificación por búsqueda exhaustiva ([msg 6212](https://groups.io/g/eternity2/message/6212)); antminder, cuyo híbrido de asignación-reparación promediaba un 462 al día en 2008 ([msg 5589](https://groups.io/g/eternity2/message/5589)); Pierre Schaus, cuyo artículo de programación por restricciones aportó ese operador de reparación ([msg 5601](https://groups.io/g/eternity2/message/5601)); capiman26061973, fundador de la escalera de las cinco pistas ([msg 11037](https://groups.io/g/eternity2/message/11037)) y del programa de minería de combinaciones inválidas ([msg 7768](https://groups.io/g/eternity2/message/7768)); David Barr, autor de solucionadores GPU y de navegador de código abierto a lo largo de una década ([msg 9367](https://groups.io/g/eternity2/message/9367), [msg 11121](https://groups.io/g/eternity2/message/11121)); Henk van der Griendt, que dio con el anuncio del premio que todos los demás habían pasado por alto ([msg 6337](https://groups.io/g/eternity2/message/6337)); y juraj.pivovarov, la conciencia del prototipado rápido de la comunidad ([msg 9411](https://groups.io/g/eternity2/message/9411)). ## Correcciones bienvenidas Esta página siempre estará incompleta, y puede que esté equivocada en algunos puntos: un resultado mal atribuido, un nombre que falta, una grafía preferida. Si alguno de ellos te concierne, a ti o a tu trabajo, dilo en la [lista de correo](https://groups.io/g/eternity2) o a través de la [página de contribución](/es/research/contribute/): las correcciones llegan con las mismas reglas de fuentes que todo lo demás aquí, y el crédito es el objeto mismo de esta página. ## Relacionado - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. - [La cacería, una historia, parte II: 2009-2026](https://eternity2.dev/es/research/community/hunt-part-2/) — Diecisiete años después del premio: el concurso muere con su solución encerrada en una caja fuerte, 467 se mantiene durante una década, el archivo sobrevive al cierre de Yahoo por cuestión de días, y luego un desconocido venido de Reddit reescribe el libro de récords. Cada suceso está vinculado a su mensaje original. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Récords y solucionadores > Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/records/ - Actualizado: 2026-07-22 - Fuente: Archivo de la lista de correo eternity2 (groups.io): los anuncios de récords; se requiere cuenta gratuita para leer — https://groups.io/g/eternity2 - Fuente: Wikipedia: el puzzle Eternity II (el premio de 2 M$, la fecha límite de 2010 y el 467 de Verhaard) — https://en.wikipedia.org/wiki/Eternity_II_puzzle - Fuente: El relato del propio Louis Verhaard sobre su solucionador de 467 — https://www.shortestpath.se/eii/eii_details.html - Fuente: e2.bucas.name (Jef Bucas): el visor de tableros de la comunidad; cada tablero enlazado puede volver a puntuarse allí — https://e2.bucas.name --- Esta página sigue la puntuación: quién ostentaba el mejor tablero en cada momento, y cómo lo consiguió. Para el relato en torno a las cifras, los puntos de inflexión que hicieron avanzar el puzzle, consulta la [historia de un vistazo](/es/research/history/); los métodos más potentes viven en la lista de correo y en Discord, no en las revistas científicas. > **[Interactive: RecordsView]** Rendered on the canonical page (link above); not shown in this markdown export. ## Linaje del cuaderno: cómo se alcanzaron las cifras propias del proyecto Esta sección trata del cuaderno del proyecto, no de la escalera de récords de la comunidad. Nada de lo que sigue es un récord comunitario: cada marca de las tablas de arriba (470 en el régimen de «solo pieza de partida», 464 con las cinco pistas) queda por encima de cada fila de abajo. Estas filas existen para que las cifras propias del proyecto puedan rastrearse, cada una con su convención de puntuación explícita. Los métodos están documentados en [el laboratorio](/es/research/lab/). | Fecha | Tablero | Puntuación | Convención de puntuación | Cómo | | --- | --- | --- | --- | --- | | 2026-07-13 | Tablero del productor, en bruto | 457/480 | Las cinco pistas en sus casillas oficiales; aristas coincidentes sobre 480 | Un productor de búsqueda en haz con un orden de relleno en peine; este es el tablero en bruto, antes de cualquier reparación. | | 2026-07-13 | El mismo tablero, tras la reparación | 461/480 | Las cinco pistas en sus casillas oficiales; aristas coincidentes sobre 480 | Una pasada de destrucción y reparación elevó el 457 en bruto a 459, luego 460 y luego 461. El propio bucle se estudia en [el estudio de reparación](/es/research/lab/experiments/raphael-anjou/repair-study/). | | 2026-07 | PALIMPSEST | 463/480 | Solo la pieza de partida; aristas coincidentes sobre 480 | Un prior de colocación extraído del corpus de tableros de la comunidad, más destrucción y reparación dirigidas. Descrito en [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/). | Las dos convenciones no se comparan entre sí: una puntuación de «solo pieza de partida» y una de cinco pistas apuntan a objetivos distintos, y por eso cada fila nombra la suya. Bajo la convención de cinco pistas, lo mejor del proyecto es 461 frente al 464 de la comunidad; en el régimen de «solo pieza de partida», lo mejor es 463 frente al 470 de la comunidad. ## Relacionado - [Historia: los grandes hitos](https://eternity2.dev/es/research/history/) — La historia de Eternity II de un vistazo, desde la lista de correo fundada en 2000 hasta el récord de 470 que aún se mantiene. Una cronología recorrible de los momentos decisivos, cada uno con enlace a la historia completa en dos partes y al mensaje donde ocurrió. - [Experimentos](https://eternity2.dev/es/research/lab/experiments/) — Los experimentos de búsqueda con nombre del laboratorio, una sección por investigador. Cada uno es un run real contra Eternity II con su idea, su mejor tablero y las preguntas que dejó abiertas. El cuaderno de Raphaël Anjou está aquí completo; el cuaderno queda abierto a cualquier otra persona. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. --- # Números de referencia > Recuentos exactos de cuántas maneras válidas hay de rellenar un bloque pequeño en una posición dada del tablero oficial de Eternity II, bajo reglas cada vez más restrictivas: números fiables para contrastar el código de emparejamiento de aristas y de restricciones de tu solucionador. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/reference/ - Actualizado: 2026-07-11 - Temas: backtracking - Reproducir: `just research-subgrid` - Fuente: Recuentos de subcuadrículas publicados por sylvogel (mensaje groups.io 11879) — https://groups.io/g/eternity2/message/11879 - Fuente: Generador Rust reproducible de este proyecto + resultados versionados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/subgrid-placement-counts --- ¿De cuántas maneras distintas, respetando el emparejamiento de aristas, se puede rellenar un bloque pequeño del tablero oficial? Estos recuentos son la verdad de referencia contra la que probar un solucionador: si tu código de emparejamiento de aristas y de restricciones discrepa con los números de abajo en una esquina 2×2, el error está en tu código, no en la tabla. Las cifras en redonda están calculadas a partir del juego de piezas oficial por el generador Rust reproducible de este proyecto (enlazado más abajo), de modo que cualquiera puede volver a calcularlas. El puñado de cifras en cursiva son recuentos demasiado grandes para enumerarlos exactamente en segundos (de decenas de miles de millones a decenas de billones de rellenos); esos son **los valores publicados por sylvogel**, reproducidos aquí por exhaustividad y acreditados en las fuentes. Todo lo demás se recalcula aquí desde cero. > **[Interactive: ReferenceTableView]** Rendered on the canonical page (link above); not shown in this markdown export. ## Relacionado - [Hechos y cifras establecidos](https://eternity2.dev/es/research/build/known-facts/) — Las cifras que todo investigador de Eternity II acaba redemostrando, reunidas en un solo lugar con su procedencia: la definición del puzzle, la colocación de las pistas, las convenciones de puntuación, la tabla de récords, el tamaño del espacio de búsqueda y los recuentos estructurales. - [Los benchmarks de la comunidad](https://eternity2.dev/es/research/build/benchmarks/) — Cómo una comunidad a la que se le prohibió compartir las piezas construyó aun así una cultura de pruebas compartida: protocolos de verificación por conteos derivados, las suites Txibilis y para principiantes, duelos al número de nodos, enumeraciones completas y el único benchmark que sigue abierto hoy. --- # Por qué es difícil > Eternity II no es difícil por accidente. Fue diseñado para resistir el ingenio, y los muros estructurales medibles (rigidez, entropía, patrones prohibidos) explican por qué ninguna búsqueda, por ingeniosa que sea, ha llegado al final. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/ - Actualizado: 2026-07-21 --- Eternity II no es difícil por accidente. Esta es la ciencia de por qué ninguna búsqueda, por ingeniosa que sea, ha llegado al final: el diseño del puzzle y los muros estructurales que aparecen en cuanto empiezas a medir. > **[Interactive: ScoringPrimer]** Rendered on the canonical page (link above); not shown in this markdown export. ## Por dónde empezar - **[Qué muro detiene a qué método](/es/research/why/walls-and-methods/)** alinea cada método frente al muro que ataca y el score donde ese muro lo detuvo. El mapa de una página, y el lugar para orientarse primero. - **[El muro de rigidez](/es/research/why/rigidity-wall/)** es el muro contra el que termina casi todo método: los récords son islas localmente congeladas, sin gradiente hacia un tablero mejor. - **[El pico de dificultad](/es/research/why/phase-transition/)** explica por qué los recuentos de piezas y colores caen justo donde la búsqueda es peor. - **[Sin movimientos forzados](/es/research/why/no-forced-moves/)** es el muro que se siente primero: cada celda interior conserva decenas de piezas legales, así que la búsqueda nunca se estrecha por sí sola. Si llegaste preguntándote si el tablero es [NP-completo, y cómo codificarlo](/es/research/why/how-hard-is-this-instance/), empieza por ahí: el emparejamiento de aristas es NP-completo como familia, pero una instancia 16×16 fija es una constante, no un problema. ## Diseñado para resistir el ingenio Eternity I cayó en 2000 porque Alex Selby y Oliver Riordan descubrieron que el puzzle tenía muchísimas más soluciones de las que su diseñador creía, y dirigieron su búsqueda hacia las regiones más "densas en soluciones". Para Eternity II, la editorial contrató a los ganadores: Selby y Riordan ayudaron a diseñar y someter a pruebas de resistencia el nuevo puzzle para que ningún atajo estadístico de ese tipo sobreviviera. Las huellas visibles de esa validación: una única solución diseñada e integrada en recuentos de colores equilibrados, ninguna pieza con simetría de rotación, ninguna pieza duplicada, y parámetros de número de piezas y número de colores situados en el pico empírico de dificultad (confirmado más tarde por Ansótegui et al.). El puzzle no es difícil por accidente. Fue ajustado para serlo. Algo que parece una decisión de diseño pero no lo es: el borde utiliza su propio conjunto de cinco motivos, separado del interior. Esa separación es automática, no deliberada. Como el reborde exterior es gris uniforme, cada pieza de borde tiene su arista gris fijada hacia afuera, de modo que sus aristas de color solo se encuentran con otras aristas de borde (lateralmente) o con el interior (hacia dentro), y los dos conjuntos nunca se tocan. Los motivos de borde podrían ser cualesquiera cinco colores, incluso un reetiquetado de los del interior, sin cambiar en nada el puzzle. Parecen "raros" solo porque hay menos aristas de borde que colorear, no porque los diseñadores confinaran un recurso escaso al marco para frustrar a los solucionadores. (Gracias a Vasily V. en la lista de groups.io por la corrección.) ## Los muros estructurales Más allá del relato de diseño, el puzzle posee una estructura medible que explica la brecha entre el mejor tablero conocido (470/480) y una solución completa, publicada abajo con el cálculo exacto que sustenta cada muro. Una forma útil de sostener todo esto junto es leer [un tablero completo como una palabra de código](/es/research/why/permutation-code-wall/): sus 480 junturas interiores son comprobaciones de tipo paridad, el score es 480 menos el número que falla, y la regla «cada pieza una sola vez» se vuelve un código de permutación superpuesto a las comprobaciones de color. La lente renombra el score en vez de añadir un número, pero coloca las dos restricciones duras en un mismo marco, y el recuento que la sustenta se reproduce exactamente. En la misma clave algebraica, los [invariantes de flujo](/es/research/why/flux-invariants/) ponderan cada color de arista y leen cada pieza como un vector con signo: las costuras interiores se cancelan, el tablero entero suma cero, y un cuarto de vuelta multiplica el vector por la unidad imaginaria, de modo que la ley es de rango complejo pleno 22 en el conjunto oficial y cada uno de sus bits es invisible al conteo de colores. Algunos de estos muros son el mismo enunciado visto a escalas distintas. El [robo de pieza](/es/research/why/piece-theft/), donde una pieza escasa gastada pronto mata de hambre a una celda filas después, es la cara a escala de celda de la [ley de área](/es/research/why/entropy-area-law/): ambos son la regla «cada pieza una sola vez», la regla discreta que carga con la dificultad, una sentida como una sola celda muerta y otra medida como el colapso de los tableros realmente distintos más allá de un parche de unos cientos de celdas. A la escala de un relleno entero, el mismo acoplamiento produce [una región difícil que no se puede diseñar de otro modo](/es/research/why/irreducible-hard-region/): rellena el tablero en cualquier orden fijo y la dificultad se junta en la banda que terminas al final, de modo que una descomposición reubica la dureza en vez de eliminarla. Los [patrones prohibidos](/es/research/why/forbidden-patterns/) quedan al lado, en otro eje: cuentan exactamente con qué rapidez los parches pequeños agotan sus disposiciones legales bajo el mero emparejamiento de colores, mientras que el colapso de la ley de área es la capa aparte «una sola vez» superpuesta a parches válidos en color. Ambos son conteos exactos de escasez coherentes, no el mismo eje, y las páginas los mantienen separados a propósito. Si se sostienen los vínculos causales más profundos, si la rigidez es en sí una consecuencia del colapso de distinción con el que comparte una escala de en torno al centenar de celdas, y si la geometría de los sigma-ciclos es lo que limita la búsqueda constructiva, son preguntas abiertas del tablero de [problemas abiertos](/es/research/open-problems/), no afirmaciones hechas aquí. ## Páginas de esta sección - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [Un conjunto de piezas extremo en cada eje medido](https://eternity2.dev/es/research/why/why-e2-is-hard/) — Mida las 256 piezas oficiales sin ningún solucionador a la vista y cada puerta estructural está cerrada: ninguna pieza simétrica por rotación, 5 parejas gemelas entre 32 640 emparejamientos, un tope de 307 sobre 480 si nada gira, presupuestos de color que se emparejan a exactamente 480 sin holgura, y una paleta 17+5 situada en el punto de una-solución-esperada. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [¿Es NP-completa esta instancia y cómo la codifico?](https://eternity2.dev/es/research/why/how-hard-is-this-instance/) — El emparejamiento de aristas es NP-completo como familia, pero eso no dice nada de un tablero 16×16 fijo: una instancia aislada es una constante, no un problema. Lo que sí es cierto es la dureza en el peor caso de la familia y la dureza empírica de esta instancia, y cómo escribir el puzzle para un solucionador SAT, de cobertura exacta o de PLE, con pequeños esbozos detallados. Una medición con tableros plantados pone cifras a la elección de la formulación: un acantilado de resolubilidad que un paradigma de búsqueda golpea y otro cruza, y que se mueve con el número de colores. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - [Por qué 479 es imposible](https://eternity2.dev/es/research/why/parity-defect-floor/) — Un argumento de conteo sobre el juego de piezas oficial prohíbe una puntuación de exactamente 479/480: las semiaristas de cada color vienen en cantidades pares, y una sola unión rota dejaría dos cuentas impares. El suelo bajo lo perfecto es 478, y a lo sumo 76 cuasi-soluciones a un movimiento pueden rodear una solución. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [El muro de 470: una frontera de fase, no un límite de ingeniería](https://eternity2.dev/es/research/why/the-470-wall/) — La meseta comunitaria en los 460 altos se lee como una frontera de fase entrópica de la instancia, no como un límite de la ingeniería de solvers: el cálculo exacto sobre el juego oficial da una densidad de restricciones cercana a 0,0094, un paisaje recocido que se derrumba por encima de 470 y solo cruza 1 en 480, y un número esperado de 10 a 20 soluciones perfectas casi ortogonales entre sí. Los números del lado de la instancia son exactos; el cuadro de la brecha de solapamiento en 16x16 es una conjetura declarada. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [Pureza del anillo: el borde es un subpuzle cerrado, sin holgura](https://eternity2.dev/es/research/why/ring-purity/) — Cinco de los 22 colores nunca tocan las 196 piezas interiores. La lista de piezas obliga a toda solución válida a gastar las 120 semiaristas de marco en el anillo del borde: un subpuzle autónomo con holgura exactamente nula (120 = 120), un circuito euleriano sobre cinco vértices, acoplado al interior solo por 56 aristas orientadas hacia dentro. - [Invariantes de flujo: una ley de rotación que el conjunto oficial cumple exactamente](https://eternity2.dev/es/research/why/flux-invariants/) — Pondere cada color de arista y lea cada pieza como un vector con signo, este menos oeste en un eje, sur menos norte en el otro. Sumado sobre cualquier región, las costuras interiores se cancelan y solo sobrevive el borde, de modo que el tablero totaliza cero. Un cuarto de vuelta gira el vector un ángulo recto, lo que vuelve la ley álgebra en los enteros de Gauss. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [El puzzle no tiene función de altura](https://eternity2.dev/es/research/why/no-height-function/) — Toma el truco del físico que vuelve solubles los defectos cristalinos e intenta convertir un empalme mal casado en una dislocación con una carga conservada. Fracasa de tres maneras: una altura escalar es ciega a las roturas, el conjunto de roturas forma cadenas abiertas y no bucles cerrados, y la corriente orientada por color no se conserva. Solo sobrevive un bit de paridad sin signo. - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [La región difícil que no se puede diseñar de otro modo](https://eternity2.dev/es/research/why/irreducible-hard-region/) — Rellena un tablero en cualquier orden fijo y los tres cuartos de arriba entran con soltura, mientras la dificultad se amontona en la banda que terminas al final. En cuarenta tableros generados, todo lo que sobra cae en la mitad inferior cada vez; baraja el orden de relleno y se dispersa, así que la región difícil la fabrica el barrido, no está escondida en el tablero. - [La inmediatez de las restricciones: todo orden de llenado paga los mismos 480](https://eternity2.dev/es/research/why/constraint-immediacy/) — Sume, para cualquier orden de visita del tablero 16x16, el número de vecinos ya colocados que cada celda enfrenta en el instante en que se rellena: el total es exactamente 480, sea cual sea el orden. Un orden de llenado no puede añadir restricción; solo elige cuándo se aplica cada una. Lo que separa a los órdenes es la inmediatez, la distancia entre una decisión y su refutación, y solo los extremos de esa clasificación pertenecen al puzzle y no al motor. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [El tablero como palabra de código](https://eternity2.dev/es/research/why/permutation-code-wall/) — Lee un tablero completo como una palabra de código cuyas 480 junturas interiores son comprobaciones de tipo paridad, y el score de aristas emparejadas pasa a ser 480 menos el número de comprobaciones fallidas. Es una lente limpia que descansa sobre una sola identidad portante, y conviene ser preciso sobre lo que la vista de códigos correctores aporta y lo que solo renombra. - [Dónde colocas las pistas importa más que cuántas](https://eternity2.dev/es/research/why/hint-geometry/) — En un puzzle de 16×16 construido como Eternity II, dieciocho pistas repartidas por el tablero lo resuelven en minutos, mientras que amontonarlas en filas contiguas necesita un centenar solo para bajar la búsqueda a decenas de miles de millones de colocaciones. La posición, no la cantidad, es la palanca, y apunta directamente a la fase final. - [Enlazar las pistas pronto no ayuda, perjudica](https://eternity2.dev/es/research/why/clue-corridors/) — Unir pares de pistas con pasillos de piezas tendidos pronto parece añadir restricciones. El recuento dice lo contrario: un pasillo de ancho 1 entre las dos pistas más cercanas admite unos dos mil billones de rellenos distintos, así que no excluye casi nada mientras gasta piezas que la fase final va a necesitar. En un A/B controlado, cada brazo con pasillos perdió frente a su propio control en todos los tamaños de tablero. - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - [El marco no es la cuenca: un borde distinto no abre un tablero más alto](https://eternity2.dev/es/research/why/frame-is-not-the-basin/) — El anillo del borde es la parte más restringida del rompecabezas, así que un borde fuerte distinto debería fijar un interior alto distinto. No lo hace. Muchos bordes completamente emparejados y distintos, cada uno completado por un mismo productor de interior fijo, dan cimas casi máximamente distintas entre sí pero uniformemente bajas, ninguna cerca de la franja récord. El borde diversifica el tablero sin predecir su techo. - [El equilibrio del borde](https://eternity2.dev/es/research/why/border-balance/) — Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. --- # El equilibrio del borde > Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/border-balance/ - Actualizado: 2026-07-22 - Temas: search-space, structure - Reproducir: `just research-border-mismatch-share` - Fuente: Equilibrio de los tipos de arista del borde observado en el verano de lanzamiento (angwin_uk, agosto de 2007) — https://groups.io/g/eternity2/message/2073 - Fuente: La condición de borde más fuerte de mjqxxxx: recuentos pares, repartidos a partes iguales entre aristas izquierda y derecha (agosto de 2007) — https://groups.io/g/eternity2/message/2098 - Fuente: Observación de Brendan Owen sobre el emparejamiento de recuentos de aristas en los juegos plantados (junio de 2007) — https://groups.io/g/eternity2/message/422 - Fuente: Enunciado de Hopfer (2022) de la condición de igualdad de multiconjuntos (groups.io msg 10754) — https://groups.io/g/eternity2/message/10754 - Fuente: Reformulación nítida de Hopfer: la misma mezcla de imágenes internas en las 56 piezas de borde (msg 10757) — https://groups.io/g/eternity2/message/10757 --- Fíjate solo en la costura entre el anillo exterior de piezas de borde y el primer anillo de piezas interiores. Cada arista que cruza esa costura muestra un color, contado una vez desde el lado del borde y una vez desde el lado del interior. En cualquier solución completa los dos recuentos son idénticos: el multiconjunto de colores que el borde presenta hacia dentro iguala exactamente al multiconjunto que el interior presenta hacia fuera. Llamemos **déficit** a ese desequilibrio, $\Delta$: la mitad del desajuste total entre los dos recuentos. Un tablero terminado y correcto tiene $\Delta = 0$. Las cuatro soluciones completas conocidas, sobre cuatro juegos de piezas distintos, la satisfacen todas exactamente. Así, $\Delta > 0$ es un certificado de que un tablero nunca podrá completarse: una condición necesaria, real y de bajo coste. ## La ley, en una línea A través de la costura borde↔interior, los colores que el borde muestra hacia dentro y los colores que el interior muestra hacia fuera forman el mismo multiconjunto. Escribiendo $A[c]$ y $B[c]$ para los dos recuentos por color: $$ \Delta \;=\; \tfrac{1}{2} \sum_{c} \bigl|\, A[c] - B[c] \,\bigr| \;=\; 0 . $$ ## Verlo en un tablero real Un tablero 8×8 resuelto parte en equilibrio ($\Delta = 0$). Levanta una pieza de borde y observa qué colores se desequilibran, y cómo trepa el déficit. Prueba luego el botón de intercambio, y observa la trampa. > **[Figure]** Interactivo: el déficit de equilibrio del borde NS-1 — interactive: Ns1Lab. Rendered on the canonical page (link above); not shown in this markdown export. ## La trampa, y por qué importa Intercambiar dos piezas de borde deja $\Delta$ en 0. El intercambio mueve colores a lo largo de la costura sin modificar ninguno de los dos recuentos, de modo que el invariante es ciego a ello. Peor aún, en una casi-solución la mayor parte de los errores restantes no están en la costura del borde en absoluto. Se asientan de interior a interior, allí donde NS-1 nunca mira. En los nueve tableros de la clase 469 del corpus, de las 99 aristas no emparejadas que quedan, el 86,9 % se asienta de interior a interior y ni una sola es de borde a borde; solo el 13,1 % restante cae en la costura que inspecciona NS-1. El invariante es ciego a la gran mayoría de lo que sigue mal. Ahí está toda la textura de Eternity II en miniatura. Una comprobación por limpia que sea nunca dice más que "definitivamente roto", jamás "definitivamente correcto". El puzzle resiste todo certificado barato de progreso. ## ¿Es útil, entonces? Sí, como podador de fin de búsqueda. Una vez que el solucionador ha cerrado el anillo de borde, imponer $\Delta = 0$ rechaza una porción útil de los callejones sin salida profundos al precio de una sola pasada sobre las 56 aristas de la costura (cuán grande es esa porción está en cola para medición exacta, todavía no un banco fijado). Es necesario-pero-laxo: descarta los estados malos a bajo coste y deja intacta la parte difícil, el interior. ## Relacionado - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. --- # Enlazar las pistas pronto no ayuda, perjudica > Unir pares de pistas con pasillos de piezas tendidos pronto parece añadir restricciones. El recuento dice lo contrario: un pasillo de ancho 1 entre las dos pistas más cercanas admite unos dos mil billones de rellenos distintos, así que no excluye casi nada mientras gasta piezas que la fase final va a necesitar. En un A/B controlado, cada brazo con pasillos perdió frente a su propio control en todos los tamaños de tablero. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/clue-corridors/ - Actualizado: 2026-07-22 - Temas: structure, search-space - Reproducir: `cd research/topics/clue-corridors/compute && cargo run --release --bin corridors > ../results/corridor_counts.json` - Fuente: Colocaciones oficiales de las pistas (celdas 34, 45, 135, 210, 221; datos de la instancia en e2.bucas.name) — https://e2.bucas.name/ --- Las cinco pistas son las únicas celdas del puzzle oficial cuyo contenido se conoce con certeza. Mire el tablero un minuto y una idea se presenta sola: conectarlas. Tender una cadena corta de piezas de pista a pista, convertir cada cadena en una espina fija, y esperar que esas espinas restrinjan todo lo que viene después. La idea me gustó lo bastante como para medirla, y la medición es un negativo limpio por partida doble. Un recuento exacto muestra que un pasillo de pista a pista admite unos dos mil billones de rellenos distintos, así que comprometerse con uno no restringe casi nada; y en un A/B controlado, cada brazo que tendía sus pasillos pronto terminó peor que el mismo solucionador sin ellos, en todos los tamaños de tablero probados. ## Cinco islas, y los puentes entre ellas Las pistas ocupan las celdas 34, 45, 135, 210 y 221, es decir (x, y) = (2, 2), (13, 2), (7, 8), (2, 13) y (13, 13): cuatro a dos celdas de las esquinas, una justo a la izquierda del centro. Sus distancias de Manhattan por pares van de 10 a 22. Ningún par de pistas está cerca de ser adyacente: el puente más corto entre dos de ellas es una cadena de diez colocaciones. Lo que vale una colocación de cadena depende de cuántos lados tenga que casar. Con $n = 196$ piezas interiores y $C = 22$ colores interiores declarados, una celda que debe casar con $k$ vecinos ya colocados tiene en esperanza $b_k = 4n / C^k$ candidatos legales: $b_1 \approx 35{,}6$, $b_2 \approx 1{,}62$, $b_3 \approx 0{,}074$. Una colocación solo poda, en esperanza, cuando $b_k$ cae por debajo de 1, lo que exige $k \ge 3$ lados casados. Un pasillo de ancho 1 se construye por entero con colocaciones a $k = 1$: cada pieza nueva solo toca a la anterior y hereda unos 36 candidatos legales en cada paso. ## Lo que vale un pasillo: dos mil billones de rellenos La tabla de ramificación es un modelo uniforme, así que el verificador también cuenta de forma exacta sobre el juego de piezas real. El juego real es, si acaso, más permisivo: el número de pares (pieza, rotación) que presentan un color interior dado en un lado dado promedia 46,1 (de 43 a 49), frente al 35,6 del modelo. Construya la matriz de transferencia $T[a][b]$ que cuenta las piezas interiores que muestran el color $a$ en un lado y el color $b$ en el lado opuesto, elévela a la longitud del pasillo, y sus potencias dan recuentos exactos de caminos. Para el pasillo de longitud 10 entre el par de pistas más cercano, con los dos colores de los extremos fijados por las pistas, ese recuento es $2{,}59\times10^{15}$ caminos (la media sobre pares de colores). Un camino puede reutilizar una pieza; aplicar la corrección de distinción de campo medio $\prod_{j=0}^{9}(1 - j/196) = 0{,}792$ deja $2{,}05\times10^{15}$ rellenos con piezas todas distintas. Mi primera pasada por este recuento, con un modelo de piezas algo más estricto, daba $1{,}9\times10^{15}$; el verificador archivado se asienta en $2{,}05\times10^{15}$, y la conclusión no se mueve entre ambos. Un compromiso satisfacible de dos mil billones de maneras no es una restricción en ningún sentido útil. Tenderlo excluye una fracción ínfima del espacio de búsqueda, mientras retira diez piezas del fondo común a $k = 1$, justo donde la aritmética dice que la búsqueda no recupera nada. Conecte dos o tres pares de pistas y la factura sube a entre 10 y 20 piezas gastadas antes de que se haya rellenado una sola celda realmente restringida. ## El A/B: todos los brazos con pasillo perdieron El recuento dice que el pasillo no aporta nada; hace falta un experimento para mostrar que cuesta. La tanda original del estudio comparó tres brazos que no difieren más que en la fase de pasillos: un control (pistas fijadas, y después un relleno voraz de contacto máximo con reinicios), un brazo de pasillo de ancho 1, y un brazo de cinta de ancho 2, cada uno tendiendo sus rutas de pista a pista antes del relleno idéntico. Corrió sobre instancias escaladas con geometría de pistas fiel, en tamaños N = 8 a 16, con 12 semillas emparejadas por celda y 20 segundos por ejecución en un solo núcleo. | Tablero | Media del control | Pasillo ancho 1 | Cinta ancho 2 | |---:|---:|---:|---:| | 8×8 | 92,50 | -4,67 | -3,00 | | 10×10 | 144,17 | -9,58 | -5,50 | | 12×12 | 209,83 | -13,58 | -6,75 | | 14×14 | 285,67 | -12,00 | -7,83 | | 16×16 | 377,17 | -17,67 | -8,08 | Las puntuaciones son aristas casadas, y cada delta enfrenta un brazo a su propio control sobre semillas emparejadas. Cada brazo con pasillo perdió frente a su control en todos los tamaños, con Wilcoxon emparejado $|z| \ge 2{,}80$. El daño crece con los tableros, y con ellos los pasillos: una pérdida media de 4,7 aristas en N = 8 se convierte en 17,7 en N = 16, donde las dos distribuciones de puntuación se separan del todo (la peor semilla del control marcó 373; la mejor del brazo de pasillo, 365). Y ensanchar el pasillo a una cinta de 2 celdas, lo que permite que su segunda fila llegue con 2 contactos en vez de 1, reduce el daño aproximadamente a la mitad en todos los tamaños. Esa es exactamente la dependencia del ancho que el recuento predice, y es lo que ata el mecanismo a la medición. ## Qué descarta, y qué deja abierto El negativo es preciso: tender pronto pasillos de pista a pista de ancho 1 (o 2) perjudica, y más pasillo perjudica más. La misma aritmética que los condena señala también dónde la restricción es real: las celdas colocadas con 2 o más contactos, ya que solo $k \ge 3$ poda de verdad y $k = 2$ se acerca. Hacer crecer regiones compactas ancladas en las pistas, donde la mayoría de las celdas llegan con varios contactos, es un movimiento distinto que este experimento no toca. El resultado encaja además con lo que los estudios de pistas encuentran una y otra vez. En un puzzle 16×16 emparentado, [la posición de las pistas importa más que su número](/es/research/why/hint-geometry/) porque el valor de una pista está en alcanzar la parte del tablero donde la búsqueda sufre; y en [el estudio de pistas del laboratorio](/es/research/lab/experiments/raphael-anjou/hint-study/), las cinco pistas oficiales por sí solas nunca ayudaron a un backtracker cronológico en los tableros probados. Un pasillo es la manera extrema de malgastar ese regalo: cobra las cinco celdas fijas de inmediato, en la región más barata de la búsqueda, y lo paga con el fondo de piezas. Como los negativos del [barrido de teoremas](/es/research/why/theorem-sweep/), este viene con su precio: para que enlazar las pistas compense, sus celdas tendrían que llegar con tres contactos, y un camino de ancho 1 no lo logra nunca. > **Note** > > El lado del recuento se reproduce de forma exacta: el verificador del directorio del tema recalcula la geometría de las pistas, la tabla de ramificación, la oferta de colores y los recuentos de pasillos por matriz de transferencia desde el juego de piezas oficial en alrededor de un segundo, y su salida está archivada en results/corridor_counts.json. La tabla A/B es la medición original del estudio: la repetición empaquetada de los tres brazos está especificada en el plan de reproducción del tema y sus tablas aún no están archivadas, así que lea esos deltas como el registro de una tanda, con la confirmación de una tanda fresca todavía pendiente. ## Relacionado - [Dónde colocas las pistas importa más que cuántas](https://eternity2.dev/es/research/why/hint-geometry/) — En un puzzle de 16×16 construido como Eternity II, dieciocho pistas repartidas por el tablero lo resuelven en minutos, mientras que amontonarlas en filas contiguas necesita un centenar solo para bajar la búsqueda a decenas de miles de millones de colocaciones. La posición, no la cantidad, es la palanca, y apunta directamente a la fase final. - [El estudio de las pistas](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/hint-study/) — Darle a un backtracker cinco piezas correctas gratis, en la geometría misma de las pistas del puzzle. Resulta que no ayuda, y según el orden de relleno puede dañar gravemente, porque una pieza fijada es una restricción dura que un orden de relleno fijo debe satisfacer al llegar. Una familia de órdenes de relleno, ejecutada sobre los mismos tableros con pistas, un solo núcleo, medida contra la ausencia total de pistas. - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. --- # La teoría compleja: contar el árbol de búsqueda antes de recorrerlo > La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/complex-theory/ - Actualizado: 2026-07-02 - Temas: structure, backtracking - Fuente: La forma cerrada del pico de profundidad de Brendan Owen, 256·(1−1/e) (groups.io msg 8125, 2010) — https://groups.io/g/eternity2/message/8125 - Fuente: La resolución 10×10 de Peter McGavin que valida la teoría compleja (groups.io msg 9686, 2017) — https://groups.io/g/eternity2/message/9686 - Fuente: Las estimaciones del número de soluciones de Brendan Owen (groups.io message 5209) — https://groups.io/g/eternity2/message/5209 - Fuente: La implementación de referencia y la tabla de profundidades de Peter McGavin (groups.io message 11197) — https://groups.io/g/eternity2/message/11197 - Fuente: La tabulación «Backtracker estimates» de Brendan Owen para los puzzles con pistas y E2 (groups.io Databases) — https://groups.io/g/eternity2/databases - Fuente: La validación estimado-frente-a-real de Brendan Owen, «NxM puzzles using Eternity II subset pieces» (groups.io Files, carpeta Brendan) — https://groups.io/g/eternity2/files/Brendan/NxM_actual_theory.pdf - Fuente: El estudio heurística-frente-a-número-de-nodos de Brendan Owen, «Heuristics: 20×2 rectangle» (groups.io Files, carpeta Brendan) — https://groups.io/g/eternity2/files/Brendan/heuristics.pdf - Fuente: La medición profundidad-frente-a-tiempo del backtracker de Joe, muestra de 1 mil millones de iteraciones (groups.io msg 11725, 2026) — https://groups.io/g/eternity2/message/11725 --- > **De quién es esta idea** > > La teoría compleja se debe a Brendan Owen, uno de los verificadores del puzzle; Peter McGavin la [implementó en C](https://groups.io/g/eternity2/message/11197) con aritmética de precisión arbitraria y publicó las cifras. La recogemos aquí porque un miembro de la comunidad (Dan Karlsson) señaló con razón que faltaba, y porque sustenta casi todas las buenas decisiones que se pueden tomar sobre un solucionador, ante todo la elección del orden de búsqueda. ## La idea Toma un orden de recorrido y recórrelo celda a celda. En cada celda nueva, una pieza sin usar tomada al azar encaja con sus vecinas ya colocadas con cierta probabilidad: un producto de probabilidades de coincidencia de color por arista. Multiplica eso por cuántas piezas quedan y obtienes el número esperado de formas de extender el tablero una celda más. Encadena este cálculo por las 256 celdas y tienes una estimación en forma cerrada de la anchura del árbol de búsqueda a cada profundidad y, en la última celda, de cuántas soluciones completas tiene el puzzle. Es un promedio, no un recuento exacto: supone que los 22 colores de arista se extraen de forma independiente, cosa que no ocurre (cuatro aristas están soldadas a una misma pieza rígida). Pero, calibrado contra puzzles pequeños cuyo número real se conoce, acierta con un margen de un factor de dos. Es más que suficiente para ver la forma. ## Las cifras destacadas | Pistas colocadas | Soluciones esperadas | | ------------------------------------ | -------------------- | | Una pista (solo la pieza central) | ≈ 14 702 | | Las cinco pistas oficiales | ≈ 1 | Con solo la pieza central obligatoria, el puzzle tiene del orden de quince mil soluciones; añade las otras cuatro pistas y el número esperado cae a aproximadamente $4\times10^{-8}$: de forma abrumadora, exactamente una. Esta es la razón formal por la que el puzzle de 5 pistas tiene una única solución diseñada. ## Las mismas cifras, contrastadas con la realidad Brendan tabuló la estimación no solo para E2, sino también para los cuatro *puzzles con pistas* más pequeños, y es aquí donde se gana la confianza. Los puzzles con pistas son lo bastante pequeños como para que sus árboles se hayan explorado exhaustivamente, de modo que la estimación queda justo al lado del número real. Acierta con un margen de un factor de dos, la calibración que esta página no deja de prometer. La tabla también registra el mejor orden de relleno conocido para cada puzzle, y no todos son iguales: el orden es una elección que la forma del espacio de búsqueda recompensa o penaliza, no una propiedad del puzzle. > **[Interactive: ClueEstimatesTable]** Rendered on the canonical page (link above); not shown in this markdown export. Los puzzles con pistas son cuatro puntos de datos; Brendan comprobó el modelo de forma mucho más amplia. Su estudio **«NxM puzzles using Eternity II subset pieces»** representa los nodos por solución estimados frente al número *real* para del orden de un centenar de tableros más pequeños construidos con las propias piezas de E2, y sobre un eje log-log la nube se ciñe a la diagonal a lo largo de once órdenes de magnitud, desde diez nodos hasta $10^{11}$. Ese es el fundamento real para confiar en la estimación sobre un tablero demasiado grande como para explorarlo alguna vez: ha acertado en todas partes donde *podía* comprobarse. Un estudio complementario muestra incluso que una puntuación estática facilísima (la suma de los recuentos de coincidencias de arista por celda, al cuadrado) predice el número total de nodos de un rectángulo con un $R^2$ de alrededor de 0,84, más evidencia de que el coste de la búsqueda está inscrito en la estructura del tablero antes de colocar una pieza. ## El embudo Representa la anchura esperada a cada profundidad y aparecen tres regímenes. Su forma es lo que la comunidad llama el embudo de E2. Lanza el barrido de abajo y observa el contador: sube astronómicamente, luego apenas se mueve durante un centenar de celdas a lo largo de la meseta, ese avance plano por una banda astronómicamente ancha es el muro, antes de que las últimas sesenta piezas lo hagan bajar de nuevo en embudo. > **[Figure]** interactive: ComplexFunnelAnimated. Rendered on the canonical page (link above); not shown in this markdown export. ## Pruébalo: el orden decide el embudo La misma estimación, ejecutada en vivo para distintos órdenes de recorrido. El pico de la meseta (el punto más ancho que la búsqueda debe cruzar) lo decide el orden por sí solo, antes de colocar un solo nodo. > **[Figure]** Interactivo: el embudo del espacio de búsqueda — interactive: ComplexFunnelLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Tres regímenes - **Crecimiento (profundidad 1–50).** Las soluciones se multiplican geométricamente de una a unas $10^{27}$. Cada colocación es prácticamente gratuita; todavía nada te limita. - **Meseta (profundidad 50–200).** El árbol está en su punto más ancho, unas $10^{45}$ formas de extender, mientras que el número de soluciones apenas se mueve. Aquí es donde los backtrackers pasan la mayor parte de su tiempo: una muestra empírica ([groups.io msg 11725](https://groups.io/g/eternity2/message/11725), un cálculo de 1 mil millones de iteraciones) midió el 99 % del tiempo del backtracker a profundidad $>132$ y el 70 % a profundidad $>150$, es decir, en el fondo del árbol y no al principio. - **Colapso (profundidad 200–256).** La anchura cae de $10^{45}$ de vuelta a unas $10^{4}$. Las ~60 últimas piezas están fuertemente restringidas: cada una colocada elimina órdenes de magnitud de ramas. El final de partida es localmente fácil; lo difícil es llegar a él. ## Por qué cambia tu forma de buscar Si casi todo el trabajo está en la meseta, el objetivo no es la velocidad bruta. Es cruzar la meseta hasta la entrada del embudo (en torno a la profundidad 200), tras la cual la búsqueda se encadena de forma determinista. Y como la teoría compleja puntúa un orden de recorrido antes de ejecutarlo, se pueden comparar órdenes por la altura del pico de su meseta en lugar de por ensayo y error. Esa es la versión rigurosa de una regla que este sitio enuncia por todas partes: el orden de relleno es una elección de primer orden, y el recorrido de McGavin, de la esquina inferior izquierda y de izquierda a derecha, se eligió porque la teoría compleja decía que era bueno. ## Piezas más grandes La misma idea funciona si colocas piezas de 2×2 o 3×3 en lugar de piezas sueltas: un bloque entero de celdas se compromete de golpe, con sus aristas internas ya coincidentes. El [terreno de juego de rutas de búsqueda](/playground/paths/) te permite hacerlo de verdad: elige una forma de bloque (1×1, 2×1, 2×2, 3×3, …) y estampa bloques sobre la cuadrícula para construir una ruta por bloques. Lánzala a competir y un solucionador de macropiezas dedicado compromete un subensamblaje válido entero por bloque en lugar de una pieza cada vez, de modo que la búsqueda avanza región por región. La estimación del pico de meseta que va al lado sigue puntuando el orden de celdas que implican tus bloques, prediciendo el coste antes de que ejecutes un solo nodo. ## Lo que no puede ver La teoría compleja es una estimación de primer momento, así que es ciega a una cosa: si los numerosos tableros parciales contados son genuinamente distintos. Los [resultados de entropía y ley de área](/es/research/why/entropy-area-law/) muestran que la distinción se colapsa a medida que crece el área rellenada, un efecto de segundo orden que el modelo de aristas independientes no puede captar. Así que usa la teoría compleja para elegir órdenes y leer la forma del árbol, nunca como un recuento exacto ni como una cota. ## Procedencia y validación El rastro escrito de la teoría corre a través de la lista de correo. Brendan Owen publicó el modelo terminado en abril de 2008 ([msg 5197](https://groups.io/g/eternity2/message/5197), [5209](https://groups.io/g/eternity2/message/5209)), y más tarde demostró una elegante forma cerrada: para un orden de recorrido, el pico del número de nodos se sitúa a la profundidad $256\,(1 - 1/e) \approx 161.8$ ([msg 8125](https://groups.io/g/eternity2/message/8125)); el embudo de arriba culmina ahí empíricamente. Peter McGavin compuso la teoría ([msg 9188](https://groups.io/g/eternity2/message/9188)), publicó la cifra de 14 702 soluciones esperadas ya en 2011 ([msg 8924](https://groups.io/g/eternity2/message/8924)), y en 2017 entregó su validación más contundente: resolvió el benchmark 10×10 sin pistas de Brendan explorando las primeras filas ordenadas por teoría compleja: unos 180 años-núcleo, cayendo dentro de las predicciones de la teoría ([msg 9686](https://groups.io/g/eternity2/message/9686), [9688](https://groups.io/g/eternity2/message/9688)). Su implementación C de referencia de 2024 ([msg 11197](https://groups.io/g/eternity2/message/11197)) es lo que el estimador en vivo de esta página porta, línea por línea. ## Relacionado - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [¿Es NP-completa esta instancia y cómo la codifico?](https://eternity2.dev/es/research/why/how-hard-is-this-instance/) — El emparejamiento de aristas es NP-completo como familia, pero eso no dice nada de un tablero 16×16 fijo: una instancia aislada es una constante, no un problema. Lo que sí es cierto es la dureza en el peor caso de la familia y la dureza empírica de esta instancia, y cómo escribir el puzzle para un solucionador SAT, de cobertura exacta o de PLE, con pequeños esbozos detallados. Una medición con tableros plantados pone cifras a la elección de la formulación: un acantilado de resolubilidad que un paradigma de búsqueda golpea y otro cruza, y que se mueve con el número de colores. --- # La inmediatez de las restricciones: todo orden de llenado paga los mismos 480 > Sume, para cualquier orden de visita del tablero 16x16, el número de vecinos ya colocados que cada celda enfrenta en el instante en que se rellena: el total es exactamente 480, sea cual sea el orden. Un orden de llenado no puede añadir restricción; solo elige cuándo se aplica cada una. Lo que separa a los órdenes es la inmediatez, la distancia entre una decisión y su refutación, y solo los extremos de esa clasificación pertenecen al puzzle y no al motor. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/constraint-immediacy/ - Actualizado: 2026-07-22 - Temas: backtracking, search-space - Reproducir: `cd research/topics/constraint-immediacy/compute && cargo run --release -- repro-korder ../results` - Fuente: El kit de reproducción tras esta página: verificador de conteos de restricciones, solver sencillo de dos brazos, resultados archivados (research/topics/constraint-immediacy) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/constraint-immediacy --- Hay una intuición recurrente sobre los backtrackers de Eternity II: si la búsqueda visitara primero las cinco celdas con pista, siguiendo un camino que las enlace pronto, las pistas "restringirían el puzzle antes" y el árbol de búsqueda se encogería. La intuición suena bien y la contabilidad dice lo contrario. Ningún orden de llenado restringe el puzzle más que otro. Lo que un orden controla de verdad es *cuándo* se aplica cada restricción, y esa pregunta de calendario tiene una respuesta nítida: las restricciones que se pagan tarde son las caras. ## Una suma que ningún orden puede cambiar Fije un orden de visita completo de las 256 celdas. Cuando se rellena la celda $i$, llame $k_i$ al número de sus vecinas ya colocadas: el número de restricciones de arista que la pieza nueva debe satisfacer en ese instante. Cada junta interior del tablero se comprueba exactamente una vez, por el extremo que se coloca en segundo lugar. La suma de los $k_i$ es por tanto el número de juntas interiores, que en el tablero 16x16 vale $2 \times 16 \times 15 = 480$, las mismas 480 juntas que cuenta el [suelo de paridad](/es/research/why/parity-defect-floor/). El total es invariante respecto del camino: $$\sum_i k_i = 480 \quad \text{para todo orden de visita.}$$ El kit de reproducción lo comprueba de forma exacta para cinco órdenes de visita sobre el tablero oficial. Los cinco suman 480; lo único que cambia es cómo se reparte el total: | orden | k=0 | k=1 | k=2 | k=3 | k=4 | suma | |---|---|---|---|---|---|---| | hint-link | 1 | 75 | 137 | 41 | 2 | 480 | | outer-spiral | 1 | 58 | 170 | 26 | 1 | 480 | | row-major | 1 | 30 | 225 | 0 | 0 | 480 | | bustrófedon | 1 | 30 | 225 | 0 | 0 | 480 | | border-first | 1 | 58 | 170 | 26 | 1 | 480 | Estas cinco cifras son las mediciones originales del motor del estudio fuente; la reproducción empaquetada cubre el invariante y los dos solucionadores simples de abajo, no esta tabla. El orden fila a fila (row-major) es casi uniforme: pasadas la primera fila y la primera columna, cada celda enfrenta exactamente dos restricciones. El orden hint-link (un camino que encadena pronto las cinco celdas con pista mediante corredores de enlace) paga sus 41 celdas a tres restricciones y sus 2 celdas a cuatro colocando antes 75 celdas comprobadas contra una sola vecina. La ley de conservación lo convierte en un trueque, nunca en una ganancia: una celda solo puede enfrentar tres o cuatro vecinas colocadas porque otras celdas se colocaron casi sin comprobación antes que ella. ## La inmediatez: cuándo llega la factura Si el volumen total de restricciones está fijado, ¿qué distingue a los órdenes en la práctica? El coste de una colocación errónea es el tamaño del subárbol que la búsqueda explora antes de que aflore la refutación. Un orden con largos tramos sub-restringidos (series de celdas comprobadas contra una sola vecina, con decenas de candidatas cada una) seguidos de cierres sobre-restringidos (celdas comprobadas contra tres o cuatro) falla *al final*: los errores cometidos a bajo precio en el corredor solo se detectan en el cierre, un subárbol entero después. Un orden que mantiene cerca de cero la distancia entre una decisión y su refutación falla *de inmediato*, y ahí vive todo el beneficio. Ese es el principio de inmediatez de las restricciones: restringir pronto es lo correcto exactamente cuando la restricción pone a prueba cada decisión en el acto. El orden borde-primero (border-first) compromete primero el subconjunto más restringido (las 60 piezas de borde, que en el perímetro solo admiten una orientación), de modo que sus restricciones se aplican en el momento en que nacen. El camino hint-link es el caso opuesto, precocidad geométrica sin inmediatez: las pistas se alcanzan pronto, pero a lo largo de corredores cuyas colocaciones quedan casi sin probar hasta que el tablero se cierra a su alrededor. ## Lo que midió el motor El principio se extrajo de ejecuciones a orden fijo del motor de búsqueda del proyecto, la misma familia que examina el [estudio DFS](/es/research/lab/experiments/raphael-anjou/dfs-study/). Aquí y más abajo, las puntuaciones son aristas interiores emparejadas sobre 480 según el puntuador canónico que excluye el perímetro; ninguno de estos números es una reclamación de récord, y las tablas de récords viven en [/research/records](/es/research/records/). | orden | aristas emparejadas (motor) | |---|---| | hint-link | 51 | | outer-spiral | 204 | | costura de dos frentes | 3 a 5 por debajo de row-major | | row-major | 433 | | border-first | 445 | Un solo principio cubre toda la tabla: hint-link y la espiral fallan al final y se hunden; row-major es uniforme y sólido; border-first añade una prueba inmediata sobre las piezas más restringidas y acaba en cabeza. ## La contraprueba con un solver sencillo Una clasificación medida en un solo motor puede ser una propiedad de ese motor. Para separar ambas cosas, la reproducción relanzó los cinco órdenes sobre un solver deliberadamente sencillo, dos brazos a 60 s por orden y por brazo sobre el tablero oficial, un solo núcleo en Apple Silicon: una pasada voraz de mejor ajuste que rellena todo el tablero tolerando fallos, y una búsqueda en profundidad de ajuste perfecto con vuelta atrás cronológica, puntuada sobre su prefijo consistente más profundo (16 a 47 mil millones de nodos por orden, así que el presupuesto se gastó de verdad). El fichero de resultados guarda un enlace al visor para cada tablero final. | orden | voraz | puntuación DFS | profundidad DFS | |---|---|---|---| | hint-link | 316 | 44 | 60/256 | | outer-spiral | 366 | 28 | 35/256 | | row-major | 343 | 344 | 194/256 | | bustrófedon | 359 | 342 | 193/256 | | border-first | 358 | 28 | 35/256 | Lo que sobrevive al cambio de motor son los extremos. Hint-link es con diferencia el peor orden de ajuste perfecto, y su puntuación DFS de 44 cae cerca del 51 del motor. Row-major y el bustrófedon son el medio de tabla sólido en ambos brazos. Y sobre el tablero oficial el brazo voraz mantiene a border-first por delante de row-major, 358 contra 343, la misma dirección que el 445 contra 433 del motor. Lo que no sobrevive es todo lo demás. Bajo el DFS sencillo la espiral ya no se hunde en una clase propia (empata con border-first, coherente con que los dos órdenes comparten aquí un perfil de restricciones idéntico y las mismas 60 primeras celdas), y el propio border-first choca con un muro de cierre del perímetro a profundidad 35 de 256 en lugar de liderar. Sobre cuatro tableros 16x16 generados con marco, la ventaja voraz se invierte sin más: row-major gana el brazo voraz en 4 de 4 semillas y el brazo en profundidad en 4 de 4, con la puntuación DFS de border-first oscilando entre 28 y 366 según la semilla. El enunciado riguroso de esta página tiene por tanto dos caras: el invariante y los extremos pertenecen al puzzle; el medio fino de cualquier clasificación de órdenes de llenado pertenece al motor que la produjo. ## Dónde queda la palanca La ley de conservación acota lo que la geometría puede hacer por sí sola. Un perfil uniforme de dos restricciones es el mejor calendario que un orden de visita puede alcanzar, porque las celdas que enfrentan tres o cuatro vecinas colocadas solo existen aguas abajo de celdas colocadas casi sin comprobación. Row-major ya alcanza ese perfil, y los veinte años de ingeniería comunitaria de órdenes de llenado repasados en la [página de órdenes de llenado](/es/research/build/backtracking/fill-order/) son refinamientos dentro de ese marco. Cualquier vinculación temprana adicional tiene que ser informacional en vez de geométrica: propagar lo que la reserva de piezas restante aún puede servir (el modo de fallo que hace visible el [robo de piezas](/es/research/why/piece-theft/)), a prioris de colocación, reservas de candidatas restringidas, puertas de poda calculadas. La propia invariancia es un pequeño enunciado exacto en el espíritu del [barrido de teoremas](/es/research/why/theorem-sweep/): no es profundo, pero cierra una puerta con limpieza. Nadie encogerá esta búsqueda desviando el camino por el tablero; las 480 comprobaciones se deben íntegras, en todo camino, y solo su calendario queda en manos de quien busca. ## Relacionado - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - [Órdenes de relleno](https://eternity2.dev/es/research/build/backtracking/fill-order/) — El orden en que un algoritmo de backtracking visita las 256 celdas es su única libertad: no cuesta nada en tiempo de ejecución y mueve el tamaño del árbol de búsqueda en varios órdenes de magnitud. Veinte años de ciencia comunitaria, desde las guerras entre fijo y dinámico y las carreras de estrategias hasta el cuadrado mágico 10×16 y la búsqueda en peine de Verhaard, responden todos a la misma pregunta: ¿qué camino a través del tablero es el más barato? - [El estudio DFS](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/dfs-study/) — Una sola pregunta, planteada con cuidado: entre los backtrackers en profundidad para Eternity II, ¿qué aporta realmente cada orden de relleno, cada heurística y el mecanismo de ruptura? Una familia de backtrackers escritos desde cero, separados cada uno por un único cambio, ejecutados sobre las mismas diez variantes con esquinas fijadas, en un solo núcleo, durante sesenta segundos. --- # Diseñado para ser irresoluble: la receta > Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/design-recipe/ - Actualizado: 2026-07-02 - Temas: structure - Fuente: guenter stertenbrink plantea el problema de diseño: un puzzle con ~1 % de probabilidad de caer en diez años (msg 15, febrero de 2001) — https://groups.io/g/eternity2/message/15 - Fuente: Brendan Owen, Diseñar el puzzle más difícil: la receta completa y la derivación del 17,14 (msg 1947, agosto de 2007) — https://groups.io/g/eternity2/message/1947 - Fuente: Brendan Owen, Estimaciones del puzzle más difícil: la tabla de parámetros más duros para cada tamaño de tablero (msg 2164) — https://groups.io/g/eternity2/message/2164 - Fuente: Brendan Owen, Frecuencias de las piezas: la distribución plana que acabó con el método de Eternity I (msg 1667) — https://groups.io/g/eternity2/message/1667 - Fuente: Brendan Owen citando The Times: Selby y Riordan escribieron el generador para Monckton (msg 3373) — https://groups.io/g/eternity2/message/3373 - Fuente: El relato de Dave Clark de una llamada telefónica con Christopher Monckton sobre cómo se generó el puzzle (msg 4177) — https://groups.io/g/eternity2/message/4177 - Fuente: El censo del espacio de diseño de las piezas: 256 piezas de unas 21 000 posibles, formas simétricas evitadas (msgs 8014–8034; censo en msg 8025) — https://groups.io/g/eternity2/message/8025 - Fuente: Brendan Owen sobre la solución de los diseñadores guardada bajo llave en una caja fuerte (msg 8823) — https://groups.io/g/eternity2/message/8823 --- Eternity II no es un puzzle que resulte ser difícil por casualidad. Es el producto de una receta: una breve lista de reglas de diseño que, aplicadas en conjunto, producen el puzzle de emparejamiento de aristas más difícil que un número dado de piezas puede formar, garantizando al mismo tiempo que existe una solución. Lo notable es que la receta no fue filtrada ni publicada por los diseñadores. La comunidad la reconstruyó, ingrediente a ingrediente, en cuestión de semanas tras el lanzamiento, en su mayor parte en un único mensaje de agosto de 2007 firmado por Brendan Owen y titulado, muy apropiadamente, «Diseñar el puzzle más difícil» ([msg 1947](https://groups.io/g/eternity2/message/1947)). Esta página recorre esa receta: qué es cada regla, qué le cuesta a cualquiera que intente resolver el puzzle y de dónde procede cada afirmación. La medición del ingrediente más afilado (el número de colores situado exactamente sobre el pico de dificultad) tiene [su propia página](/es/research/why/phase-transition/); aquí ocupa su lugar entre los demás. ## El problema precedió al puzzle El problema de diseño se planteó en la lista de correo seis años antes de que nadie tuviera que resolverlo. En febrero de 2001, con Eternity I apenas frío y Eternity II aún como rumor, guenter stertenbrink preguntó al grupo cómo se diseñaría un puzzle con un premio de 5 M£ de modo que tuviera solo alrededor de un 1 % de probabilidad de ser resuelto en diez años ([msg 15](https://groups.io/g/eternity2/message/15)). Las respuestas discutieron escalar una dificultad al estilo de Eternity I e incluso ocultar problemas criptográficos en las aristas. Esa es exactamente la cuerda floja que debe recorrer un puzzle con premio. Hazlo demasiado fácil y el premio se pierde; eso es lo que le ocurrió a Eternity I, que cayó en 2000 porque tenía muchísimas más soluciones de las que su diseñador creía. Hazlo literalmente imposible y el concurso es un fraude. La meta es un puzzle del que se puede demostrar que tiene una solución, situado de tal manera que ninguna cantidad realista de cómputo la encuentre dentro de la ventana del concurso. Los diseñadores de Eternity II habían visto morir a Eternity I, y la receta que sigue se lee como una respuesta punto por punto. ## La receta, ingrediente a ingrediente ### Mantener la forma compacta La primera regla de la derivación de Owen: usar un tablero compacto, el cuadrado 16×16, en lugar de cualquier forma alargada o irregular ([msg 1947](https://groups.io/g/eternity2/message/1947)). Una forma compacta maximiza la proporción de uniones interiores, donde la incertidumbre es mayor, y no deja brazos estrechos ni pasillos que un solucionador pudiera agotar a bajo coste y usar como punto de anclaje. Owen verificó después la consecuencia de forma experimental: en diseños 16×16 comparables con paletas desequilibradas siempre hay alguna región más barata de teselar primero (para un reparto 2/19, empezar por el centro sale más de cien veces más barato que un barrido por filas), pero con los parámetros reales de E2 no existe ninguna región así. El diseño no tiene, en sus propias palabras, «ninguna zona débil por donde empezar a teselar» ([msg 5263](https://groups.io/g/eternity2/message/5263), comparación de diseños [msg 5243](https://groups.io/g/eternity2/message/5243)). ### Sin piezas simétricas, sin duplicados Cada una de las 256 piezas es única, y ninguna es simétrica por rotación ([msg 1947](https://groups.io/g/eternity2/message/1947)). En 2010 la comunidad contabilizó el espacio de diseño para ver hasta qué punto esto es deliberado: con 5 patrones de marco y 17 patrones interiores hay aproximadamente 21 000 diseños de pieza posibles, incluidas formas como *aaaa* y *abab* que se repiten bajo rotación. El conjunto real las evita todas de forma ostensible ([msgs 8014–8034](https://groups.io/g/eternity2/message/8014)). La consecuencia es la ausencia de regalos. Un par duplicado permitiría reescribir cualquier solución intercambiando las dos piezas, duplicando gratis el número de soluciones; una pieza con simetría de rotación colapsaría orientaciones y encogería el espacio de decisión. Negar ambas cosas mantiene el número esperado de soluciones fijado exactamente donde los diseñadores lo querían y entrega al solucionador exactamente cero simetría que explotar: cada colocación es una decisión plena e independiente entre 4 orientaciones de piezas distintas. Hay una segunda razón, más discreta, para prohibir las piezas simétricas, y Owen la midió. Una pieza simétrica no solo es estructuralmente redundante, sino que además es más fácil de *colocar*, porque encaja en más contextos. Construyó un conjunto de 289 piezas (las 17 formas con simetría de 90 grados, las 136 formas con simetría de 180 grados y 136 piezas asimétricas aleatorias), teseló un pequeño rectángulo de todas las maneras posibles y contó con qué frecuencia aparecía cada pieza en el conjunto de los 759 millones de soluciones. Las piezas asimétricas aparecían **2,08 veces** más a menudo que las de simetría de 180 grados y **4,14 veces** más a menudo que las de simetría de 90 grados ([msg 2076](https://groups.io/g/eternity2/message/2076)). Así que las piezas simétricas son las *difíciles de teselar*, y un puzzle que las hubiera incluido habría entregado al solucionador precisamente el asidero de teselabilidad desigual que las [frecuencias de color planas](#hacer-que-toda-frecuencia-sea-plana) están destinadas a eliminar. Prohibirlas mantiene cada pieza más o menos igual de difícil de colocar, sin ninguna fácil que reservar para el final. ### Dos paletas, estrictamente separadas Los 22 colores se reparten en 17 colores interiores y 5 que solo aparecen en las uniones entre piezas de borde, nunca en el interior ([msg 1947](https://groups.io/g/eternity2/message/1947)). Esto convierte el marco en su propio subpuzzle, cuya dificultad puede ajustarse de forma independiente del interior, de modo que ninguna de las dos partes es un punto de entrada blando: el mismo acto de equilibrio que la forma compacta, aplicado a la paleta. Los cinco colores exclusivos del marco son además los raros, puestos en cuarentena en el borde: al haber menos piezas de borde que de interior, y como las celdas de borde admiten una sola orientación, la receta de Owen nivela los dos grupos para que sus piezas sigan siendo más o menos igual de fáciles de colocar, en lugar de dejar el marco como un punto de entrada blando y desigual ([msg 1947](https://groups.io/g/eternity2/message/1947)). Esa firma visible tiene [su propia página](/es/research/why/rare-color-geography/). ### Hacer que toda frecuencia sea plana Cuando Owen digitalizó su conjunto el día del lanzamiento, encontró la distribución de colores de arista «tan plana como podía ser»: 24 aristas de cada uno de los 5 colores de unión de borde, 48–50 de cada uno de los 17 colores interiores ([msg 1054](https://groups.io/g/eternity2/message/1054)). Este único ingrediente es el que acabó con la estrategia de Eternity I. Eternity I se resolvió en gran parte mediante el ordenamiento por dificultad de las piezas: las teselabilidades de sus piezas variaban enormemente, de modo que los solucionadores podían reservar las piezas más fáciles para el final y dejar que las estadísticas los llevaran a buen puerto. Dos semanas después del lanzamiento, Owen mostró que la distribución plana de E2 vuelve inútil ese enfoque: cuando cada color es igual de común, cada pieza es más o menos igual de teselable, y ninguna heurística de ordenamiento gana tracción ([msg 1667](https://groups.io/g/eternity2/message/1667)). Como lo expresó en respuesta doc_s_smith, una de las personas que realmente resolvieron Eternity I, la selección de la posición más restringida se convirtió en «nuestra única otra esperanza» ([msg 1722](https://groups.io/g/eternity2/message/1722)). ### Apuntar a exactamente una solución El último ingrediente fija los propios recuentos de colores. Owen razonó hacia atrás a partir del requisito de «alrededor de una solución esperada»: imponer que el número esperado de teselados interiores sea 1 y resolver para el número de colores interiores da $$I = (196! \cdot 4^{196})^{1/392} \approx 17.14$$ Redondea a 17, añade los 5 colores de borde ajustados por separado, y tienes la paleta exacta de Eternity II ([msg 1947](https://groups.io/g/eternity2/message/1947)). Owen respaldó la derivación con simulaciones, defendió el 17+5 frente al diseño vecino 16+8 de la misma familia de una solución esperada, ya que equilibra mejor la teselabilidad de las piezas de borde e interiores y no deja ninguna entrada barata por el marco ([msg 2426](https://groups.io/g/eternity2/message/2426)), y lo completó con una tabla de los parámetros más duros para cada tamaño de tablero, una receta general de la que E2 es la fila 16×16 ([msg 2164](https://groups.io/g/eternity2/message/2164)). Una solución esperada no es un capricho estético arbitrario. Es el ajuste en el que las soluciones son tan escasas como pueden serlo sin dejar de existir: el pico de la transición de fase, el punto en el que se puede demostrar que la búsqueda está en su peor momento. Esa medición, y los análisis publicados que más tarde confirmaron el número de Owen, viven en la [página del pico de dificultad](/es/research/why/phase-transition/). El reverso prueba que la perilla es real: un diseño 16×16 deliberadamente *relajado* que se discutió en la lista tiene alrededor de 10^42 soluciones esperadas, aunque Owen advirtió que incluso ese no es ningún paseo ([msg 4968](https://groups.io/g/eternity2/message/4968)). ## Quién lo diseñó realmente Christopher Monckton inventó la franquicia Eternity y puso el premio, pero su idea original para la secuela era un puzzle tridimensional de 1001 piezas. Owen lo relató señalando que «el diseño real es de Alex y Oliver» ([msg 2697](https://groups.io/g/eternity2/message/2697)). Alex Selby y Oliver Riordan son los dos matemáticos que ganaron Eternity I al descubrir que tenía muchas más soluciones de las previstas; Monckton contrató a quienes lo habían vencido. El grupo lo sospechó semanas antes del lanzamiento ([msg 716](https://groups.io/g/eternity2/message/716)), lo vio confirmado en un folleto oficial de Tomy (el inventor se reunió con los ganadores de E1 en un programa matutino de televisión y les pidió que trabajaran en el desarrollo de E2; [msg 901](https://groups.io/g/eternity2/message/901)), y finalmente lo rastreó hasta un artículo de The Times: Selby y Riordan diseñaron el programa generador del puzzle ([msg 3373](https://groups.io/g/eternity2/message/3373)). Esa procedencia explica la precisión de la receta. El único equipo del planeta con experiencia de primera mano de cómo fracasa estadísticamente un puzzle con premio fue pagado para asegurarse de que ese modo de fallo había desaparecido. Cada ingrediente anterior (planitud, ausencia de duplicados, paletas equilibradas, una solución esperada) cierra una puerta que el propio Selby y Riordan habían atravesado en 2000. ## Cómo se generaron las piezas: un relato de segunda mano El único relato detallado del proceso de generación que hay en el archivo es de segunda mano y debe leerse como tal. Dave Clark, fundador del proyecto distribuido eternity2.net, contó una larga conversación telefónica que mantuvo con Monckton el 26 de julio de 2007: el puzzle se generó a partir de la entropía tecleada al teclado por los jueces del concurso (unas 200 entradas), regenerado hasta que los jueces quedaron satisfechos, luego impreso una sola vez y guardado en la caja fuerte. Monckton le describió el generador de números aleatorios como uno que usa «residuos gaussianos de potencias de números primos elegidos adecuadamente», lo que Clark interpretó como la propia implementación de Selby y Riordan ([msg 4177](https://groups.io/g/eternity2/message/4177)). El hilo consideró brevemente la idea de atacar un generador criptográficamente débil; una respuesta señaló que si la construcción era de tipo Blum–Blum–Shub sería demostrablemente difícil ([msg 4180](https://groups.io/g/eternity2/message/4180)). Nada salió de esa vía, pero el relato sigue siendo la mejor fuente casi primaria del archivo sobre el verdadero origen de las 256 piezas. ## La póliza de seguro Un puzzle diseñado para no ser resuelto nunca todavía tiene que demostrar que *puede* serlo. El material de lanzamiento de Tomy declaraba que nadie, ni el inventor ni los diseñadores, conoce la solución: el generador la imprimió «entre páginas de texto aleatorio mientras todas las partes estaban fuera de la sala», y la salida se selló ante testigos ([msg 901](https://groups.io/g/eternity2/message/901)). Una vez que el concurso terminó sin ganador, Owen dio la afirmación que aún se cita hoy: «Estoy seguro de que Alex y Oliver crearon una solución cuando Chris les pagó para generar un puzzle prácticamente imposible», y que yace oculta entre resmas de texto impreso guardadas bajo llave en una caja fuerte, como seguro frente a cualquier impugnación legal de la buena fe del concurso ([msg 8823](https://groups.io/g/eternity2/message/8823)). Esa caja fuerte es el ingrediente final de la receta. La solución diseñada es lo que permite al puzzle situarse en una solución esperada en lugar de en cero: existencia garantizada por construcción, descubrimiento tarificado más allá del alcance de cualquier concursante. ## Qué significa la receta si atacas el puzzle hoy Cada atajo genérico al que podrías recurrir fue anticipado y tarificado hace casi dos décadas. El ordenamiento por frecuencia de las piezas murió con la distribución plana. Los trucos de simetría y de duplicados no tienen nada a lo que aferrarse. No hay ninguna región blanda que teselar primero, ningún desequilibrio de paleta que usar como palanca, y el número de colores se sitúa en el ajuste exacto donde la búsqueda es peor. El techo bruto de la comunidad solo se ha movido dos veces en veinte años (467 en 2008, 470 en 2021) y ahí se mantiene desde entonces (la vía de pistas estrictas, en cambio, ha seguido avanzando por su cuenta; véase [/research/records](/es/research/records/)); esa meseta es la lectura empírica de un diseño que funcionó precisamente como se pretendía. Eso no vuelve el puzzle imposible: una solución existe de forma certificada, impresa y guardada bajo llave. Significa que la brecha restante no es un problema de ajuste. Lo que la cierre tendrá que ser una idea que los diseñadores no pudieran anticipar. Eso es, al fin y al cabo, para lo que sirve este wiki. ## Relacionado - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - [La cacería, una historia (parte I: 2000-2009)](https://eternity2.dev/es/research/community/hunt/) — La historia de la comunidad, desde una lista de correo fundada siete años antes de que el puzzle existiera hasta el premio de escrutinio de 10.000 $ ganado bajo un nombre prestado, con cada suceso rastreado hasta su mensaje original. Parte I de una crónica en desarrollo. --- # La entropía y la ley de área > Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/entropy-area-law/ - Actualizado: 2026-07-22 - Temas: structure - Reproducir: `just research-entropy-area-law` - Fuente: El lema de subaditividad de Fekete, el teorema que garantiza la existencia misma del límite de entropía h∞ — https://en.wikipedia.org/wiki/Subadditivity#Subadditive_sequences - Fuente: La entropía de Shannon de una fuente, las cantidades h(n) medidas aquí — https://doi.org/10.1002/j.1538-7305.1948.tb01338.x --- CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; Olvidemos por un momento la regla de usar cada pieza una sola vez y tratemos las 196 piezas interiores como piezas reutilizables. Al contar los bloques enteramente compatibles, se observa que crecen exponencialmente con el tamaño: no faltan formas localmente válidas de teselar. La gramática de coincidencia es rica, no restrictiva. Esa riqueza se puede medir exactamente. Para una banda de ancho $n$, la tasa de crecimiento por celda es una densidad de entropía $h(n)$, y la sucesión decrece hacia el verdadero valor bidimensional a medida que la banda se ensancha. ## La entropía de la gramática, ancho a ancho > **[Figure]** interactive: EntropyChart. Rendered on the canonical page (link above); not shown in this markdown export. ## Luego golpea la ley de área Ahora restablezcamos la regla de usar cada pieza una sola vez y preguntémonos con qué frecuencia un bloque $n \times n$ compatible en colores emplea realmente piezas distintas. Llamémoslo $\rho(n)$. Lo contamos de forma exacta, en el repositorio: para cada tamaño de bloque interior contamos $A(n)$, los rellenos compatibles en colores cuando las piezas pueden repetirse, y $B(n)$, los que usan piezas distintas, y tomamos $\rho(n) = B(n)/A(n)$. Se derrumba, y se derrumba según el área, no según el perímetro: $$ \rho(n) \;\approx\; \exp(-\alpha\, n^2), \qquad \alpha \approx 0.044. $$ El exponente se ajusta por mínimos cuadrados sobre el rango contado con exactitud: $A$ y $B$ se calculan aquí para $n$ hasta $3$ (y $A$ hasta $4$), con $B(2) = 4\,059\,952$ coincidiendo con la tabla de referencia de sub-bloques del repositorio. El exponente por bloque aún crece en ese pequeño rango (0,029 en $n=2$, 0,048 en $n=3$), así que 0,044 es una estimación baja del valor para bloques grandes. En $n=4$ el recuento reutilizable $A(4)$ ya alcanza $6{,}3\times10^{16}$, más allá de la enumeración distinta exacta en un tiempo razonable; por eso la curva más allá de $n=3$ es una extrapolación del ajuste. Un decaimiento por ley de área es brutal porque el área crece de forma cuadrática. Por extrapolación, la fracción de bloques realizables cae por debajo de uno entre mil hacia las 155 celdas. (Un estudio fuera del sitio anterior reportaba un $\alpha \approx 0.085$ más pronunciado y un umbral hacia las 80 celdas; los recuentos exactos del repositorio sobre $n \le 3$ dan las cifras más suaves de aquí, y el exponente por bloque creciente es compatible con que el valor fuera del sitio se alcance en bloques mayores.) > **[Figure]** interactive: RhoChart. Rendered on the canonical page (link above); not shown in this markdown export. ## Ver cómo se abre la brecha La misma idea aplicada a las piezas reales, contadas exactamente. Varía el tamaño del bloque y observa cuántos bloques compatibles en colores sobreviven a la regla de usar cada pieza una sola vez. > **[Figure]** Interactivo: colapso de la distinción y decaimiento de rho — interactive: EntropyScarcityLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Por qué importa Un colapso del orden de la centena de celdas está a la escala de los movimientos más pequeños que separan los mejores tableros conocidos. La gramática de coincidencia se mantiene rica, y luego la regla de distinción la colapsa sobre el área. Así que el muro no está en la parte que parece difícil, la coincidencia de colores; está en la regla silenciosa de que cada pieza se usa una sola vez, cuyo coste crece con el área, sobre un tablero apenas lo bastante grande como para que muerda. Ver [por qué el basin-hopping es imposible](/es/research/why/sigma-cycles/). ## El teorema, en breve La entropía por ancho tiene un límite bien definido. Unir lado a lado una banda de ancho $n_1$ y una de ancho $n_2$ solo añade una restricción de costura, de modo que los valores propios satisfacen $$ \lambda_{n_1+n_2} \;\le\; \lambda_{n_1}\,\lambda_{n_2}. $$ Al tomar logaritmos, $\log \lambda_n$ se vuelve subaditiva, y el lema de Fekete da el límite como un ínfimo, que es exactamente la razón por la que la curva de arriba decrece: $$ h_\infty \;=\; \lim_{n\to\infty}\frac{\log_{10}\lambda_n}{n} \;=\; \inf_n \frac{\log_{10}\lambda_n}{n}. $$ La cota superior es la tasa puramente horizontal: ignorar las restricciones verticales solo añade bloques, de modo que $$ 0 \;<\; h_\infty \;\le\; \log_{10}\lambda_H \;=\; 1.6645, $$ con $\lambda_H = 46.18$ el radio espectral de la matriz de compatibilidad de colores en horizontal. La positividad se cumple porque la gramática admite exponencialmente muchas cadenas, de modo que la densidad está estrictamente comprendida entre cero y 1,6645, medida en torno a 0,67. Lo que el teorema demuestra es que existe un límite positivo y que está acotado superiormente por $\log_{10}(46.18) = 1.6645$. Su valor concreto en torno a 0,67 proviene de un barrido fuera de línea. El exponente de ley de área $\alpha \approx 0.044$ se ajusta aquí a partir de los recuentos de bloques exactos del repositorio sobre $n \le 3$; su extrapolación a bloques mayores (y el umbral de las ~155 celdas) va más allá del rango contado con exactitud. El teorema no fija esos valores. ## Relacionado - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Contar soluciones: medir lo que no se puede encontrar](https://eternity2.dev/es/research/build/analysis/solution-counting/) — Nadie ha visto jamás una solución completa de Eternity II y, sin embargo, la comunidad sabe, con un margen de un factor de dos, cuántas existen. Esta página cuenta la historia y el oficio de ese número: censos exactos en tableros pequeños, la fórmula de esperanza y su convergencia sobre 14 702 a lo largo de veinte años, y las estimaciones por búsqueda podada en las que solo se confió cuando cuatro ejecuciones independientes coincidieron. --- # Invariantes de flujo: una ley de rotación que el conjunto oficial cumple exactamente > Pondere cada color de arista y lea cada pieza como un vector con signo, este menos oeste en un eje, sur menos norte en el otro. Sumado sobre cualquier región, las costuras interiores se cancelan y solo sobrevive el borde, de modo que el tablero totaliza cero. Un cuarto de vuelta gira el vector un ángulo recto, lo que vuelve la ley álgebra en los enteros de Gauss. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/flux-invariants/ - Actualizado: 2026-07-22 - Temas: structure - Fuente: Invariantes de flujo: topic de reproducción con el artículo, el verificador versionado y el JSON de resultados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/flux-invariants - Fuente: Conway y Lagarias, Tiling with polyominoes and combinatorial group theory: los invariantes de palabra de borde que esta ley adapta al emparejamiento de aristas (JCTA 1990) — https://doi.org/10.1016/0097-3165(90)90057-4 - Fuente: Brendan Owen digitaliza el conjunto de piezas: el histograma de colores que esta ley confronta (groups.io msg 1054, julio de 2007) — https://groups.io/g/eternity2/message/1054 - Fuente: Brendan Owen, Design the hardest puzzle: la separación deliberada de las paletas de borde e interior (groups.io msg 1947, agosto de 2007) — https://groups.io/g/eternity2/message/1947 --- Los scores de esta página siguen la convención de emparejamiento de aristas: el score de un tablero es el número, de las 480 junturas interiores, cuyas dos medias aristas muestran el mismo color. Una solución completa vale 480. Los invariantes de abajo no tratan del score de un tablero; tratan de las rotaciones de piezas que un tablero-480 válido tiene derecho a emplear, y se cumplen para toda solución válida, sea cual sea su score. ## La idea en una línea Dé a cada uno de los 22 colores de arista un peso numérico, con el color de borde gris pesando cero. Lea una pieza colocada como un vector de dos dimensiones: su peso este menos su peso oeste en el eje horizontal, su peso sur menos su peso norte en el eje vertical. Ahora sume ese vector sobre un bloque de piezas colocadas. Cada costura interior del bloque es compartida por dos piezas, y entra en la suma una vez con signo más desde una pieza y una vez con signo menos desde su vecina, el mismo color en ambas caras, de modo que las dos se cancelan. Nada sobrevive a la suma salvo el borde exterior del bloque. Sobre el tablero entero ese borde exterior es el reborde gris, de peso cero, así que el total es exactamente el vector nulo. Es una ley de conservación, la prima discreta de un teorema de la divergencia: el flujo que sale de toda región iguala al flujo que cruza su frontera, y para el tablero entero la frontera no lleva flujo alguno. ## Por qué un cuarto de vuelta trae los números complejos El vector no es ciego a la rotación. Gire una pieza noventa grados en sentido horario y su color norte pasa al este, el este al sur, el sur al oeste, el oeste al norte. Siga lo que eso le hace al vector y los ejes horizontal y vertical se intercambian con un signo: el nuevo vector es el viejo girado un ángulo recto. En el plano, un giro de ángulo recto es una multiplicación por la unidad imaginaria. Así que si escribe el vector como un número complejo, un cuarto de vuelta de la pieza lo multiplica por $i$, y las cuatro rotaciones que una pieza cuadrada puede tomar corresponden a las cuatro potencias $1, i, -1, -i$. Ese solo hecho es lo que eleva una identidad de contabilidad a álgebra. La ley de conservación, escrita color por color, dice que cierta suma de enteros de Gauss, un término por pieza, cada uno multiplicado por una potencia de $i$ fijada por la rotación elegida de esa pieza, debe dar cero. Es una restricción no sobre dónde van las piezas sino sobre qué rotaciones puede adoptar el conjunto entero. ## La familia completa, y qué es nuevo El grupo de rotación de un cuadrado tiene cuatro caracteres, y la ley de flujo es solo uno de ellos. Descomponer la pieza según los cuatro da el retículo completo de los invariantes lineales, intrínsecos a la pieza, del emparejamiento de aristas: nada lineal se le escapa. Los cuatro miembros son un simple censo de colores (ciego a la rotación, el recuento total de cada color en la pieza), la ley de flujo gaussiana que se acaba de describir, su conjugado complejo (la misma información), y un cuarto miembro, de valores enteros, que acopla la elección de cada pieza sobre qué par de aristas opuestas queda horizontal al color de tablero de ajedrez de su celda. Este último es el eco, del lado del emparejamiento de aristas, de la obstrucción de bicoloración que Conway y Lagarias usaron para el teselado con poliominós, el método de palabra de borde del que toda esta familia está adaptada. El censo no es novedad: es solo conteo de colores. El valor de la ley de flujo es que ella sí lo es. En el conjunto oficial su sombra ciega a la rotación, la versión que se obtiene al olvidar la $i$ y fusionar más y menos, es idénticamente nula para los 22 colores, porque todo recuento de color en el tablero es par. Dicho de otro modo, el conteo de colores ya sabe todo lo que la sombra podría decirle, y no sabe nada más. Cada restricción que la ley de flujo impone más allá de esa sombra es información realmente nueva que un censo no puede ver. ## El álgebra lineal en la instancia real Alinee los 22 colores como filas y las 256 piezas como columnas, y los coeficientes de flujo por pieza forman una matriz. Su rango mide cuánto restringe realmente la ley al puzzle. Recalculados sobre el conjunto oficial de 256 piezas, los números salen así.
22
rango complejo, pleno (22 de 22 colores)
40
restricciones reales independientes
21
restricciones de paridad independientes (mod 2)
Un rango complejo pleno de 22 significa que la ley liga los 22 colores a la vez, sin que ningún color quede fuera como variable libre. Dividir las ecuaciones complejas en sus partes real e imaginaria da 40 restricciones reales independientes sobre la asignación de rotaciones. Y reducir todo el sistema módulo 2, donde la rotación de una pieza colapsa a un único bit de paridad (un cuarto de vuelta y un tres cuartos de vuelta se vuelven iguales módulo 2), deja 21 restricciones de paridad independientes, con el sistema aumentado quedando también de rango 21, así que es consistente y no contradictorio. Ese sistema módulo 2 por sí solo retira un factor de unos dos millones del espacio de paridades de rotación. Los hechos de instancia que la ley confronta se reproducen también exactamente, dígito por dígito frente al conjunto de piezas digitalizado por Brendan Owen: 196 piezas interiores, 56 piezas de borde, 4 esquinas; el color de borde gris en 64 medias aristas; cinco colores de marco que solo tocan piezas de borde, 24 medias aristas cada uno; los colores interiores restantes repartiéndose en cinco a 48 y doce a 50; y todo recuento de color par, que es exactamente lo que exige un emparejamiento de aristas perfecto. Las cinco pistas oficiales son todas piezas interiores. Nada de esto depende de confiar en una numeración de colores: el verificador deriva el conjunto de colores de marco de los datos (los colores que nunca aparecen en una pieza interior), de modo que una renumeración entre el kit inicial y la lista fuente no puede engañarlo. ## De una ley a una comprobación de final Una ley de conservación que debe cumplirse para el tablero entero restringe también a cualquier tablero parcial, porque las piezas aún por colocar deben llevar exactamente el flujo que a las piezas colocadas les falta. Durante una búsqueda que llena la rejilla pieza a pieza, el flujo que deben las piezas restantes queda fijado en el instante en que el conjunto colocado queda fijado. Si ninguna asignación de rotaciones a las piezas restantes puede suministrar ese flujo debido, el tablero parcial está muerto, y se puede parar sin buscar su subárbol. Reducido módulo 2 esto se vuelve un pequeño sistema lineal sobre las paridades de rotación de las piezas restantes, decidido por eliminación de Gauss, y es un certificado de final fiable. Fiable quiere decir que nunca rechaza un tablero que sea de verdad completable: la ley es una condición necesaria, así que un parcial real siempre pasa. Lo que sí puede hacer es atrapar un error. Probado sobre un depósito de tableros 8 por 8 resueltos y enmarcados, con rotaciones implantadas, inyectando una única rotación ilegal en el prefijo colocado, la comprobación no rechazó ni una sola vez un parcial válido en 3 600 ensayos, y su probabilidad de atrapar el error inyectado crecía con la fracción de llenado. | Fracción de llenado | Parciales válidos rechazados | Error de rotación único atrapado | |---|---|---| | 0,50 | 0 de 900 | 0,6 % | | 0,75 | 0 de 900 | 14,1 % | | 0,90 | 0 de 900 | 88,3 % | | 0,95 | 0 de 900 | 94,6 % | El contenido reproducido aquí es el mecanismo y la forma de esa curva, no los porcentajes exactos. La fuente reporta una curva más pronunciada (13 %, 50 %, 100 % en los llenados 0,50, 0,75, 0,90) sobre una familia implantada distinta; el run de arriba usa un tablero 8 por 8 a 13 colores con una pieza inyectada elegida uniformemente y un depósito de 30 tableros, 30 órdenes cada uno (900 por llenado), de modo que las tasas de detección absolutas quedan más bajas. Lo que se cumple exactamente, y ese es el punto, es que el certificado es fiable y que su probabilidad de detección sube de forma monótona hacia el pleno a medida que el tablero se llena. Ese es precisamente el comportamiento útil para una búsqueda: la comprobación se afila justo donde la cola de ramificación del árbol es más costosa, hacia el final, y cada captura es ortogonal al podado por color y por recuento, así que se suma por encima en vez de duplicarlos. ## Qué es y qué no es La ley de flujo es una obstrucción. Puede certificar un tablero parcial como muerto; nunca puede certificar uno como completable. Ese es el papel correcto y buscado para un invariante dentro de una búsqueda por ramificación y podado, y lo comparten todos los resultados de esta familia. Dos advertencias más, dichas con claridad. La ley restringe las rotaciones que el conjunto de piezas puede emplear, no la celda donde cada pieza se coloca; solo el miembro de tablero de ajedrez se acopla a la posición, y solo por la paridad de la celda, de modo que ningún miembro fija una pieza a un lugar. Y la extensión no lineal natural, un producto de palabra de borde no abeliano al estilo de la construcción original de Conway y Lagarias, no sobrevive en dos dimensiones: una celda interior tiene cuatro aristas compartidas pero solo dos vecinas adyacentes a ella en cualquier orden de lectura lineal, de modo que al menos dos de sus aristas nunca podrán cancelarse, y la construcción recae en la ley de flujo lineal. Todo invariante estrictamente más fuerte que estos ha de ser no lineal y queda fuera de la familia de los grupos de teselado. ## Dónde se ubica Este es el recuento detallado de una ley de la [revisión de teoremas](/es/research/why/theorem-sweep/), el arco que preguntó qué se podía probar sobre la instancia en vez de qué score se podía alcanzar. Se ubica junto a la [pureza del anillo](/es/research/why/ring-purity/), la otra ley exacta que el borde cumple, y es el complemento algebraico de la [lente del código de permutación](/es/research/why/permutation-code-wall/), que lee el tablero entero como una palabra de código: la ley de flujo es un conjunto de comprobaciones de paridad que las rotaciones deben satisfacer, la misma moneda en la que esa lente está escrita. La [página de teoría compleja](/es/research/why/complex-theory/) cuenta cuán ancha es la búsqueda; esta página añade una manera barata y fiable de podar su final. Cada número de arriba es recalculado por el verificador versionado en el topic de reproducción enlazado bajo las fuentes: un único programa Rust determinista que carga la instancia oficial, deriva los colores de marco de los datos, calcula los tres rangos, verifica la sombra de ortogonalidad al censo y ejecuta el barrido de final semilla a semilla, emitiendo un único archivo JSON (versionado como `results/flux_invariants.json`) que contiene cada cifra citada aquí. Los hechos de instancia y los rangos se reproducen byte por byte; el certificado reporta su propia curva de capturas, fiable en cada llenado. ## Relacionado - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - [Pureza del anillo: el borde es un subpuzle cerrado, sin holgura](https://eternity2.dev/es/research/why/ring-purity/) — Cinco de los 22 colores nunca tocan las 196 piezas interiores. La lista de piezas obliga a toda solución válida a gastar las 120 semiaristas de marco en el anillo del borde: un subpuzle autónomo con holgura exactamente nula (120 = 120), un circuito euleriano sobre cinco vértices, acoplado al interior solo por 56 aristas orientadas hacia dentro. - [El tablero como palabra de código](https://eternity2.dev/es/research/why/permutation-code-wall/) — Lee un tablero completo como una palabra de código cuyas 480 junturas interiores son comprobaciones de tipo paridad, y el score de aristas emparejadas pasa a ser 480 menos el número de comprobaciones fallidas. Es una lente limpia que descansa sobre una sola identidad portante, y conviene ser preciso sobre lo que la vista de códigos correctores aporta y lo que solo renombra. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. --- # Patrones prohibidos > Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/forbidden-patterns/ - Actualizado: 2026-07-01 - Temas: structure, search-space - Reproducir: `just research-forbidden-patterns` - Fuente: Patrones prohibidos: artículo, código fuente y resultados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/forbidden-patterns --- Eternity II tiene 256 piezas cuadradas, cada una con un color en sus cuatro lados. 196 de ellas son piezas interiores, las que no tienen ninguna arista de borde gris, así que son las únicas que llegan a situarse dentro del tablero. Toma unas cuantas, colócalas en una pequeña forma y gíralas como quieras. La mayoría de las veces, los colores simplemente no cuadrarán, hagas lo que hagas. Cuanto más grande es la forma, peor se pone. Dos piezas una al lado de la otra no encajan aproximadamente el 39 % de las veces. Añade una tercera en L y te quedas atascado el 83 % de las veces. Cierra un cuadrado 2×2 y el 99,72 % de todas las colocaciones nacen muertas: solo funciona alrededor de 1 de cada 358. ## Una que encaja, otra que no puede
> **[Figure]** interactive: BoardSvg. Rendered on the canonical page (link above); not shown in this markdown export. > **[Figure]** interactive: BoardSvg. Rendered on the canonical page (link above); not shown in this markdown export.
## Pruébalo: saca cuatro piezas > **[Figure]** Interactivo: pinta un conjunto y míralo prohibirse a sí mismo — interactive: ForbiddenPatchLab. Rendered on the canonical page (link above); not shown in this markdown export. ## De dónde sale el 99,72 % Una estimación aproximada explica por qué el número es tan alto. Dos piezas adyacentes comparten una arista. Cada pieza interior lleva colores de la paleta interior de 17 colores, de modo que un par aleatorio de medias aristas encaja con una probabilidad de aproximadamente $$ \Pr[\text{one edge matches}] \;\approx\; \frac{1}{17} \;\approx\; 6\%. $$ Un cuadrado 2×2 tiene cuatro aristas internas que satisfacer a la vez. Las rotaciones dan cuatro oportunidades a cada pieza, pero las cuatro aristas están acopladas, de modo que una estimación de independencia hecha a ojo sitúa la probabilidad de que las cuatro encajen en, muy aproximadamente, $$ \Pr[\text{2}\times\text{2 feasible}] \;\sim\; 1 - \left(1 - \tfrac{1}{17}\right)^{\!c} \ \text{per rotation budget} \;\Rightarrow\; \lesssim 1\%, $$ lo cual ya está por debajo del uno por ciento. El recuento exhaustivo exacto llega al 0,28 % de configuraciones factibles, es decir, el 99,72 % prohibidas $(\,0.28\% = \tfrac{3{,}993{,}696}{1{,}431{,}033{,}240}\,)$. La estimación es burda porque las aristas no son independientes y los colores no son uniformes, pero acierta el orden de magnitud y muestra por qué cerrar un cuadrado es mucho más difícil que colocar un solo par. ## Los recuentos exactos Toda colocación de piezas distintas de cada forma, verificada exhaustivamente, sin muestreo. | Forma | Colocaciones | Prohibidas | % prohibidas | | ---------------- | -------------: | ------------: | ----------: | | Dos una al lado de otra | 38,220 | 14,890 | 38.96% | | Dos apiladas | 38,220 | 14,890 | 38.96% | | L de tres | 7,414,680 | 6,173,828 | 83.26% | | Cuadrado 2×2 | 1,431,033,240 | 1,427,039,544 | 99.72% | Calculado exactamente a partir del conjunto oficial; la ejecución se reproduce de forma idéntica cada vez (unos veinte segundos). El [artículo, el código fuente y los resultados están en GitHub](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/forbidden-patterns). ## Prohibido antes incluso de elegir una pieza La escasez empieza un nivel por debajo de las piezas enteras, en los colores. Una celda interior muestra dos de los 17 colores interiores en cualquier esquina dada, las dos aristas que se encuentran allí, lo que da $17 \times 17 = 289$ pares de colores ordenados posibles. No todos existen. Ya en 2008 la comunidad notó que **20 de esos 289 pares son ausencias**: ninguna pieza interior, en ninguna rotación, presenta ese par concreto de colores en aristas adyacentes ([msg 5027](https://groups.io/g/eternity2/message/5027)). Así que un tablero parcial que obliga a una celda a responder con uno de esos 20 pares de esquina está muerto en el acto, antes de probar una sola pieza, y un solucionador rápido puede rechazarlo con una única consulta de tabla. Es la misma lección que el recuento 2×2, llevada hasta la unidad más pequeña que puede ser imposible: las restricciones muerden tan pronto que categorías enteras de demanda local no tienen ninguna respuesta legal en absoluto. ## Por qué importa Un tablero terminado y correcto tiene cero conjuntos prohibidos: por definición, todo encaja. Así que contar los conjuntos prohibidos de un tablero indica aproximadamente a qué distancia está de una solución real, incluso cuando dos tableros tienen el mismo número de aristas encajadas. Los tableros débiles están llenos de cuadrados prohibidos; los mejores tableros jamás encontrados solo conservan un par de docenas. También muestra, desde otro ángulo, por qué el puzzle se sacude los arreglos locales ingeniosos. Cuando el 99,72 % de los pequeños cuadrados son imposibles, las piezas que sí encajan entre sí son raras y específicas. No hay casi margen para reordenar las cosas sin romper algo. Los buenos arreglos son escasos y rígidos. ## Un segundo eje de progreso Contar los cuadrados prohibidos convierte la idea en una señal utilizable. Toma un tablero récord real: el número de ventanas 2×2 prohibidas disminuye a medida que sube la puntuación de aristas encajadas. Dos tableros con la misma puntuación de aristas aún pueden diferir aquí: el que tiene menos cuadrados prohibidos está estructuralmente más cerca de una solución, y por eso algunos solucionadores siguen el recuento de conjuntos prohibidos como criterio de desempate. > **[Figure]** Interactivo: cuenta las colocaciones factibles frente a las prohibidas — interactive: ForbiddenCountLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Relacionado - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. --- # El marco no es la cuenca: un borde distinto no abre un tablero más alto > El anillo del borde es la parte más restringida del rompecabezas, así que un borde fuerte distinto debería fijar un interior alto distinto. No lo hace. Muchos bordes completamente emparejados y distintos, cada uno completado por un mismo productor de interior fijo, dan cimas casi máximamente distintas entre sí pero uniformemente bajas, ninguna cerca de la franja récord. El borde diversifica el tablero sin predecir su techo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/frame-is-not-the-basin/ - Actualizado: 2026-07-22 - Temas: structure, search-space - Reproducir: `just research-frame-is-not-the-basin` - Fuente: El marco no es la cuenca: topic de reproducción con el artículo, el productor versionado y los dos archivos JSON de resultados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/frame-is-not-the-basin --- Hay un atajo tentador para Eternity II. El anillo del borde es la parte más restringida del tablero: sesenta casillas sobre solo cinco colores de anillo, llenadas por las cuatro esquinas y las cincuenta y seis piezas de borde (la [página de pureza del anillo](/es/research/why/ring-purity/) muestra por qué esos cinco colores nunca abandonan el reborde). Si un borde completamente emparejado fija la cima del tablero, entonces un borde *distinto* debería fijar un interior alto *distinto*, y construir varios bordes fuertes distintos abriría varias cuencas altas distintas. La diversificación por el borde sería una palanca para las puntuaciones. Esta página es la medición que cierra esa puerta. Generar muchos bordes completamente emparejados y estructuralmente distintos, y completar cada uno con el mismo productor de interior fijo, da cimas casi máximamente distintas entre sí y, sin embargo, todas alojadas en la misma banda baja, lejos de la franja récord. El borde es un fuerte *diversificador* del tablero resultante y un *selector* de calidad inútil. La identidad del marco no predice el techo del interior.
28
bordes completamente emparejados distintos, dos bases de semillas
~190 / 196
casillas interiores que difieren entre dos cimas cualesquiera
441
mejor tablero, estricto 5/5, aún a 14 de 455
Toda puntuación de esta página está bajo la convención estricta de cinco pistas (las cinco pistas oficiales respetadas, adyacencias no grises emparejadas sobre 480); las cinco pistas están en casillas interiores, ninguna en el anillo, así que cada completado aquí es un tablero estricto 5/5 legal y el borde queda libre de restricción de pista. Para situar estos números frente a los récords comunitarios y de cuaderno, véase la [página de récords](/es/research/records/). ## El marco es un objeto laxo La razón para dudar del atajo es estructural. El anillo del borde es un problema de emparejamiento de aristas cíclico y autónomo sobre cinco colores con suministro equilibrado, así que los bordes completamente emparejados son astronómicamente abundantes: el marco por sí solo admite, como se sabe desde hace tiempo, más de $10^{15}$ disposiciones. Producir versiones estructuralmente distintas es trivial, y se acoplan al interior por un único canal de baja información: sesenta colores orientados hacia dentro, una palabra frontera que el interior debe satisfacer, sobre un interior de 196 casillas y 22 colores. Ese canal es demasiado delgado para determinar el interior. La esperanza de que un borde distinto fije un interior alto distinto descansa, pues, sobre una información que el marco no porta. El experimento convierte ese argumento estructural en una prueba directa. ## Lo que se midió Sobre el conjunto oficial de 256 piezas, con las cinco pistas oficiales fijadas: 1. generar N bordes completamente emparejados y estructuralmente distintos desde cero (una colocación en profundidad aleatorizada sobre las sesenta casillas de borde, gris hacia fuera, cada adyacencia de anillo emparejada, deduplicado por igualdad exacta del anillo); 2. congelar cada borde y llenar sus 196 casillas interiores con **un** solo productor fijo a presupuesto fijo: un haz tolerante a rupturas que llena el interior fila por fila, puntuando cada candidato por aristas emparejadas menos no emparejadas contra sus vecinos ya colocados (el borde congelado incluido) y podando a un ancho fijo con un desempate por semilla; 3. reportar la banda de puntuación del tablero completo, la distancia de Hamming por losetas entre los mejores completados, y si algún borde alcanza la franja récord. Dos preguntas, y solo dos: **¿son distintas las cimas?** y **¿son altas las cimas?** ### La ejecución principal Dieciséis bordes completamente emparejados estructuralmente distintos, haz de interior de ancho 128, tres semillas por borde, se conserva la mejor: | Cantidad | Resultado | | --- | --- | | Bordes completamente emparejados distintos generados | 16 (de 17 intentos en profundidad) | | Banda de puntuación de las cimas (mín / mediana / máx) | 434 / 437 / 440 | | Algún borde alcanza la franja récord (>= 455) | no | | Brecha de la mejor cima por borde a 455 | 15 | | Hamming por losetas interiores (sobre 196 casillas) | 188 a 191, media 190,4 (120 pares) | | Mejor tablero, estricto 5/5, borde aún emparejado | sí y sí (440, 40 rupturas) | Las dos filas portantes son la tercera y la penúltima. **Ningún borde alcanza la franja récord**: el mejor de los dieciséis marca 440, aún a 15 de 455 y a unos 20 del máximo estricto 5/5 del cuaderno. Y los completados son **casi máximamente distintos**: entre dos cualesquiera, 188 a 191 de las 196 casillas interiores difieren. Los bordes diversifican el tablero casi por completo y no seleccionan en absoluto su calidad; cada uno de los dieciséis se aloja en una ventana de seis puntos, 434 a 440. El mejor tablero de la ejecución, un completado estricto 5/5 legal de un borde completamente emparejado, se puede visualizar desde el archivo de resultados versionado del topic de reproducción. ### La pasada de robustez Como el objetivo es precisamente que la identidad del marco no importa, el resultado debe mostrar que no es un accidente de una sola base de semillas. Una segunda pasada independiente (doce bordes, una base de semillas distinta) concuerda: banda 434 a 441 (mediana 438), mejor 441 aún a 14 de 455, Hamming por losetas interiores 187 a 191 (media 190,3), y el mejor tablero de nuevo un completado estricto 5/5 de un borde completamente emparejado. Dos bases de semillas independientes, 28 bordes distintos en total, y ninguno cruza 445, y mucho menos la franja récord. ## Por qué un interior más fuerte solo lo afila Una pasada de cuaderno anterior realizó esta misma prueba con un interior más débil, de ajuste duro, que se estancaba en los 250 y nunca se acercaba a la franja récord. Esta reproducción sustituye deliberadamente por un productor de interior *más fuerte*, el haz tolerante a rupturas de arriba, que siempre llena las 196 casillas. Su banda absoluta es por tanto más alta, mediados de 430 en lugar de los 250. Eso no ablanda el hallazgo; lo afila. Incluso con un solucionador de interior mucho mejor, ningún borde distinto alcanza la franja récord, y los bordes siguen siendo casi máximamente distintos. Un interior más fuerte no puede hacer informativo al borde, porque el borde es una cáscara aguas abajo, de baja entropía, colgada del interior, y no lo que lo fija. La banda es una propiedad del solucionador de interior; el hallazgo negativo es una propiedad del acoplamiento marco-interior, y es independiente del productor. ## Qué cierra y qué no cierra El resultado es un enunciado de rigidez sobre el borde. Cierra la diversificación por el borde como ruta hacia mejores puntuaciones: un borde completamente emparejado distinto da un tablero distinto, pero no uno más alto, así que no hay gradiente que escalar recorriendo el espacio de los bordes. Donde vive realmente la información de las puntuaciones altas es en el interior de las filas superiores, y esa es exactamente la región que el [muro de rigidez](/es/research/why/rigidity-wall/) describe como una isla congelada. El marco no fija la cima; la cima se fija a sí misma, y el borde cuelga de ella. La contabilidad de la costura que acopla ambos, el equilibrio exacto de colores a través de la interfaz borde-interior, es el tema de la [página de equilibrio del borde](/es/research/why/border-balance/). Este es un hallazgo negativo de configuración única, acotado con franqueza. Se establece puramente a partir de bordes generados desde cero y completados por un solo productor fijo, la forma de robustez que el estudio original pedía. No intenta el control más difícil de congelar el borde propio de un tablero récord y completarlo, lo que requeriría un tablero que no forma parte del kit de inicio público; el hallazgo se sostiene sin él. Y la banda absoluta es la del solucionador de interior, no una afirmación sobre un dígito exacto: lo que porta es la brecha a la franja récord, y se reproduce con margen. Cada número de arriba lo recalcula el productor versionado del topic de reproducción enlazado en las fuentes: un programa Rust que carga la instancia oficial, genera sus propios bordes completamente emparejados, congela cada uno y completa el interior con el único haz fijo tolerante a rupturas, y emite dos archivos JSON (la ejecución principal y la pasada con semilla independiente) que contienen cada cifra citada aquí. ## Relacionado - [Pureza del anillo: el borde es un subpuzle cerrado, sin holgura](https://eternity2.dev/es/research/why/ring-purity/) — Cinco de los 22 colores nunca tocan las 196 piezas interiores. La lista de piezas obliga a toda solución válida a gastar las 120 semiaristas de marco en el anillo del borde: un subpuzle autónomo con holgura exactamente nula (120 = 120), un circuito euleriano sobre cinco vértices, acoplado al interior solo por 56 aristas orientadas hacia dentro. - [El equilibrio del borde](https://eternity2.dev/es/research/why/border-balance/) — Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Dónde colocas las pistas importa más que cuántas > En un puzzle de 16×16 construido como Eternity II, dieciocho pistas repartidas por el tablero lo resuelven en minutos, mientras que amontonarlas en filas contiguas necesita un centenar solo para bajar la búsqueda a decenas de miles de millones de colocaciones. La posición, no la cantidad, es la palanca, y apunta directamente a la fase final. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/hint-geometry/ - Actualizado: 2026-07-10 - Temas: structure, search-space, backtracking - Reproducir: `just experiments hint-study-solve` - Fuente: El estudio de densidad de pistas de Joe y la resolución con 18 pistas de Peter McGavin (hilo de groups.io «A method to prune E2 search space by 17-30%+», msg 11725) — https://groups.io/g/eternity2/message/11725 - Fuente: Peter McGavin: 18 pistas repartidas resuelven el puzzle 16×16 tipo E2 en menos de 15 minutos (groups.io msg 11746) — https://groups.io/g/eternity2/message/11746 - Fuente: Peter McGavin: el backtracker optimizado se remonta al mensaje de Mike de 2007 (groups.io msg 3098) — https://groups.io/g/eternity2/message/3098 --- Regala a un solucionador algunas piezas correctas y el puzzle se vuelve más fácil. La pregunta obvia es cuántas necesitas. La mejor pregunta, resulta, es *dónde* van. En un puzzle de 16×16 construido con la receta de colores exacta de Eternity II, dieciocho pistas colocadas en los sitios adecuados lo resuelven en minutos; amontonarlas en cambio en filas contiguas, una medición necesitó un centenar (sesenta de borde más cuarenta interiores) solo para bajar la búsqueda a decenas de miles de millones de colocaciones. Para fijar nosotros mismos el punto de cruce, repetimos el mismo enfrentamiento en un tablero lo bastante pequeño para resolverse por completo: igualar un retículo repartido de dieciséis pistas exigió **cinco filas contiguas, cuarenta pistas**, unas dos veces y media la cantidad, decidida por la sola geometría. ## Dos maneras de gastar las mismas dieciocho pistas > **[Interactive: HintGeometryDiagram]** Rendered on the canonical page (link above); not shown in this markdown export. El tablero de la izquierda es la disposición real que usó Peter McGavin: dieciocho pistas en un retículo regular, cada tercera columna en unas pocas filas sueltas. Su backtracker sencillo, de recorrido por filas, resolvió el puzzle 16×16 tipo E2 de Joe (cinco colores de borde, diecisiete colores interiores, la misma distribución que el puzzle oficial) en menos de quince minutos en un solo núcleo, recorriendo un árbol de búsqueda de 41 160 067 167 colocaciones. Amontona en cambio las dieciocho pistas en las primeras filas, tal como un recorrido de arriba abajo las acumula de forma natural, y no compran casi nada: la parte difícil del tablero sigue completamente abierta. Joe lo había abordado por el otro lado, sembrando filas contiguas enteras a partir de una solución conocida, y necesitaba muchas más para bajar la búsqueda a un tamaño manejable: un centenar de pistas (sesenta de borde más cuarenta filas interiores) todavía dejaba un árbol de unos 47 mil millones de colocaciones ([msg 11725](https://groups.io/g/eternity2/message/11725)). Ninguna de las dos cifras fija el cruce con exactitud, porque un tablero 16×16 nunca termina en segundos y el recuento en bruto queda enturbiado por las coincidencias gratuitas que un bloque macizo te regala. Así que encogimos el puzzle a un tamaño que sí termina, un 8×8 construido con la misma receta de colores, y medimos la magnitud real: los nodos hasta una resolución completa, sobre treinta instancias semilla por disposición. Allí, un retículo repartido de dieciséis pistas resuelve cada instancia en unos pocos miles de nodos de búsqueda. Las filas contiguas tienen que subir a cinco filas completas, cuarenta pistas, antes de resolver cada instancia dentro del mismo presupuesto de nodos. A *igual* cantidad, dieciséis pistas repartidas superan a dieciséis amontonadas en dos filas por más de dos órdenes de magnitud en nodos de búsqueda, y el bloque no logra resolver seis de las treinta. El retículo alcanza el final de la partida; el bloque no lo alcanza hasta casi sepultarlo.
18
pistas repartidas, resuelto en minutos
2,5×
más pistas, en filas contiguas, para igualar un retículo repartido (medido hasta la resolución)
99%
del tiempo de búsqueda transcurre más allá de la profundidad 132
70%
del tiempo de búsqueda transcurre más allá de la profundidad 150
## Por qué gana la posición: las pistas tienen que llegar a la fase final Los dos números de la derecha explican los de la izquierda. Joe instrumentó su backtracker a lo largo de mil millones de iteraciones y descubrió que el trabajo no está repartido por el tablero en absoluto: el 99 % ocurre después de la profundidad 132 de 256, y el 70 % después de la profundidad 150. Casi todo el sufrimiento está en la mitad final del relleno, y la mayor parte pasado el punto de las tres quintas partes. Un bloque de pistas contiguas arriba se gasta justo donde la búsqueda nunca iba a costar. Acorta un comienzo fácil y deja intacta la cola cara. Las pistas repartidas hacen lo contrario: salpicadas por el tablero, hasta bien dentro de la región que la búsqueda alcanza en último lugar, se anticipan a las decisiones que, de otro modo, estallarían en lo profundo del árbol. Este es el mismo hecho que los tableros récord llevan en su superficie. Un tablero casi perfecto concentra todos sus daños en la banda de filas en la que la búsqueda terminó, porque [las filas que rellenas en último lugar son donde el puzzle te hace pagar](/es/research/why/mismatch-geometry/). Las pistas solo ayudan en la medida en que alcanzan esa banda antes que la búsqueda. También encaja con [por qué el interior no da jugadas forzadas](/es/research/why/no-forced-moves/): con cada celda interior aún aceptando decenas de vecinas, el valor de una pista no es la propagación local sino la restricción global, que corta subárboles enteros que la búsqueda habría tenido que recorrer. Una pista lejos de la región difícil corta subárboles que de todos modos eran baratos. ## Lo que dice y lo que no dice Este es un resultado sobre un puzzle de 16×16 construido según la receta de colores de Eternity II, no sobre el puzzle oficial, cuyas cinco pistas fijas son un regalo distinto, mucho más pequeño, en sitios distintos. Lo que se transfiere es la forma de la lección, y es la misma que el argumento de [poda frente a velocidad](/es/research/why/prune-vs-speed/) formula desde el otro lado: lo que importa es cambiar dónde gasta su esfuerzo la búsqueda, y el esfuerzo vive en la fase final. Un puñado de pistas dirigidas a esa fase final vale muchísimo más que otras tantas dirigidas a cualquier otro sitio. > **Note** > > Los recuentos, el árbol de 41 mil millones de nodos y las estadísticas de profundidad son las mediciones de Joe y de Peter McGavin, publicadas en la lista de groups.io eternity2 en enero de 2026; la disposición repartida que se muestra está decodificada del tablero publicado por Peter (msg 11746). El backtracker optimizado que usó Peter se remonta al mensaje de Mike de 2007 (msg 3098). Estos son resultados de la comunidad sobre un puzzle tipo E2 concreto, registrados aquí con atribución en lugar de re-derivados. El umbral de cinco filas es nuestra propia medición, sobre nuestros propios tableros 8×8 generados y nuestro backtracker: el menor número de filas contiguas cuya tasa de resolución y mediana de nodos hasta la solución igualan ambas un retículo repartido de dieciséis pistas, sobre treinta instancias semilla por disposición. Reprodúcelo con `just experiments hint-study-solve`. ## Relacionado - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. --- # ¿Es NP-completa esta instancia y cómo la codifico? > El emparejamiento de aristas es NP-completo como familia, pero eso no dice nada de un tablero 16×16 fijo: una instancia aislada es una constante, no un problema. Lo que sí es cierto es la dureza en el peor caso de la familia y la dureza empírica de esta instancia, y cómo escribir el puzzle para un solucionador SAT, de cobertura exacta o de PLE, con pequeños esbozos detallados. Una medición con tableros plantados pone cifras a la elección de la formulación: un acantilado de resolubilidad que un paradigma de búsqueda golpea y otro cruza, y que se mueve con el número de colores. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/how-hard-is-this-instance/ - Actualizado: 2026-07-22 - Temas: exact-methods - Fuente: Demaine & Demaine 2007, "Jigsaw Puzzles, Edge Matching, and Polyomino Packing: Connections and Complexity" (Graphs and Combinatorics 23): el emparejamiento de aristas es NP-completo — https://doi.org/10.1007/s00373-007-0713-4 - Fuente: Ansótegui, Béjar, Fernàndez & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge (CCIA 2008) — https://repositori.udl.cat/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/download - Fuente: Knuth, The Art of Computer Programming, Volume 4B: Algoritmo X y Algoritmo C (cobertura exacta con colores) — https://www-cs-faculty.stanford.edu/~knuth/taocp.html - Fuente: Puzzle Eternity II (Wikipedia) — https://en.wikipedia.org/wiki/Eternity_II_puzzle --- Esta página responde a una pregunta que reaparece una y otra vez en los Stack Exchange de matemáticas e informática y que encabeza la lista de disputas en la página de discusión de Wikipedia sobre el puzzle: el emparejamiento de aristas es NP-completo en general, así que ¿nos dice eso algo sobre *este* tablero 16×16 fijo y, en concreto, cómo se le entregaría Eternity II a un solucionador? Las respuestas breves son: no, no directamente, aquí van tres codificaciones, y una medición al final muestra cuánto puede importar la elección entre ellas. ## Primero, el error de categoría La NP-completitud es una propiedad de un *problema*, lo que en teoría de la complejidad designa una familia infinita de instancias indexada por un parámetro de tamaño $n$. Los «puzzles de emparejamiento de aristas» forman una familia de ese tipo: dados $n$, un conjunto de piezas cuadradas y un alfabeto de colores, decidir si las piezas embaldosan un marco $n \times n$ con todas las aristas adyacentes en concordancia. Ese problema de decisión es NP-completo ([Demaine & Demaine 2007](https://doi.org/10.1007/s00373-007-0713-4)), lo que significa tanto que una solución propuesta es verificable en tiempo polinómico como que todo problema de NP se reduce a él. Un único tablero fijo no es una familia. La instancia de Eternity II tiene una respuesta bien definida, «sí, tiene solución» (los diseñadores la construyeron a partir de una solución) o, en la forma de competición con 5 pistas, «sí, con exactamente esta disposición». Esa respuesta cabe en un solo bit. Un solo bit es una constante, y «¿es NP-completa esta constante?» no es una pregunta bien formada: existe un algoritmo en tiempo constante que imprime la respuesta (`return true`), sencillamente lleva la respuesta grabada dentro. Preguntar si una instancia aislada es NP-completa incurre en el mismo error de categoría que preguntar si el número 17 es de tiempo polinómico. Así pues, la familia es dura y la instancia es una constante. ¿Qué hay, entonces, de realmente cierto y útil que decir sobre la dificultad del tablero que tienes sobre el escritorio? ## Lo que sí es cierto Dos afirmaciones distintas, mantenidas por separado: - **Dureza en el peor caso de la familia.** Como el problema general es NP-completo, no se conoce ningún algoritmo que supere el tiempo exponencial en el peor caso a medida que $n$ crece, y encontrar uno probaría $\mathrm{P}=\mathrm{NP}$. Esto acota lo que puede prometer cualquier solucionador de emparejamiento de aristas genérico. No dice nada sobre cómo se comporta una entrada *específica*. - **Dureza empírica de esta instancia.** Una dureza que se puede medir. El tablero 16×16 tiene del orden de $1{,}115\times10^{557}$ disposiciones distintas de piezas y rotaciones, y el puzzle parece admitir muy pocas soluciones (la forma con 5 pistas está diseñada para tener esencialmente una; véase la [teoría de la complejidad](/es/research/why/complex-theory/) para la estimación del número esperado). Por tanto, una búsqueda con backtracking enhebra un espacio astronómicamente amplio hacia un conjunto de soluciones casi vacío, y así pasa casi todo su tiempo explorando callejones sin salida. Por eso el puzzle es duro *en la práctica*, y es una afirmación sobre este tablero, no sobre la familia. El teorema del peor caso y la dificultad empírica apuntan aquí en la misma dirección, pero son enunciados de naturaleza distinta y solo uno de ellos es un teorema. Una familia puede ser NP-completa mientras que una instancia dada es trivial (muchas lo son), y una instancia puede ser brutalmente difícil de resolver en la práctica incluso dentro de una familia polinómica. Ansótegui et al. plantearon exactamente ese caso empírico para Eternity II, construyendo a partir de él bancos de pruebas para solucionadores y midiendo la dificultad directamente en lugar de apelar al teorema general ([CCIA 2008](https://repositori.udl.cat/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/download)). > **La versión en una línea** > > «¿Es Eternity II NP-completo?» No: una instancia no tiene clase de complejidad. «¿Es NP-completo el problema de emparejamiento de aristas?» Sí. «¿Es difícil de resolver esta instancia?» Empíricamente sí, porque el espacio de búsqueda es de ~$10^{557}$ de ancho y el conjunto de soluciones está casi vacío, de modo que la búsqueda se ahoga en callejones sin salida. ## Codificarlo: el montaje Lo demás es práctico: ¿cómo escribes el tablero para que un solucionador pueda masticarlo? Las tres codificaciones de abajo comparten el mismo esqueleto. Numera las celdas $c = 1 \dots 256$, las piezas $p = 1 \dots 256$ y las rotaciones $r \in \{0, 1, 2, 3\}$. Una *colocación* es un triple $(c, p, r)$: la pieza $p$ depositada en la celda $c$ girada $r$ cuartos de vuelta. Toda codificación tiene que expresar tres cosas: 1. cada celda recibe exactamente una colocación, 2. cada pieza se usa exactamente una vez, 3. dondequiera que dos celdas se toquen, los colores de la arista compartida concuerdan. Las codificaciones solo se diferencian en cómo expresan la restricción 3, el emparejamiento de colores, y esa diferencia es toda la historia. Los esbozos de abajo usan un tablero 2×2 o 3×3 para que puedas ver todas las cláusulas; el 16×16 tiene la misma forma a mayor escala. ## SAT / FNC Introduce una variable booleana $x_{c,p,r}$, verdadera cuando la pieza $p$ se asienta en la celda $c$ en la rotación $r$. En el tablero completo eso son $256 \times 256 \times 4 \approx 262{,}000$ variables antes de cualquier restricción. Luego: - **Exactamente una colocación por celda.** Para cada celda $c$, una cláusula de «al menos una» sobre todas sus colocaciones, $\bigvee_{p,r} x_{c,p,r}$, más cláusulas de «a lo sumo una» que prohíben cualquier par, $\lnot x_{c,p,r} \lor \lnot x_{c,p',r'}$ para colocaciones distintas. - **Exactamente una celda por pieza.** La imagen especular: para cada pieza $p$, una cláusula de «al menos una» sobre las celdas que podría ocupar, más cláusulas de «a lo sumo una» para que se coloque solo una vez. - **Emparejamiento de aristas.** Para cada adyacencia interior y cada colocación cuya arista expuesta muestra el color $k$, prohíbe toda colocación de la celda vecina cuya arista enfrentada no sea $k$: una cláusula binaria $\lnot x_{c,p,r} \lor \lnot x_{c',p',r'}$ por cada par en conflicto. Un esbozo 2×2 concreta la tercera familia. Las celdas $A$ (arriba a la izquierda) y $B$ (arriba a la derecha) comparten una arista vertical; la arista este de $A$ debe ser igual a la arista oeste de $B$. Para cada colocación $(A,p,r)$ que muestra el color este $k$, y cada colocación $(B,p',r')$ cuyo color oeste no es $k$, añade $\lnot x_{A,p,r} \lor \lnot x_{B,p',r'}$. Haz lo mismo para $A$/$C$ verticalmente y las otras dos adyacencias interiores. Eso es todo lo que es la restricción 3: un gran montón de cláusulas binarias «estas dos colocaciones no pueden ser ambas verdaderas». El problema es que el montón es enorme. Las cláusulas de conflicto dominan, las codificaciones de «a lo sumo una» añaden su propia explosión (el enfoque ingenuo por pares es cuadrático; las codificaciones en escalera o por comandante lo cambian por variables auxiliares), y el resultado es una fórmula con millones de cláusulas cuya estructura le da casi nada que aprender a la búsqueda guiada por conflictos. Esto se ha intentado desde 2008 y los solucionadores SAT completos se atascan en el tablero completo; Blackwood, entre otros, informó de que SAT no ayudaba. La codificación es limpia, el solucionador no es el cuello de botella, lo es la *instancia*. Véase [codificaciones SAT y CSP](/es/research/build/exact/sat-csp-encodings/) para el historial de bancos de pruebas y dónde los veredictos SAT todavía se ganan su sitio como pruebas de imposibilidad en regiones pequeñas. ## Cobertura exacta y enlaces danzantes La visión por cobertura exacta es más pulcra, y esconde una trampa que hace tropezar a casi todo el que recurre a los enlaces danzantes de Knuth. Plantea 512 *ítems*: uno por celda («la celda $c$ está rellena») y uno por pieza («la pieza $p$ se usa»). Cada *opción* es una colocación $(c,p,r)$, y cubre exactamente dos ítems: la celda $c$ y la pieza $p$. Un conjunto de opciones que cubre cada ítem exactamente una vez es un tablero con cada celda rellena y cada pieza usada una vez. Esa es una instancia de cobertura exacta limpia, y el **Algoritmo X** de Knuth con enlaces danzantes resuelve la cobertura exacta a la perfección. Aquí está la trampa. Las restricciones 1 y 2 son condiciones de cubrir-una-vez, que es exactamente lo que expresa la cobertura exacta. Pero la restricción 3, el emparejamiento de colores, no es en absoluto una condición de cubrir-una-vez: una arista compartida no se «usa una vez», se le «asigna un color en el que ambos vecinos coinciden». El Algoritmo X sin más no tiene forma de decir esto. La gente lo codifica, lo ejecuta y obtiene tableros con aristas discordantes, o intenta injertar ítems adicionales y descubre que la semántica de cubrir-una-vez se le resiste. Esta confusión concreta tiene su propia pregunta en el CS Stack Exchange. La solución es la propia extensión de Knuth, el **Algoritmo C**, para XCC, la cobertura exacta con colores (TAOCP Volume 4B). Junto a los ítems *primarios* (cubiertos exactamente una vez) añades ítems *secundarios* que pueden cubrirse cualquier número de veces, *siempre que todas las opciones que cubren un ítem secundario dado le asignen el mismo color*. Da a cada arista interior de la cuadrícula un ítem secundario. Una colocación que expone el color $k$ en una arista compartida asigna el color $k$ al ítem secundario de esa arista. Dos colocaciones pueden entonces coexistir a ambos lados de la arista solo si la colorean de forma idéntica, que es precisamente la restricción de emparejamiento de aristas, ahora expresada de forma nativa. Un esbozo 3×3: 9 ítems de celda y 9 ítems de pieza (primarios), más 12 ítems de arista interior (secundarios, uno por cada unión horizontal o vertical). Las colocaciones de la celda central tocan cada una cuatro ítems de arista secundarios y deben concordar en color con los cuatro vecinos; las colocaciones de una celda de esquina tocan dos. El Algoritmo C enhebra todo esto sin emitir jamás un tablero discordante. Lo que los estudiantes pasan por alto: **la cobertura exacta por DLX para Eternity II necesita el Algoritmo C, no el Algoritmo X.** La página [cobertura exacta y enlaces danzantes](/es/research/build/exact/exact-cover-dlx/) recorre la construcción XCC completa y dónde el DLX brilla de verdad (tableros pequeños, recuento exhaustivo de soluciones) frente a dónde se atasca en el 16×16. ## PLE y clique máxima, brevemente Dos encuadres más, útiles sobre todo como indicadores: - **Programación lineal entera.** Reutiliza las variables SAT como enteros 0/1 $x_{c,p,r}$. Las restricciones 1 y 2 se convierten en igualdades $\sum_{p,r} x_{c,p,r} = 1$ por celda y $\sum_{c,r} x_{c,p,r} = 1$ por pieza. El emparejamiento de aristas pasa a ser, para cada arista interior y cada color $k$, una condición de enlace que ata las colocaciones de color $k$ de los dos vecinos (una forma limpia: una nueva variable binaria de color de arista $y_{e,k}$ con $\sum_k y_{e,k} = 1$, y las colocaciones de cada lado implicando el $y$ correspondiente). Es una PLE de factibilidad, sin objetivo, y la relajación lineal es débil, de modo que la ramificación y acotación se comporta muy parecido a la búsqueda SAT. Véase [relajaciones lineales](/es/research/build/exact/lp-relaxations/). - **Clique máxima.** Construye un grafo cuyos vértices son las colocaciones legales y cuyas aristas unen cualesquiera dos colocaciones mutuamente compatibles (celdas distintas, piezas distintas y concordancia en cualquier arista compartida). Un tablero completo es una clique de tamaño 256. Es elegante sobre el papel, pero el grafo es inmenso y los solucionadores de clique no salen mejor parados; vale la pena conocerlo como reducción, no como ataque práctico. ## ¿Cuánto pesa la formulación? Un acantilado medido Las secciones anteriores terminan con una nota desalentadora: la codificación es limpia, la instancia es el muro. Esa afirmación merecía una cifra, y ponérsela la afinó en una dirección inesperada. El banco de pruebas es una familia de tableros *plantados*: instancias con marco y colores equilibrados, construidas a partir de una solución conocida, con cinco celdas de la solución fijadas como pistas, puntuadas con la convención de aristas emparejadas sin contar el borde exterior (una resolución completa a tamaño $N$ vale exactamente $2N(N-1)$ aristas emparejadas: 264 en 12×12, 480 en 16×16). Los tableros plantados no son el Eternity II canónico; plausiblemente admiten muchísimas soluciones donde el puzzle real está diseñado para tener en esencia una. Lo que ofrecen es una escalera de instancias resolubles por construcción que dos paradigmas de búsqueda distintos pueden atacar lado a lado. En este banco, a 22 colores, una búsqueda en profundidad con reinicios que solo coloca coincidencias exactas resuelve por completo cuatro de cinco semillas 10×10 (la más rápida en 4 ms) y dos de cinco semillas 11×11, y luego cero de cinco en 12×12 y cero en todos los tamaños superiores. El fallo no es cuestión de presupuesto. La instancia 12×12 de semilla 1 puntúa 127 de 264 tras 20 segundos, tras 45 segundos y tras 120 segundos, mientras el número de nodos visitados crece de 22 millones a 132 millones; una instancia 14×14 repta de 236 a 240 de 364 a lo largo del mismo estiramiento séxtuple del presupuesto. La búsqueda no está convergiendo despacio; está clavada. Entrega las instancias idénticas a CP-SAT con un modelo estructurado (una variable entera por celda que recorre los identificadores de pieza bajo una restricción AllDifferent, índices de pieza y rotación canalizados mediante tablas Element hacia variables de color por lado, todo planteado como pregunta de decisión) y el muro se mueve. Cuatro de las cinco instancias 12×12 caen en 31,7 a 88,1 segundos (la quinta agota el límite de 300 segundos), y una de las dos instancias 13×13 probadas cae en 74 segundos, con cada tablero devuelto reverificado de forma independiente: distinción de piezas, conformidad con las pistas, recuento de aristas recalculado. Son resoluciones completas verificadas de tableros que ninguna semilla de la DFS toca con ningún presupuesto. El acantilado pertenece al paradigma de búsqueda, no a los tableros. La ronda original de esta medición corría sobre un generador que permitía 26 colores interiores, un ajuste que el banco empaquetado no puede producir (su generador limita los colores interiores a 22, el recuento del puzzle real). A 26 colores el contraste era aún más nítido: CP-SAT resolvió por completo 25 de 25 instancias en los tamaños 10 a 14 con tiempos medianos de 0,10 a 0,84 segundos, medio segundo en 13×13, y terminó un 16×16 plantado en unos 15 segundos, mientras el acantilado de la DFS quedaba un peldaño más arriba, en 13×13. Esa misma ronda midió además la brecha de formulación en aislamiento: sobre una instancia 12×12, un MIP genérico sobre binarias de colocación con filas de suma uno, pasado por la ramificación y acotación de HiGHS, devolvió 11 de 264 aristas emparejadas tras 300 segundos; CP-SAT devolvió las 264 completas sobre la misma instancia en 0,42 segundos. Mismo problema, misma máquina, unos tres órdenes de magnitud, y toda la diferencia está en cómo se escribieron las restricciones. Poner los dos ajustes lado a lado hace aflorar un segundo hallazgo: el acantilado se mueve con el número de colores, para ambos paradigmas a la vez. A 26 colores, la DFS muere en 13×13 y CP-SAT atraviesa un 16×16 plantado en segundos. A 22 colores, la DFS muere un peldaño antes, en 12×12, y el propio CP-SAT se ralentiza unos dos órdenes de magnitud entre 11×11 y 12×12 y empieza a agotar sus límites desde 12×12 en adelante: las sondas 14×14 y 16×16 chocan ambas con un tope de 120 segundos. (Los peldaños grandes fueron sondas de una sola semilla, y los tiempos de CP-SAT a 22 colores llevan algo de inflación por un brazo DFS compartiendo la máquina, que ni de lejos explica la brecha con las medianas por debajo del segundo a 26 colores.) Más colores significa un tablero más restringido y una búsqueda más fácil para todos; menos colores arrastra a ambos paradigmas hacia abajo a la vez, de modo que las mediciones tomadas a 26 colores favorecen a todos los solucionadores de la carrera. El 16×16 plantado en el que la sonda agotó su tiempo merece verse, mostrado aquí como su solución construida: [16×16 plantado, 480/480](https://eternity2.dev/viewer?puzzle=gen_16x16_c22_s1&puzzle_size=16&board_edges=aebaabgeabvbacvbadvcacrdadlcadodadidaeqdafneadgfacwdafscachfaabcbjcagmujvhpmvuohvtpurnttlrsnouvriphuqowpnluogqllwpqqsvgphkgvbackcgdauwsgpluwoqmlpjoqtikjsnnivvvnhmrvwhpmuuuhlutuqqkugguqgnhgcabndgdassrguihsmqkiokhqkjnknokjvkrormikpptmuroptrirkomruumohjsubaejdlearsulhqmskvpqhqkvnwpqknuwrlqnikrltjlkosnjiglsmoogmnjoslqneaclerdauhjrmiihpklikwlkprmwunprqnwnrgnnlgjgnvmglknvowskjkowqwpkcafwdjfajjgjiqqjlptqlnipmslnpowswjjonoljjttomsrtnwtssrowosmrpmisfafmfhdagvkhqjsvtinjitsilwntwjrwjvrjlkovtsvkrhqstquhojhqmkqjitrkfaftdufakstusuisnmvuslsmnrmlrsvrrhnsoomhvtloqvntutvvhkltqukkrmtufaemfhfatwhhirhwvtrrsjptmtujvtgtnvstmohvliionwhivqqwlomqkgpotljgeaflfqeahgqqhmngrprmpqhpuugqgiquslqihqrliimqhkjiqwwkmspwpqisjkjqfaekembaqipmnioirkwihvkkgntvqhhnqnshrwgnmvlwjgwvwqkgpwmqiliwjulleadububapssuohjswmuhkowmtnpohrtnspgrgnrplnvnwgpnkvvgmhlvihwhlnshdadnbkeasgtkjjigumvjwwwmpjgwtpojgujprvtuvruvptorvmmtlsomwigssopidafoegcatppgiltpvpwlwohpgiuoolhijroltigrujgiotljmkjtorkkgiirppmifabpcbaapeabtbaewcabhcacueacheaeocaegfacgcaflbacjfabkbafieabmdaebaad). > **Un testigo, contado diez veces** > > La ronda a 26 colores también probó diez familias heurísticas sobre el acantilado, desde un rellenador ingenuo fila a fila hasta la propagación AC-3 y la poda por déficit de Hall: seis resolvieron por completo el 12×12 y ninguna resolvió el 13×13. Diez solucionadores de acuerdo parecían diez pruebas de que las instancias eran el muro. Era una sola. Los diez se comprometen cronológicamente y con avidez sobre información local, así que fallan juntos por la razón compartida, y el primer solucionador de un paradigma de verdad distinto tumbó la conclusión en medio segundo. El acuerdo de N solucionadores de la misma familia es un testigo con N voces. ## Dónde te deja esto Si viniste a preguntar si la teoría de la NP-completitud vuelve a esta instancia demostrablemente difícil, la respuesta es que no lo hace, ni puede: las clases de complejidad describen familias, y este tablero es una entrada fija con una respuesta fija. El problema general de emparejamiento de aristas es NP-completo, lo que pone un techo a lo que puede prometer cualquier solucionador a medida que $n$ crece, pero la dificultad que realmente sientes es empírica: un espacio de $10^{557}$ de ancho sobre un conjunto de soluciones casi vacío. Cada codificación de arriba captura fielmente el puzzle, y en el 16×16 completo ninguna lo vuelve fácil; pero el acantilado de los tableros plantados muestra que la elección del formalismo no tiene nada de neutral por debajo de esa escala, donde el mismo tablero puede ser inalcanzable para un paradigma y una resolución de un minuto para otro. Una vez codificado el tablero, la palanca que queda es la [consistencia de arco](/es/research/build/reduce/arc-consistency/) y un orden de búsqueda inteligente, que es donde retoma el resto de esta sección. ## Relacionado - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - [Codificaciones SAT y CSP](https://eternity2.dev/es/research/build/exact/sat-csp-encodings/) — Escribir el puzzle como cláusulas y entregárselo a un solucionador industrial: el movimiento evidente, intentado desde 2008. Por qué los solucionadores completos se atascan en el tablero completo, y dónde sus veredictos siguen ganándose el sustento como pruebas de imposibilidad. - [Cobertura exacta y enlaces danzantes](https://eternity2.dev/es/research/build/exact/exact-cover-dlx/) — Eternity II se formula limpiamente como un problema de cobertura exacta, y el algoritmo X de Knuth con enlaces danzantes es la máquina clásica para ellos. Dónde brilla de verdad (tableros pequeños, conteo exhaustivo) y las dos razones por las que no vence al 16×16: un árbol de búsqueda que nunca se reduce, y ningún crédito parcial. - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. --- # La región difícil que no se puede diseñar de otro modo > Rellena un tablero en cualquier orden fijo y los tres cuartos de arriba entran con soltura, mientras la dificultad se amontona en la banda que terminas al final. En cuarenta tableros generados, todo lo que sobra cae en la mitad inferior cada vez; baraja el orden de relleno y se dispersa, así que la región difícil la fabrica el barrido, no está escondida en el tablero. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/irreducible-hard-region/ - Actualizado: 2026-07-22 - Temas: structure, search-space - Reproducir: `just research-irreducible-hard-region` --- Dos cosas son ciertas en casi todo intento de resolver Eternity II partiendo el tablero en piezas que se rellenan por turno. La primera pieza que rellenas entra con facilidad. La última, no. Ya sean las piezas filas, bandas, franjas, bloques o anillos concéntricos, la dificultad no se reparte entre ellas; se junta en la región que la búsqueda alcanza en último lugar, y ahí se planta como un muro. Esta página pone a prueba la versión más nítida de esa afirmación y la encuentra verificada con claridad, con un matiz que la medición deja a la vista: la región difícil no es un parche fijo del tablero esperando a que lo encuentren. La fabrica el orden en que rellenas, y aterriza donde ese orden termina. ## La afirmación, y sus tres partes La conjetura completa, en el cuaderno del proyecto, tiene tres partes. Primero, **la dificultad se localiza**: rellena de forma secuencial y el sobrante, las celdas que la búsqueda no logra colocar, se concentra en la última región. Segundo, **esa región es demasiado grande para resolverse de forma exacta**: supera la ventana de unas 112 celdas donde una completación exacta todavía vuelve en un tiempo razonable. Tercero, **está demasiado acoplada globalmente para terminarla con una heurística**: como cada pieza se usa una sola vez, gastar una pieza escasa pronto en la parte fácil mata de hambre a la parte difícil después, de modo que ninguna reparación local alcanza un tablero alto nuevo. Solo la primera parte es un hecho nítido que se lee directamente en un tablero. Las otras dos son techos ligados a un solucionador exacto concreto y a la escasez propia del conjunto oficial de 22 colores, y el propio cuaderno las califica de empíricas más que de demostradas. Por eso esta página reproduce la primera parte, la localización, y lleva las otras dos como conjetura. La única lectura que añade al cuaderno es que la localización se entiende mejor como una propiedad del orden de barrido que del tablero, algo que el control de abajo vuelve inevitable. ## El instrumento, y por qué es leal La medición parte de cero sobre tableros enmarcados, equilibrados en color y **con solución plantada**, construidos por el generador con semilla del kit inicial: una solución perfecta existe con seguridad, así que cualquier atasco pertenece a la búsqueda y no a una instancia irresoluble. Para cada semilla del generador, el verificador construye un tablero 16x16 sin pistas fijadas, y luego ejecuta sobre él dos veces la misma búsqueda en profundidad con emparejamiento exacto y reinicios, una vez en orden de celdas row-major y otra en un orden de celdas aleatorio con semilla, y lee dos números del parcial más profundo que alcanza cada rama: - la **fracción de frontera**, la fila llena más profunda dividida por el lado del tablero, que dice hasta dónde llegó la parte fácil; y - la **fracción de sobrante en la mitad inferior**, entre las celdas aún vacías, la porción que cae en las filas 8 a 15, que dice dónde aterrizó la dificultad. Ambos números están definidos para cualquier orden de relleno, que es justo lo que permite que la rama aleatoria sea un control justo frente a la rama row-major. Los scores se dan aquí bajo la convención de aristas emparejadas (solo junturas interiores; una solución 16x16 completa vale 480), aunque esta página no reclama récord alguno; las estadísticas de frontera y sobrante son geometría de celdas, no score de aristas. Para situar los tableros del proyecto frente a los mejores de la comunidad, véase la [página de récords](/es/research/records/). ## Lo que hace el barrido Ejecutado en Apple Silicon, un solo núcleo, cuarenta tableros por dos ramas en unos tres minutos con el presupuesto por defecto de 1,5 millones de nodos. La fuente del cuaderno es una síntesis de muchos experimentos de descomposición más que una sola medición, así que no compromete ninguna tabla de cifras por semilla para un tablero del kit; los números de abajo son la forma que predice la conjetura, y el acuerdo es sobre esa forma y su signo. Barrido de localización, cuarenta tableros 16x16 generados y enmarcados, 22 colores, desde cero: | Cantidad | Forma que predice la conjetura | Medido, row-major | Medido, control aleatorio | | --- | --- | ---: | ---: | | Tableros resueltos por completo | ninguno esperado (esto no es un solucionador) | 0 / 40 | 0 / 40 | | Fracción de frontera mediana en tableros atascados | las diez filas y más de arriba se rellenan con soltura (por encima de 0,6) | 0,75 (12 de 16 filas) | 0,0 (ninguna fila se rellena por completo) | | Rango de la fracción de frontera | alto | 0,6875 a 0,75 | no aplica | | Fracción de sobrante media en la mitad inferior | cerca de 1,0 (la región difícil es la última banda) | 1,000 | 0,503 | | Tableros con todo el sobrante en la mitad inferior | todos | 40 / 40 | 0 / 40 | La búsqueda row-major alcanza una frontera mediana de tres cuartos del tablero, doce filas completas de dieciséis, antes de no poder colocar ya un emparejamiento perfecto. Eso coincide con la imagen del cuaderno donde las diez filas y más de arriba se rellenan casi con soltura. Y en cada uno de los cuarenta tableros, todo el sobrante cae en la mitad inferior: la fracción de sobrante media en la mitad inferior vale exactamente 1,000. ## El control es todo el asunto Toma los mismos cuarenta tableros y rellena cada uno en un orden de celdas uniformemente aleatorio en lugar de row-major. Ahora no hay última región, y el sobrante se dispersa. La fracción de sobrante media en la mitad inferior vale 0,503, indistinguible de un reparto igual, y ninguno de los cuarenta tableros concentra su sobrante abajo. Así que la región difícil no está en algún sitio del tablero esperando a que la encuentren. El mismo tablero tiene toda su dificultad abajo bajo un barrido row-major y no la concentra en ningún sitio bajo un orden aleatorio. La dificultad es real, pero la coloca la descomposición. Es la imagen especular de lo que muestran directamente los tableros récord: sus [pocos desajustes se amontonan en una banda](/es/research/why/mismatch-geometry/) cuya posición fija la dirección en que la búsqueda rellenó el tablero. Aquí se puede ver esa banda crearse y desplazarse sin cambiar nada más que el orden de relleno. ## El atasco es un muro, no un arranque lento Una última comprobación separa un muro de una búsqueda que sencillamente se quedó sin nodos. Reejecuta ocho de los tableros a cuatro millones de nodos, unas 2,7 veces el presupuesto del barrido, y compara la frontera con las mismas semillas de la serie principal. | Cantidad | Barrido a 1,5 millones de nodos | Reejecución a 4 millones de nodos | | --- | ---: | ---: | | Fracción de frontera, semillas 1 a 8 | 0,6875 a 0,75 | 0,6875 a 0,75 | | Fracción de sobrante media en la mitad inferior | 1,000 | 1,000 | La frontera no sube con el presupuesto. Cuatro de los ocho tableros suben una fila, uno baja una fila, y tres no se mueven en absoluto, todo dentro de una sola fila de temblor, y el sobrante permanece por completo en la banda inferior. La búsqueda no es lenta; está detenida, y está detenida en la última región que intenta rellenar. Ese es el fallo insensible al presupuesto que predice la conjetura, reproducido directamente. ## Qué zanja esto y qué no Esto reproduce solo la mitad de localización de la conjetura. Las dos mitades restantes se enuncian como conjetura y no se miden aquí, deliberadamente. La mitad **demasiado grande para resolverse de forma exacta** es propia de la máquina y del solucionador: la ventana exacta de unas 112 celdas es una propiedad de una búsqueda de aristas estrictas concreta, y un solucionador exacto más potente la desplazaría. Nuestra región difícil son las cuatro o cinco filas de abajo, unas 64 a 80 celdas, que en realidad quedan por debajo de la ventana de unas 112 celdas; es más pequeña que las cerca de 96 a 128 celdas que describe la conjetura, porque estos tableros generados se rellenan más profundo que las descomposiciones del conjunto oficial que el cuaderno sintetizó. Si una región difícil llega alguna vez a superar la ventana en el conjunto oficial es la afirmación aparte, no medida. La mitad **demasiado acoplada globalmente** es un techo empírico ligado a la escasez del conjunto oficial, el acoplamiento que permite que una pieza escasa gastada arriba [mate de hambre a una celda muy abajo](/es/research/why/piece-theft/). Nuestros tableros vienen del generador enmarcado del kit, con solución plantada y que plausiblemente admite muchas soluciones, donde se cree que el puzzle real admite esencialmente una. La localización vale para cualquier tablero resoluble bajo un relleno secuencial, porque el sobrante tiene que vivir en algún sitio y un barrido row-major lo pone abajo, de modo que la familia generada es una prueba adecuada de la localización; no es una prueba de la afirmación de acoplamiento, que exigiría el conjunto oficial. Esa brecha de familia de instancias explica por qué esta reproducción es cualitativa y no exacta: no hay una tabla fuente que reproducir al bit, solo un signo y una banda, y ambos se reproducen. La lección más amplia aterriza donde aterrizan los demás muros estructurales. Una descomposición no elimina la dificultad; la reubica. Es la misma forma que el [muro de rigidez](/es/research/why/rigidity-wall/), donde un récord es una isla localmente congelada, y por eso el [mapa de métodos](/es/research/why/walls-and-methods/) muestra cada familia de descomposición deteniéndose contra un muro en un lugar distinto del tablero en vez de escapar de uno. ## Relacionado - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Dónde viven los desajustes > Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/mismatch-geometry/ - Actualizado: 2026-07-22 - Temas: structure - Fuente: Anuncio del récord 469 de Peter McGavin: el tablero cuyas once aristas no apareadas analiza esta página (groups.io msg 10045, septiembre de 2020) — https://groups.io/g/eternity2/message/10045 --- Puntúa un tablero récord arista por arista y aparece algo llamativo: los desajustes no están repartidos. El 469 de McGavin tiene sus once aristas no apareadas, todas ellas, en las cinco primeras filas (filas 0 a 4); las filas 5 a 15 son localmente perfectas. El tablero es, en efecto, una losa impecable de 11 filas con todos los daños barridos contra una sola arista. Puntúa ahora de la misma manera los mejores tableros construidos desde cero de este proyecto. Los daños vuelven a estar en una banda de cinco filas, pero abajo. Los desajustes de KEYRING y de GAUNTLET se asientan en las filas 11 a 15, con las filas 0 a 10 perfectas. Es la misma imagen volteada de arriba abajo. ## Verlo en los tableros reales Elige un tablero. La banda sombreada es donde caen realmente sus desajustes, calculada en vivo con la regla de puntuación propia del motor: los tableros de la comunidad arriba, los de este proyecto abajo. > **[Figure]** Interactivo: dónde se ven obligados a vivir los desajustes — interactive: MismatchGeometryLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Alejar la vista: la banda es una ley del corpus Dos tableros podrían ser una anécdota. Agreguemos entonces. Toma todos los tableros de alta puntuación que este proyecto ha guardado, 1 964 tableros con 455 aristas apareadas o más (convención de aristas apareadas; la [página de récords](/es/research/records/) sitúa estas cifras internas en su contexto), y marca cada junta según la frecuencia con la que falla. La misma imagen reaparece como ley de frecuencias. Las juntas que conectan las filas 11 a 14 con sus vecinas se rompen en aproximadamente el 38 a 49 % de todos los tableros. La junta más frágil de todo el tablero está en la fila 12, columna 2, rota en el 49,4 % de los casos; las cuatro siguientes (47,5 %, 47,3 %, 46,3 %, 46,0 %) también pertenecen a la fila 12, y las veinte juntas más rotas se sitúan todas en las filas 11 a 13. Son recuentos exactos sobre el corpus guardado, no muestras. Una advertencia, que en realidad es el hallazgo mismo: cada uno de esos 1 964 tableros salió del propio pipeline de este proyecto, que rellena de arriba hacia abajo. El mapa de calor no es una propiedad del puzzle; es la firma del pipeline, escrita 1 964 veces. Un relleno descendente gasta su presupuesto de conflictos por el camino, el conjunto de restricciones se tensa primero en torno a la fila 12, y esa costura se parte en la mitad de las ejecuciones. Un solucionador con otro orden de relleno movería la costura, que es exactamente lo que muestran los tableros de la comunidad en la figura de arriba. ## Por qué se voltea: el orden de recorrido El vuelco no es una coincidencia; es la huella de cómo se construyó cada tablero. Una búsqueda que rellena el tablero de abajo hacia arriba gasta pronto sus colocaciones perfectas, abajo, y se ve obligada a absorber todo el conflicto acumulado en las últimas filas que alcanza: arriba. Una búsqueda que rellena de arriba hacia abajo hace exactamente lo contrario y amontona los daños abajo. Los desajustes siempre acaban apiñados contra la arista donde el solucionador terminó. Mismo puzzle, mismo tipo de tablero, orden de construcción opuesto. Hay un matiz que la historia de los dos solucionadores esconde: el vuelco es por ejecución, no por herramienta. Dentro de la propia producción de este proyecto conviven dos familias de tableros casi récord con geometría invertida. En una (mejor tablero con 458 aristas apareadas, una antigua mejor marca interna; véase la [página de récords](/es/research/records/) para el contexto), todos los desajustes interiores ocupan las cinco últimas filas del interior y las nueve primeras filas interiores son perfectas. En la otra (mejor con 457), los veinte desajustes interiores están todos en las filas 1 a 4, con las filas 5 a 14 perfectas. Los mejores tableros de ambas familias solo comparten 7 de 256 colocaciones (2,7 %): son tableros casi disjuntos, no dos arreglos de un mismo marco. Y ambos están localmente congelados; la programación entera exacta, aplicada a cada racimo de daños de hasta unas treinta celdas, no mejora ninguno de los dos en una sola arista. Son familias que hemos muestreado, un puñado de tableros cada una: la partición es una observación, no un censo. Pero matiza la historia: el orden de recorrido es la fuerza dominante, y sin embargo lo que fija de verdad la banda es la trayectoria de la ejecución individual, la cuenca en la que cayó. Mismo pipeline, bandas opuestas. ## La misma banda, bajo un objetivo distinto El patrón no es un artefacto de cómo puntuamos. Algunos solucionadores optimizan algo completamente distinto: no las aristas apareadas en un tablero completo, sino el mayor número de piezas que puedes colocar sin conflicto alguno, dejando huecos en lugar de desajustes. Persigue ese objetivo y los huecos caen en el mismo sitio. El tablero «Only seven holes» de Louis Verhaard coloca 249 de las 256 piezas sin conflicto, y los siete huecos se asientan todos en las filas 1 a 4, la banda de arriba una vez más. Laurent Zamofing, alcanzando un techo similar en 2026 recombinando los tableros récord de la comunidad, observó lo mismo: «el residuo sin resolver siempre cae en esa banda de arriba» ([msg 11901](https://groups.io/g/eternity2/message/11901)). Dos objetivos que no comparten nada salvo el puzzle, y el daño sobrante se reúne contra la misma arista. Es el orden de construcción, no la regla de puntuación, lo que decide dónde termina alojándose la dificultad. (Más sobre esta variante en la [página de variantes](/es/research/build/variants/).) ## La forma del daño El daño tiene una forma constante, no solo un lugar constante. En todos los tableros casi récord que hemos perfilado, el grafo de las aristas en desajuste es un bosque: nunca cierra un bucle. Y a medida que los tableros mejoran, el daño se fragmenta. Los tableros intermedios, entre 444 y 447 (aristas apareadas), llevan 24 a 26 desajustes repartidos en cinco a diez racimos, el mayor de 13 a 15 celdas. Tres tableros con 458, hallados de forma independiente, comparten una huella idéntica: 17 desajustes en solo dos racimos, el mayor de 25 celdas; muy probablemente una misma cuenca encontrada tres veces. Un tablero con 459 se divide en cuatro racimos pequeños, el mayor de apenas 10 celdas. Los mejores tableros llevan un residuo más pequeño y más disperso. Eso sugiere una conjetura, y nada más que eso: la mejora podría funcionar fragmentando el daño hasta que cada fragmento sea lo bastante pequeño para repararse localmente. La concentración misma puede medirse. Comprime la densidad de desajustes por celda con una transformada de Fourier bidimensional conservando el 1 % de los coeficientes: un daño bien concentrado se reconstruye con poco error, un daño disperso no. En esta escala, un tablero con 457 en particular está más concentrado (error de reconstrucción 0,145) que los tres tableros con 458 (0,236 cada uno, idénticos: la misma cuenca otra vez) y prácticamente empata con el 459 (0,148), mientras que los tableros intermedios se sitúan entre 0,32 y 0,34. El corpus es pequeño (una decena de tableros), pero dos medidas estructurales independientes confirman el orden, y apunta a una hipótesis que vale la pena retener: la calidad estructural podría ser un eje en parte ortogonal a la puntuación bruta. Un 457 puede estar más cerca de la forma de un récord que un 458. ## Nada cae en el borde Reparte las 480 juntas de un tablero en tres clases: 60 juntas borde-borde a lo largo del anillo, 56 juntas donde el anillo toca el interior, y 364 juntas interior-interior. Compara el 469 de McGavin con un tablero de este proyecto que alcanzó 444 aristas apareadas sobre un borde equivalente: la descomposición cuenta dos veces la misma historia. Ambos logran un 60 de 60 perfecto en el anillo y 55 de 56 en la costura. Toda la brecha de 25 aristas es interior-interior, 354 de 364 frente a 329 de 364. (Solo dos tableros: léelo como una ilustración de la descomposición, no como una ley del corpus.) Los cinco colores exclusivos del marco forman un ciclo autónomo que cualquier búsqueda competente satura; los diecisiete colores interiores son donde muerde la escasez. Una sonda más afilada sugiere que el borde ni siquiera lleva la información. Congela solo el borde del mejor tablero de este proyecto y deja que un relleno voraz complete el interior: alcanza apenas 204 a 209 aristas apareadas, el mismo rango que da un borde válido aleatorio (202 a 214). Congela en cambio las filas de arriba y el relleno sube de forma sostenida: 209 sin fijar nada, 258 con cuatro filas, 334 con ocho, 364 con diez, 406 con doce, 424 con trece, y la puntuación completa con las dieciséis. Se usó una única política de compleción voraz; trátalo como una sonda, no como una ley. Pero bajo ese relleno, la identidad de un gran tablero vive en el esqueleto interior de su primera docena de filas, no en su marco. ## La banda del daño es la banda de la libertad La banda de abajo no es solo donde se rompen los tableros de este proyecto; es donde discrepan entre sí. Sobre 421 tableros completos con 455 aristas apareadas o más (todos, de nuevo, de una misma familia de pipeline), cuenta cuántos arreglos distintos exhibe cada fila a lo largo del corpus. Las filas 0 a 11 muestran 39 a 63 arreglos distintos cada una, aproximadamente el 9 a 15 % de los tableros únicos en esa fila. Las filas 12 a 15 saltan a 131 o 132 cada una, en torno al 31 %: el triple de diversidad. Las filas donde viven los desajustes son también aquellas donde los tableros casi récord más difieren unos de otros. Acércate a cuatro tableros distintos que alcanzan todos 459 aristas apareadas y la misma partición aparece celda a celda. Solo 3 de las 256 celdas son idénticas en los cuatro (las dos esquinas superiores más una celda del anillo del borde); 212 celdas alternan entre exactamente dos colocaciones; y las 24 celdas que difieren en los cuatro tableros se alojan por completo en las filas 13 a 15 (nueve, diez y cinco celdas; ninguna en las filas 0 a 12). En los cuatro tableros de igual puntuación que comparamos, toda la variación genuina vive en la banda del daño. Un contraste merece una frase: el reordenamiento que separa uno de esos tableros del 469 de McGavin abarca todo el interior de forma más o menos uniforme, cuatro a nueve celdas en cada fila de la 1 a la 14. Moverse entre tableros de igual puntuación es un barajado de la banda de abajo; moverse a un tablero realmente mejor exige reconstruir por todas partes (la [página de los ciclos sigma](/es/research/why/sigma-cycles/) lo hace preciso). El mecanismo detrás de la diversidad es el mismo que detrás del daño: las últimas filas rellenadas absorben a la vez el conflicto acumulado y la libertad acumulada. Todo lo anterior es esqueleto; la banda de abajo es donde se ramifican las compleciones distintas de alta puntuación. ## Lo que nos dice Esta es la forma visible de dos hechos más profundos. Primero, los grandes tableros son de verdad casi completos: la distancia hasta 480 está concentrada, no difusa, y por eso la programación entera los encuentra localmente congelados en todas partes salvo en esa única banda (el muro de rigidez). Segundo, dice que el final de partida es toda la partida: las filas que rellenas en último lugar son donde el puzzle te hace pagar, de modo que el orden en el que buscas decide dónde aterriza la dificultad. Es la misma lección que la carrera de caminos del espacio de juego te hace sentir, aquí inscrita en la estructura de cada tablero récord. Dos sondas hacen concretos ambos hechos. La primera: una antigua mejor marca de este proyecto, un tablero con 459 aristas apareadas, muestra el patrón en su forma más limpia. Sus 21 desajustes están todos en las filas 12 a 15, las 192 celdas de las filas 0 a 11 son perfectas, y los defectos forman una única región conexa a lo largo de las cuatro filas de abajo. El arreglo obvio es fijar las doce filas perfectas y volver a buscar solo la parte de abajo. Esa búsqueda muere en milisegundos, hacia la profundidad 211: dados esos compromisos de arriba, 459 es el óptimo. (Un solo tablero, una sola configuración de búsqueda; el agotamiento, eso sí, es exacto.) La región perfecta no es holgura en espera. Está gastada: cada grado de libertad aguas arriba se consumió para hacerla perfecta, y por eso la banda residual no puede repararse en el sitio, y por eso mejorar ese tablero acabó exigiendo movimientos de destrucción y reparación que cruzan todo el tablero. La segunda sonda es la prueba espejo sobre el 469 de McGavin, cuyo daño se esconde arriba. Fija sus 14 filas superiores y deja que una búsqueda de destrucción y reparación rellene la parte de abajo: reconstruye el 469 completo. Fija sus 14 filas inferiores y rellena la parte de arriba: solo llega a 462, sin umbral nítido por el camino (443, 453, 454, 462 a medida que el bloque fijado crece de once a catorce filas). Y fijar quince filas de abajo lo hace peor (460) que fijar catorce, porque congelar más tablero elimina la holgura que la búsqueda necesitaba para absorber la parte de arriba, la difícil. Fue una sonda rápida de configuración única (una semilla, sesenta segundos de reparación por punto): toma los números exactos con cautela; la dirección de la asimetría, en cambio, se predijo antes de la ejecución y quedó confirmada por ella. La lectura: la banda donde viven los desajustes es exactamente la parte del tablero que lo define, y el resto se deriva de ella. Para esa familia de tableros, la brecha por encima de 469 se lee como un problema de las cinco filas de arriba (una interpretación, no un teorema). La banda que tu búsqueda deja para el final no es solo donde pagas; es donde ocurre el trabajo insustituible. > **Note** > > Los recuentos por fila y la banda resaltada se calculan en tu navegador a partir de las aristas reales del tablero (la misma regla de puntuación que usa el motor), no colocados a mano. El hallazgo subyacente y la explicación por el orden de recorrido están consignados en el cuaderno de laboratorio del proyecto. ## Relacionado - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [STAGED](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construir todo el tablero desde cero, sin marco prefijado, por etapas, dejando que el borde emerja al final a partir de las piezas restantes. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Sin jugadas forzadas > La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/no-forced-moves/ - Actualizado: 2026-07-01 - Temas: structure, search-space - Reproducir: `just research-no-forced-moves` - Fuente: Sin jugadas forzadas: artículo, código y resultados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/no-forced-moves --- Bar, BarChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; Cada una de las 196 piezas interiores tiene entre 73 y 137 otras piezas que pueden situarse legalmente a su derecha (contando las parejas de la derecha, como hace el gráfico anterior). La pieza típica dispone de más de un centenar de opciones. Ni una sola pieza queda jamás fijada a una única elección. Este es el reverso de los patrones prohibidos. Allí, casi toda combinación de piezas es imposible. Cabría pensar que todas esas reglas acabarían acorralando a las piezas en su sitio. No lo hacen: las restricciones descartan combinaciones sin acorralar jamás a una pieza individual, de modo que un solucionador nunca recibe una jugada libre y forzada sobre la que construir.
{data.forcedPieces}
piezas forzadas a una sola opción
{data.minPartners}–{data.maxPartners}
parejas por pieza (del mín. al máx.)
{data.meanPartners}
parejas en promedio
## Cuántas vecinas admite cada pieza Las 196 piezas interiores, agrupadas según cuántas vecinas de la derecha acepta cada una. La distribución entera se mantiene muy lejos de uno. > **[Interactive: PartnerHistogram]** Rendered on the canonical page (link above); not shown in this markdown export. ## Verlo en un puzzle real El motor rellena unas cuantas celdas; luego contamos, en vivo, cuántas piezas encajan legalmente en la siguiente. Casi nunca baja a uno. > **[Figure]** Interactivo: número de candidatas, celda a celda — interactive: ForcedMovesLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Por qué importa Coloca esto junto a los patrones prohibidos y aparece la verdadera forma de la dificultad. A escala local el puzzle parece holgado: cualquier pieza encaja al lado de muchas otras, así que no hay nada que propagar ni cadena de jugadas forzadas que aprovechar. A escala global casi toda combinación es ilegal. La dureza vive en esa brecha: mucha libertad local, casi ninguna coherencia global. Un solucionador tiene que encadenar una larga sucesión de elecciones de apariencia libre que solo resultan erróneas mucho más tarde. ## Relacionado - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. --- # El puzzle no tiene función de altura > Toma el truco del físico que vuelve solubles los defectos cristalinos e intenta convertir un empalme mal casado en una dislocación con una carga conservada. Fracasa de tres maneras: una altura escalar es ciega a las roturas, el conjunto de roturas forma cadenas abiertas y no bucles cerrados, y la corriente orientada por color no se conserva. Solo sobrevive un bit de paridad sin signo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/no-height-function/ - Actualizado: 2026-07-23 - Temas: structure, search-space - Fuente: Verificador sin función de altura: artículo, código fuente Rust y tabla de resultados por tablero (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/no-height-function --- Hay una idea prestada que, si se sostuviera, cambiaría cómo se ataca este puzzle. En la física estadística de los cristales, un teselado lleva una **función de altura**: un número que vive en las caras y sube o baja una cantidad fija al cruzar cada arista. Cuando el teselado es perfecto, la altura es univaluada. Un defecto es un punto donde recorrer un pequeño bucle sumando los pasos no te devuelve al punto de partida; lo que sobra es una carga conservada (los físicos la llaman **vector de Burgers**), y los defectos solo pueden crearse o destruirse en pares que se cancelan. Ese último hecho es el premio. Es lo que permite el **movimiento de gusano**: una reescritura extendida por la red pero simple en el espacio de alturas, que desliza dos defectos uno hacia el otro hasta que se cancelan. Puntúa un tablero completo de Eternity II contando sus empalmes internos casados sobre 480 (la convención de aristas casadas usada en todo este wiki; la [página de récords](/es/research/records/) sitúa en contexto los números que siguen). Un empalme mal casado es una **rotura**. Si las roturas fueran dislocaciones con una carga orientada conservada, existiría un movimiento no local y fundamentado que baja el número de roturas haciendo caminar un par de ellas una hacia la otra para aniquilarlas, justo el tipo de movimiento que la búsqueda por simple intercambio no puede ver. Esta página deja constancia de por qué esa esperanza no sobrevive al contacto con un tablero real. El fracaso no es cuestión de gusto. Son dos hechos concretos medibles en cualquier tablero, más un tercero que no necesita tablero alguno, y el verificador del tema de reproducción mide los dos primeros en los tableros récord registrados de este proyecto. ## La altura escalar es ciega desde el principio Toma primero la versión más ingenua: coloca un solo número en cada celda y lee el «paso» a través de un empalme como la diferencia de los dos números de las celdas. Recorre las cuatro celdas alrededor de una esquina interior de la cuadrícula y suma los cuatro pasos. El número de cada celda entra en el bucle una vez con un más y una vez con un menos, así que la suma es **cero**, siempre, para cualquier asignación de números y sin importar qué empalmes estén rotos. Una rotura vive en un empalme; nunca cambia la suma de bucle de ninguna esquina. Por tanto, una altura escalar por celda no puede detectar una rotura en absoluto. No es que las detecte mal; es estructuralmente sorda a ellas. Esta parte es una identidad de una línea, por lo que se enuncia aquí en vez de medirse. ## El conjunto de roturas son cadenas abiertas, no bucles cerrados El arreglo del físico consiste en dejar de usar los valores de las celdas y poner en cambio el paso en un empalme **exactamente cuando ese empalme está roto**. Entonces la suma de bucle alrededor de una esquina de la cuadrícula cuenta los empalmes rotos que tocan esa esquina, tomados módulo dos. La altura es univaluada solo si cada esquina toca un número par de roturas, es decir, solo si las roturas forman bucles cerrados sobre la cuadrícula de esquinas. No lo hacen. En cada tablero medido, decenas de esquinas tocan un número **impar** de roturas. En la imagen cristalina, esas esquinas impares son **núcleos** de dislocación, los cabos sueltos de cadenas de roturas abiertas. Una altura no puede cerrarse alrededor de un cabo suelto, así que no puede existir globalmente. El recuento de estos núcleos es el primer número que informa el verificador, y sigue siendo grande incluso en los mejores tableros: | Tablero (este proyecto) | Aristas casadas | Roturas | Núcleos de grado impar | Colores con corriente desequilibrada | | --- | ---: | ---: | ---: | ---: | | mejor en aristas casadas, 463 | 463 | 17 | 22 | 10 | | un tablero 460 | 460 | 20 | 22 | 9 | | un tablero 458 | 458 | 22 | 34 | 15 | | un tablero 460 anterior | 460 | 20 | 26 | 12 | Los cuatro son scores en aristas casadas, revalidados por el verificador antes de medir la topología; un tablero cuyo valor revalidado difiere del registrado se rechaza de plano, de modo que los números de arriba describen siempre un tablero de calidad conocida y verificada. El mejor de ellos queda a solo 17 roturas de una hipotética solución y todavía lleva 22 núcleos de cadena abierta. La obstrucción no se ablanda a medida que un tablero se acerca a una solución, y ese es todo el punto: no existe ningún tablero cerca de la cima donde los bucles se cierren en silencio. ## La corriente orientada no se conserva Vale la pena descartar una última escapatoria. Quizá resolver las roturas color por color rescate una carga conservada. Para un solo color, orienta cada empalme medio roto (uno donde exactamente un lado muestra ese color, lo que es necesariamente una rotura) como una flecha que apunta desde la celda portadora del color hacia su vecina no casada, y suma las flechas en un vector por color sobre todo el tablero. Una corriente realmente conservada sumaría **cero**. No lo hace. En cada tablero, varios colores tienen un total distinto de cero, listado en la última columna de arriba: entre 9 y 15 de los 22 colores llevan una corriente desequilibrada, según el tablero. La razón es estructural, y explica por qué ningún ingenio lo remedia. En una solución real, cada arista de color está casada con una arista del mismo color, así que no hay empalmes medio rotos y la corriente de cada color es trivialmente cero. Un empalme medio roto es precisamente una media arista **no casada**, una cuyo compañero falta, de modo que su flecha no tiene contra qué cancelarse. La suma desequilibrada no es un desliz de contabilidad; es la firma del compañero que falta. Solo a modo de orientación, una ejecución anterior e independiente del cuaderno midió los mismos recuentos de núcleos en tres tableros distintos (un tablero 451, uno 463 y uno 458) y obtuvo **28, 22 y 32** núcleos impares; los cuatro tableros aquí presentados quedan en **22, 22, 34 y 26**, exactamente en el mismo régimen, coincidiendo el tablero 463 en 22 por ambos lados. Los colores y signos precisos que salen desequilibrados son etiquetas ligadas a cómo se numeró un tablero concreto y no tienen sentido propio; solo el recuento de colores desequilibrados, y el hecho de que nunca sea cero, es el contenido reproducido. Son los propios tableros de este proyecto, muy por debajo de los mejores de la comunidad, 470 bajo la convención de la pista central y 464 con las cinco pistas colocadas (de nuevo, la [página de récords](/es/research/records/) conserva ese contexto); se usan aquí porque la obstrucción debe verificarse en un tablero real de alta puntuación de la instancia oficial, no en un tablero pequeño generado donde sería o bien vacía o bien fuera de instancia. ## Lo que sobrevive es un único bit Reúne los tres fracasos. Una altura escalar es sorda a las roturas; el conjunto de roturas son cadenas abiertas con decenas de cabos sueltos; la corriente orientada por color no se equilibra. Toda ruta hacia una altura de vector de Burgers está cerrada. Lo que queda es mucho más débil que una altura: el único invariante conservado del conjunto de roturas es una **paridad por color sin signo**, un bit por color (un elemento de un espacio de dimensión 22 sobre el cuerpo de dos elementos). Un bit registra si el recuento de empalmes medio rotos de un color es par o impar; no tiene dirección ni magnitud. Un bit no es la holonomía de ninguna función de altura, y ningún movimiento de gusano puede construirse sobre él. Ese es el resultado negativo, y vale la pena enunciarlo con claridad porque la idea que mata es realmente atractiva: la imagen de dímeros y defectos queda cerrada por el lado de las roturas, y con ella el sueño de un movimiento no local limpio que camine los defectos hasta aniquilarlos. La intuición física que deja en pie es más esperanzadora y vive en otra parte: la salida correcta de un tablero localmente congelado (véase el [muro de rigidez](/es/research/why/rigidity-wall/)) es un **movimiento de agrupamiento correlacionado**, varias fichas giradas juntas, en vez de cualquier edición de un solo sitio. Ese relato compañero es un resultado distinto y no se mide aquí. También encaja con la forma del puzzle tal como se ve en los tableros mismos. Las roturas no se dispersan; se [amontonan en una sola banda](/es/research/why/mismatch-geometry/) y el grafo de las aristas mal casadas es siempre un bosque, sin cerrar nunca un bucle, que es el mismo hecho de cadena abierta que esta página demuestra imposible de cerrar. El bit de paridad superviviente es un primo de la ley de conteo detrás de [por qué 479 es imposible](/es/research/why/parity-defect-floor/): ambos son lo que se obtiene cuando un invariante orientado colapsa en uno sin signo sobre el cuerpo de dos elementos. La dirección es exactamente lo que esta instancia se niega a darte. ## Compruébalo tú mismo El verificador carga cada tablero registrado a través del analizador de tableros del kit de inicio, lo revalida con la regla canónica (y rechaza todo tablero cuyo valor revalidado difiera de su score registrado), y luego hace una pasada lineal para contar los núcleos de grado impar y las corrientes por color desequilibradas. Es determinista, no usa aleatoriedad, corre en bastante menos de un segundo en un solo núcleo, y su salida es estable al bit entre ejecuciones. El [artículo, el código fuente Rust y la tabla de resultados están en GitHub](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/no-height-function), y el bloque de reproducción de esta página apunta al mismo tema. Dos reservas de alcance, que el hallazgo enuncia con claridad sobre sí mismo: esta es una reproducción **cualitativa**. Los recuentos exactos de núcleos y las sumas de corriente son funciones del tablero concreto, así que se leen como «en el mismo régimen que», nunca como una coincidencia al bit con una tabla anterior; y la obstrucción de la altura escalar de la primera sección es una identidad demostrada, afirmada en vez de recalculada. ## Relacionado - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [Por qué 479 es imposible](https://eternity2.dev/es/research/why/parity-defect-floor/) — Un argumento de conteo sobre el juego de piezas oficial prohíbe una puntuación de exactamente 479/480: las semiaristas de cada color vienen en cantidades pares, y una sola unión rota dejaría dos cuentas impares. El suelo bajo lo perfecto es 478, y a lo sumo 76 cuasi-soluciones a un movimiento pueden rodear una solución. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Por qué 479 es imposible > Un argumento de conteo sobre el juego de piezas oficial prohíbe una puntuación de exactamente 479/480: las semiaristas de cada color vienen en cantidades pares, y una sola unión rota dejaría dos cuentas impares. El suelo bajo lo perfecto es 478, y a lo sumo 76 cuasi-soluciones a un movimiento pueden rodear una solución. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/parity-defect-floor/ - Actualizado: 2026-07-22 - Temas: structure, search-space - Fuente: David Eddy abre el hilo Parity: el número de aristas de cada tipo es par, y la consecuencia sobre la última pieza (msg 332, junio de 2007) — https://groups.io/g/eternity2/message/332 - Fuente: El ejemplo detallado de Christophe Weibel de una última pieza que no encaja en su hueco (msg 335) — https://groups.io/g/eternity2/message/335 - Fuente: El veredicto de Brendan Owen sobre la paridad en E2: correcta por construcción, útil solo cerca del final de una búsqueda (msg 346) — https://groups.io/g/eternity2/message/346 - Fuente: Suelo de defecto por paridad: artículo, código del verificador y resultados del censo (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/parity-defect-floor --- Ordene los tableros completos por puntuación, contando las uniones internas emparejadas sobre 480 (la convención de aristas emparejadas usada en todo este wiki), y la escalera parece continua: peldaño tras peldaño, cada uno ocupado por algún tablero que alguien ha construido. Tiene exactamente un hueco. Ninguna colocación completa legal de las 256 piezas puntúa 479. Es un teorema sobre el juego de piezas publicado, demostrable solo con contar, y esta página recorre el argumento entero: la paridad que lo fuerza, el suelo de defecto de 2 que se sigue, y el censo que acota cuántas cuasi-soluciones a un movimiento pueden rodear una solución. Es también una entrada de [el barrido de teoremas](/es/research/why/theorem-sweep/), el repaso de lo que puede demostrarse a partir de la bolsa antes de lanzar búsqueda alguna. ## Contar las semiaristas 256 fichas con cuatro bordes cada una llevan 1024 semiaristas. El gris del marco ocupa 64, exactamente el número de posiciones orientadas hacia fuera en el borde (16 por lado). Las 960 restantes llevan los 22 colores, y el censo es llamativamente par: | Grupo de colores | Semiaristas | | ----------------------------------------- | ----------: | | Borde gris del marco | 64 | | Cinco colores de unión del marco (1 a 5) | 24 cada uno | | Cinco colores interiores (6 a 10) | 48 cada uno | | Doce colores interiores (11 a 22) | 50 cada uno | Cada cuenta de color es par. El total coloreado, 960, es exactamente el doble del número de uniones internas ($2 \times 16 \times 15 = 480$): en una colocación completa con marco legal, donde las 64 semiaristas grises miran hacia fuera, las semiaristas coloreadas llenan exactamente las 960 plazas de las uniones internas, sin sobrar nada. Nada de esto depende de dónde vayan las piezas. Son propiedades de la bolsa. Aquí se esconde un atajo agradable: la paridad podía predecirse sin examinar una sola pieza. Los diseñadores garantizan que existe una solución, y un tablero resuelto empareja cada semiarista coloreada con una compañera del mismo color, así que la cuenta de cada color es el doble de su número de uniones, par por definición. El censo solo confirma sobre el juego real lo que la resolubilidad ya prometía. ## El argumento, en cuatro líneas Fije cualquier colocación completa con marco legal (todo borde orientado hacia fuera es gris) y fije un color $c$. Cada una de las 480 uniones internas muestra dos semiaristas. Algunas uniones muestran $c$ por ambos lados, otras por uno solo. Contando las semiaristas de $c$: $$h(c) = 2 \cdot \#\{\text{uniones que muestran } c \text{ dos veces}\} + \#\{\text{uniones que muestran } c \text{ una vez}\}.$$ Como $h(c)$ es par, el número de uniones que muestran $c$ exactamente una vez también es par. Esto vale para todos los colores a la vez, en toda colocación completa, resuelta o rota. Suponga ahora una colocación con 479. Tiene exactamente una unión rota, y una unión rota muestra dos colores distintos, digamos $a$ y $b$ (si ambos lados coincidieran sería un emparejamiento; el gris queda excluido, pues sus 64 semiaristas miran hacia fuera). Toda otra unión está emparejada y muestra su color dos veces. Así que exactamente una unión muestra $a$ exactamente una vez. Uno es impar. Eso contradice la paridad de $h(a)$, y la colocación no puede existir. ## El suelo bajo lo perfecto es 478 Escriba el defecto de un tablero como $480$ menos su puntuación. La paridad prohíbe el defecto 1 y no prohíbe nada más: en el defecto 2 las cuentas impares pueden absorberse por parejas, y el argumento calla. Toda colocación completa legal es, por tanto, o una solución o falla al menos dos uniones. Un último hecho censado cierra la escapatoria restante: ninguna ficha de Eternity II queda fija bajo rotación alguna (0 de 256), así que un tablero no puede puntuar 480 difiriendo de una solución solo por una ficha girada en su sitio. Puntuación 480 significa solución. Cualquier otra cosa significa 478 o menos. Para los marcadores de hoy el peldaño ausente es académico: los mejores tableros completos de la comunidad están en 470 bajo la convención de solo la pista central y en 464 con las cinco pistas colocadas ([la página de récords](/es/research/records/) mantiene la escalera completa). Pero cambia lo que «casi resuelto» puede llegar a significar. No hay un 479 por el que pasar de camino a 480. El último paso de la subida va de 478 a 480, dos uniones a la vez, y todo método que mejore tableros una unión cada vez es estructuralmente incapaz de darlo. ## La cáscara de los 478 es dispersa Una solución existe; el rompecabezas se construyó a partir de una. ¿Qué hay justo al lado, en 478? Un tablero a un movimiento de una solución debe venir de un movimiento que rompa exactamente dos uniones, y solo dos clases de movimiento único pueden hacerlo. Ambas se cuentan en la bolsa: - **Intercambios de gemelas.** Dos fichas interiores que coinciden, en ciertas orientaciones, en tres de sus cuatro bordes. Colocadas de modo que los bordes coincidentes queden alineados, intercambiarlas perturba un borde de cada una: dos uniones. El juego contiene exactamente **50** de estas parejas cuasi-gemelas. - **Giros en el sitio.** Una ficha cuyos colores repetidos permiten que un medio giro o un cuarto de giro conserve dos de sus cuatro colores de borde en posición, de modo que girarla donde está rompe exactamente las otras dos uniones. El juego contiene **23** fichas de medio giro y **3** fichas de cuarto de giro de este tipo. Sumándolos, cualquier solución tiene a lo sumo $50 + 23 + 3 = 76$ vecinos de defecto 2 alcanzables con un solo intercambio o giro. Es una cota superior salida de la bolsa: que una pareja de gemelas dada quede realmente alineada dentro de una solución concreta depende de esa solución, así que la cuenta realizada para la solución de los diseñadores sigue abierta. El techo se mantiene de todos modos. Alrededor de la cima de la escalera, las cuasi-soluciones son dispersas, unas pocas decenas de tableros a lo sumo, mientras que los peldaños más abajo están poblados astronómicamente. Es la misma escasez que [los patrones prohibidos](/es/research/why/forbidden-patterns/) muestran a escala 2×2, leída en la cumbre. ## El marco paga su factura por adelantado El censo tiene una segunda historia que contar. Los colores 1 a 5 no aparecen en ninguna ficha interior; sus $5 \times 24 = 120$ semiaristas viven por completo en los bordes laterales de las 60 fichas del contorno. El anillo del contorno tiene exactamente 60 uniones, así que en toda solución los cinco colores de unión del marco las saturan exactamente, 12 uniones por color, sin holgura alguna. Y como la orientación de una ficha del contorno está forzada (gris hacia fuera), cada una de las 56 fichas de borde muestra un color fijo hacia el interior caiga donde caiga. Sumado sobre la bolsa, el interior recibe un vector de demanda fijo sobre los colores 6 a 22, a saber (4, 5, 3, 3, 1, 1, 2, 3, 4, 6, 4, 2, 3, 6, 4, 3, 2), 56 bordes orientados hacia dentro en total. Sea cual sea el marco que se construya, la factura de frontera del interior son esos mismos 17 números, conocidos antes de empezar búsqueda alguna. ## Lo que la comunidad vio en junio de 2007 La paridad se detectó antes incluso de que el rompecabezas saliera a la venta. En junio de 2007, David Eddy abre un hilo de la lista de correo titulado Parity con la observación de que «el número de aristas de cada tipo es par», y extrae la consecuencia sobre la última pieza: si la pieza final tiene cuatro bordes distintos, el hueco final debe mostrar los mismos cuatro colores en algún orden, lo que él estima en una probabilidad de 1 entre 6 de encajar ([msg 332](https://groups.io/g/eternity2/message/332)). Christophe Weibel aporta el ejemplo detallado de que la última pieza realmente puede no encajar en su hueco ([msg 335](https://groups.io/g/eternity2/message/335)), y Brendan Owen, que había estudiado el diseño, cierra el hilo con el veredicto práctico: la paridad es correcta para E2 por construcción, y en una búsqueda solo ayuda muy cerca del final ([msg 346](https://groups.io/g/eternity2/message/346)). Todo eso es cierto, y el hilo se detuvo ahí. Empujada un paso más allá, la misma observación contiene el teorema de arriba: la paridad hace más que volver azarosa la última pieza, borra el peldaño 479 de raíz, fija el suelo de defecto en 2, y limita a 76 la cáscara a un movimiento alrededor de cada solución. ## Compruébelo usted mismo Cada número de esta página se reduce a un censo en una pasada del juego oficial: las cuentas de semiaristas y su paridad, la identidad de ajuste exacto 960, el cero fichas simétricas por rotación, la partición 4/56/196 en esquinas/bordes/interior, los generadores de defecto 2 en 50/23/3, la saturación del marco y el vector de demanda hacia el interior. El verificador recalcula cada valor junto a su valor esperado y emite una bandera de éxito por afirmación; las 16 comprobaciones pasan y la salida es idéntica byte a byte entre ejecuciones. [El artículo, el código del verificador y los resultados están en GitHub](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/parity-defect-floor), y el bloque de reproducción de esta página apunta al mismo tema. Una salvedad de alcance: el argumento de paridad cubre colocaciones completas de las 256 piezas con un marco gris legal. Los tableros parciales, y los que rompen la regla del marco, quedan fuera de él. ## Relacionado - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. --- # El tablero como palabra de código > Lee un tablero completo como una palabra de código cuyas 480 junturas interiores son comprobaciones de tipo paridad, y el score de aristas emparejadas pasa a ser 480 menos el número de comprobaciones fallidas. Es una lente limpia que descansa sobre una sola identidad portante, y conviene ser preciso sobre lo que la vista de códigos correctores aporta y lo que solo renombra. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/permutation-code-wall/ - Actualizado: 2026-07-22 - Temas: structure - Reproducir: `cd research/topics/permutation-code-wall/compute && cargo run --release > ../results/permutation_code_wall.json` - Fuente: El juego de piezas de Eternity II y el visor interactivo de tablero (bucas.name) — https://e2.bucas.name/ - Fuente: La lente tablero-como-palabra-de-código: artículo, código del verificador y resultados JSON (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/permutation-code-wall --- Hay una manera de mirar un tablero terminado que toma todo su vocabulario de los códigos correctores de errores, y resulta realmente esclarecedora en cuanto uno sabe qué afirma exactamente. Extiende la rejilla de 16 por 16, trata cada ficha como un símbolo, y trata cada lugar donde dos fichas vecinas se encuentran como una *comprobación* que pasa (las dos aristas enfrentadas son del mismo color) o falla. Hay 480 de esas junturas interiores. La lista de comprobaciones que fallan es un *síndrome*, y una solución completa es el único tablero cuyo síndrome está vacío. Puntúa un tablero según la [convención de aristas emparejadas](/es/research/records/) usada en toda esta wiki (cuenta las junturas interiores que emparejan, de 480), y la aritmética sale sola: el score es 480 menos el número de comprobaciones fallidas. Esa sola línea, score igual a 480 menos el peso del síndrome, es todo el motor de la lente de códigos. Todo lo demás que dice sobre el puzzle (distancia mínima, decodificadores, conjuntos de parada) se construye encima. Así que conviene fijar qué es realmente esa identidad, y separar la parte de este cuadro que es un hecho real y contable sobre el juego oficial de la parte que es solo un cambio de ropa. ## Qué renombra la lente y qué mide El reparto claro, enunciado sin rodeos porque en eso está la cuestión. La identidad misma renombra en vez de revelar. El «peso del síndrome» es el recuento de aristas interiores no emparejadas; el puntuador ya llama a ese recuento *roturas* y ya lo define como el score máximo menos el score alcanzado. Así que «score igual a 480 menos el peso del síndrome» no es un descubrimiento sobre Eternity II. Es la definición del score escrita en lenguaje de códigos. No es una crítica: un buen renombre puede volver legible una estructura. Solo significa que la identidad te da un punto de vista, no un número. Bajo el vocabulario, en cambio, hay tres hechos que son propiedades reales del diseño publicado de 256 piezas, cada uno exactamente contable, cada uno comprobable frente a la instancia oficial: - **480 comprobaciones.** Una rejilla de 16 por 16 tiene exactamente 480 junturas interiores. Es $2WH - W - H$ con $W = H = 16$, es la longitud de la propia lista de adyacencias del puntuador, y es el score máximo del kit. Tres rutas independientes al mismo 480. - **Un código de permutación.** Las 256 fichas son todas distintas salvo rotación, de modo que un tablero legal usa cada una de las 256 piezas exactamente una vez. En términos de códigos, la palabra de código no es una cadena libre de símbolos; es una permutación, y esa restricción es mucho más fuerte que las comprobaciones de juntura por sí solas. - **Un código de borde.** Exactamente cinco colores (etiquetados del 1 al 5) aparecen solo en el marco, nunca en una ficha interior, y el color de marco gris se apoya en cero medias aristas interiores. El reborde es un pequeño código aparte apilado sobre las junturas. Eso es lo que da a la lente algo concreto sobre lo que apoyarse. El [teorema de paridad](/es/research/why/parity-defect-floor/), leído en este lenguaje, es un enunciado de que este código no tiene síndrome de peso uno: no se puede hacer fallar exactamente una comprobación en un tablero completo legal, de modo que 479 es un peldaño vacío y el suelo de defecto es 2. La [ley de área](/es/research/why/entropy-area-law/) y el [robo de pieza](/es/research/why/piece-theft/) son, en este lenguaje, enunciados sobre el código de permutación: es la regla «cada pieza una sola vez», y no el emparejamiento de colores, la que carga con la dificultad. ## La identidad, comprobada bit a bit Como la identidad es portante, la reproducción la confirma directamente a través del puntuador canónico del kit, el mismo puntuador que excluye el reborde que el sitio y cada motor usan, de modo que una comprobación fallida aquí significa lo mismo que una rotura en cualquier otra parte de esta wiki. La comprobación parte de una solución verdadera: un tablero de 16 por 16 generado y resuelto que puntúa 480 sobre 480 con síndrome vacío. Luego inyecta un número exactamente conocido de comprobaciones rotas corrompiendo una media arista enfrentada por vez a un color que ninguna pieza lleva, aceptando una corrupción solo cuando baja el score en exactamente uno. Ese resguardo paso a paso es lo que hace que el recuento inyectado sea una cantidad conocida y no inferida: $k$ roturas significa exactamente $k$ comprobaciones fallidas, cada una verificada por separado. Después vuelve a leer el score, el número de roturas y un recuento independiente del síndrome, y confirma que los tres coinciden. Ejecutado sobre cinco tableros resueltos y ocho números de roturas (cuarenta filas en total, sobre la convención de aristas emparejadas, de 480), cada fila obedece la identidad: | Roturas inyectadas $k$ | Score | Roturas | Recuento independiente del síndrome | 480 menos $k$ | | ---------------------: | ----: | ------: | ----------------------------------: | ------------: | | 0 | 480 | 0 | 0 | 480 | | 1 | 479 | 1 | 1 | 479 | | 2 | 478 | 2 | 2 | 478 | | 5 | 475 | 5 | 5 | 475 | | 10 | 470 | 10 | 10 | 470 | | 29 | 451 | 29 | 29 | 451 | | 60 | 420 | 60 | 60 | 420 | | 120 | 360 | 120 | 120 | 360 | Cada fila satisface score igual a 480 menos $k$, roturas igual a $k$, y el recuento independiente del síndrome igual a $k$, en las cinco semillas. La ejecución es determinista y termina en menos de un segundo sobre Apple Silicon; el JSON de resultados archivado es estable byte a byte al reejecutar. La fila en $k$ igual a 29 está ahí a propósito: muestra el score 451, que es exactamente el par score-y-roturas que lleva el tablero campeón de banda inferior construido desde cero del artículo (29 roturas, 451 aristas emparejadas). La identidad 480 menos 29 igual a 451 se sostiene frente al par score-y-roturas que el artículo reporta para ese tablero campeón. (Ese 451 es una cifra de cuaderno obtenida desde cero, muy por debajo de los mejores tableros completos de la comunidad, en 470 y 464, en la [página de récords](/es/research/records/); aquí lo único que importa es que la aritmética de códigos cae sobre él.) ## Los hechos estructurales, sobre la instancia oficial | Hecho | Esperado | Medido | | --- | --- | --- | | Número de comprobaciones | 480 | 480 de tres formas: fórmula $2WH - W - H$, lista de adyacencias enumerada, score máximo del kit | | Código de permutación | 256 fichas, cada una una vez | 256 piezas, todas distintas salvo rotación | | Código de borde, colores de marco | cinco, confinados al reborde | 5 colores de marco (del 1 al 5), 17 colores interiores | | Código de borde, gris | solo reborde exterior | 0 medias aristas grises en cualquier pieza interior | Los cuatro se recalculan a partir de los datos de la instancia en vez de suponerse, y los cuatro coinciden. ## Qué aporta y qué no aporta la vista de códigos correctores Lo que aporta es un modelo mental limpio y un lugar donde alojar las dos restricciones duras. Las comprobaciones de juntura forman por sí solas un código débil: localmente, un tablero casi perfecto tiene abundantes patrones de color de bajo desacuerdo cerca, y por eso los [desacuerdos se agrupan](/es/research/why/mismatch-geometry/) en una sola banda en lugar de esparcirse. La fuerza vive en el código de permutación superpuesto encima, la exigencia de que los símbolos sean un reordenamiento genuino de las 256 piezas completas. Nombrar esa capa, y separarla de las comprobaciones de color, es una forma útil de decir dónde está la dificultad: no en emparejar colores, sino en emparejarlos mientras cada pieza se gasta exactamente una vez. Lo que no aporta es un número nuevo. La identidad central es la propia definición del score en otro alfabeto, y el vocabulario de decodificadores y distancia mínima describe el mismo paisaje que las páginas de [rigidez](/es/research/why/rigidity-wall/) y [ley de área](/es/research/why/entropy-area-law/) miden directamente, sin añadir una medida propia. La afirmación más fuerte que una lectura de códigos querría hacer, que la distancia mínima del código de permutación es lo que fija en su lugar un tablero récord concreto, es una medida propia de un tablero que vive sobre un único tablero campeón privado que el kit público no entrega, de modo que aquí no queda ni confirmada ni refutada. Lo que se reproduce exactamente es el andamiaje: 480 comprobaciones, un código de permutación de 256 piezas, un código de borde de cinco colores, y la única identidad que sostiene todo el cuadro. ## Relacionado - [Por qué 479 es imposible](https://eternity2.dev/es/research/why/parity-defect-floor/) — Un argumento de conteo sobre el juego de piezas oficial prohíbe una puntuación de exactamente 479/480: las semiaristas de cada color vienen en cantidades pares, y una sola unión rota dejaría dos cuentas impares. El suelo bajo lo perfecto es 478, y a lo sumo 76 cuasi-soluciones a un movimiento pueden rodear una solución. - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [El robo de piezas, donde mueren los solucionadores](https://eternity2.dev/es/research/why/piece-theft/) — Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Calibrado en el pico de dificultad > Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/phase-transition/ - Actualizado: 2026-07-02 - Temas: structure - Reproducir: `just research-phase-transition` - Fuente: Brendan Owen, Diseñar el puzzle más difícil: la derivación 17+5 (lista de correo eternity2, agosto de 2007) — https://groups.io/g/eternity2/message/1947 - Fuente: Ansótegui, Béjar, Fernández & Mateu, On the hardness of solving edge matching puzzles as SAT or CSP problems (Constraints, Springer 2013) — https://link.springer.com/article/10.1007/s10601-012-9128-9 - Fuente: Ansótegui, Béjar, Fernández & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge — https://repositori.udl.cat/server/api/core/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/content --- Los problemas de búsqueda difíciles tienen una perilla de dificultad. Aflójela y habrá muchas soluciones, de modo que una búsqueda tropieza con alguna enseguida. Apriétela y no habrá ninguna, algo que a menudo es fácil de probar. En medio se sitúa una banda estrecha donde las soluciones son escasas pero reales, y ahí es donde la búsqueda estalla. Se le llama transición de fase, como el agua al congelarse. En los puzzles de emparejamiento de aristas, esa perilla es el número de colores. Demasiado pocos y las piezas encajan de innumerables maneras; demasiados y apenas encajan. El [análisis publicado](https://link.springer.com/article/10.1007/s10601-012-9128-9) sitúa el pico en torno a 17 colores interiores, el ajuste con el que un puzzle de este tamaño tiene aproximadamente una única solución. Eternity II utiliza 17. La comunidad ya disponía de ese número pocas semanas después del lanzamiento: en agosto de 2007, Brendan Owen dedujo $I = (196! \cdot 4^{196})^{1/392} \approx 17.14$ colores interiores a partir del criterio de «aproximadamente una solución esperada», exactamente los parámetros publicados, años antes de los análisis académicos ([Diseñar el puzzle más difícil, msg 1947](https://groups.io/g/eternity2/message/1947)). Lo medimos aquí. El criterio de Owen solo se enunció para el tablero completo, así que lo llevamos a un segundo tamaño para ver si se sostiene. La misma fórmula predice $(36! \cdot 4^{36})^{1/72} \approx 7.56$ colores interiores para un tablero 8x8, y un 8x8 es lo bastante pequeño como para que un backtracker común resuelva de verdad instancias aleatorias: su curva de dificultad se puede barrer directamente. Al medir el esfuerzo del solucionador frente al número de colores interiores sobre tableros 8x8 generados (el generador y el DFS del sitio), la banda dura, donde la búsqueda deja de encontrar solución dentro del presupuesto, cae justo donde lo predice el criterio a tamaño 8. El barrido 16x16 completo es la otra mitad del cuadro: un backtracker común no lo termina con ningún número de colores, y la profundidad que alcanza decrece de forma sostenida al aumentar los colores, de modo que el tablero real queda más allá del punto donde la curva ya se ha vuelto vertical. El [experimento hardness-peak](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/hardness-peak) contiene el código, ambos barridos y el criterio recalculado en el repositorio (reproduce el 17,14 de Owen a tamaño 16). ## El muro de la dificultad > **[Figure]** Interactivo: el pico de dificultad según el número de colores — interactive: PhaseTransitionLab. Rendered on the canonical page (link above); not shown in this markdown export. ## O mídelo tú mismo El gráfico anterior está precalculado. Este no lo está: el motor resuelve en vivo puzzles inéditos, uno por cada número de colores, y traza el pico a partir de ejecuciones reales en tu navegador. > **[Figure]** Interactivo: resolver en vivo a lo largo del pico de dificultad — interactive: PhaseTransitionLiveLab. Rendered on the canonical page (link above); not shown in this markdown export. ## La transición, medida sobre piezas reales El argumento basado en el número de colores indica *dónde* está el pico. En marzo de 2008, Brendan Owen fue a observar una transición de fase directamente, sobre las piezas reales. Tomó un fino rectángulo interior de 2 por L y lo cubrió con conjuntos aleatorios de piezas interiores de E2, cuatrocientos conjuntos aleatorios por cada longitud, y anotó cuántos podían completarse sin ninguna discordancia ([msg 4909](https://groups.io/g/eternity2/message/4909)). > **[Interactive: RectangleTransitionChart]** Rendered on the canonical page (link above); not shown in this markdown export. La forma resultante es la transición de fase en miniatura. Una tira de 2 por 1 o 2 por 2 es tan corta que las piezas aleatorias a menudo simplemente encajan: 58 % de casos resolubles en la longitud 1. Luego se apaga por completo. De la longitud 4 a la 15, ni un solo conjunto aleatorio de cuatrocientos cubre el rectángulo en ninguna longitud: las soluciones son tan escasas que prácticamente no existen. Y entonces reaparecen. En la longitud 16, un conjunto de cuatrocientos funciona; en 19 es el 8,5 %; en 21 es el 57 %; y en 22, casi nueve de cada diez. La región donde las soluciones son extremadamente raras pero aún no imposibles es precisamente la banda difícil, y aquí no es ni un relato ni un modelo: es un recuento. También es la razón por la que un interior de 14 celdas de ancho resulta tan implacable: se sitúa en la parte empinada de esa subida, donde una solución existe pero casi ningún arreglo aleatorio lo es. ## La división, leída directamente en las piezas Ordenar los colores del conjunto oficial según dónde aparecen deja el diseño a la vista.
5 colores reservados al marco
{data.frameOnlyColors.map((c) => (
> **[Interactive: MotifSwatch]** Rendered on the canonical page (link above); not shown in this markdown export. '{colorToLetter(c)}'
))}
Solo aparecen en las piezas de borde y de esquina, nunca en el interior. Son los colores raros, confinados al perímetro.
17 colores interiores
{data.interiorColors.map((c) => (
> **[Interactive: MotifSwatch]** Rendered on the canonical page (link above); not shown in this markdown export. '{colorToLetter(c)}'
))}
La paleta del interior del tablero, donde ocurre casi todo el emparejamiento.
## El conjunto en cifras | | Cantidad | | ------------------- | -------: | | Piezas de esquina | 4 | | Piezas de borde | 56 | | Piezas interiores | 196 | | Colores interiores | 17 | | Colores del marco | 5 | ## Por qué importa Es la señal individual más clara de que Eternity II se hizo difícil a propósito. El tamaño del tablero, el número de piezas y la división de colores apuntan todos al mismo objetivo: un puzzle con aproximadamente una única solución, colocado en el peor lugar posible para que cualquier búsqueda la encuentre. La dificultad fue elegida, igual que un buen examen no es ni trivial ni imposible. ¿Cómo sabemos que el pico es real y no un mero relato? Aquí confluyen dos vías. El análisis publicado lo [deriva](https://repositori.udl.cat/server/api/core/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/content): para los puzzles de emparejamiento de aristas con marco, el número de colores con el que se esperaría aproximadamente una solución cae cerca de 17, y ese es el ajuste más difícil de explorar. Y tú mismo puedes observar una parte de ello en la demostración anterior: construye puzzles reales, cuenta el trabajo, y velo explotar cuando los colores escasean. El impacto es concreto. Significa que la distancia hasta una solución no es un problema de ajuste que se pueda limar con una máquina más rápida; el puzzle se colocó donde la búsqueda es peor a propósito, de modo que vencerlo exige una idea genuinamente mejor, no simplemente más esfuerzo. Ve la dificultad medida en vivo en la [página de Algoritmos](/algorithms/). ## Relacionado - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. --- # El robo de piezas, donde mueren los solucionadores > Un solucionador rellena unas pocas filas sin esfuerzo y luego choca contra un muro en mitad del tablero. He aquí el mecanismo: una pieza escasa gastada en el lugar equivocado, varias filas atrás. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/piece-theft/ - Actualizado: 2026-07-01 - Temas: structure, search-space - Reproducir: `just research-piece-theft` - Fuente: Régin 1994, «A Filtering Algorithm for Constraints of Difference in CSPs» (AAAI-94): el argumento all-different/conjunto de Hall que motiva el recuento de demandas escasas de esta página — https://cdn.aaai.org/AAAI/1994/AAAI94-055.pdf --- Bar, BarChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; Rellena el tablero de la esquina superior izquierda hacia la inferior derecha y cada celda nueva ya conoce dos de sus colores: el color norte proviene de la pieza de arriba, el color oeste de la pieza de la izquierda. La celda necesita una pieza sin usar capaz de mostrar exactamente ese par. Esas demandas son escasas, con solo unas tres piezas posibles en promedio, y 47 de ellas tienen una sola. Así, un tablero que parece sano, con la mayoría de las piezas todavía en la caja, puede estar ya condenado. En algún punto más arriba del tablero, la única pieza que jamás podría satisfacer una celda futura se empleó en otra cosa. Cuando el solucionador alcanza por fin esa celda, no hay nada que colocar. ## Cómo muere una celda > **[Interactive: PieceTheftDiagram]** Rendered on the canonical page (link above); not shown in this markdown export. ## Cuántas piezas pueden satisfacer una demanda
{data.uniqueServerDemands}
demandas satisfechas por una sola pieza
{data.meanServers}
piezas por demanda, en promedio
{data.occurringDemands}
demandas distintas que aparecen
> **[Figure]** interactive: ServersChart. Rendered on the canonical page (link above); not shown in this markdown export. ## Deja morir de hambre a una celda tú mismo El motor rellena un tablero hasta una celda con un único proveedor legal; roba esa pieza y observa cómo la celda muere con la caja todavía llena. > **[Figure]** Interactivo: dónde mueren los solucionadores por el robo de piezas — interactive: PieceTheftLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Por qué importa Un arreglo tentador es una comprobación global: ¿siguen las piezas restantes cubriendo las celdas restantes? No sirve de nada. A nivel global la oferta es suficiente; el fallo es una sola pieza escasa mal asignada, no una carencia. Por eso una anticipación global no ve nada anormal hasta el momento en que la celda resulta no tener proveedor, lo que explica por qué una comprobación global ingenua no lo detecta. Ponlo junto a la [ausencia de jugadas forzadas](/es/research/why/no-forced-moves/) y la trampa queda completa. Cada pieza tiene decenas de lugares donde podría ir, de modo que al solucionador nunca se le indica dónde debe reservarse una pieza escasa, y sin embargo cada pieza escasa tiene exactamente una demanda para la que debe preservarse. Libertad para colocar, ninguna guía sobre qué guardar. ## Relacionado - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [All-different, el filtro por matching de Régin](https://eternity2.dev/es/research/build/reduce/alldiff-regin/) — Ninguna pieza puede usarse dos veces: una sola restricción all-different global sobre 256 celdas. Jean-Charles Régin mostró en 1994 cómo un matching bipartito la filtra por completo en tiempo polinómico; su variante por color es el propagador más potente jamás medido sobre el edge matching, con una reserva clara sobre las búsquedas tolerantes a desajustes. - [PRIOR](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/prior/) — Construir un tablero desde cero, resolviendo los empates según la posición habitual de las piezas en los buenos tableros ya conocidos. Alcanza una puntuación alta sin ningún tablero de partida que copiar. --- # Por qué un ordenador más rápido no ayuda > La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/prune-vs-speed/ - Actualizado: 2026-07-01 - Temas: speed, search-space, backtracking - Reproducir: `just research-prune-vs-speed` - Fuente: Artículo, código y resultados en GitHub (research/topics/prune-vs-speed) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/prune-vs-speed - Fuente: Peter McGavin: la poda por detección temprana de callejones sin salida suele ser demasiado costosa para que merezca la pena (groups.io msg 11848) — https://groups.io/g/eternity2/message/11848 - Fuente: @95A31: toda una batería de comprobaciones de factibilidad resultó inútil en una búsqueda 8×8 (groups.io msg 11856) — https://groups.io/g/eternity2/message/11856 --- Imagina la búsqueda como un árbol. Desde el tablero vacío eliges una pieza para la primera celda; a partir de ahí una pieza para la segunda; y así sucesivamente, hasta 256 celdas de profundidad. El número de hojas en la base es el factor de ramificación elevado a la profundidad, un número astronómicamente grande. Para demostrar que una región no tiene solución, una búsqueda tiene que recorrer ese árbol. Ahora bien, hay dos maneras de hacer menos trabajo. Puedes ir más **rápido**: un motor mejor, más núcleos, bucles internos afinados a mano. O puedes hacer el árbol más **pequeño**, podando las ramas que no pueden llevar a ninguna solución, de modo que el factor de ramificación efectivo disminuya. Suenan parecidas. Ni siquiera se acercan. ## Constante frente a exponencial Una aceleración es un divisor constante. Haz la máquina 1000× más rápida y esperarás 1000× menos, lo mismo tanto si el árbol tiene diez niveles de profundidad como si tiene diez mil. Te compra un múltiplo fijo, punto. Una poda, en cambio, se compone. Recorta aunque sea un pequeño porcentaje del factor de ramificación y ahorrarás esa fracción en cada uno de los niveles. A lo largo de 256 niveles, los ahorros se multiplican entre sí: reducir el factor de ramificación de $b$ a $b'$ divide el trabajo por $(b/b')^{256}$. Un recorte del 5 %, aplicado hasta el fondo, vale $(1/0.95)^{256} \approx 5\times10^{5}$, el equivalente a una aceleración de quinientas mil veces, a partir de una sola idea estructural barata. Eso vence a casi cualquier aceleración que una máquina real pueda ofrecer. ## Siente la diferencia Pon una aceleración bruta en la balanza frente a una pequeña poda por nivel y observa cómo la poda gana por varios órdenes de magnitud. > **[Figure]** Interactivo: poder de la poda frente a velocidad bruta — interactive: PruneVsSpeedLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Por qué esto es exactamente la maldición de E2 Si la poda es la palanca que importa, los puzzles difíciles son aquellos que no se pueden podar. Eternity II fue calibrado para ser precisamente eso. Cuatro de sus muros dicen, en el fondo, lo mismo: no hay nada local que podar. - **[Sin jugadas forzadas](/es/research/why/no-forced-moves/)**: cada celda interior aún tiene de 73 a 137 vecinos legales, así que la propagación casi nunca reduce una celda a una sola opción. El factor de ramificación se mantiene obstinadamente alto. - **[En el pico de dificultad](/es/research/why/phase-transition/)**: los recuentos de piezas y colores se sitúan donde se espera alrededor de una solución, sin dejar ninguna región densa en soluciones a la que apuntar un atajo estadístico, el truco que hizo caer Eternity I. - **[La ley de área](/es/research/why/entropy-area-law/)**: el recuento de tableros parciales genuinamente distintos se desploma a medida que crece el área rellenada, pero ninguna señal de puntuación local puede ver ese colapso global, así que no puedes podar hacia él de forma barata. - **[La rigidez](/es/research/why/rigidity-wall/)**: incluso a partir de un tablero récord, el salto a uno mejor es enorme e indivisible, sin gradiente que seguir ni nada cercano que podar. ## Lo que significa para todo lo demás aquí Esta es la lente para toda la sección de investigación. Un motor mucho más rápido hace la misma búsqueda más barata, no más pequeña, y no mueve el récord. Cada experimento que sí movió la aguja cambió en su lugar la forma de la búsqueda: un orden de recorrido distinto, un a priori aprendido sobre dónde se sitúan las piezas, una región confinada para los desajustes. Y cada callejón sin salida es, en el fondo, una poda que la estructura global del puzzle se niega a honrar. La velocidad al principio da sensación de productividad; casi nunca es ahí donde se esconde la distancia hasta 480. ## La comunidad también llegó aquí, por las malas La mitad contraintuitiva de esto es que incluso la poda *legal* a menudo pierde. Una comprobación que detecta un tablero parcial condenado y retrocede pronto suena como una victoria gratis, pero si la comprobación cuesta más que el subárbol que ahorra, un backtracker simple que sigue avanzando sin más es más rápido. Peter McGavin expuso sin rodeos la opinión asentada en la lista de groups.io: los métodos que intentan detectar una colocación parcial condenada y retroceder pronto "generalmente se consideran demasiado costosos para que merezcan la pena". Un recién llegado que ejecutaba un solucionador de diagramas de decisión, @95A31, lo confirmó después desde cero: tras construir toda una batería de comprobaciones de factibilidad, informó de que "todas las comprobaciones de factibilidad que implementé resultaron inútiles", con una búsqueda 8×8 completa todavía abriéndose paso a través de 953 mil millones de nodos durante 17 horas. La lección no es que la poda sea mala, sino que una poda solo compensa si es *más barata que la búsqueda que elimina*, y en este puzzle casi nada local supera ese listón. > **Note** > > Los números del árbol en la demo son ilustrativos: un factor de ramificación y una profundidad elegidos para ser parecidos a E2 y legibles, no la medición de un solucionador concreto. La curva de dificultad y los recuentos de nodos, en cambio, son mediciones reales de motor sobre puzzles pequeños, deterministas y reproducibles con `just research-prune-vs-speed`. El principio en sí, divisor constante frente a divisor exponencial, es exacto. ## Relacionado - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [La teoría compleja: contar el árbol de búsqueda antes de recorrerlo](https://eternity2.dev/es/research/why/complex-theory/) — La teoría compleja de Brendan Owen estima la anchura del árbol de búsqueda a cada profundidad, e incluso cuántas soluciones existen en total. Muchos en la comunidad la consideran lo más importante que hay que entender sobre Eternity II. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [La consistencia de arco, desde AC-3 en adelante](https://eternity2.dev/es/research/build/reduce/arc-consistency/) — El forward checking mira un movimiento por delante; la consistencia de arco obliga a la lista de candidatos de cada celda a defenderse frente a la de cada vecina, hasta un punto fijo. El AC-3 de Mackworth, los refinamientos óptimos que vinieron después, y lo que toda esa familia midió realmente en este puzzle, incluido dónde deja de ser correcta. --- # Los colores raros viven en el marco > Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/rare-color-geography/ - Actualizado: 2026-07-01 - Temas: structure - Reproducir: `just research-rare-color-geography` - Fuente: Brendan Owen deriva el diseño de 17+5 colores como el puzzle más difícil posible (mensaje groups.io 1947) — https://groups.io/g/eternity2/message/1947 --- Bar, BarChart, CartesianGrid, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; Los 22 colores no juegan roles equivalentes. Ordénalos según dónde se sitúan sus aristas y se dividen en dos clases nítidas: cinco colores raros confinados al borde, y diecisiete colores comunes que hacen casi todo su trabajo dentro del tablero. ## Dónde se permiten los colores raros Elige uno de los cinco colores raros y observa el tablero: sus 24 aristas se encienden todo alrededor del anillo del marco, y el interior de 14×14 permanece completamente en blanco. Cambia a un color común y en cambio se llena el interior. Ese centro vacío, para cada color raro, es todo el resultado. > **[Figure]** interactive: RareColorRing. Rendered on the canonical page (link above); not shown in this markdown export. ## Los cinco colores raros > **[Interactive: RareSwatches]** Rendered on the canonical page (link above); not shown in this markdown export.
{data.edgesPerRareColor}
aristas cada uno
{data.rareEdgesTotal}
aristas raras, todas en el marco
0
aristas raras en el interior
## Marco frente a interior, color por color > **[Figure]** interactive: FrameInteriorChart. Rendered on the canonical page (link above); not shown in this markdown export. > **[Figure]** Interactivo: la geografía de borde de los colores raros — interactive: RareColorLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Por qué importa La separación en sí misma es estructural, no es un truco defensivo. Como el reborde exterior es de un gris uniforme, cada pieza de borde mantiene su arista gris orientada hacia afuera, de modo que sus aristas coloreadas solo llegan a encontrarse con otras aristas de borde o con el interior: los colores de borde y de interior viven en reservas separadas, pase lo que pase. Los cinco colores de borde se leen como "raros" simplemente porque hay muchas menos aristas de borde que colorear, y podrían reetiquetarse con cualesquiera cinco valores (incluso reutilizando los del interior) sin cambiar en nada el puzzle. (Consulta la [nota de diseño sobre el porqué](/es/research/why/#diseñado-para-resistir-el-ingenio), con nuestro agradecimiento a Vasily V. en la lista groups.io por la corrección.) Lo que sí es real, y lo que importa para resolver, es la consecuencia: el interior de 14×14 queda a merced de diecisiete colores comunes sin ninguna señal rara, fuertemente restrictiva, en ninguna parte de él, lo que explica en gran medida por qué la búsqueda en el interior tiene tan poco a lo que aferrarse. El borde, donde la reserva de colores es pequeña y las coincidencias son ajustadas, es en consecuencia la parte que todo tablero sólido logra prácticamente perfecta. Los conteos de colores de Eternity II se equilibraron para eliminar los apoyos estadísticos que hundieron a Eternity I; esta geografía es donde se siente el resultado. Consulta [por qué el interior no ofrece movimientos forzados](/es/research/why/no-forced-moves/). ## Relacionado - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - [Patrones prohibidos](https://eternity2.dev/es/research/why/forbidden-patterns/) — Casi todo pequeño conjunto de piezas que podrías construir es imposible. Para un cuadrado 2×2, el 99,72 % de las formas de colocar cuatro piezas nunca podrá encajar. - [El equilibrio del borde](https://eternity2.dev/es/research/why/border-balance/) — Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - [CLOISTER](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fijar un borde perfecto y luego explorar el interior tratando las aristas del borde como restricciones duras desde la primera celda. --- # El muro de rigidez > Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/rigidity-wall/ - Actualizado: 2026-07-22 - Temas: structure, local-search, exact-methods - Fuente: Teorema de rigidez local (artículo del proyecto, 2026-05-16): ≥13 pruebas MIP de optimalidad de halo en 3 a 4 cuencas, hasta el halo-4 — https://github.com/raphael-anjou/eternity2/tree/main/research - Fuente: Land & Doig 1960, ramificación y acotación, el método exacto detrás de cada resolución de región — https://doi.org/10.2307/1910129 - Fuente: benj39100: el recocido en GPU aplicado al tablero estricto de 5 pistas topa con el mismo núcleo congelado; la mejor puntuación crece con la distancia al titular (mensaje groups.io 11902) — https://groups.io/g/eternity2/message/11902 - Fuente: Pruebas independientes de residuo SAT sobre halo y de congelación de réplicas de William Millilaw, reproducidas aquí sobre cinco tableros públicos (cada resolución terminada UNSAT, hasta un halo de radio 4 en el sentido de Chebyshev) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/rigidity-sat-halo - Fuente: kissat, el solucionador SAT detrás de las pruebas UNSAT de anillos de borde e interior completo — https://github.com/arminbiere/kissat - Fuente: Google OR-Tools CP-SAT, el solucionador certificador detrás de los movimientos de racimo y las re-resoluciones de ventanas — https://developers.google.com/optimization - Fuente: Diaconis & Sturmfels 1998, bases de Markov: el marco de álgebra de movimientos detrás de la teoría del radio de conectividad — https://doi.org/10.1214/aos/1030563990 - Fuente: Graver 1975, conectividad de fibras acotadas: el mismo círculo de ideas — https://doi.org/10.1007/BF01584976 - Fuente: Wolff 1989, la clase de movimientos de racimo correlacionados de la física estadística que inspiró el censo de permutaciones — https://doi.org/10.1103/PhysRevLett.62.361 --- Esta es la intuición con la que casi todo el mundo empieza: acercarse y luego arreglar las últimas discordancias. Intercambiar un par de piezas, rotar unas cuantas, y seguro que la puntuación sube poco a poco hasta 480. Pues no. En cada tablero de cabeza que hemos probado, las últimas discordancias están bloqueadas. Mueve cualquier cosa en el entorno y la puntuación se mantiene igual o baja. Los buenos tableros no son casi-soluciones a la espera de un pulido; son puntos aislados sin ningún sitio mejor al que ir al lado. ## Observa cómo crece la región > **[Interactive: RigidityHalo]** Rendered on the canonical page (link above); not shown in this markdown export. ## Inténtalo tú mismo Un tablero pequeño de verdad, perfecto. Intercambia cualquier par de piezas, o deja que el motor pruebe todos los intercambios. Nada lo supera; eso es la rigidez, en directo. > **[Figure]** Interactivo: intercambia piezas y observa cómo la puntuación se niega a subir — interactive: RigidityLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Empieza por los movimientos más pequeños Antes de convocar a ningún solucionador, las comprobaciones más baratas se hacen por fuerza bruta: probar cada pequeño movimiento que existe, y contar. Aquí va una versión de bolsillo que cabe en la cabeza. El tablero 469 de la comunidad y un tablero 466 conocido difieren en exactamente cuatro celdas: las mismas cuatro piezas, cicladas una posición a lo largo de una franja de la fila inferior. Enumera las 6.144 disposiciones de esas cuatro piezas en esas cuatro celdas (24 permutaciones por 256 combinaciones de rotaciones): el máximo es 469, alcanzado únicamente por la disposición del propio titular. El tablero 466 es una de las 6.143 disposiciones peores. Dos buenos tableros pueden estar a cuatro celdas de distancia sin ningún camino entre ellos, ni por encima de ellos, a través de esas celdas. Sube la escala. En uno de nuestros tableros de 459 (convención estricta de cinco pistas; nuestras cifras quedan por debajo de las mejores de la comunidad, mira [la página de récords](/es/research/records/) para el contexto), se probó cada rotación no trivial de cada pieza: 768 rotaciones, cero mejoras; cada rotación real baja estrictamente la puntuación. Los 32.640 intercambios de pares de piezas: cero mejoras. Las combinaciones de intercambio más rotación: 47.164 de ellas, extraídas de una muestra de 5.000 pares sobre los 522.240 posibles, cero de nuevo; esa es una muestra grande, no una enumeración completa. Hay además una razón analítica por la que una rotación no puede ni siquiera ser neutra: una rotación de 180 grados deja el recuento local de coincidencias sin cambios en todos los vecindarios posibles solo si los colores superior e inferior de la pieza coinciden, y también sus colores izquierdo y derecho, y cero de las 256 piezas tienen esa simetría (ninguna es tampoco totalmente simétrica por rotación). Ninguna rotación sale gratis jamás. La misma sonda barata, pasada por once de nuestros tableros altos, puntuaciones de 454 a 459, da 8.448 pruebas de rotación simple y ni una sola mejora. En un tablero de 457 (convención de aristas concordantes), la enumeración se llevó a todo movimiento que toque hasta cinco piezas: 1.024 giros de rotación simple, 6.720 rotaciones de pares adyacentes, 20.240 transposiciones no adyacentes, 32.796 3-ciclos sobre las 38 celdas adyacentes a discordancias, 982.200 4-ciclos y 28.480.440 5-ciclos. Unos 29,5 millones de movimientos, cero mejoras, más dos barridos de ramificación y acotación (una búsqueda de permutaciones sobre 38 celdas y un halo de radio 1 sobre 82 celdas) que tampoco encontraron nada. Ese mismo tablero de 457 fue alcanzado 11 veces de forma independiente por una búsqueda de reinicios calientes, idéntico byte a byte cada vez: la búsqueda no orbita cerca de un buen tablero, colapsa sobre un punto exacto y se queda ahí. Hasta los movimientos diseñados para parecer gratis fracasan. Algunos pares de piezas comparten tres de sus cuatro colores de arista, así que intercambiarlas parece casi neutro. En el 469 de la comunidad se probaron los 114 intercambios simples de ese tipo: exactamente uno mantiene la puntuación en 469 (y produce el único tablero gemelo conocido), 2 dan 468 y 111 dan 467. Los 6.441 intercambios dobles: ninguno alcanza 470, el mejor da 468. En 6.555 perturbaciones construidas precisamente para ser casi neutras en puntuación, el conjunto de nivel 469 contiene exactamente dos tableros. Los números se explican solos. A una puntuación de 459, una celda aporta de media unas 3,6 aristas concordantes, mientras que una pieza aleatoria soltada en un vecindario fijo espera solo unas 0,18 (aproximadamente cuatro aristas por una probabilidad de uno entre 22 colores); un intercambio aleatorio espera por tanto perder unas 6,8 aristas. Una cota probabilística holgada limita la probabilidad de un intercambio de mejora a alrededor del 5 por ciento; la frecuencia medida está por debajo de $3\times10^{-5}$. Cada colocación de un tablero de cabeza está coadaptada a sus vecinas mucho más allá de lo que el azar por sí solo predeciría. Una nota de alcance: cada censo aquí es exhaustivo dentro de su clase de movimientos pero corre sobre un solo tablero (los censos de rotaciones e intercambios sobre un 459, la enumeración de cinco piezas sobre un 457, el censo de casi gemelas sobre el 469); son las pruebas exactas de abajo las que los generalizan. ## Cómo se sabe esto El resultado no se apoya en probar muchos intercambios y darse por vencido. Proviene de una pregunta exacta planteada a un solucionador de programación entera: tomar una región del tablero, liberar cada pieza que hay dentro y encontrar la única mejor manera de rellenarla de nuevo. El solucionador explora todo ese espacio local de forma exacta, no por muestreo. La respuesta vuelve siempre igual: la mejor disposición es la que ya está ahí. Lo demostramos región tras región, tablero tras tablero, y hasta un radio de cuatro celdas; la región más grande cerrada con certificado tiene 79 celdas, casi un tercio del tablero. Cada vez, no existe mejora alguna. Una cautela aprendida por el camino: una re-resolución exacta en frío de una región grande puede rendir de menos sin avisar. Al pedirle reconstruir desde cero las tres últimas filas de un tablero fuerte (48 celdas), el solucionador ni siquiera redescubrió la propia cola del tablero en el tiempo dado, llegando a 68 aristas concordantes frente a las 72 del titular tras 201 s (una sola ejecución). En ventanas grandes, "no se encontró nada mejor" puede ser mera dificultad del solucionador, no una prueba. Un veredicto de rigidez solo se acepta aquí cuando el solucionador parte del titular, de modo que cualquier cosa mejor es estrictamente más fácil de encontrar, y aun así certifica una brecha cero. ## Método: la prueba MIP La pregunta exacta, enunciada con precisión. Alrededor de cada celda defectuosa tomamos la región *halo-$r$*: toda celda a menos de $r$ pasos. Liberamos todas las piezas que contiene, mantenemos el resto del tablero fijo como frontera y resolvemos un programa entero para el mejor relleno legal. Variables binarias $x_{c,p,\theta} \in \{0,1\}$ colocan la pieza $p$ con rotación $\theta$ en la celda $c$; restricciones de una-pieza-por-celda y una-celda-por-pieza lo convierten en un problema de asignación; el objetivo maximiza las aristas concordantes, contando la frontera fija. Una región de 64 celdas representa unas 18.700 variables binarias. La ramificación y acotación encuentra entonces o bien un relleno estrictamente mejor, o bien prueba, con una cota dual, que no existe ninguno. La definición que conviene retener: un tablero es *localmente rígido en radio $r$* si, para cada componente conexa de sus celdas adyacentes a discordancias, liberar todas las celdas a distancia como mucho $r$ de ella y resolver de forma exacta no aporta mejora alguna. Nunca encuentra ninguno. Las pruebas, región por región. Estas ejecuciones MIP provienen del cuaderno de investigación del proyecto (el artículo del 2026-05-16 citado en las fuentes); la tabla de abajo aún no se reejecuta bajo la cadena de resultados validados de este sitio, de modo que sus tiempos de solucionador y sus cotas duales no son verificables de forma independiente desde este repositorio, a diferencia del resultado SAT sobre halo más abajo. La misma nota de procedencia cubre cada censo, enumeración y escalada SAT añadidos a esta página; la reproducción SAT de radio 4 es el único resultado consignado en este repositorio: | Región | Tablero | Celdas | Tiempo del solucionador | Resultado | |---|---|---:|---:|---| | halo-2, por componente (×8) | 3 cuencas (469, 459, 458) | 2–34 | segundos cada una | todos Δ = +0, **probado** | | halo-1 conjunto | McGavin 469 | 37 | 895 s | Δ = +0, **probado** | | halo-1 conjunto | Local 459 | 59 | 1800 s | Δ = +0, **probado** | | halo-1 conjunto | tres 458 distintos | 57, 62, 64 | 180 s cada uno | Δ = +0, **probado** | | halo-1 por componente | un segundo 459, disjunto | 52 + 4 | ~60 s | Δ = +0, **probado** | | 3 filas superiores (una banda, no un halo) | McGavin 469 | 48 | 70 s | Δ = +0, **probado** | | halo-3, por componente | McGavin 469 | 42 + 47 | 929 s | Δ = +0, **probado** | | halo-3, racimo más denso | un 458 | 79 + 19 | 1200 s + 0,2 s | Δ = +0, **probado** | | halo-4, componente 0 | McGavin 469 | 57 | 1200 s | Δ = +0, **probado** | En al menos seis tableros distintos y más de veinte regiones la respuesta es invariante: el tablero titular es localmente MIP-óptimo, hasta el halo-4 para el 469 de McGavin. Dos filas merecen comentario. La fila de las tres filas superiores es una banda geométrica completa, no un halo: libera celdas limpias junto a las rotas, así que descarta además los movimientos que intercambiarían piezas entre celdas rotas y limpias dentro de la banda. Y la región de 79 celdas, la más grande jamás cerrada aquí, está en un 458 y no en el 469 porque la resolubilidad seguía la *densidad de defectos*, no el tamaño bruto de la región: las regiones densas en defectos se cierran, las mayores pero dispersas agotan el tiempo. La única región que queda con una brecha, las cuatro filas superiores, 64 celdas, sigue dando un resultado *sólido*: una cota dual de 123 frente a los 116 del titular, de modo que ni siquiera el caso no cerrado puede superar el muro por mucho (implica una cota a escala de tablero de ≤ 476). No todas las resoluciones terminaron, y el registro conserva también esas. La resolución conjunta halo-2 de 54 celdas sobre el 469 se quedó atascada en su relajación raíz durante 55 minutos y fue detenida; la banda de las 5 filas superiores (80 celdas) agotó el tiempo; en los tres 458, las dos componentes grandes de halo-2 toparon con un límite de 120 s reportando +0 *sin* certificado, lo que cuenta como "no se encontró mejora", no como probado. Una fila inacabada más amplía la evidencia a otra convención de puntuación: a un tablero de 460 jugado *sin* la restricción de pistas se le dio una resolución conjunta halo-1 (42 celdas libres, libertad total de piezas) y una ejecución de 900 segundos no encontró mejora pero dejó abierta una brecha dual del 9,5 por ciento; esa fila también es "nada encontrado dentro del presupuesto", no "probado óptimo". Un solo tablero, una sola ejecución. Tampoco es un tablero desafortunado aislado. Un segundo tablero de 459, hallado por un camino de construcción completamente distinto, coincide con el primero en solo 3 de 256 celdas, esencialmente las celdas de las pistas; los dos tableros son estructuralmente disjuntos, y el segundo está *también* probado rígido en halo-1 (dos componentes, 52 y 4 celdas, +0 probado en alrededor de un minuto). En halo-2 su componente pequeña (7 celdas) se probó +0 en 18 s; su componente grande (67 celdas) quedó sin decidir tras unos 13 minutos y sigue abierta. La conjetura que esto respalda, enunciada como tal: el conjunto de nivel 459 es una unión disjunta de muchos puntos rígidos, y superarlo exige una reorganización a escala de tablero o un punto de partida distinto, nunca un arreglo local. La insignia dice *probado* en lugar de *conjeturado* para las regiones efectivamente cerradas; el enunciado general sobre *todos* los tableros sigue siendo una conjetura, respaldada por cada región probada hasta la fecha. ## Tampoco existe ningún intercambio ingenioso El MIP libera una región y la rellena desde el conjunto completo de piezas. Hay una clase de movimientos complementaria que no cubre: elegir $k$ celdas y probar todas las formas de permutar y re-rotar las piezas *que ya están ahí*, con el resto del tablero congelado. Un álgebra de movimientos distinta, y la misma respuesta. En un tablero nuestro de 452 (convención estricta de cinco pistas, 2026-07): $k=1$, exhaustivo sobre las 251 celdas libres, cero movimientos de mejora. $k=2$, exhaustivo sobre los 31.375 pares fuera de pistas, cero. $k=3$ a $6$, unos 29.000 racimos muestreados (junto a defectos, por todo el tablero, conexos y no conexos), cero; ese nivel es una muestra grande, no una enumeración. Para $k=7$ y $8$ el muestreo se ascendió a enumeración verdadera: cada subconjunto conexo de 7 y 8 celdas de las celdas que tocan un defecto, en dos tableros independientes, 849 subconjuntos en total (231 en el 452, 618 en un 451 estructuralmente ajeno que difiere de él en 249 de las 256 celdas), todos resueltos hasta el final, cero de mejora, cero tiempos agotados; más los 7.845 subconjuntos conexos de 7 celdas a un paso de una arista defectuosa, cero otra vez. Unos 60.000 movimientos de racimo evaluados, y el mejor delta encontrado en cualquier parte es exactamente cero. Ese cero no es un detector roto. Como control positivo, un sabotaje deliberado de dos piezas (452 rebajado a 447) fue reparado por la misma maquinaria en un solo movimiento de 4 celdas, directo de vuelta a 452. Y la búsqueda local voraz sobre esta clase de movimientos, lanzada desde tres tableros de orígenes independientes (el 452, un gemelo de igual puntuación que difiere en exactamente 2 celdas, y el 451 ajeno), tocó un punto fijo inmediato en las 20 ejecuciones sembradas: mínimo, mediana y máximo idénticos, cero escapes. El detalle que escuece: el propio 452 *nació* de esta clase de movimientos. Una co-rotación de dos piezas elevó un 451 que era rígido bajo todo movimiento de pieza única. Existió un genuino movimiento correlacionado de dos cuerpos; una vez tomado, no queda ningún movimiento correlacionado de tamaño hasta 8 cerca de los defectos. El radio de rigidez crece a medida que el tablero mejora. Cambiar la geometría del conjunto liberado tampoco ayuda. Libera franjas de filas contiguas en vez de manchas: 54 de 54 franjas de una fila a través de las bandas de defectos de los dos tableros (anchos de 8 a 14, hasta 15 celdas liberadas) certifican exactamente la puntuación del propio tablero en menos de un segundo cada una, y 18 de 18 franjas de dos filas fuera de la peor banda certifican la rigidez hasta 26 celdas. En la banda de defectos más densa de cada tablero, las franjas más anchas (16 a 26 celdas) se vuelven difíciles de *certificar*: tras escalar a 300 s y 3 semillas, 6 de 10 siguen abiertas con brechas de cota de 2 a 6 aristas. Pero en las 30 ejecuciones de escalada el solucionador nunca encontró disposición alguna mejor que la del propio tablero. Eso es una brecha de certificación, no evidencia de una mejora, y las franjas abiertas se registran como abiertas, no como probadas. Las ventanas rectangulares cuentan la misma historia. En el 452, cuyas 28 aristas rotas se reparten en 22 concentradas en la banda inferior y 6 dispersas, cada ventana de hasta 18 celdas alrededor de cada racimo de defectos (cuatro ventanas, de 9 a 18 celdas) se re-resuelve a un óptimo certificado exactamente en el valor del propio tablero. Cada defecto está forzado por piezas comprometidas *en otra parte*; ninguna ventana que simplemente contenga el defecto puede arreglarlo. Ni siquiera dejar que las piezas comercien a través de la frontera bueno/malo mueve nada. En un tablero nuestro de 459 (estricto de cinco pistas), las dos filas inferiores (32 celdas) certifican la optimalidad en 49 s. Una ventana de 46 celdas, y ventanas de 52 y 72 celdas que además liberan de 6 a 10 celdas donantes *dentro de la región perfecta*, para que las piezas puedan intercambiarse entre las partes limpias y las rotas, devuelven todas el tablero idéntico: cero celdas movidas, ni siquiera un reacomodo lateral de igual puntuación (150 a 180 s cada una, semilla única, así que estas ventanas mayores cuentan como "ninguna mejora y ningún movimiento encontrados", no como certificados). El mismo operador aplicado a un tablero más débil de 455 lo eleva en 2 hasta 457: demostrablemente mejora tableros que aún no están en su punto fijo; el 459 ya lo está. Dentro de cada ventana, la relajación lineal cree que hay unas 17 coincidencias más disponibles; la restricción de cada-pieza-una-sola-vez las prohíbe todas. La restricción que muerde es qué piezas deja libres el resto del tablero, nunca el tamaño de la ventana. La dificultad es la distinción global, no la concordancia local. ## Rígido fila entera a fila entera Halos y ventanas son manchas. Prueba una geometría que cruce el tablero: libera una fila entera de 16 celdas, restríngela a piezas no usadas en otra parte del tablero y enumera los rellenos alternativos por programación dinámica. En un tablero de 460 (discordancias todas en las filas 11 a 14) y en el 469 de la comunidad (discordancias en las filas 0 a 4), el relleno actual de cada fila es el mejor disponible, y varias filas no admiten *ninguna alternativa legal en absoluto*: la cadena colocada es la única manera de enhebrar esa fila a través del resto del tablero. Los números. En el 460: las filas 1 a 10 son perfectas y admiten exactamente una cadena cada una, la colocada; las filas 12 y 14 tienen cero cadenas alternativas; la fila 13 tiene 176 alternativas, todas peores, la mejor de ellas 10 aristas por debajo. En el 469: la fila 3 tiene cero alternativas; las filas 2 y 4 tienen sus mejores alternativas 20 aristas por debajo; las filas 5 a 14 son perfectas, con la original entre hasta unas 17.857 cadenas legales y ninguna mejor. Liberando dos filas conjuntamente (32 celdas, costura interna sin restricción): los pares (11,12), (12,13) y (13,14) del 460 dan de 0 a 4 cadenas alternativas en total, todas peores (12 a 16 aristas por debajo) o infactibles. Tres filas conjuntas (48 celdas): las filas (11,12,13) y (12,13,14) dan cero cadenas alternativas. Estas filas no son solo óptimas; a menudo están *forzadas*. Unicidad, no mera optimalidad. Alcance: la enumeración es programación dinámica de haz (ancho de haz de 100.000 para una fila, de 5.000 a 50.000 para dos y tres filas), exhaustiva en la práctica pero no certificada como las filas MIP; llamémosla haz-exhaustiva. Dos tableros. Un acompañante exacto sobre bandas: vacía por completo las 2 filas inferiores (32 celdas) de un tablero de 460 y deja que una búsqueda exacta por restricciones enumere cada relleno legal con las piezas liberadas. Existen exactamente 32 rellenos alternativos, todos con 460 o menos. Vacía las 4 filas inferiores (64 celdas): la única compleción que la búsqueda exacta alcanza es el propio tablero original. Un solo tablero, solo estos dos tamaños de banda; pero en cada banda que pudo cerrarse de forma exacta, la puntuación actual es el techo verdadero. ## Dónde viven las últimas discordancias, y por qué están atascadas En un tablero nuestro de 458, la anatomía del fallo está notablemente concentrada. El anillo del borde es perfecto (60 de 60), las nueve filas interiores superiores son perfectas, y las 22 discordancias (4 borde-interior, 18 interior-interior) viven todas en las cinco filas inferiores, agrupadas en 10 minúsculos racimos disjuntos de 2,8 celdas de media, el mayor de solo 5. Cada racimo parece trivialmente arreglable. Las resoluciones exactas dicen lo contrario: rellenos por racimo, delta cero; ampliaciones halo-1 y halo-2 hasta 16 celdas, delta cero; y la unión de las 28 celdas que tocan un defecto, resuelta conjuntamente a optimalidad probada en 1,74 s, delta cero. Este es el mecanismo de todo el muro en miniatura: la región de defectos está en su óptimo exacto *dadas las piezas que le dejaron*. La parte superior perfecta del tablero ha consumido un conjunto de piezas concreto, y ese compromiso es lo que limita la parte inferior. Arreglar las últimas discordancias exigiría descomprometer piezas de la región ya perfecta, un gran movimiento entre regiones, no una reparación local. (Una relajación lineal lee un techo de 478 para este borde; es un techo de relajación para este borde en particular, no una afirmación sobre el óptimo verdadero.) Un solo tablero, pero el patrón, defectos apretados en unos pocos racimos minúsculos que los rellenos exactos no pueden arreglar, es exactamente lo que la tabla de halos de arriba sigue encontrando en las demás cuencas. ## Por qué nadie puede certificar el muro desde arriba Dos hechos coexisten en el tablero de 452 (estricto de cinco pistas), y su tensión es el estado del arte actual. Hecho A: ningún movimiento local de ningún tipo probado lo supera, y cuatro marcos independientes concuerdan (movimientos de racimo, re-resoluciones de ventanas, un certificado exacto de brecha cero de que el lote de piezas sobre sus celdas que tocan defectos está colocado de forma óptima, y una sonda termodinámica que o bien se congela en el titular o bien se funde hacia lo aleatorio, sin escape suave entre medias). Hecho B: todo intento de acotar una región *grande* desde arriba fracasa; las cotas son holgadas y no convergen. En la cola de tres filas del tablero, 8 semillas de 20 minutos cada una devolvieron todas exactamente el titular, ninguna encontró nunca nada mejor, mientras la cota superior del solucionador *subía* de 79 (a 300 s) a 89 (a 1200 s), alejándose de los 72 del titular en vez de acercarse. Una cota de programación lineal sobre el interior lee 478,5 de 480: vacía. Dentro hay un cuento con moraleja. Una primera lectura de la ejecución de 300 s fue "una brecha de 7, margen hacia una puntuación mayor". La cacería de 8 semillas mostró que la brecha era un artefacto de una relajación no convergente, no evidencia de un tablero mejor alcanzable. La razón por la que las cotas siguen holgadas: la escasez que hace difícil este puzle es de segundo orden, cuestión de qué *pares* de colores son conjuntamente escasos, y las relajaciones de concordancia de primer orden, sobre las que se construyen las cotas LP y de propagación, no pueden verla, por mucho tiempo que corran. Así que la rigidez local (probada) y la brecha global abierta no están en tensión. El titular es un óptimo local profundo, *y* puede existir una disposición mejor desconectada que ningún movimiento local alcanza; hoy ninguna cota la descarta y ninguna búsqueda la encuentra. Cerrar cualquiera de las dos direcciones de una sola brecha de región grande sería una primicia: un relleno mejor sería un nuevo mejor tablero, y una cota empujada hasta el titular sería el primer techo de puntuación local probado. La cota dual de las cuatro filas superiores de arriba (123 frente a 116) es lo más parecido a un progreso desde arriba, y sigue holgada por 7 aristas. Alcance: el hecho A está probado en un tablero mediante varias lentes; el hecho B lleva una dispersión de 8 semillas en su ejecución decisiva. ## Ni siquiera se pueden recombinar los buenos tableros La rigidez sobrevive incluso cuando el conjunto de movimientos es "tomar prestado de cada buen tablero jamás encontrado". Construye una optimización en la que cada celda pueda tomar la pieza y rotación que *cualquiera* de 25 a 30 tableros distintos de alta puntuación coloca ahí, con cada-pieza-una-sola-vez impuesto, y libera el tablero entero, las 256 celdas. El óptimo es exactamente el mejor tablero ya presente en el corpus, nunca una mezcla que lo supere: 457 con las cinco pistas fijadas (convención estricta; corpus de 25 tableros, resuelto en 24 s), y 459 sin imponer las pistas (convención de aristas concordantes). Las versiones por región con radios crecientes, 77, 127, 191 y 252 celdas libres, dan todas delta cero en segundos hasta unos 30 s. Estos óptimos son certificados, por corpus; el corpus es de 2026-05, cuando nuestros mejores eran 457 estricto y 459 en aristas concordantes, ambos por debajo de las cifras de la comunidad entonces y ahora ([página de récords](/es/research/records/)). El corpus no anda escaso de opciones. Cada una de las 256 celdas tiene al menos 2 opciones distintas entre los tableros, y una pieza típica aparece en de 6 a 19 posiciones distintas por el corpus. La diversidad es rica; la unicidad de las piezas la fragmenta. Los tableros de familias de esquinas distintas no pueden mezclarse en absoluto, y añadir el 469 de la comunidad al corpus hace que el optimizador simplemente elija ese tablero en bloque, a 469, en vez de mezclarlo con nada. La lectura: la brecha por encima de los mejores tableros conocidos es una brecha de *descubrimiento*, no de recombinación. La mejora no se esconde en ninguna combinación de lo ya conocido; exige tableros fuera de todo el corpus conocido. ## Por qué importa Esto replantea toda la brecha hasta 480. La distancia entre el mejor tablero conocido y una solución no es un montón de pequeñas correcciones a la espera de ser encontradas. Si lo fuera, este tipo de búsqueda local las habría encontrado. El obstáculo es que los buenos tableros se asientan en el fondo de sus propios pequeños valles, y las paredes de esos valles son exactas, no aproximadas. También indica lo que no va a funcionar. El pulido, la ascensión de colina y la mayoría de las heurísticas de reparación local intentan subir la pendiente desde un punto congelado. No hay pendiente que subir. Alcanzar una solución exige un movimiento que reorganice una región grande de una sola vez, o un punto de partida enteramente distinto, no un mejor pulido. Las pruebas conjuntas de halo-1 lo hacen cuantitativo: cualquier operador de destrucción y reparación cuyo alcance sea como mucho el halo, ventanas de hasta unas 30 celdas alrededor de los defectos, está matemáticamente agotado en estos tableros. La congelación no es "nuestra heurística es débil"; esa clase entera de operadores está terminada. Ni siquiera el mayor movimiento único que sabemos hacer escapa. En nuestro tablero de 461 (estricto de cinco pistas; para situar esa cifra frente a los récords de la comunidad, mira [la página de récords](/es/research/records/)), los movimientos de ciclos enteros indescomponibles descritos en la [página de los sigma-ciclos](/es/research/why/sigma-cycles/) se aplicaron *atómicamente*, cada uno seguido de una re-resolución de ventana local para reparar las celdas alteradas. Unos 4.000 movimientos de ese tipo: cero escapes, y la salida no local más barata sigue perdiendo al menos un punto (mejor resultado 460, dos celdas de diferencia). Esto solo descarta la variante de limpieza local; una re-resolución compensatoria global no se probó. Pero un movimiento grande no basta si su limpieza es local. Una cosa más que la rigidez *no* significa: difícil de reconstruir. Fija las primeras catorce filas del 469 de la comunidad y deja que una búsqueda de reparación reconstruya el resto: 3 de 4 semillas vuelven a 469 (la cuarta se queda en 454). Haz lo mismo con los prefijos de nuestros propios tableros récord: ninguna semilla supera jamás 460. Una sonda pequeña (4 semillas, reparaciones de 30 segundos por tablero), pero la forma es clara. El muro no mide lo difícil que es reconstruir un tablero; dice *a qué valle pertenece el esqueleto del tablero*. Un prefijo o admite una gran compleción o no la admite, y ninguna suerte de semillas cambia cuál. ### El final de la partida se decide pronto Fija las $N$ filas superiores del tablero 469 de la comunidad y deja que la búsqueda local complete el resto. La puntuación de compleción no es gradual en $N$; es un acantilado con señuelos: $N=1$ da 400, $N=2$ da 382, $N=4$ da 401, $N=8$ da 418, $N=12$ da 450, $N=13$ da 455, y $N=14$ da 469, una reconstrucción *exacta*, cero celdas de diferencia, con $N=15$ igual. Con 13 filas fijadas existe una compleción alternativa de las tres últimas filas, con las mismas piezas de otra manera, que puntúa solo 455 y es en sí misma una trampa: la concordancia local de colores admite varias compleciones y la búsqueda no puede saber cuál se extiende. Acertar el 87 por ciento de un récord no es "estar casi ahí". Son ejecuciones de compleción únicas por punto, con presupuestos del orden de minutos, sin dispersión de semillas; lee el umbral, no las puntuaciones individuales. Dos notas completan el cuadro. El barrido prueba que la maquinaria de compleción es capaz de *alcanzar* 469; el muro está en encontrar las primeras aproximadamente 224 piezas de la estructura, no en debilidad alguna del paso de pulido. Y la influencia no fluye en sentido contrario: una fila superior sola, una entre al menos $5\times10^{8}$ filas superiores legales, no determina casi nada. Cuatro preajustes de operadores de nuestra familia de búsqueda local, crecidos desde una fila superior fijada, se atascan todos entre 378 y 400; otras familias de búsqueda quedan sin probar, así que ese negativo está acotado a nuestro buscador. Entretanto, 363 de nuestros tableros de 455 o más usaron solo 47 filas superiores distintas: los buenos tableros se agrupan por arriba mucho antes de que la parte de abajo quede decidida. ## Alguien topó con el mismo muro desde el lado del recocido La prueba MIP aborda el muro de forma analítica. En junio de 2026, otro investigador se estrelló contra él de manera empírica. Trabajando el tablero estricto de cinco pistas con un solucionador de recocido simulado en GPU (4096 réplicas en paralelo), benj39100 reportó dos cosas que se leen como una reformulación de esta página. Primero, la mejor puntuación que una ejecución podía alcanzar *aumentaba con la distancia al mejor tablero actual*: para subir de 429 hacia 432, las perturbaciones ganadoras tenían que migrar cada vez más lejos, porque cerca del titular no había ningún movimiento de mejora que encontrar. Segundo, a lo largo de todos sus mejores tableros, las mismas unas cuarenta y dos aristas rotas formaban un «núcleo duro» congelado que la búsqueda local nunca tocaba, de modo que tuvieron que añadir un término explícito que *recompensaba* forzar la apertura de ese núcleo. Un titular localmente congelado sin gradiente cercano, y un pequeño conjunto bloqueado de defectos que nada local va a mover: ese es el muro de rigidez, visto desde un método completamente distinto. ## Y de nuevo, desde un solucionador SAT Un tercer investigador llegó a la misma conclusión con una tercera herramienta. William Millilaw, trabajando el techo de forma independiente, realizó dos pruebas. La primera fue una prueba de congelación: perturbar la raíz de un tablero de cabeza, reoptimizar y ver qué celdas vuelven. En sus mejores tableros, del 93 al 100 por ciento de las celdas regresaban exactamente a su sitio, un núcleo congelado que la búsqueda no podía mover. La segunda fue una pregunta de decisión para un solucionador SAT. Liberar las celdas alrededor de las discordancias, exigir que cada arista liberada concuerde y preguntar si alguna disposición de esas piezas la satisface. Su solucionador respondió UNSAT. Nosotros [reprodujimos esa prueba SAT](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/rigidity-sat-halo) sobre cinco tableros públicos, con nuestro propio codificador y un control positivo para asegurarnos de que una región concordante vuelve satisfacible. En los cuatro tableros récord de la comunidad, desde el 467 de Verhaard hasta el 470 de Blackwood, y el 464 de Riotte (el récord estricto de cinco pistas), cada resolución que termina es UNSAT hasta un halo de radio 4 en el sentido de Chebyshev (esta reproducción mide la región liberada por radio de Chebyshev, mientras que las escaleras SAT del cuaderno más abajo cuentan pasos de Manhattan, así que las dos escalas de halo no son la misma métrica): ningún reordenamiento local de las propias piezas de un tablero récord cierra una sola discordancia, incluso cuando la región liberada supera el centenar de celdas. Las instancias de radio 4 son lo bastante grandes como para que algunas no terminen dentro del límite de tiempo del solucionador; esas se registran como tiempos agotados y se dejan abiertas, no se cuentan como probadas, de modo que la tabla validada enuncia exactamente lo que se decidió. La programación entera optimiza y acota; el recocido choca con el muro a mano; SAT decide y devuelve una refutación. Tres métodos, una sola respuesta. Una cuarta herramienta está de acuerdo. Un optimizador MaxSAT, una variante de SAT que devuelve a la vez el mejor relleno y una prueba de su optimalidad, se apuntó a subregiones de un tablero nuestro anterior de 454: fijar todo lo que queda fuera de una región, liberar la región, pedir el mejor relleno demostrable. Cada ventana $k\times k$ hasta 5×5 se probó óptima dentro de su presupuesto de 60 s (las ventanas de 6×6 excedieron el presupuesto y quedan registradas como no cerradas, no como probadas), y la zona de defectos entera del tablero, 45 celdas que contienen sus 26 discordancias interiores, se probó óptima en 83 s: esas 26 discordancias son lo mejor que esa región puede hacer dado el resto del tablero. Ese 454 fue a su vez alcanzado byte a byte desde 4 semillas aleatorias distintas, el mismo colapso sobre un único punto que el 457 del censo de arriba: las ejecuciones independientes no solo llegan a la misma puntuación, llegan exactamente al mismo tablero. Empuja la pregunta SAT más lejos y la respuesta se vuelve más dramática. Toma uno de nuestros tableros de 459 (cinco pistas impuestas), libera cada celda a distancia como mucho 10 de sus discordancias, 218 de las 256 celdas libres y solo 38 fijadas, y pregunta si *alguna* compleción alcanza un 480 completo. UNSAT, en 0,31 s. La escalera por el camino: los halos 0 a 5 todos UNSAT en menos de 2 s cada uno; el halo 7, 173 libres y 83 fijadas, UNSAT en 0,17 s. Las 38 celdas aún fijadas en el halo 10 son esencialmente las dos filas superiores más 3 de las 5 pistas. Así que las dos filas superiores de este tablero son, por sí solas, demostrablemente incompatibles con cualquier solución perfecta: todo 480 debe diferir de este tablero en algún punto de esas 38 celdas. La rigidez la porta un fino esqueleto de la parte alta del tablero, no los vecindarios de los defectos. En radio 15, con solo 4 celdas fijadas, el solucionador agotó los 600 s; ese caso queda abierto. Un tablero concreto; no se sabe si otros tableros de 459 comparten la misma rigidez de la parte alta fijada. Sus trabajos anteriores sobre la serpiente y la búsqueda local pusieron un número al porqué. El mayor parche que cualquiera de sus operadores de reparación podía reescribir en un movimiento era de unas 48 celdas, mientras que dos de los buenos tableros conocidos, ambos cerca del techo, difieren en unas 225 celdas. Un movimiento que solo puede tocar 48 celdas no puede cruzar una brecha de 225 celdas, así que ninguna secuencia de ellos alcanza una cuenca distinta. Buscó una cadena de pequeños movimientos de mejora que abriera un túnel hacia la salida y no encontró ninguna: cero mejoras a lo largo de veintiocho millones de combinaciones de cuatro y cinco movimientos en la meseta. Es el mismo muro, enunciado como un presupuesto. La reparación local reescribe demasiado poco a la vez para abandonar el valle, y por eso escapar exige un movimiento que reorganice una región grande de una sola vez, exactamente como concluye la sección de prueba de arriba. ## El muro llega hasta el mismísimo 480 Todo lo anterior pregunta si un reordenamiento local puede cerrar una discordancia. Hay una pregunta mucho mayor: conservando solo el anillo del borde de un tablero, ¿alcanza *alguna* disposición de las 196 piezas restantes un 480 perfecto? En nuestro tablero de 459 (convención de aristas concordantes, pistas canónicas) la respuesta es una prueba de que no, a todas las escalas. Liberar las 32 celdas en discordancia: UNSAT en 0,09 s (14.000 variables, 81.000 cláusulas). Liberar todo lo que está a 5 pasos de una discordancia, 140 celdas, más de la mitad del tablero: UNSAT en 1,56 s. Liberar el *interior entero*, las 191 celdas interiores fuera de pistas, conservando solo el anillo del borde de 60 piezas: UNSAT en 1,37 s (160.000 variables, 5,4 millones de cláusulas). Los peldaños intermedios, halo-1 con 70 celdas (0,33 s), halo-2 con 93 celdas (0,89 s), halo-3 con 109 celdas (0,80 s), son todos UNSAT también. El solucionador es kissat, citado en las fuentes. Y no es la mala suerte de un solo tablero. Se probaron nueve configuraciones distintas de anillo de borde, abarcando cuatro disposiciones de esquinas diferentes: el borde del 469 de la comunidad, nuestros bordes récord de 459 y 458, un tablero de 435 derivado de propagación de creencias, y cinco bordes parciales enumerados sistemáticamente. Cada una, sin excepción, es UNSAT para 480, en menos de 2 segundos cada vez. Lo más notable: el borde del 469 de la comunidad, a 11 discordancias de la perfección, demostrablemente no puede alojar ningún interior de 480: UNSAT en menos de 0,01 s. El codificador se validó de ida y vuelta sobre pequeños puzles resolubles, donde resoluciones frescas se decodifican en tableros perfectos verificados y fijar un borde correcto devuelve SAT, la misma disciplina de control positivo que la reproducción de arriba; los veredictos UNSAT son reales, no artefactos. El borde abierto de este resultado es su mejor resumen. Solo existen nueve configuraciones de borde en nuestro corpus, y un borde compatible con 480 existe con certeza: el puzle se construyó a partir de una solución. Simplemente no es ninguno de los bordes que una búsqueda de clase récord haya producido jamás. Pulir cerca de un récord no es solo lento; bajo el propio borde de ese récord, llegar a 480 es demostrablemente imposible. Una solución exige un borde distinto. ## Por qué existe el muro La página hasta aquí prueba el muro; esto es lo más parecido que tenemos a una razón. Modela el conjunto de tableros con puntuación fija como un grafo cuyas aristas son movimientos que tocan como mucho $k$ celdas, y pregunta por el menor $k$ que lo conecta: el radio de conectividad. En instancias pequeñas de emparejamiento de aristas donde cada tablero puede enumerarse de forma exacta, emergen dos leyes. Primera, el radio es pequeño en el grueso del espectro de puntuaciones y salta al tablero entero exactamente en la puntuación máxima: en una instancia de 6 celdas, $k$ vale de 2 a 4 celdas en las puntuaciones interiores y 6, el tablero entero, en el máximo; en una instancia de 9 celdas la razón $k/N$ ronda de 0,22 a 0,44 en el interior y 0,78 en la cima. Segunda, la rigidez se enciende con la riqueza de colores: barriendo la paleta en las instancias de 9 celdas, el soporte medio del movimiento mínimo sube de 1,4 a 7,6 celdas cuando los colores pasan de 2 a 8, y la fracción de instancias cuyas soluciones perfectas necesitan un movimiento de tablero completo para interconectarse sube de 0 al 70 por ciento. A escala de juguete hay un teorema, probado con un argumento de forzado y verificado por enumeración exhaustiva: si el diseño de colores es lo bastante rico como para que cada color de arista expuesto admita como mucho una ficha legal durante un relleno, entonces dos soluciones perfectas distintas no comparten *ninguna celda*, así que cualquier movimiento entre ellas debe tocar cada celda. A una riqueza de colores comparable a la del puzle real, cada instancia probada resultó rígida exactamente en ese sentido: cero celdas compartidas entre cada par de soluciones perfectas. Para el propio Eternity II esto es una conjetura, y la etiquetamos como tal. Con 22 colores interiores, cada uno reutilizado entre unas 24 y 50 veces a lo largo de 480 adyacencias interiores, el puzle real se asienta bien adentro del régimen rígido, de modo que tableros casi perfectos distintos deberían ser casi ortogonales (lo que encaja con la diferencia de 225 celdas observada arriba entre buenos tableros) y ningún movimiento de tamaño acotado debería conectar óptimos distintos. La condición de "como mucho una ficha" no es estrictamente cierta en E2, así que la afirmación defendible es "una gran fracción del tablero", no "demostrablemente las 256 celdas". El corolario es la parte satisfactoria: la búsqueda local se congela *precisamente en las puntuaciones altas* porque ahí es donde el grafo de movimientos se desconecta. El interior del rango de puntuaciones se recorre con facilidad, por eso llegar a los 450 y 460 es rutina; la cima es un conjunto de puntos aislados, por eso el pulido muere ahí. Una teoría, las dos mitades de la historia de esta página. (Las matemáticas son el círculo de ideas de las bases de Markov y de Graver de la estadística algebraica; mira las fuentes. Los únicos movimientos de cima baratos que la teoría permitiría son simetrías globales, y este juego de piezas no tiene esencialmente ninguna.) > **La siguiente pieza del cuadro** > > Si no puedes mejorar un tablero localmente, quizá puedas saltar de un buen tablero a otro. Eso también fracasa, por una razón afín: [ve por qué el salto entre cuencas es imposible](/es/research/why/sigma-cycles/). *Las pruebas usan programación entera sobre regiones de cada tablero; corren varios minutos por región en un solucionador, así que no se reproducen en directo aquí. Los tableros en sí van incluidos y son verificables en el visor.* ## Relacionado - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [PALIMPSEST](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Leer cada tablero fuerte para detectar los hábitos que, en silencio, limitan un tablero, y luego romperlos. Este experimento produjo el mejor tablero del proyecto: 463 de 480. - [MIDDEN](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/pipelines/midden/) — Decidir de antemano no cuándo puede romperse un tablero, sino dónde: confinar cada desajuste a una forma de celdas elegida, y buscar la mejor forma. - [Relajaciones LP y PLE: media pieza en todas partes](https://eternity2.dev/es/research/build/exact/lp-relaxations/) — Escribe Eternity II como un programa entero, abandona la integralidad, y un solucionador lineal alcanza error cero en segundos, con un 30 % de una pieza y un 20 % de otra compartiendo una esquina. Dieciocho años de campañas comunitarias midieron dónde termina la comodidad fraccionaria: una meseta de 420–440 aristas en cuanto las piezas deben ser enteras, un muro PLE ya en el 8×8, y un récord académico de 461 en una hora. Lo que enseña el camino del optimizador, y dónde el LP sigue ganándose su lugar. --- # Pureza del anillo: el borde es un subpuzle cerrado, sin holgura > Cinco de los 22 colores nunca tocan las 196 piezas interiores. La lista de piezas obliga a toda solución válida a gastar las 120 semiaristas de marco en el anillo del borde: un subpuzle autónomo con holgura exactamente nula (120 = 120), un circuito euleriano sobre cinco vértices, acoplado al interior solo por 56 aristas orientadas hacia dentro. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/ring-purity/ - Actualizado: 2026-07-22 - Temas: structure - Fuente: Pureza del anillo: el tema de reproducción con el artículo, el verificador versionado y el JSON de resultados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/ring-purity - Fuente: Brendan Owen digitaliza el juego de piezas: 24 semiaristas de cada uno de los 5 colores de unión del borde, 48 o 50 de cada color interior (groups.io msg 1054, julio de 2007) — https://groups.io/g/eternity2/message/1054 - Fuente: Brendan Owen, Design the hardest puzzle: la separación deliberada de la paleta en 17+5 (groups.io msg 1947, agosto de 2007) — https://groups.io/g/eternity2/message/1947 --- Cinco de los 22 colores de arista no aparecen en ninguna de las 196 piezas interiores. En la numeración estándar son los colores 1 a 5: los colores de marco. Cada uno ocupa exactamente 24 semiaristas, todas en las 60 piezas de borde, con una reserva total de 120. La pureza del anillo es el siguiente enunciado: los datos de las piezas no dejan a esa reserva ninguna elección. Toda solución válida gasta las 120 semiaristas completas en las 120 ranuras del anillo del borde orientadas hacia el propio anillo, sin holgura alguna. El borde es un subpuzle autónomo, y su único contacto con el interior pasa por 56 aristas orientadas hacia dentro.
120 = 120
demanda del anillo frente a reserva de marco, holgura nula
5 × 24
colores de marco × semiaristas cada uno
56
aristas que acoplan el anillo al interior
## Tres hechos sobre la lista de piezas La prueba descansa en tres propiedades que se comprueban recorriendo una sola vez las 256 piezas. Sin búsqueda, sin muestreo. Primero, los colores de marco solo aparecen en piezas de borde. El verificador no se fía de las etiquetas: deriva el conjunto de colores de marco de los datos, como los colores con cero apariciones en piezas interiores, y encuentra exactamente cinco. Segundo, cada una de las 56 piezas de arista lleva exactamente dos ranuras de color de marco y una ranura fuera de marco entre sus tres ranuras no nulas, y la ranura fuera de marco queda opuesta a la ranura gris. Se cumple 56 de 56 veces. Tercero, las dos ranuras no nulas de cada pieza de esquina son de color de marco, y las dos ranuras grises son adyacentes. Se cumple 4 de 4 veces. Para que conste, el resto de la paleta es tan plano como la parte del marco: de los 17 colores interiores, 5 aparecen 48 veces y 12 aparecen 50 veces. Brendan Owen midió exactamente esos recuentos la semana en que digitalizó su juego ([msg 1054](https://groups.io/g/eternity2/message/1054)), y la separación estricta de las dos paletas fue una decisión de diseño ([msg 1947](https://groups.io/g/eternity2/message/1947)); la [página de la receta de diseño](/es/research/why/design-recipe/) cuenta esa historia. ## El argumento de forzado Una pieza de arista se asienta en el contorno con su ranura gris hacia fuera, de modo que la ranura opuesta a la gris mira al interior. Su vecina por ese lado es una pieza interior que, por el primer hecho, no tiene ningún color de marco que ofrecer. La ranura orientada hacia dentro no puede, por tanto, llevar un color de marco. Por el segundo hecho, la pieza de arista posee exactamente una ranura fuera de marco, y está justo opuesta a la gris, es decir, en la posición interior. Las dos ranuras de marco quedan así forzadas a las dos posiciones orientadas al anillo, a lo largo del contorno. Las esquinas, por el tercer hecho, aportan sus dos ranuras no nulas al anillo. Contemos. Demanda: $56 \times 2 + 4 \times 2 = 120$ ranuras orientadas al anillo. Reserva: $5 \times 24 = 120$ semiaristas de marco. Los dos números coinciden exactamente. Cada semiarista de marco se consume en el anillo, ninguna sobra, y ningún color fuera de marco aparece jamás en una junta del anillo. Ese es el sentido de la holgura nula: el presupuesto de colores de marco se gasta hasta la última semiarista. ## El anillo es un circuito euleriano La saturación admite una lectura limpia en teoría de grafos. Tómese un multigrafo de 5 vértices, uno por color de marco, con una arista por pieza de borde, uniendo sus dos colores orientados al anillo. Una disposición válida del anillo del borde es exactamente un circuito euleriano de ese multigrafo: recorrer el anillo es leer un circuito cerrado que usa cada arista-pieza una vez, y a la inversa. En la instancia real el multigrafo tiene 60 aristas, todos sus grados valen 24 y es conexo, así que existe un circuito euleriano, como debe ser, puesto que existe una solución completa. De las 60 aristas, 14 son lazos (piezas que muestran el mismo color de marco en sus dos ranuras de anillo), y las aristas cubren los 15 pares de colores posibles, los 10 pares no ordenados más los 5 lazos. ## Cuánto vale la ley El teorema viene con dos medidas de fuerza, una exacta y una muestreada. La exacta es la ramificación del primer paso. Fíjese una pieza de borde colocada; la siguiente pieza a lo largo del anillo debe casar con el color de marco expuesto. De las piezas de borde, solo valen las incidentes a ese color: según el color, 20, 21, 21, 22 o 22 de ellas, con media 21,2, frente a 59 candidatas en un orden sin restricción. El casado de colores, por sí solo, divide el primer factor de ramificación por 2,78. La muestreada es una estimación por muestreo secuencial por importancia sobre 1000 construcciones voraces del anillo con semilla. El log10 medio de la probabilidad de un camino completado es -27,30 (desviación 0,64) con la semilla 1 y -27,39 (desviación 0,62) con la semilla 2, frente a una referencia uniforme de $\log_{10}(1/59!) = -80,14$. Léase así: la ley de casado de colores concentra la masa de probabilidad en unos 53 órdenes de magnitud respecto a un orden uniforme de las piezas de borde, y aun así deja una rareza residual cercana a $10^{-27}$. Una marcha voraz guiada solo por los colores casi nunca termina un anillo: 8,7 % de finalizaciones con la semilla 1, 9,3 % (graine 2, exécutée pour vérifier la cohérence ; le JSON archivé couvre la graine 1) con la semilla 2, con la medición original en 9,4 %. Las 87 construcciones completadas de la semilla 1 se cerraron todas en circuito, con los extremos casando, que es la estructura euleriana asomando en la muestra. ## Lo que sigue abierto El recuento exacto de circuitos eulerianos no orientados del multigrafo real del anillo está abierto. Durante la investigación original se intentó un atajo de orientación única vía el teorema BEST, se detectó como infrarrecuento con una comprobación de control sobre K5 y se retiró; no se reivindica ningún recuento de circuitos en ninguna parte. La medida de finalización voraz ignora además la alternancia geométrica esquinas/aristas del anillo físico: mide la ley de casado de colores aislada, no la restricción completa del anillo. ## Dónde encaja, y cómo comprobarlo El teorema corta el puzle a lo largo del contorno. Hacia dentro, las 56 piezas de arista muestran cada una un color de la paleta interior de 17 colores, y esas 56 aristas son toda la interfaz del borde con las 196 piezas interiores; la contabilidad a través de esa costura es el asunto de la [página del equilibrio del borde](/es/research/why/border-balance/). La cara visible de la misma separación, los cinco colores raros confinados en el contorno, está en la [página de la geografía de los colores raros](/es/research/why/rare-color-geography/). Y esta página es el relato detallado de una de las leyes del [barrido de teoremas](/es/research/why/theorem-sweep/), junto al resto de la estructura exacta de la instancia. Cada número de arriba se recalcula con el verificador versionado del tema de reproducción enlazado en las fuentes: un único programa Rust que carga la instancia oficial, deriva los colores de marco de los datos, verifica exhaustivamente cada cláusula del teorema, construye el multigrafo del anillo, ejecuta las dos medidas de Monte Carlo con semilla y emite un archivo JSON (versionado como `results/ring_purity.json`) con todas las cifras aquí citadas. Las cláusulas deterministas se reproducen byte a byte; las medidas muestreadas concuerdan, dentro del error de muestreo, entre semillas independientes. ## Relacionado - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - [El equilibrio del borde](https://eternity2.dev/es/research/why/border-balance/) — Un tablero resuelto esconde una sencilla ley contable: cada color que el borde entrega al interior, el interior se lo devuelve al instante. Rómpela y sabrás de inmediato que el tablero es incorrecto; respetarla, en cambio, no garantiza nada. - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. --- # Por qué el basin-hopping parece imposible > Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/sigma-cycles/ - Actualizado: 2026-07-22 - Temas: structure, local-search - Reproducir: `just research-sigma-cycles` - Fuente: Anuncio del récord 469 de Peter McGavin: uno de los tableros contra los que se calculan los ciclos (groups.io msg 10045, septiembre de 2020) — https://groups.io/g/eternity2/message/10045 - Fuente: J. Houdayer, A cluster Monte Carlo algorithm for 2-dimensional spin glasses (arXiv): el original, en física, del movimiento de trasplante de bucles enteros — https://arxiv.org/abs/cond-mat/0101116 - Fuente: Teorema de Jordan para el grupo simétrico: la herramienta de teoría de grupos detrás del cálculo de ausencia de estructura oculta — https://en.wikipedia.org/wiki/Jordan%27s_theorem_(symmetric_group) --- Dos tableros de alto nivel parecen totalmente distintos y, sin embargo, están relacionados: puedes transformar uno en el otro tomando un conjunto de piezas y desplazando cada una al lugar que ocupaba la siguiente, a lo largo de todo un bucle. Los matemáticos llaman a ese bucle un ciclo. Recorre el bucle entero y llegas al otro tablero. Aquí está el truco. Entre los mejores tableros, ese bucle es enorme. Pasar de un tablero de 464 de Riotte al de 469 de McGavin es un bucle entrelazado de hasta 189 celdas, junto con unas pocas más cortas, que desplaza casi todas las piezas del tablero. Una costumbre de este paisaje merece un nombre antes de los diagramas: la distancia en puntuación no dice nada de la distancia en configuración. En un par medido, dos tableros separados por dos puntos de puntuación discrepaban en el 88 % de sus posiciones; en otro, dos tableros separados por un punto diferían en 72 celdas. (Dos pares, ejemplos ilustrativos y no estadísticas de población; la evidencia a escala de población es el barrido de abajo.) «Caminar de un 456 a un 457 cercano» no es un plan con sentido cuando el tablero «cercano» puede estar a casi un tablero entero de distancia. Salvo indicación contraria, cada puntuación de esta página cuenta aristas emparejadas sobre 480 del puzzle canónico; cuando aparece uno de nuestros propios tableros, decimos si sus cinco piezas-pista están colocadas. ## Un solo bucle, todo o nada > **[Interactive: SigmaCycleDiagram]** Rendered on the canonical page (link above); not shown in this markdown export. ## Pruébalo en un puzzle pequeño real Esto no es un diagrama: el motor en vivo encuentra dos soluciones reales, calcula los ciclos efectivos entre ellas y puntúa cada paso que das. > **[Figure]** Interactivo: aplicar parte del ciclo de permutación — interactive: SigmaCycleLab. Rendered on the canonical page (link above); not shown in this markdown export. ## Cómo lo sabemos Lo ejecutamos sobre cada tablero que publicamos. Para cada par ordenado de tableros que comparten un juego de piezas calculamos los ciclos exactos y luego probamos cada movimiento parcial: aplicar solo un prefijo de un bucle y volver a puntuar. Son **246 pares**, **1 154 bucles grandes** y **54 238 aplicaciones parciales** en total. Ninguna alcanzó la puntuación del tablero del que partía. Cada movimiento parcial perdió terreno; lo más cerca que llegó un prefijo fue un solo punto por debajo de su partida, y el peor cayó 224 puntos. Eso es lo que lo convierte en un muro. Para pasar de un buen tablero a uno mejor tendrías que comprometerte a desplazar un bucle entero de golpe, hasta 195 celdas, sin ningún paso de mejora en el camino que te guíe hasta allí. Toda búsqueda que avanza por pasos es ciega ante un movimiento así. Los prefijos solo cierran la mitad de la puerta; los bucles completos cierran la otra mitad. Uno de nuestros tableros de 458, descompuesto contra el 469 de McGavin, da 11 bucles (tamaños 80, 42, 42, 40, 25, 10, 4, 4, 3, 2, 2). Aplicar un bucle solo hace caer la puntuación de 5 a 170 puntos; incluso los bucles de 2 celdas pierden de 6 a 7 aristas cada uno. Solo la permutación completa, todos los bucles juntos, alcanza 469. Un segundo par cuenta la misma historia con más detalle: entre uno de nuestros tableros de 460 y el 469, la permutación se divide en 15 ciclos (longitudes hasta 52), cualquier ciclo aislado cuesta de 4 a 143 aristas emparejadas, cada combinación probada de los ciclos pequeños termina de 10 a 29 aristas por debajo, y solo el movimiento completo de las 253 piezas recupera la ganancia de 9 puntos. La proximidad en puntuación no lo suaviza: contra tableros a uno, dos y tres puntos por encima de ese 460, el mejor movimiento de un solo ciclo genuinamente no trivial todavía cuesta 4 aristas. Son cálculos exactos y deterministas, pero sobre un puñado de pares de nuestra propia colección; léelos como «en cada par que probamos», no como un teorema. La versión más afilada: incluso cuando conocemos un tablero mejor a un bucle de distancia, los pasos no pueden cubrir esa distancia. Uno de nuestros tableros de 459 difiere de un 460 que encontramos una vez en solo 39 celdas, repartidas en tres bucles de 21, 14 y 4 celdas. Cada bucle aplicado solo hace caer la puntuación de 9 a 11 puntos, el bucle de 4 celdas incluido; los pares de bucles aterrizan entre 442 y 454; solo los tres juntos dan el 460. La búsqueda por destrucción y reparación lanzada desde el mejor parcial de dos bucles (un 451) remontó como mucho a 459, nunca al 460 pese a conocerlo, en 15 configuraciones (5 semillas, 3 juegos de operadores, 30 segundos cada una). Un solo par origen-destino, y ese 460 fue un hallazgo único; pero la indivisibilidad muerde en 4 celdas exactamente igual que muerde en 154. ## Fabricar nuestros propios bucles Todo lo anterior compara pares de tableros conocidos. También atacamos por el otro lado: construir los bucles nosotros mismos. Toma un tablero fuerte, elige un anillo de celdas, gira cada pieza un paso a lo largo del anillo como un único movimiento indivisible, y luego dale al tablero la reparación local más fuerte que pudimos construir (volver a girar cada pieza tocada, luego volver a permutar exhaustivamente el peor grupo roto, de hasta 6 celdas). Ejecutamos alrededor de 4 000 bucles construidos de este tipo sobre dos tableros: nuestro mejor tablero construido desde cero, a 461 aristas emparejadas con las cinco piezas-pista colocadas, y un 456 salido del mismo proceso. Esos son nuestros propios mejores, bastante por debajo de los de la comunidad; consulta [la página de récords](/es/research/records/) para situarlos. Sobre 8 semillas y más y tres familias de construcción de bucles, el número de movimientos que alcanzaron un tablero *distinto* a la puntuación de partida o mejor fue exactamente cero. Cada vez que la reparación remontaba a la puntuación de partida, había deshecho en silencio el bucle y reconstruido el tablero de entrada pieza por pieza. El mecanismo es la misma aritmética de frontera que recorre toda esta página: un bucle construido presenta colores nuevos a lo largo de todo su borde, la pérdida antes de reparar vale aproximadamente el tamaño del borde, y una reparación local solo puede recuperar esas aristas invirtiendo el bucle. Escapar exigiría piezas que fluyan desde todo el tablero, que es precisamente el movimiento de todo o nada que exige el análisis de ciclos. El movimiento no local más barato que encontramos cuesta exactamente una arista: intercambia dos piezas lejanas de colores de arista casi idénticos y obtienes un tablero genuinamente distinto a 460, a dos celdas del 461. La afirmación de «cero evasiones» está acotada a este operador y a esta fuerza de reparación (ventanas locales de hasta 6 celdas), no a toda reparación concebible. ## Los ciclos, medidos Los tableros se reparten en dos familias que usan las mismas piezas (el visualizador las guarda bajo dos alfabetos de colores), y probamos cada par dentro de cada una: - Los tableros-récord hacia el 469 de McGavin se resuelven en un bucle gigante de hasta 189 celdas junto con unas pocas más cortas, desplazando alrededor de 250 de las 256 celdas. - El bucle mayor de un par va de 6 a 195 celdas, mediana 119; dos pares se reducen a un único bucle, todo o nada. - **Cada prefijo propio de cada bucle grande dio una puntuación estrictamente peor que su tablero de partida, en los 54 238 probados, sin una sola excepción.** Tres pares elegidos a mano lo sugerían; la población completa lo confirma sobre los tableros que publicamos, aunque sigue sin estar demostrado que valga para todo tablero concebible. Una propiedad medida más importa a quien diseña operadores: los bucles grandes están dispersos, no son regionales. Al descomponer uno de nuestros tableros de 458 contra el 469, cada bucle de 25 celdas o más abarca las filas 1 a 14 y las columnas 1 a 14, es decir, todo el interior, y un pulcro bucle de 4 celdas es exactamente las cuatro esquinas. (Un solo par de tableros, pero concuerda con el mecanismo de las esquinas más abajo.) Así que un operador regional (destruir una ventana, reparar una ventana) nunca puede contener un bucle; peor aún, cada celda de un bucle necesita una *pieza distinta*, no un reordenamiento de las piezas ya presentes en la región. ## Por qué todo movimiento parcial debe perder: la ley de la frontera El censo dice que los movimientos parciales siempre pierden; aquí está la razón geométrica, y es cuantitativa. Como las celdas de un bucle están rociadas por todo el tablero, cualquier subconjunto parcial de él tiene una frontera larga contra las celdas intactas. Cada arista de frontera empareja una pieza desplazada con un vecino contra el que nunca estuvo emparejada en ninguno de los dos tableros extremos, y casi todas esas aristas se rompen. La pérdida de puntuación de un movimiento parcial vale, con buena aproximación, el tamaño de su frontera. Medido sobre el bucle de 154 celdas entre uno de nuestros tableros de 459 y el 469, la frontera mínima sobre todas las aplicaciones parciales contiguas es de unas 190 aristas de rejilla, alcanzada cerca de la mitad del recorrido (alrededor de 113 celdas aplicadas); el cociente frontera-por-celda va de 1,07 a 4,0 según el tamaño del subconjunto. Esas cifras de bucle gigante vienen de este único ciclo; bucles más pequeños a igual puntuación, medidos sobre dos pares de tableros independientes, dan de 2,0 a 3,5 aristas de frontera por celda. La reparación local tras un movimiento parcial suele recuperar del orden de 30 a 50 aristas. Una capacidad de reparación de 30 a 50 frente a un agujero de unas 190 aristas: esa desigualdad es el muro. La ley también es ajustada, en todas partes donde miramos. Sobre más de 200 aplicaciones parciales que abarcan 5 bucles, la pérdida realizada se ciñe a la frontera con un margen de 2 aristas para subconjuntos de hasta 50 celdas; entre el 92 % y el 100 % de las aristas de frontera se rompen de verdad. El mejor resultado jamás observado perdió 3 aristas, en un movimiento de una sola celda con frontera 4. El subconjunto más delgado de todo el corpus (cociente frontera-tamaño 0,67, un subconjunto de 45 celdas de un bucle de 190 celdas entre dos tableros a igual puntuación) pierde exactamente su frontera: menos 30 predicho, menos 30 medido. No existe ningún subconjunto con ganancia positiva en el corpus. Este es un solo corpus interno de 7 tableros, así que la formulación correcta es «en cada par que medimos», no «demostrado para todo tablero». Ser astuto con el subconjunto tampoco escapa de la ley. En lugar de bloques contiguos, hicimos crecer con avidez el subconjunto que minimiza la frontera, y luego dejamos que la búsqueda por destrucción y reparación limpiara detrás. Los subconjuntos ávidos de frontera mínima del bucle de 154 celdas sí alcanzan de un 35 a un 45 % menos de frontera que los contiguos; en los tamaños de subconjunto 10, 20 y 40 las fronteras son 24, 38 y 64 aristas y las pérdidas realizadas 22, 38 y 63, esencialmente el 100 % de la frontera. La reparación desde esos tableros dañados se estanca en 448, 441 y 430 respectivamente, todos bien por debajo de la partida de 459, en 12 combinaciones de semilla y operador a 30 segundos cada una; una ejecución de 5 minutos sobre el mejor caso todavía se atasca en 446 a 448. (Un bucle, un método ávido de construcción del subconjunto.) La parte instructiva: un movimiento parcial no dejó el tablero a medio camino entre dos buenos; lo dejó caer en un tercer valle, más bajo, cuyo propio techo se sitúa por debajo del punto de partida. La meseta la determinaba el valle, no el presupuesto. ## El paisaje que conectan los bucles Entonces, ¿qué conectan los bucles? Medido sobre nuestras propias colecciones de tableros, el paisaje a igual puntuación es binario: casi gemelos o casi extraños, nada intermedio. Entre siete de nuestros tableros que puntúan todos 459, seis forman una sola familia, difiriendo entre sí en solo 34 a 44 de 256 celdas con bucles de 9 a 25 celdas; el séptimo es una isla, difiriendo de la familia en 251 a 253 celdas con bucles de hasta 190 celdas. Ningún par se sitúa a distancia intermedia, y hay una razón algebraica para esperar exactamente esa forma: los bucles se componen conservando las piezas, así que añadir un bucle pequeño a un bucle gigante da otro bucle gigante; nada interpola entre un par cercano y un par lejano. (Un corpus de 7 tableros producidos por nuestro propio proceso, sesgado hacia la familia que nuestra búsqueda encuentra; el recuento de la familia es una cota inferior y el número de islas es desconocido.) A escala de población, la imagen de la isla se sostiene. Al agrupar los 135 tableros únicos a 455 o mejor que nuestra búsqueda haya producido alguna vez, enlazando cualesquiera dos que difieran en menos de 100 celdas, se obtienen 47 componentes: 18 singletons, una familia mayor de 22 miembros (una familia de 458), y el 469 de McGavin como componente cuyo vecino más cercano en el corpus se sitúa a 247 celdas. Eso es aproximadamente diez veces el mayor operador de destrucción que usa nuestra búsqueda de reparación (64 celdas). (Una instantánea de un corpus sesgado por la búsqueda.) También hay un candidato estructural para explicar por qué los tableros de la cima difieren casi en todas partes: se comprometen con arreglos distintos de las cuatro piezas de esquina. Los tres tableros de la cima que examinamos (el 469, un 459 y un 458) usan tres permutaciones distintas de las cuatro esquinas; el 469 y el 459 comparten exactamente una posición de pieza sobre 256, la pista central obligatoria, mientras que el 459 y el 458 comparten 29. Mover una pieza de esquina a otra esquina fuerza el reemparejamiento de todo el anillo de borde de 60 celdas, que a su vez condiciona el interior: un movimiento a escala de tablero por construcción. Con 4! = 24 arreglos de esquina posibles, el paisaje podría partirse en hasta 24 clases incompatibles por el borde; ese último paso es una conjetura a partir de tres tableros, no una medida. Junto con [el muro de rigidez](/es/research/why/rigidity-wall/), la indivisibilidad de los bucles y su dispersión, esta es una cuarta línea independiente que apunta a una sola conclusión: solo los movimientos a escala de tablero conectan los tableros de clase récord. ## ¿Hay estructura oculta en los bucles? Una continuación natural: ¿obedecen las permutaciones entre tableros de la cima alguna álgebra, una ley de grupo que podrías explotar para predecir o construir nuevos tableros de la cima? Calculamos la respuesta de forma exacta, y es no. Toma las permutaciones que relacionan seis tableros de la cima (tres de 458, uno de 459, uno de 460 y el 469) y mira el grupo que generan dentro del grupo simétrico sobre 256 piezas. La única estructura presente es forzada y sin interés: las piezas de esquina van a esquinas, las de borde a bordes, el interior al interior. Eso es un teorema para todo tablero legal, ya que una pieza con k lados grises solo puede ocupar una celda con k caras hacia el exterior. Dentro de esas tres clases (196 interiores, 56 de borde, 4 de esquina), el grupo generado es el grupo simétrico completo salvo una única relación de paridad (la paridad interior iguala a la paridad de las esquinas; la paridad de los bordes es libre), un objeto de orden aproximadamente 4,3 × 10441. Dos pares de tableros ya generan todo ello, que es exactamente cómo se comportan las permutaciones *aleatorias*. Y el grupo no tiene relación con la puntuación: aplica uno de estos reetiquetados a cualquier tablero distinto de su único objetivo previsto y la puntuación se desploma (el 469 cae a 119, un 458 a 44, un 459 a 50). (Cálculo exacto con pruebas vía el teorema de Jordan, sobre los seis tableros analizados; la restricción de tipo de pieza por sí sola vale para todos los tableros; el resultado no depende de la elección de base y no cambia al excluir el tablero comunitario.) Tres consecuencias merecen ponerse por escrito. Las estadísticas de longitud de ciclo de arriba no son más que la estructura de ciclos genérica de un enorme grupo simétrico. Los argumentos de conteo por simetría no pueden predecir cuántos tableros de la cima existen. Y no hay atajo algebraico para recombinar buenos tableros: la escasez de tableros de la cima es un fenómeno de puntuación y geometría, no de simetría. El experimento de recombinación directa está de acuerdo. Cruzamos tableros: 56 híbridos de filas entrelazadas a partir de 18 padres que puntúan 458 o mejor, cada uno con una ejecución de reparación de 5 minutos. Los únicos híbridos que puntuaron bien (cuatro de ellos, a 461) eran una ilusión: sus familias padres compartían tantas colocaciones que el entrelazado reproducía un tablero ya presente en nuestra colección; esos padres ya estaban relacionados por exactamente los bucles pequeños que describe esta página, y la reparación no aportó nada (cero conflictos antes de la primera iteración). Cada híbrido de padres genuinamente no emparentados quedó entre 371 y 436, y la reparación no pudo recuperarlos. Con este esquema de cruce y este corto presupuesto de reparación, el cruce o rebaraja tableros relacionados por bucles o los hace añicos. ## El único movimiento libre pequeño: los intercambios de gemelas Sí existe una familia de pequeños movimientos que preservan la puntuación, y confirma la regla en lugar de romperla. Dos piezas casi gemelas, idénticas en tres de sus cuatro colores de arista, pueden intercambiar sus lugares; el intercambio cambia *qué* aristas no encajan, no necesariamente cuántas. Aplicar uno de esos intercambios al 469 de McGavin (las piezas con tuplas de colores 13-16-14-16 y 13-16-14-18, que difieren en una sola arista, situadas en dos posiciones de la misma fila) produce un tablero genuinamente distinto que también puntúa 469; los dos tableros difieren en exactamente 2 celdas. Ese es determinista y verificado sobre ambos tableros. El juego de piezas canónico contiene 5 pares gemelos y 114 pares casi gemelos, así que tales movimientos existen en cantidad, pero son trueques, no ganancias: en nuestros propios tableros, intercambiar dos piezas cuyos cuatro colores coinciden como multiconjunto pero no en orden cíclico cuesta siempre 4 aristas (ninguna rotación las realinea), y el mejor intercambio casi gemelo que encontramos cuesta 1. Un conjunto de nivel de puntuación es cerrado bajo intercambios de gemelas, lo que lo vuelve grueso en esta única dirección trivial; todo movimiento pequeño no trivial pierde. Que algún intercambio de gemelas en alguna parte gane un punto sigue abierto; ninguno de los que probamos lo hizo. ## Lo que lanzamos contra el muro Los resultados de arriba sugieren contramovimientos evidentes, y los probamos. Cada entrada de abajo es una configuración que falla, acotada como tal; ninguna es una refutación universal. **Calor.** Una cadena de Metropolis lo bastante caliente para aceptar casi todo movimiento no escala el muro; se cae de la montaña. Cadenas de intercambios de pares aleatorios partidas de uno de nuestros tableros de 459, 100 000 iteraciones en cada una de seis temperaturas (T de 2 a 50), se desploman a puntuaciones de 20 a 25 en unos pocos miles de pasos y nunca vuelven a visitar 450 o mejor (la única visita a esa altura es el estado de partida), pese a tasas de aceptación del 85 al 99 %. Una cadena cuyos movimientos son bucles enteros lo hace mejor en un sentido estrecho: navega indefinidamente entre tableros a igual puntuación, planeando en 459 y visitando allí varios tableros distintos, pero el máximo que llega a ver es 459 (ejecuciones cortas: 500 iteraciones, 2 configuraciones). Un solo tablero de partida, y solo la familia de cadenas calentadas simples; variantes más sofisticadas como el temple paralelo con movimientos de bucle no se prueban aquí, no se refutan. El mecanismo: los tableros de la cima son una aguja de medida cero en el espacio de configuraciones, y un caminante aleatorio pierde la aguja al instante; los movimientos de bucle preservan la puntuación por entero y la pierden en parte, así que la cadena puede vagar por un conjunto de nivel para siempre sin construir un ascenso. **Trasplantes de bucles enteros.** Trasplantar el juego completo de bucles de un tablero «oráculo» mejor es un operador de verdad; es la versión puzzle del movimiento de cluster de la física de los vidrios de espín (el Monte Carlo de clusters de Houdayer, en las fuentes). Incluso funcionó una vez, a menor altitud: aplicar el juego completo de bucles de un oráculo de 456 sobre un tablero de 447, seguido de una fase de reinicio a alta temperatura, saltó de 447 a 457 por encima de una única barrera de 76 celdas, de una vez. Desde un tablero de la cima nunca ha producido una ganancia: partiendo de un 457 contra dos oráculos de 456 distintos, cada uno de los 4 a 6 bucles por par tiene un delta estrictamente negativo, y la aplicación completa hace caer el tablero a 453 a 456. Una instancia de éxito y dos pares de oráculos fallidos, así que el alcance es «en los pares probados»; notablemente, el operador nunca se ha probado con un oráculo *mejor* que el tablero de partida, porque nunca tuvimos uno. El mecanismo: un trasplante solo ayuda cuando la buena región del oráculo se superpone a la zona de desajuste del tablero actual; entre valles distintos de la cima las buenas regiones no se alinean, así que cada bucle importa más errores de los que arregla. **Decirle a la reparación dónde está el bucle.** Le dimos a la búsqueda por destrucción y reparación las celdas exactas que ocupa un bucle: destruir precisamente esas, dejar que la reparación las rellene. Ningún efecto. Sobre un tablero parcialmente construido (puntuación 442, bucle mayor de 71 celdas contra una referencia de 459), el operador de destrucción que apunta al bucle se dispara de 9 a 13 veces por ejecución y siempre se acepta, y aun así las puntuaciones finales son 448 con o sin él (ejecuciones de 120 segundos; un tablero, una semilla, un presupuesto). La parte instructiva: la restricción no vive en las celdas del bucle sino en el anillo de aristas intactas que las rodea, que fuerza a la reparación a recolocar las mismas piezas que acaba de retirar. Necesitarías las *piezas* del otro tablero, no solo su conjunto de celdas. **Adopción forzada.** Por último intentamos teletransportar: fijar 61 celdas de un tablero de la cima a los pares de piezas característicos del valle del récord (se concentran en las filas de abajo, donde ese tablero es más rígido), y luego dejar que la reparación reconstruya todo lo demás. La fijación arruina el tablero, hasta 254 de 480, y media hora de reparación por intento remonta como mucho a 374 en 6 semillas (mejores por semilla de 363 a 374): ni de lejos la partida de 461, y menos aún el récord. Un solo tablero de partida, un solo tamaño de conjunto de fijaciones, ningún barrido del número de fijaciones. Que es, una vez más, la ley de la frontera: forzar un subconjunto de la estructura del destino sin el bucle entero es un movimiento parcial de bucle bajo otro nombre. ## Por qué importa Junto con [el muro de rigidez](/es/research/why/rigidity-wall/), esto cierra de un golpe las dos vías de escape evidentes. No puedes salir localmente de un buen tablero y tampoco puedes saltar a uno vecino, porque el mejor tablero más cercano está a un único movimiento indivisible de muchas celdas, sin ningún paso de mejora que te conduzca hasta él. Estos ciclos alcanzan el 469 de McGavin y el 470 de Blackwood; leer el mismo muro a través de ambos alfabetos cuenta una sola historia. Esta es una explicación plausible de por qué el récord de 470 se mantiene desde 2021: los movimientos que lo superarían parecen demasiado grandes para que cualquier búsqueda paso a paso pueda encontrarlos. Los añadidos de arriba afinan ese cuadro sin cambiarlo. El muro no oculta una simetría explotable: los bucles son mezclas genéricas, con prueba a la vista. La proximidad en puntuación no lo suaviza: incluso a un punto de distancia, el mejor movimiento de un solo ciclo no trivial pierde. Las distancias están fuera de escala para nuestras herramientas: el tablero más cercano al 469 que hayamos producido jamás se sitúa a 247 celdas, unas diez veces el mayor operador de destrucción que maneja nuestra búsqueda de reparación. Y el único movimiento libre, el intercambio de gemelas, cambia qué aristas se rompen pero nunca se ha visto que cambie para mejor cuántas. *El resultado se calcula de forma exacta con `just research-sigma-cycles` y se versiona en el [tema sigma-cycles](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/sigma-cycles), que lee los tableros publicados, los agrupa por juego de piezas compartido y puntúa cada prefijo propio de cada ciclo grande en cada par ordenado. El laboratorio interactivo de arriba ejecuta el mismo mecanismo en vivo sobre puzzles pequeños recién generados; la animación es un esquema del mecanismo, no un ciclo en particular. El barrido de prefijos sobre toda la población es la parte cubierta por ese proceso reproducible; las mediciones de la ley de la frontera, el agrupamiento del paisaje, el cálculo de grupo, los bucles construidos y los experimentos negativos de arriba son experimentos de cuaderno distintos sobre nuestras colecciones internas de tableros, cada uno reportado con su propio alcance en el texto y todavía no conectado al proceso automatizado.* ## Relacionado - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Dónde viven los desajustes](https://eternity2.dev/es/research/why/mismatch-geometry/) — Un tablero casi perfecto no reparte sus escasos errores de forma uniforme. Los concentra en una sola banda de cinco filas y deja todo lo demás impecable. ¿Qué banda? Lo decide la dirección en la que la búsqueda rellenó el tablero, y puede verse el reflejo en los tableros récord reales. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. - [KEYRING](https://eternity2.dev/es/research/lab/experiments/raphael-anjou/learning/keyring/) — Construir un tablero desde cero, clasificando cada pieza siguiente según tres señales aprendidas de tableros fuertes anteriores. Alcanzó 460 en una familia de tableros que ninguna búsqueda previa había resuelto. --- # El muro de 470: una frontera de fase, no un límite de ingeniería > La meseta comunitaria en los 460 altos se lee como una frontera de fase entrópica de la instancia, no como un límite de la ingeniería de solvers: el cálculo exacto sobre el juego oficial da una densidad de restricciones cercana a 0,0094, un paisaje recocido que se derrumba por encima de 470 y solo cruza 1 en 480, y un número esperado de 10 a 20 soluciones perfectas casi ortogonales entre sí. Los números del lado de la instancia son exactos; el cuadro de la brecha de solapamiento en 16x16 es una conjetura declarada. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/the-470-wall/ - Actualizado: 2026-07-22 - Temas: structure - Reproducir: `cd research/topics/the-470-wall/compute && cargo run --release --bin the_470_wall > ../results/landscape.json` - Fuente: Achlioptas & Coja-Oghlan, Algorithmic barriers from phase transitions (FOCS 2008): el agrupamiento de soluciones y dónde se atascan los algoritmos locales en los CSP aleatorios — https://arxiv.org/abs/0803.2122 - Fuente: Gamarnik, The overlap gap property: a topological barrier to optimizing over random structures (PNAS 2021) — https://www.pnas.org/doi/10.1073/pnas.2108492118 --- Los mejores tableros públicos llevan años agrupándose en los 460 altos, y el techo se mantiene en 470 de 480 (el historial de récords vive en la [página de récords](/es/research/records/)). La pregunta de esta página es si esos diez últimos puntos son un problema de ingeniería, algo que un backtracker mejor o una heurística más fina acabará arañando, o una propiedad de la propia instancia. Tratar el juego de piezas oficial como un miembro de un ensamble aleatorio con solución plantada da una respuesta cuantitativa, y la respuesta señala a la instancia: la reserva de tableros que una búsqueda puede alcanzar de verdad se derrumba justo donde la comunidad se detuvo. El argumento tiene dos capas con un estatus muy distinto, y las mantengo separadas de principio a fin. Los números calculados sobre el juego de piezas real son exactos, y el paso de cómputo detrás de esta página los reproduce bit a bit. El cuadro estructural que los interpreta en 16×16 es una conjetura, apoyada en la enumeración exhaustiva de instancias pequeñas ajustadas al mismo parámetro, y queda etiquetada como tal más abajo. ## La bolsa, medida exactamente Las 256 piezas se reparten en 4 esquinas, 56 piezas de borde y 196 piezas interiores. Apartando las 64 semiaristas grises del contorno quedan 960 semiaristas de color, que se emparejan en las 480 adyacencias internas de un tablero lleno. La contabilidad es estricta: $960 = 2 \times 480$, sin holgura en ninguna parte. Las puntuaciones de esta página cuentan adyacencias internas emparejadas sobre 480, la misma convención de aristas emparejadas que el techo comunitario; nada aquí es una afirmación sobre la pista estricta de cinco pistas fijas. La economía de colores se divide después en dos subsistemas que nunca se hablan. El anillo del marco, el ciclo de 60 juntas entre piezas de borde, usa solo los colores 1 a 5, cada uno presente en exactamente 24 semiaristas; la probabilidad de que dos semiaristas de marco extraídas uniformemente coincidan es $p_f = 5 \cdot (24/120)^2 = 0{,}200$. El subsistema interior cubre las otras 420 juntas con los colores 6 a 22 (cinco colores con 48 semiaristas, doce con 50), lo que da $p_i \approx 0{,}0588$, casi exactamente $1/17$. Estas dos probabilidades sostienen todo el análisis. Merece registrarse una comprobación exacta más: la bolsa real contiene cero piezas que se repitan bajo rotación. Frente a un nulo aleatorio emparejado, esto parece ser la única huella estadísticamente significativa de la pasada de diseño; el lado nulo de esa comparación aún necesita su propio generador, así que aquí solo se verifica el lado del juego real (exactamente cero). ## Un solo número sitúa el régimen El parámetro que posiciona a Eternity II dentro de su ensamble es la densidad de restricciones: el número esperado de piezas que encajan en una celda interior totalmente restringida, con sus cuatro vecinas ya colocadas. Con 196 piezas interiores, 4 rotaciones cada una y una probabilidad de colisión por arista de 0,0589 para una arista de pieza interior aleatoria, $$\mu = 196 \cdot 4 \cdot 0{,}0589^4 \approx 0{,}0094.$$ Un hueco completamente rodeado admite alrededor de un candidato entre cien. Eso está muy por debajo de uno, lo que sitúa la instancia en pleno régimen rígido de los ensambles de satisfacción de restricciones con solución plantada: el régimen donde la teoría dice que el conjunto de soluciones se reduce a puntos aislados y bien separados, y donde los algoritmos locales se atascan de forma demostrable antes de alcanzarlos ([Achlioptas & Coja-Oghlan 2008](https://arxiv.org/abs/0803.2122), [Gamarnik 2021](https://www.pnas.org/doi/10.1073/pnas.2108492118)). El número en sí es una función exacta de los recuentos reales de colores; lo que el régimen implica a este tamaño pertenece a la capa conjetural, retomada más abajo. ## El paisaje de puntuación recocido La pieza central del lado de la instancia es un recuento de primer momento: ¿cuántas configuraciones de tablero *no correlacionadas* con la solución plantada alcanzan una puntuación dada? El recuento base de colocaciones que respetan las clases (esquinas en las esquinas, bordes en el contorno, interiores dentro, rotaciones libres para las piezas interiores) es $W_{\text{geom}} = 4! \cdot 56! \cdot 196! \cdot 4^{196} \approx 10^{559{,}9}$. La puntuación de una configuración aleatoria de ese tipo es la suma de 60 indicadoras de Bernoulli($0{,}200$) del marco y 420 indicadoras de Bernoulli($0{,}0588$) del interior, y una convolución exacta en espacio logarítmico de esas 480 variables da el paisaje completo. Una configuración uniformemente aleatoria puntúa $36{,}7 \pm 5{,}7$. | puntuación | configuraciones no correlacionadas a esa puntuación (log10) | | ---------: | ----------------------------------------------------------: | | 37 | 558,8 | | 200 | 462,8 | | 400 | 186,6 | | 460 | 59,6 | | 470 | 33,1 | | 480 | +1,28 | Destacan dos cosas. Primero, la reserva de tableros no correlacionados de alta puntuación sigue siendo astronómica hasta sorprendentemente arriba: unas $10^{60}$ configuraciones en la puntuación 460 y todavía unas $10^{33}$ en 470. Segundo, el recuento cruza 1 prácticamente en el propio 480: el número esperado de colocaciones perfectas no correlacionadas con el tablero plantado es $10^{1{,}28} \approx 19$. El modelo de trabajo que esto tasa es un conjunto de soluciones del orden de 10 a 20 tableros perfectos, casi ortogonales entre sí y ortogonales al plantado, en la cima de una curva de entropía que apenas supera el cero. ## Exacto por debajo, conjetura por encima Todo lo anterior a esta línea es un cálculo exacto sobre el juego oficial: los recuentos de clases, la economía de las 960 semiaristas, las dos probabilidades de colisión, $\mu$, $W_{\text{geom}}$ y cada fila de la tabla del paisaje. El comando de reproducción de esta página lo regenera todo desde el motor compartido en menos de un segundo, en `results/landscape.json` dentro de la carpeta del tema. Lo que el paisaje no dice es cómo están *dispuestos* esos raros tableros de alta puntuación: si la masa entrópica conecta con los tableros perfectos o si una brecha vacía los separa. A esa pregunta solo puedo responder con exactitud en instancias pequeñas. La enumeración exhaustiva de tableros plantados $n \times n$ con $n$ hasta 7, con el número de colores ajustado para igualar la densidad de restricciones, muestra una tendencia limpia: con $\mu$ holgado, el histograma de solapamiento con el plantado del conjunto de soluciones es continuo, y cuando $\mu$ baja hacia el 0,009 de E2 se vuelve bimodal y luego se derrumba. En el punto igualado ($n = 5$, 11 colores, $\mu = 0{,}009$), la enumeración encuentra la solución plantada, un cúmulo justo a su lado, una gran familia con solapamiento cero, y una banda totalmente vacía en medio. > **Dónde empieza la conjetura** > > Los enunciados en 16×16 (un conjunto de 10 a 20 tableros perfectos casi ortogonales, una brecha de solapamiento vacía por debajo, y el muro de 470 como borde visible de esa brecha) son extrapolaciones de la tendencia de las instancias pequeñas a lo largo del parámetro de densidad de restricciones. Son conjetura, no medición: ningún cálculo factible los comprueba directamente a tamaño real. La tabla del paisaje y cada número del lado de la instancia de esta página son exactos; la estructura de la brecha en 16×16 es la parte que conviene sostener como modelo de trabajo. ## Leer el muro Junte la capa exacta y la capa conjetural, y la meseta comunitaria deja de parecer un déficit de herramientas. Una heurística que escala el paisaje de puntuación está extrayendo de la banda entrópica, y la banda es profunda: con $10^{33}$ configuraciones no correlacionadas aún disponibles en 470, llegar a los 460 altos es barato en un sentido preciso, y la ingeniería de solvers lleva años cosechando esa banda. Más allá, la reserva se adelgaza unos treinta órdenes de magnitud en diez puntos de puntuación, y si la extrapolación de la brecha de solapamiento se sostiene, no hay nada en medio por donde trepar: los diez puntos que faltan son la anchura de una región vacía que separa los últimos tableros entrópicos de un puñado de tableros perfectos aislados. Es la propiedad de la brecha de solapamiento en su papel de manual, una barrera topológica que una búsqueda local y estable no puede cruzar, sea cual sea la calidad de la implementación. Esta lectura concuerda con lo que medimos en otras partes de la wiki: el [muro de rigidez](/es/research/why/rigidity-wall/) encuentra los tableros récord congelados en óptimos locales aislados sin gradiente hacia fuera, exactamente la sensación que debería dar el borde inferior de una brecha visto desde abajo. También afina lo que "progresar" tendría que significar. Más velocidad y mejor orden compran puntos entrópicos, y esos se agotan hacia 470 según la tabla de arriba; lo que cruce la brecha tendrá que inyectar correlación con una solución perfecta real en lugar de escalar la función de puntuación. Los enunciados sobre la instancia que se sostienen a nivel de demostración, por oposición al modelo de trabajo de esta página, se recogen en el [barrido de teoremas](/es/research/why/theorem-sweep/). ## Relacionado - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. --- # La cosecha de teoremas: trece leyes estructurales > Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/theorem-sweep/ - Actualizado: 2026-07-22 - Temas: structure - Fuente: Conway y Lagarias, Tiling with polyominoes and combinatorial group theory: el ancestro de los argumentos por invariantes de frontera para problemas de teselado (JCTA 1990) — https://doi.org/10.1016/0097-3165(90)90057-4 - Fuente: El teorema BEST, que cuenta los circuitos eulerianos de un grafo dirigido: la herramienta correcta (y una trampa documentada) para contar los arreglos del borde — https://en.wikipedia.org/wiki/BEST_theorem - Fuente: Caminos y circuitos eulerianos: la teoría clásica a la que se reduce el anillo del borde — https://en.wikipedia.org/wiki/Eulerian_path - Fuente: Johnson, Papadimitriou y Yannakakis, How easy is local search?: el marco PLS detrás del resultado de completitud de la búsqueda local (JCSS 1988) — https://doi.org/10.1016/0022-0000(88)90046-3 - Fuente: Ben-Sasson y Wigderson, Short Proofs Are Narrow: la maquinaria de anchura de resolución detrás de la cota inferior de agotamiento (JACM 2001) — https://doi.org/10.1145/375827.375835 - Fuente: Krzakala, Montanari, Ricci-Tersenghi, Semerjian y Zdeborova, Gibbs states and the set of solutions of random CSPs: el cuadro de la fase condensada en que se apoya el análisis del paisaje de puntuaciones (PNAS 2007) — https://doi.org/10.1073/pnas.0703685104 - Fuente: Gamarnik, The overlap gap property: el concepto de barrera que corresponde a la banda de solapamiento vacía medida (PNAS 2021) — https://doi.org/10.1073/pnas.2108492118 --- Durante un tramo de este proyecto dejé los solvers a un lado y planteé otra pregunta: no «qué puntuación puedo alcanzar» sino «qué puedo demostrar». El plan era una cosecha. Llevar el rompecabezas a cada rama de las matemáticas que plausiblemente tenga algo que decir sobre él (flujos y cortes, combinatoria extremal, física estadística, álgebra, teoría de CSP, autómatas, complejidad de las pruebas, complejidad de la búsqueda local) y empujar cada rama hasta que entregue un teorema o explique con precisión por qué no puede. La cosecha produjo trece familias de resultados. Esta página es el mapa: unas pocas frases por familia, con enlaces a los artículos completos donde existen. Tres familias tienen hoy su página dedicada; las demás recibirán la suya a medida que sus reproducciones lleguen al repositorio. Una nota de sabor antes de la lista. Algunos de estos resultados son leyes que el juego de piezas obedece, otros son teoremas de imposibilidad sobre la escalera de puntuaciones, y otros son negativos limpios: la prueba de que una herramienta estándar de otro campo, aplicada correctamente, no certifica nada aquí. Los negativos se enuncian con el mismo cuidado que los positivos. Saber que una puerta está cerrada con llave, y por qué, es lo que permite dejar de pagarle alquiler. ## Las leyes que el juego de piezas obedece **La pureza del anillo.** Los cinco colores que solo aparecen en las piezas del borde son más escasos de lo que parecen: sus $5\times24=120$ semiaristas saturan exactamente los 120 huecos orientados al anillo de las 60 piezas del borde, sin holgura alguna. En toda solución, cada pieza de borde queda forzada a apuntar su único color no-marco hacia el interior, y todo el problema del borde colapsa en encontrar un circuito euleriano en un multigrafo de 5 vértices y 60 aristas. Artículo completo: [la pureza del anillo](/es/research/why/ring-purity/). **El conteo del anillo del marco.** Esta familia pone precio a lo que la ley del anillo compra. Solo el emparejado de colores reduce la primera colocación del borde de 59 candidatos a unos 21, y un anillo construido legalmente al azar sigue rondando $10^{-27}$ en la escala de probabilidades: 53 órdenes de magnitud mejor que un orden uniforme ($10^{-80}$), y todavía astronómicamente lejos de la certeza. El marco además le pasa una factura fija al interior: cada color de marco cierra exactamente 12 juntas del anillo, y las 56 aristas orientadas hacia dentro llevan una demanda de colores, determinada solo por el juego de piezas, que toda solución debe reproducir. Seguirá un artículo dedicado. **Los invariantes de flujo.** Dele a cada color un peso numérico y a cada pieza el vector de sus diferencias de peso este-oeste y sur-norte; sumado sobre cualquier región, esto se telescopa en un flujo de frontera, y un cuarto de vuelta actúa sobre el vector como la multiplicación por $i$. Descomponer según los cuatro caracteres del grupo de rotaciones da el retículo completo de invariantes lineales intrínsecos a las piezas: un censo de colores, una ley de flujo con valores en los enteros de Gauss, de rango pleno 22 sobre el juego de piezas real, y una paridad de tablero de ajedrez que acopla la rotación de una pieza con su celda. La ley de flujo sirve además como certificado incremental válido que atrapa errores de colocación en el final de partida. Seguirá un artículo. **Un juego de piezas cuasi aleatorio.** Cada estadística de segundo orden auditada (frecuencias de pares de colores, matrices de adyacencia, espectro del grafo de transición inducido) es indistinguible de un control aleatorio con los mismos conteos de colores; la única señal deliberada es la conocida ausencia de piezas duplicadas por rotación. Del lado de la generación, la evidencia respalda conteos de colores impuestos exactamente sobre un coloreado por lo demás uniforme y consistente con el emparejado, y un teorema cierra el círculo: reconstruir la disposición oculta a partir de la bolsa de piezas es exactamente tan difícil como resolver el rompecabezas. Seguirá un artículo. ## Donde la escalera de puntuaciones se cierra **El suelo de paridad: 479 es imposible.** En cualquier colocación legal, las apariciones de un color en un solo lado de una junta van por pares. Un único desajuste dejaría dos colores impares, así que ningún tablero puntúa 479: la escalera salta de 478 a 480. El defecto mínimo no nulo es 2, realizado intercambiando piezas casi gemelas, y alrededor de cualquier solución hay a lo sumo 76 tableros a un movimiento con ese defecto: los casi aciertos son demostrablemente escasos, no abundantes. Artículo completo: [el suelo de paridad de defectos](/es/research/why/parity-defect-floor/). **El paisaje recocido y el muro de 470.** Trate los tableros no correlacionados con la solución de fábrica como un conjunto aleatorio y cuéntelos por puntuación: el conteo es astronómico hasta aproximadamente 465 a 470 y se derrumba más allá. La meseta comunitaria de veinte años se lee entonces como una frontera de fase, no como un fracaso de ingeniería. El mismo análisis tasa la instancia en unos 10 a 20 tableros perfectos mutuamente casi ortogonales, agujas aisladas rodeadas de una banda de solapamiento vacía; esto es exacto en las instancias plantadas pequeñas y una conjetura enunciada como tal a tamaño completo. El mejor tablero comunitario está en 470 en la pista abierta y en 464 en la pista estricta de cinco pistas fijas; las convenciones y la tabla completa viven en [la página de récords](/es/research/records/). Artículo completo: [el muro de 470](/es/research/why/the-470-wall/). **La ley de área entrópica.** El rompecabezas tiene dos reglas: los bordes deben casar, y cada pieza se usa una sola vez. El presupuesto entrópico medido muestra que la primera regla es generosa y que la segunda carga con esencialmente toda la dificultad, con la unicidad de las piezas derrumbando el conteo de bloques legales a una escala medible. Esta familia ya tiene su página: [la entropía y la ley de área](/es/research/why/entropy-area-law/). ## Las maquinarias que demostrablemente no pueden comprimirlo **La anchura del CSP.** La rejilla desnuda de 16 por 16 tiene anchura de árbol exactamente 16, lo que suena explotable hasta que entra la restricción global de diferencia sobre las 256 celdas y vacía todo argumento de tratabilidad por anchura. El cuadro de la propagación concuerda: la consistencia de arco simple reduce 48 de los 196 dominios interiores, la consistencia global por emparejamiento reduce 191. La restricción que duele es la que ninguna descomposición puede cortar. Seguirá un artículo. **Las relajaciones convexas.** El lift SDP estándar y una relajación LP correctamente derivada, construidos de forma exacta sobre pequeñas subinstancias plantadas con óptimos conocidos, solo certifican el techo trivial y pasan por alto obstrucciones que un conteo elemental resuelve de inmediato. A la escala de esta instancia, la convexidad no compra nada. Seguirá un artículo. **Los certificados algebraicos.** En el Nullstellensatz de grado acotado sobre GF(2), todo lo que ya hace la propagación por conteo de un buen solver tiene un certificado de grado 2, y nada más resulta barato: refutar un defecto de reutilización de pieza en una ventana $K\times K$ exige un grado que crece con el área, así que no existe certificado algebraico global a escala del tablero. La alternativa por redes de tensores muere por un cálculo de rango: el tensor por celda tiene una dimensión de enlace efectiva cercana a 289, sin brecha espectral contra la cual truncar. Seguirá un artículo. **Ninguna compresión sin pérdida del frente.** Un programa dinámico exacto sobre los frentes de barrido solo comprime si dos conjuntos distintos de piezas usadas pueden fusionarse sin riesgo, y un argumento a la Myhill-Nerode muestra que nunca pueden, bajo ningún orden de barrido; medido en la instancia real, el frente exacto de la primera fila se multiplica por unos 8,9 en cada columna. Las particiones meet-in-the-middle fallan por una razón complementaria: las dos mitades beben del mismo depósito finito de piezas, así que el óptimo a dos vías es degenerado y no existe firma de interfaz válida por debajo de la igualdad literal. Seguirá un artículo. ## El suelo de complejidad **La búsqueda local es PLS-completa.** Para la familia natural de instancias de emparejado de bordes que contiene este rompecabezas, el paisaje de mejora es PLS-completo (demostrado para una paleta generalizada, con el refinamiento de paleta acotada enunciado como conjetura), y decidir si un tablero mejor concreto es alcanzable solo con movimientos de mejora es PSPACE-completo. Una meseta de años es el comportamiento esperado de un paisaje así, no la firma de un solver mal ajustado. Seguirá un artículo. **La complejidad de las pruebas de agotamiento.** Cada subárbol de «aquí no existe compleción» que un backtracker cierra es una refutación por resolución arbórea, y su coste está acotado inferiormente por la anchura de resolución, gobernada por el corte alrededor de la región abierta. La restricción de unicidad de las piezas no aporta ninguna dureza de tipo palomar que la resolución extendida pueda atacar, porque el emparejado de bordes rarifica el grafo de compatibilidad piezas-celdas hasta una casi permutación. La consecuencia es nítida: el aprendizaje de cláusulas y los mejores encodings compran factores polinomiales, y ningún método de la familia de la resolución agota superpolinomialmente más rápido que lo que ya ejecutamos. Seguirá un artículo. ## Lo que la cosecha cambia El objetivo nunca fue rebajar expectativas. Un tablero perfecto existe por construcción, y nada en estas trece familias toca ese hecho. Lo que la cosecha hace es sustituir el folclore por enunciados con precio: el muro tiene un mecanismo, la meseta tiene una clase de complejidad, y cada atajo ausente tiene una prueba de imposibilidad en lugar de una vaga reputación. Cada ruta que sigue abierta viene ahora con la factura que deberá pagar, y ese es un punto de partida mucho mejor para el próximo intento que un mapa en blanco. ## Relacionado - [Pureza del anillo: el borde es un subpuzle cerrado, sin holgura](https://eternity2.dev/es/research/why/ring-purity/) — Cinco de los 22 colores nunca tocan las 196 piezas interiores. La lista de piezas obliga a toda solución válida a gastar las 120 semiaristas de marco en el anillo del borde: un subpuzle autónomo con holgura exactamente nula (120 = 120), un circuito euleriano sobre cinco vértices, acoplado al interior solo por 56 aristas orientadas hacia dentro. - [Por qué 479 es imposible](https://eternity2.dev/es/research/why/parity-defect-floor/) — Un argumento de conteo sobre el juego de piezas oficial prohíbe una puntuación de exactamente 479/480: las semiaristas de cada color vienen en cantidades pares, y una sola unión rota dejaría dos cuentas impares. El suelo bajo lo perfecto es 478, y a lo sumo 76 cuasi-soluciones a un movimiento pueden rodear una solución. - [El muro de 470: una frontera de fase, no un límite de ingeniería](https://eternity2.dev/es/research/why/the-470-wall/) — La meseta comunitaria en los 460 altos se lee como una frontera de fase entrópica de la instancia, no como un límite de la ingeniería de solvers: el cálculo exacto sobre el juego oficial da una densidad de restricciones cercana a 0,0094, un paisaje recocido que se derrumba por encima de 470 y solo cruza 1 en 480, y un número esperado de 10 a 20 soluciones perfectas casi ortogonales entre sí. Los números del lado de la instancia son exactos; el cuadro de la brecha de solapamiento en 16x16 es una conjetura declarada. - [La entropía y la ley de área](https://eternity2.dev/es/research/why/entropy-area-law/) — Eternity II tiene dos reglas: los bordes deben coincidir y cada pieza se usa una sola vez. La primera es generosa. Toda la dificultad reside en la segunda. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [¿Es NP-completa esta instancia y cómo la codifico?](https://eternity2.dev/es/research/why/how-hard-is-this-instance/) — El emparejamiento de aristas es NP-completo como familia, pero eso no dice nada de un tablero 16×16 fijo: una instancia aislada es una constante, no un problema. Lo que sí es cierto es la dureza en el peor caso de la familia y la dureza empírica de esta instancia, y cómo escribir el puzzle para un solucionador SAT, de cobertura exacta o de PLE, con pequeños esbozos detallados. Una medición con tableros plantados pone cifras a la elección de la formulación: un acantilado de resolubilidad que un paradigma de búsqueda golpea y otro cruza, y que se mueve con el número de colores. - [Récords y solucionadores](https://eternity2.dev/es/research/records/) — Eternity II nunca se ha resuelto, pero casi dos décadas de esfuerzo colectivo han llevado el mejor tablero a 470/480. Quién ostenta qué, cómo lo lograron y por qué algunos tableros «480» anunciados no corresponden al puzzle real. --- # Qué muro detiene a qué método > La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/walls-and-methods/ - Actualizado: 2026-07-21 - Temas: structure - Fuente: Ansótegui, Béjar, Fernández & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge — https://repositori.udl.cat/server/api/core/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/content --- Esta es la herramienta para elegir tu nicho. Si quieres decidir dónde invertir el esfuerzo, lee las columnas de arriba abajo: elige el muro que más te interese, y la tabla te entrega cada método que lo ha atacado y la puntuación exacta donde se detuvo. Para un panorama más amplio por familia de métodos, mira el [mapa de todos los enfoques conocidos](/es/research/build/approaches-map/); para los ángulos aún abiertos, el tablero de [problemas abiertos](/es/research/open-problems/); y para los enfoques que, de forma probada, no mueven la puntuación, los [callejones sin salida](/es/research/build/dead-ends/). Cada celda del mapa siguiente se apoya en el trabajo publicado de este proyecto. Los cuatro muros en sí están corroborados por la literatura publicada; los resultados de los experimentos son trabajo propio de este proyecto, cada uno documentado en su propia página; no se presentan como verificados externamente. ## En qué se apoya cada muro No todos los muros son la misma clase de evidencia. Algunos son cálculos exactos y deterministas depositados en este repositorio; uno está replicado externamente por varios métodos independientes; varios son mediciones reales tomadas sobre el único tablero Eternity II y su conjunto de récords. Es una base legítima, pero el lector merece saber cuál es cuál antes de apoyarse en cualquier línea. La tabla siguiente lee cada afirmación estructural de esta sección hasta la forma más fuerte que su evidencia realmente sostiene, el nivel de esa evidencia, si alguna parte externa la ha reproducido, y la única salvedad a tener presente. > **Los cuatro niveles** > > - **Probado, externo.** Un teorema o un cálculo exacto que una parte externa ha enunciado o replicado, y la página cita a esa parte. - **Probado, interno.** Un cálculo exacto y determinista hecho aquí, con el código y el resultado depositados en `research/topics/` y reproducibles desde el comando de la propia página. - **Medido, instancia única.** Una medición real, tomada sobre el único tablero Eternity II (o un tablero de tipo E2), sin replicación. Cierta, y no un defecto en sí, pero es un solo dato. - **Conjetura.** La propia página presenta la afirmación como no probada en general. Un muro no se rebaja por haberse medido sobre una instancia única. Solo se rebaja allí donde un nivel inferior se presenta como superior, y ninguno aquí lo hace. | Muro / afirmación | Forma más fuerte sostenida | Nivel | Replicación externa | La única salvedad | | --- | --- | --- | --- | --- | | [Pico de dificultad](/es/research/why/phase-transition/) | 17,14 colores interiores se derivan del criterio de una solución esperada; 17 queda cerca del pico de dificultad de búsqueda para el emparejamiento de bordes enmarcado | Probado, externo | Sí: la derivación de Owen de 1947; Ansótegui, Béjar, Fernández & Mateu confirman el pico | «Una solución esperada» es un promedio de primer momento que supone colores de borde independientes; localiza el pico, no cuenta las soluciones | | [Teoría compleja / el embudo](/es/research/why/complex-theory/) | Un estimador de primer momento del ancho de árbol y del número de soluciones, correcto dentro de un factor de dos dondequiera que pudo comprobarse | Conjetura (distintivo de la página), sobre replicación externa | Sí: el modelo de Owen; el porte a C de McGavin y su resolución 10×10, dentro de la predicción | Es un promedio, ciego a si los parciales contados son realmente distintos; una herramienta para ordenar barridos, nunca un conteo exacto ni una cota | | [Sin movimientos forzados](/es/research/why/no-forced-moves/) | Un conteo exhaustivo exacto sobre el conjunto interior oficial: ninguna pieza interior queda nunca forzada a un único compañero derecho (73 a 137 compañeros cada una) | Probado, interno | Sin replicación externa; el conteo es propio del proyecto, depositado y reproducible | Cuenta compatibilidad por pares sobre el conjunto completo, no candidatos dentro de un tablero parcial vivo; una propiedad de las piezas, no una prueba de que la búsqueda nunca se estrecha | | [Patrones prohibidos](/es/research/why/forbidden-patterns/) | Conteos exhaustivos exactos: el 38,96 % de los pares, el 83,26 % de los L-triominós, el 99,72 % de los cuadrados 2×2 son inviables sobre piezas interiores distintas | Probado, interno | Los conteos 2×2 son el resultado exacto depositado del proyecto; los 20 pares-esquina vacíos son una observación comunitaria citada de 2008 | La lectura «el conteo de parches prohibidos sigue la distancia a una solución» es una señal heurística, no una distancia monótona probada | | [Ley de área de la entropía](/es/research/why/entropy-area-law/) | Los conteos de bloques A(n)/B(n) son ahora exactos en el repositorio hasta n=3 (B(2)=4 059 952 cruza con la tabla de subrejillas), dando un exponente en repositorio α≈0,044; el límite de entropía cerca de 0,67 y el punto de colapso son extrapolaciones | Probado, interno (los conteos de bloques) + medido (el ajuste) | Parcial: el lema de Fekete y la entropía de Shannon son los teoremas externos que hacen bien definido el límite; el ajuste de α y la escala de colapso son propios del proyecto | El teorema garantiza que existe un límite positivo; no fija su valor. El exponente se ajusta sobre n≤3 y su valor por bloque aún crece, así que el punto de colapso de parches grandes es una extrapolación más allá de los anchos contados | | [Rigidez](/es/research/why/rigidity-wall/) | En los tableros récord públicos, ningún reordenamiento de las piezas propias de un tablero dentro de un halo de hasta cuatro celdas cierra un desajuste (SAT: UNSAT), ahora depositado | Probado, interno para el halo SAT; la tabla MIP más profunda está probada para las regiones cerradas pero portada desde un artículo externo al sitio | Sí, el muro mejor replicado: las pruebas de congelación y residuo SAT de Millilaw reproducidas aquí con un control positivo; el núcleo congelado del recocido GPU de benj39100 lo alcanza por un tercer método | La evidencia depositada del sitio es el halo SAT hasta radio 4 en cinco tableros (unas pocas instancias de radio 4 exceden el tiempo, anotadas abiertas). La tabla MIP y la cota tablero completo ≤476 provienen del artículo externo, y el enunciado «todos los tableros» es una conjetura | | [Sigma-ciclos](/es/research/why/sigma-cycles/) | Sobre **cada** par ordenado del mismo conjunto de piezas de los tableros incluidos (246 pares, 1154 lazos grandes), **cada** prefijo propio de cada lazo grande puntúa estrictamente menos que su punto de partida, en las 54 238 aplicaciones parciales | Probado, interno (un enunciado de población sobre el conjunto incluido) | Sin replicación externa; calculado aquí contra el 469 de McGavin y los tableros récord y de proyecto incluidos | El conteo es exacto sobre los tableros entregados; la propiedad «todo subciclo es peor» aún no está probada para todo tablero posible. Una fuerte observación de población, no un teorema general | | [Geometría de los desajustes](/es/research/why/mismatch-geometry/) | En los tableros récord y de proyecto, los desajustes residuales se agrupan en una banda de filas que se invierte con el sentido de construcción; un objetivo de conteo de huecos deposita los restos ahí | Medido, instancia única | Parcial: la inversión según el sentido es la lectura del proyecto; el tablero de siete huecos de Verhaard y el residuo en banda alta de Zamofing se citan como observaciones del mismo sentido, ahora verificables en el archivo extendido | Un patrón sobre un puñado de tableros con una historia mecanicista, no una prueba | | [Robo de pieza](/es/research/why/piece-theft/) | Un conteo exacto de las demandas (norte, oeste) sobre el conjunto interior: la mayoría tiene de uno a tres proveedores, y un número preciso tiene exactamente uno | Probado, interno (los conteos); medido (el mecanismo «dónde mueren los solvers») | Sin replicación externa; Régin 1994 se cita como la teoría all-different que nombra el mecanismo | Los conteos de proveedores escasos son exactos; «aquí es donde mueren los solvers reales» es un mecanismo ilustrado sobre la instancia, no una tasa de fallo medida entre solvers | | [Geometría de las pistas](/es/research/why/hint-geometry/) | En un puzzle 16×16 de tipo E2, pistas dispersas lo resuelven en minutos donde filas contiguas apiladas no, porque el trabajo vive en la segunda mitad del llenado | Medido, instancia única (un tablero de tipo E2, no el puzzle oficial) | Sí, atribuido con claridad: la resolución a 18 pistas de McGavin y su árbol de 41 mil millones de nodos; las estadísticas de profundidad de Joe | No es el puzzle oficial, cuyas cinco pistas fijas difieren. Las cifras de profundidad son la muestra de un solo backtracker | | [Equilibrio del borde / NS-1](/es/research/why/border-balance/) | Una condición necesaria exacta; las cuatro soluciones completas conocidas la cumplen; un déficit positivo certifica la inviabilidad. La proporción interior-interior de los errores restantes es ahora exacta: **86,9 %** en los nueve tableros incluidos de clase 469, ninguno borde-borde | Probado, externo (la condición), probado, interno (el reparto de errores) | Sí para la condición, citada a enunciados comunitarios de 2007–2022; el reparto de errores es el reconteo depositado del proyecto | La condición es necesaria, nunca suficiente: un déficit nulo no prueba nada, y el invariante es ciego a la mayoría interior-interior de los errores restantes. El rendimiento de poda es una medición sobre instancia única, aún no un banco depositado | | [Geografía de los colores raros](/es/research/why/rare-color-geography/) | Un conteo exacto sobre el conjunto oficial: los cinco colores de borde nunca aparecen en un borde interior | Probado, interno | Sin replicación externa del conteo; la intención de diseño 17+5 se cita a Owen | Presentado con acierto como estructural (borde gris, pools de color separados), no una treta de escasez; la etiqueta «raro» es un artefacto del menor número de bordes de marco | | [Receta de diseño](/es/research/why/design-recipe/) | La comunidad reconstruyó una receta coherente del puzzle más difícil, ingrediente por ingrediente, cada uno con fuente en un mensaje del año de lanzamiento | Conjetura (distintivo de la página), cada ingrediente con fuente externa | Sí, densamente: las derivaciones y mediciones de Owen, el censo del espacio de diseño, la cadena de procedencia hasta Selby y Riordan | Una reconstrucción de la intención de diseño, no un enunciado que los diseñadores publicaran; la página lo marca como conjeturado | | [Marco de complejidad](/es/research/why/how-hard-is-this-instance/) | El emparejamiento de bordes es NP-completo como familia; un tablero fijo único es una constante, no un problema; la dificultad de E2 es empírica sobre un espacio ~10^557 | Probado, externo | Sí: Demaine & Demaine 2007 para la NP-completitud; Ansótegui et al. para el caso empírico | La distinción de categoría sostiene el razonamiento: la NP-completitud limita lo que los solvers generales pueden prometer, no dice nada de este tablero | | [Poda contra velocidad](/es/research/why/prune-vs-speed/) | El argumento de composición es aritmética exacta; en E2, una poda legal cuesta a menudo más que el subárbol que elimina | Probado (la aritmética), medido (el veredicto «la poda no compensa») | Parcial: el principio es autónomo; el veredicto comunitario se cita a McGavin y 95A31, ahora verificables en el archivo extendido | Las cifras del árbol de demostración son ilustrativas, no una medición de un solver real, y la página lo dice | Tres cambios desde que se trazó este mapa por primera vez merecen destacarse, porque suben afirmaciones de nivel. Los sigma-ciclos eran una observación sobre tres pares; ahora son un enunciado exacto sobre cada par del mismo conjunto de piezas de los tableros incluidos, 54 238 aplicaciones parciales sin una sola excepción. El reparto de errores de borde es ahora un reconteo exacto (86,9 % interior-interior) en lugar de una cifra externa al sitio. Y los conteos de bloques de la ley de área se calculan ahora en el repositorio y se reproducen desde el comando de la propia página, con el exponente ajustado sobre el rango contado exactamente. Además, las cuatro citas comunitarias que antes quedaban más allá de la instantánea del archivo validan ahora contra el export extendido, de modo que los pasajes de corroboración de la rigidez, la geometría de los desajustes y la poda contra velocidad se apoyan en fuentes que un lector puede comprobar. La lectura de conjunto: solo la rigidez lleva tres métodos independientes (SAT, MIP, recocido) que llegan a un mismo veredicto. Los demás muros son cálculos exactos propios del proyecto o mediciones sobre instancia única, sobre el único tablero que importa. Lee «corroborado por la literatura» como que la transición de fase y el gradiente ausente se han reproducido en otra parte, no cada muro. ## Los cuatro muros, en una línea cada uno Cada uno de ellos es una versión del mismo enunciado: no hay nada local que podar. - **[Sin movimientos forzados](/es/research/why/no-forced-moves/)**. Cada celda interior conserva de 73 a 137 piezas legales, de modo que el factor de ramificación nunca se colapsa. - **[El pico de dificultad](/es/research/why/phase-transition/)**. Con ≈17 colores interiores el puzzle se sitúa en la transición de fase: alrededor de una solución esperada, el peor lugar donde buscar. - **[La ley de área](/es/research/why/entropy-area-law/)**. Los tableros parciales genuinamente distintos se colapsan a medida que crece el área rellenada, pero ninguna puntuación local puede percibir ese hecho global. - **[La rigidez](/es/research/why/rigidity-wall/)**. Los récords están localmente congelados; el paso hacia un tablero mejor es un único intercambio gigante e indivisible, sin gradiente que seguir. ## El mapa Las columnas son los muros; las filas, los métodos, con la mejor puntuación primero. Una marca rellena (●) significa que el método trabaja fundamentalmente contra ese muro. El techo comunitario en este puzzle es 470; la solución completa es 480. | Método | Mejor | [Movimientos forzados](/es/research/why/no-forced-moves/) | [Pico de dificultad](/es/research/why/phase-transition/) | [Ley de área](/es/research/why/entropy-area-law/) | [Rigidez](/es/research/why/rigidity-wall/) | Nueva cuenca | | --- | --- | :-: | :-: | :-: | :-: | --- | | [PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/) · desde el corpus | 463/480 | | | | ● | no | | [PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/) · from scratch | 460/480 | | ● | | ● | no | | [KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/) · from scratch | 460/480 | | | | ● | nueva familia | | [REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/) · decodificar y reproducir | 460/480 | | | | ● | no | | [GAUNTLET](/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) · from scratch | 458/480 | | | | ● | nueva familia | | [CLOISTER](/es/research/lab/experiments/raphael-anjou/pipelines/cloister/) · anclar y restringir | 453/480 | | | ● | ● | no | | [MIDDEN](/es/research/lab/experiments/raphael-anjou/pipelines/midden/) · anclar y restringir | 452/480 | | | ● | ● | no | | [LADDER](/es/research/lab/experiments/raphael-anjou/pipelines/ladder/) · concentrar el esfuerzo | 451/480 | ● | ● | | | nueva familia | | [LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/) · from scratch | 451/480 | ● | | | | no | | [MOSAIC](/es/research/lab/experiments/raphael-anjou/pipelines/mosaic/) · resolver un fragmento exactamente | 448/480 | ● | ● | | | no | | [BANDSAW](/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) · resolver un fragmento exactamente | 437/480 | ● | ● | | | no | | [STAGED](/es/research/lab/experiments/raphael-anjou/pipelines/staged/) · from scratch | 436/480 | ● | | ● | | no | ### Cómo leerlo Casi todos los métodos terminan contra la rigidez, el muro que dice que los grandes tableros son islas aisladas. Los métodos construidos from scratch y a partir del corpus (PRIOR, KEYRING, PALIMPSEST, GAUNTLET) intentan alcanzar una isla nueva pilotando la construcción con una señal aprendida; se estabilizan en 458–463 y un par de ellos sí llegan a familias genuinamente nuevas, pero ninguno cruza hasta el techo. Los métodos de concentración y exactos (LADDER, BANDSAW) atacan en cambio la búsqueda misma (el alto factor de ramificación y el pico inexplorable) y lo pagan en la fase final. Los métodos de anclaje (CLOISTER, MIDDEN) localizan el daño pero chocan con el muro de la ley de área en el interior. Ningún muro por sí solo cuenta toda la historia, y ningún método atraviesa los cuatro. ## Dónde se detuvo cada uno, y por qué El techo nunca es arbitrario. Para cada método, su propio informe registra la razón exacta por la que la puntuación dejó de subir, citada aquí en una línea. - **[PALIMPSEST](/es/research/lab/experiments/raphael-anjou/learning/palimpsest/)** (463/480). Alcanzó 463, lo mejor del proyecto, leyendo el corpus para detectar qué decisiones compartidas son trampas y pilotando un barrido de 15 cuencas para rodearlas. Forzar directamente a la búsqueda a evitar las trampas empeoró los tableros: el valor estaba en dónde mirar, no en una regla estricta. - **[PRIOR](/es/research/lab/experiments/raphael-anjou/learning/prior/)** (460/480). Se estanca en 460: el prior de posición aprendido lleva rápido una construcción from scratch a la clase de los 460, pero la señal del corpus por sí sola no basta para salir de ella. - **[KEYRING](/es/research/lab/experiments/raphael-anjou/learning/keyring/)** (460/480). Tres señales aprendidas votando (posición, adyacencia, parche 2×2) alcanzaron 460 en una disposición de esquinas que ningún tablero había resuelto antes, una nueva familia, pero la señal de parche es marginal y el pulido sigue topando en 460. - **[REPLAY](/es/research/lab/experiments/raphael-anjou/learning/replay/)** (460/480). Reproduce exactamente los tableros estrictos-460 de la comunidad y revela el movimiento que la búsqueda ordinaria pasa por alto: 4 a 5 celdas que aceptan dos desajustes a la vez, inalcanzables para una búsqueda que permite como mucho uno. - **[GAUNTLET](/es/research/lab/experiments/raphael-anjou/pipelines/gauntlet/)** (458/480). Lanzar el beam en nueve direcciones de recorrido abrió una familia 458 completamente nueva (el orden de recorrido es un eje de diversidad más fuerte que la semilla aleatoria), pero una segunda ronda topó en 457 sin ningún 461: la nueva familia se satura como las demás. - **[CLOISTER](/es/research/lab/experiments/raphael-anjou/pipelines/cloister/)** (453/480). Como solucionador interior autónomo confirma un bonus real de compatibilidad con el borde, pero ese bonus no puede añadirse a posteriori (la misma rigidez que el tablero completo), de modo que se asienta en los 450 bajos. - **[MIDDEN](/es/research/lab/experiments/raphael-anjou/pipelines/midden/)** (452/480). Elegir dónde (no cuándo) puede romperse el tablero extiende la serie perfecta de 153 a 167–174 celdas, pero la geometría dispersa sigue fallando en la fase final: nada absorbe el último daño. - **[LADDER](/es/research/lab/experiments/raphael-anjou/pipelines/ladder/)** (451/480). Inunda de sondas baratas y promociona la más profunda, alcanzando un tablero estricto-451 sin récord que copiar, el primer escape de la banda universal 444–450, pero el suministro de aperturas perfectas se agota y los peldaños convergen todos a un único techo. - **[LODESTONE](/es/research/lab/experiments/raphael-anjou/learning/lodestone/)** (451/480). Un prior de demanda-escasa usado solo como desempate eleva la mediana from scratch en dos (449→451) y estrecha la varianza, pero cualquier peso mayor lo colapsa: la escasez es una señal real pero débil, y nunca toca el techo de la cuenca. - **[MOSAIC](/es/research/lab/experiments/raphael-anjou/pipelines/mosaic/)** (448/480). Compone soluciones exactas de bloques 4×4 con costuras flexibles, alcanzando 448 from scratch, pero el déficit recae casi por completo en los tres últimos bloques de esquina, donde el conjunto de piezas escasea: el mismo robo de piezas, ahora un único punto brillante. - **[BANDSAW](/es/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/)** (437/480). Resuelve una banda de fase final hasta la optimalidad probada, y al hacerlo mide el muro de la exactitud: el árbol de búsqueda crece alrededor de un factor veinte por cada desajuste adicional permitido, en ambos lados, de modo que encontrarse en el medio deja de ser rentable a tamaño completo. - **[STAGED](/es/research/lab/experiments/raphael-anjou/pipelines/staged/)** (436/480). Construye el tablero entero sin marco preestablecido y con un borde emergente, alcanzando 436, muy por debajo de los récords. Esa brecha es el hallazgo: mide exactamente cuánto vale el habitual anclaje marco-primero. ## La forma de la brecha Recorra la tabla de arriba abajo y la lección de todo el proyecto salta a la vista: los métodos que mueven la puntuación cambian la forma de la búsqueda, ya sea un orden de recorrido, un prior aprendido o una región confinada, nunca su velocidad bruta. Y todos ellos se detienen ante un muro que es global, no local. Las diez aristas de 470 a 480 no son un problema de acabado; están al otro lado de los cuatro muros a la vez. Una campaña aparte de 2026 a cargo de William Millilaw llegó a la misma conclusión por el lado de la diversidad. Barriendo la lista completa de métodos, constató que casi todo (búsqueda local adaptativa from scratch, colocación en serpentina, la cima de la distribución de un generador entrenado) redescubre una y otra vez el mismo puñado de cuencas, y que solo el parallel tempering producía de forma fiable cuencas genuinamente nuevas, tableros muy alejados del conjunto conocido. Incluso ese se estanca pronto. Su lectura es la que esta tabla no deja de formular: el cuello de botella no es la puntuación que un método alcanza sino el número de cuencas distintas que es capaz de encontrar, y ningún método del arsenal estándar encuentra suficientes. > **Note** > > Cada línea de saturación se destila del cuaderno de laboratorio del proyecto (una entrada por experimento). Los cuatro muros están corroborados por la literatura publicada: la transición de fase a 17 colores por Ansótegui, Béjar, Fernández & Mateu, "How Hard is a Commercial Puzzle: the Eternity II Challenge"; el gradiente ausente y las cuencas profundas por la literatura de búsqueda local sobre Eternity II. ## Relacionado - [Por qué un ordenador más rápido no ayuda](https://eternity2.dev/es/research/why/prune-vs-speed/) — La idea más importante de la búsqueda combinatoria difícil: reducir el espacio que se explora vence, por un margen exponencial, a explorarlo más rápido. Eternity II está diseñado para que apenas puedas reducirlo. - [El muro de rigidez](https://eternity2.dev/es/research/why/rigidity-wall/) — Cada tablero récord que tenemos está congelado en su sitio. No se puede progresar a base de pequeños retoques desde un tablero excelente hacia uno perfecto, y podemos demostrarlo. - [Experimentos](https://eternity2.dev/es/research/lab/experiments/) — Los experimentos de búsqueda con nombre del laboratorio, una sección por investigador. Cada uno es un run real contra Eternity II con su idea, su mejor tablero y las preguntas que dejó abiertas. El cuaderno de Raphaël Anjou está aquí completo; el cuaderno queda abierto a cualquier otra persona. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [Un mapa de todos los enfoques conocidos](https://eternity2.dev/es/research/build/approaches-map/) — La síntesis que la comunidad reclama sin encontrarla nunca: cada familia de ataque probada en Eternity II, lo que cada una alcanzó realmente, dónde se estrella, y un enlace a la página de fondo. Una misma idea rectora las atraviesa todas. - [Callejones sin salida](https://eternity2.dev/es/research/build/dead-ends/) — Enfoques que probamos que parecen prometedores y no mueven la aguja en Eternity II, documentados con lo que encontramos para que inviertas tu tiempo en otra parte. - [Problemas abiertos](https://eternity2.dev/es/research/open-problems/) — La frontera abierta de Eternity II reunida en un solo lugar: cada ángulo que todavía merece un intento, el muro que ataca, qué se ha probado y dónde se detuvo, y si es un objetivo accesible para principiantes o uno difícil y bien cartografiado. --- # Un conjunto de piezas extremo en cada eje medido > Mida las 256 piezas oficiales sin ningún solucionador a la vista y cada puerta estructural está cerrada: ninguna pieza simétrica por rotación, 5 parejas gemelas entre 32 640 emparejamientos, un tope de 307 sobre 480 si nada gira, presupuestos de color que se emparejan a exactamente 480 sin holgura, y una paleta 17+5 situada en el punto de una-solución-esperada. - Página canónica (con figuras y demos interactivas): https://eternity2.dev/es/research/why/why-e2-is-hard/ - Actualizado: 2026-07-22 - Temas: structure - Reproducir: `cd research/topics/adversarial-piece-set/compute && cargo run --release > ../results/invariants.json` - Fuente: El conjunto de piezas adverso: artículo, código fuente y resultados (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/adversarial-piece-set - Fuente: Brendan Owen, Design the hardest puzzle: la receta y la derivación del 17,14 (msg 1947, agosto de 2007) — https://groups.io/g/eternity2/message/1947 - Fuente: El censo del espacio de diseño de piezas: las formas simétricas existen en ese espacio y el conjunto real las evita todas (msg 8025, septiembre de 2010) — https://groups.io/g/eternity2/message/8025 - Fuente: Las páginas Eternity de Selby y Riordan, el sitio de los propios diseñadores — https://www.archduke.org/eternity/ --- Deje a un lado los solucionadores y mida el objeto en sí. El conjunto oficial son 256 piezas cuadradas, con cuatro bordes de color cada una. Si esas piezas se hubieran sorteado sin cuidado, algo de holgura estructural sobreviviría en alguna parte: una pieza repetida, una pieza simétrica, un color en exceso, un sesgo de orientación que no cuesta nada, una camarilla de piezas que se prefieren entre sí. De esa holgura es de lo que se alimentan los solucionadores. Esta página comprueba cada una de esas puertas directamente sobre el conjunto de piezas solo, y todas están cerradas, con exactitud, no de forma aproximada. Cinco de las seis mediciones de abajo están versionadas como un único tema reproducible. Cada una se recalcula desde la instancia publicada en menos de un segundo, y el binario comprueba por sí mismo sus valores esperados: reproducir los números y verificarlos son el mismo gesto. ## Las cinco mediciones versionadas | Eje | Medición | El extremo en el que se sitúa | | --- | --- | --- | | Simetría de rotación | 256 de 256 piezas tienen sus cuatro rotaciones distintas | 1 024 piezas-rotación, nada que cocientar | | Gemelas | 251 multiconjuntos de colores distintos; 5 parejas gemelas y 114 casi gemelas entre 32 640 emparejamientos | ningún duplicado, coincidencia al nivel del 0,4 % | | Tope con orientación fija | como mucho 307 de 480 uniones pueden casar si ninguna pieza gira | la rotación es estructuralmente necesaria | | Presupuesto de color | los 22 colores tienen un número par de lados; la capacidad de emparejamiento suma 480 | exactamente suficiente, holgura cero | | Paleta dividida | 17 colores interiores, 5 colores de uniones del borde | 17 es el ajuste de una-solución-esperada | ### Ninguna simetría de rotación en ninguna parte Una pieza que se viera igual tras un cuarto o medio giro colapsaría orientaciones y encogería el espacio de decisión, y la reducción estándar, buscar una forma canónica por órbita, cobraría el descuento. Medido: cada una de las 256 piezas tiene una órbita de rotación completa de tamaño 4, así que el puzle tiene de verdad 1 024 piezas-rotación distintas y la búsqueda por formas canónicas no gana absolutamente nada. El censo comunitario del espacio de diseño muestra que esto es una elección, no un accidente: con esta paleta, el espacio de piezas posibles contiene formas que se repiten bajo rotación, y el conjunto real las evita todas ([msg 8025](https://groups.io/g/eternity2/message/8025)). La [receta de diseño](/es/research/why/design-recipe/) lleva el lado intencional de esa historia, incluida la medición de Brendan Owen de que las piezas simétricas se colocarían de forma tan desigual que devolverían al solucionador justo la señal de ordenación por dificultad que los diseñadores estaban eliminando. ### Cinco gemelas entre 32 640 emparejamientos Olvide el orden de los bordes y pregunte qué piezas llevan el mismo presupuesto de cuatro colores. Las 256 piezas producen 251 multiconjuntos distintos: exactamente 5 parejas coinciden, las piezas (2,3), (5,14), (7,51), (109,110) y (171,181) en la numeración de investigación, y en cada pareja los colores compartidos ocupan un orden cíclico diferente, de modo que ninguna pieza se repite, ni siquiera salvo rotación. Al relajar la pregunta hacia las casi gemelas, parejas que comparten 3 de sus 4 bordes en la misma posición en la orientación almacenada, se añaden 114 parejas en 79 grupos. Frente a los 32 640 pares no ordenados que ofrece el conjunto, incluso esa coincidencia relajada queda en una fracción de un uno por ciento. La puerta que esto cierra es la duplicación gratuita: una pareja de duplicados de verdad permitiría reescribir cualquier solución intercambiando las dos piezas, y no hay ninguna. ### La rotación es estructuralmente necesaria Congele cada pieza en su orientación publicada y pregunte cuántas de las 480 uniones podrían casar. Color por color, las uniones horizontales usan como mucho la menor de las ofertas orientadas al este y al oeste, y las verticales la menor de las ofertas norte y sur. La suma tiene un tope de **307 sobre 480**. Es una cota de conteo, no un resultado de búsqueda: ninguna disposición de piezas sin girar, en ningún lugar del tablero, puede superarla. Una cadena que fija las orientaciones pronto concede por tanto al menos 173 uniones antes de empezar a buscar, y 307 queda muy por debajo de todos los tableros altos de la [página de récords](/es/research/records/). Los dos números cuentan aquí bordes casados entre piezas adyacentes, excluido el perímetro exterior, la convención usada en todo este sitio. ### Un presupuesto de color con holgura cero Cuente los lados de pieza por color. Cada uno de los 22 colores no grises tiene un total par, y las capacidades de emparejamiento, la mitad del número de lados por color, suman exactamente 480, el número geométrico de uniones del tablero. La oferta es exactamente suficiente para un tablero perfecto: ningún color falta, lo que certificaría imposible la solución construida, y ningún color sobra, lo que dejaría holgura que los tableros parciales pudieran gastar. Holgura cero significa también palanca cero. Ningún argumento de conteo sobre la sola oferta de colores puede podar nada, así que la dificultad vive por entero en qué piezas llevan qué colores, no en cuánto hay de cada color. Lo más afilado que produce el razonamiento de oferta es el invariante de [equilibrio del borde](/es/research/why/border-balance/), y esa condición es necesaria, nunca suficiente. ### La paleta dividida, y qué se ajustó Los 22 colores se dividen en 17 colores interiores y 5 que solo aparecen en las uniones entre piezas del borde. La separación en sí es automática: con un perímetro gris macizo, los bordes de color de una pieza del borde solo se encuentran con otros bordes del borde o con el interior, así que los dos depósitos nunca se mezclan, como explica la página de [geografía de los colores raros](/es/research/why/rare-color-geography/). Lo que se eligió son los recuentos. La derivación de Owen del año del lanzamiento recupera 17,14 colores interiores a partir de la exigencia de aproximadamente una solución esperada ([msg 1947](https://groups.io/g/eternity2/message/1947)), lo más escasa que puede ser una solución sin dejar de existir, y la página del [pico de dificultad](/es/research/why/phase-transition/) mide que ese es el peor lugar posible para una búsqueda. La receta reconstruida completa, ingrediente a ingrediente, está en la página de la [receta de diseño](/es/research/why/design-recipe/). ## El sexto eje, descrito sin sus números Una medición más pertenece a la tesis pero aún no forma parte del tema versionado. Construya el grafo cuyos nodos son las 256 piezas, ponderado por cuántas adyacencias por rotación admite cada pareja, y lea su espectro. El grafo se separa limpiamente en exactamente dos bloques, las 60 piezas del marco y las 196 interiores, y más allá de ese corte no muestra estructura de comunidad a ninguna escala: ni camarillas de piezas mutuamente compatibles, ni un subpuzle barato que recortar y resolver primero. El agrupamiento es de escala única, y la única frontera de grupo visible es la línea marco-interior que cualquier solucionador ya conoce. Los números espectrales tras esta descripción quedan aplazados hasta que su cálculo se versione junto a los otros cinco; lea por ahora este eje como una descripción, y los cinco anteriores como exactos. ## Lo que estos extremos descartan Cada eje cierra una puerta estándar. - **Reducción por simetría.** Nada que cocientar: las 1 024 piezas-rotación son todas distintas. - **Trucos de duplicados.** Ninguna duplicación gratuita de soluciones: 5 casi coincidencias entre 32 640 emparejamientos, ninguna un duplicado real. - **Atajos de orientación.** Fijar las rotaciones pronto concede 173 de 480 uniones por un argumento de conteo, antes de cualquier búsqueda. - **Argumentos de oferta.** Presupuestos pares y exactamente suficientes: contar colores no poda nada. - **Subcomunidades baratas.** No existe nada más blando que el corte marco-interior desde el que empezar. Esta página es la compañera de medición de dos vecinas. La [receta de diseño](/es/research/why/design-recipe/) reconstruye, desde el archivo del año del lanzamiento, por qué el conjunto se construyó así; el [barrido de teoremas](/es/research/why/theorem-sweep/) reúne las leyes demostradas sobre el mismo objeto. Y los extremos de aquí son la planta baja de los muros de la sección: [sin movimientos forzados](/es/research/why/no-forced-moves/) es la misma llanura sentida celda a celda durante una construcción, y los [ciclos sigma](/es/research/why/sigma-cycles/) son en lo que se convierte la ausencia de intercambios pequeños entre tableros altos terminados. Para saber qué método muere contra qué muro, el [mapa de muros y métodos](/es/research/why/walls-and-methods/) hace de índice. ## Reproducción y convenciones El directorio del tema contiene un binario de Rust autónomo que carga la instancia oficial incluida (256 piezas, sin pistas) y recalcula cada número de arriba: el censo de órbitas de rotación, los recuentos de gemelas y casi gemelas, el tope de emparejamiento con orientación fija, y la paridad y capacidad de emparejamiento por color. La ejecución es determinista, termina en mucho menos de un segundo, imprime un único documento JSON y sale con código distinto de cero si falla algún valor esperado; el archivo de resultados versionado es idéntico byte a byte entre ejecuciones. Los identificadores de pieza de la lista de gemelas siguen la numeración de investigación del conjunto. Los dos números de tipo puntuación de esta página, 307 y 480, cuentan bordes casados entre piezas adyacentes con el perímetro exterior excluido, la misma convención que la página de [récords](/es/research/records/); nada aquí puntúa un tablero candidato, y nada en esta página es una reclamación de récord. ## Relacionado - [Diseñado para ser irresoluble: la receta](https://eternity2.dev/es/research/why/design-recipe/) — Eternity II sigue una receta para lograr el puzzle de emparejamiento de aristas más difícil posible: forma compacta, sin piezas simétricas ni duplicadas, paletas separadas, frecuencias planas, una sola solución esperada. La comunidad aplicó ingeniería inversa a cada ingrediente en el año del lanzamiento. - [La cosecha de teoremas: trece leyes estructurales](https://eternity2.dev/es/research/why/theorem-sweep/) — Un solo arco de investigación, trece familias de teoremas estructurales: pureza del anillo, el suelo de paridad en 479, el muro de 470 como frontera de fase, los invariantes de flujo, la ley de área entrópica, y los resultados de imposibilidad que ponen precio a cada atajo clásico. Esta página es el mapa. - [Qué muro detiene a qué método](https://eternity2.dev/es/research/why/walls-and-methods/) — La sección de investigación tiene dos vertientes: los muros estructurales que hacen difícil a Eternity II, y los algoritmos concebidos para franquearlos. Esta página es el puente: cada método enfrentado al muro que realmente ataca, y la puntuación en la que ese muro lo detuvo. - [Calibrado en el pico de dificultad](https://eternity2.dev/es/research/why/phase-transition/) — Eternity II utiliza 22 colores, repartidos entre 17 colores interiores y 5 reservados al marco, y ese número de alrededor de 17 se sitúa cerca del punto donde este tipo de puzzle es más difícil de resolver (la transición es una banda, no un entero único). - [Los colores raros viven en el marco](https://eternity2.dev/es/research/why/rare-color-geography/) — Cinco de los 22 colores de Eternity II aparecen solo a lo largo del anillo de borde, cada uno en exactamente 24 aristas, nunca una sola vez en el interior. Una separación estructural que moldea la forma en que cada solucionador trata el marco. - [Sin jugadas forzadas](https://eternity2.dev/es/research/why/no-forced-moves/) — La manera habitual de resolver un puzzle lógico es encontrar un lugar donde solo encaja una pieza, colocarla y repetir. Aquí ese recurso no existe: cada pieza interior tiene entre 73 y 137 vecinas posibles, y ninguna queda jamás fijada a una sola opción. - [Por qué el basin-hopping parece imposible](https://eternity2.dev/es/research/why/sigma-cycles/) — Si no puedes mejorar un tablero excelente puliéndolo, quizá puedas saltar a otro tablero excelente. En cada par de récords probado, no puedes, y vale la pena ver la razón estructural que lo explica.