Me he dado cuenta en un 80% de que esta respuesta puede tener demasiadas partes para ponerla en práctica, así que también voy a dejar una más corta.
Si se prioriza el llenado de algunas celdas sobre otras, al menos se puede podar el árbol de búsqueda del ordenador. Sugiero llenar el cubo central, seguido por los centros de las seis caras, seguido por las ocho esquinas, terminando con todo lo demás.
Aquí, déjame numerar los cuadrados de un pentominó en Y:
1
23
4
5
Al comenzar con la Y llenando el cubo central, el espacio de búsqueda puede reducirse en un factor de 12 manteniendo constante la orientación de esta pieza. Nótese que sólo las celdas 2, 3 y 4 pueden ocupar el centro del cubo. Si 2 o 4 es la celda central, entonces quedarán cinco centros de caras por llenar; si es 3, entonces quedarán los seis.
Para los cinco o seis centros, la Y que ocupa cada centro puede colocarse de una de las 36 maneras siguientes, sin tener en cuenta el solapamiento:
-La "columna vertebral" (los cubos 1245) puede apuntar en cualquiera de las cuatro direcciones
-De nuevo, sólo 2, 3 o 4 pueden llenar estos cubos
-La Y completa puede estar en la cara de tres maneras para cada cubo: en cualquiera de las caras de la Y para los tres, además de a lo largo de la columna vertebral para el 2 y el 4 o a lo largo de la cara opuesta más lejana para el 3
Ahora las ocho esquinas. Sólo 1 y 5 pueden ocupar estos cubos, así que para cada una de estas esquinas podemos trabajar en colocaciones parciales sólo para las espinas a lo largo de los bordes. Ahora, cada esquina es adyacente a tres aristas de tres cuadrados, aunque algunas de las doce aristas están ciertamente ocupadas en parte por las Y colocadas en la fase anterior. Las esquinas que hay que rellenar tienen que ser priorizadas por el menor número de aristas disponibles.
-Si, en cualquier punto, una esquina sin rellenar tiene 0 aristas libres, entonces hay que avanzar a la última "colocación temporal de aristas" o a toda la configuración cara-centro
-Cuando se coloca una pieza de esquina a lo largo de una arista y la otra esquina que comparte esa arista aún no se ha llenado, esa otra esquina debe volver a ser priorizada por tener una arista libre menos
-Si alguna esquina sin rellenar sólo tiene un borde libre, se coloca un lomo a lo largo de esa esquina y borde
-Y si ninguna esquina sin rellenar tiene menos de dos aristas libres, escoge y anota una "colocación temporal de aristas" para arreglar si lleva a una contradicción. (Garantizo que al menos dos esquinas no tendrán más de dos aristas. Si la primera colocación es incorrecta, la segunda colocación debe ser utilizada pero no anotada como temporal).
Esto da ocho colocaciones parciales y seis o siete colocaciones totales. Esto deja once o diez Y's para colocar dentro de un volumen de 63 o 58, respectivamente, que incluye al menos 26 cubos que no se llenan en absoluto independientemente de cómo se coloquen exactamente las Y's de las esquinas (cada una sigue teniendo hasta cuatro posibilidades para la colocación del cubo 3), un espacio de búsqueda mucho más pequeño.
0 votos
Sí, ciertamente se pueden factorizar las simetrías del cubo. También podría ser fructífero considerar - para un solo cubo del rompecabezas, que ya que debe ser llenado entonces cuáles son todas las formas posibles de colocar un pentomino que llene ese cubo (ahora usted sabe que uno de estos debe ser el correcto). Otra buena optimización (que es más difícil de implementar) es tratar de encontrar imposibilidades lo más rápido posible (como eso poda el árbol de búsqueda llegarás más rápido a la solución).
0 votos
@muad, estoy buscando algo realmente importante. Eliminando las simetrías sólo se reduce en un factor de 24. ¿Puede explicar con más detalle la búsqueda de imposibilidades?
0 votos
En realidad, creo que la redacción no es clara. Lo que realmente busco es alguna propiedad matemática que elimine la necesidad de hacer backtracking en combinaciones de colocación de piezas.
0 votos
Personalmente, yo construiría la esquina presentada en la imagen, y luego intentaría la segunda mitad del puzzle de forma normal. Esto también podaría su árbol de búsqueda considerablemente, dada una configuración inicial conocida en la que existe una solución.
0 votos
No puedes hacerlo sin retroceder.
0 votos
@muad, ¿puedes explicar por qué?
0 votos
Ya que está relacionado con problemas NP-duros. Espero que alguien con más conocimientos sobre esto pueda elaborar un poco.
2 votos
@muad, el problema general puede ser NP-duro, pero esto es pero un caso No hay ninguna razón a priori para que instancias particulares de problemas muy difíciles puedan ser resueltas utilizando trucos especiales adaptados a la instancia.
0 votos
¿Cuántas soluciones hay? Además, cuando dices "50 millones de colocaciones y eliminaciones", supongo que los movimientos no válidos no se cuentan como (intento de) colocación ¿correcto? La razón por la que pregunto es que el programa que escribí hace una simple búsqueda exhaustiva (empezando por una de las esquinas de la cuadrícula) y encuentra 20 soluciones en ~95 millones de movimientos, menos de 5 millones de movimientos por solución en promedio. Tengo curiosidad por saber qué hemos hecho tú y yo de forma diferente. Gracias, Leor
0 votos
@Leor: por favor, deja de publicar comentarios como respuestas, especialmente después de que el primero se haya convertido para ti. La publicación repetida de contenido duplicado se considerará spam.
0 votos
Según el sitio que enlazaste, los poliominós son avión figuras geométricas. Creo que la palabra que quieres es policubos . Además, tu pregunta no se refiere a "embaldosar pentominos" (o policubos), sino a embaldosar un cubo con politonos.