Estaba jugando con la demostración de Google Blocky's Maze , y recordé la vieja regla de que si quieres resolver un laberinto, solo mantén la mano izquierda en la pared. Esto funciona para cualquier laberinto conectado de forma simple y puede implementarse mediante un transductor finito.
Deje que nuestro robot sea representado por un transductor con las siguientes acciones y observables:
- Acciones: avance ( ), gire a la izquierda ( ), gire a la derecha ( )
- Observables: muro adelante ( ), sin muro adelante ( )
Luego podemos construir el solucionador de laberintos izquierdo como (perdón por mi dibujo perezoso):
Donde ver un observable nos hará seguir el borde apropiado fuera del estado mientras ejecutamos la acción asociada con ese borde. Este autómata resolverá todos los laberintos conectados de forma simple, aunque puede llevar su tiempo siguiendo callejones sin salida. Llamamos a otro autómata mejor que A si:
da estrictamente más pasos solo en un número finito de laberintos, y
toma estrictamente menos pasos (en promedio; para variantes probabilísticas) en un número infinito de laberintos.
Mis dos preguntas:
¿Existe un autómata finito mejor que el que se muestra arriba? ¿Qué pasa si permitimos transductores probabilísticos?
¿Existe un autómata finito para resolver laberintos que no están necesariamente simplemente conectados?
fuente
Respuestas:
Si entendí bien la pregunta, creo que puede aplicar un truco de aceleración para obtener autómatas más rápidos en un número infinito de laberintos (siempre que la salida se coloque en uno de los bordes): simplemente puede usar los estados internos para almacenar un número finito de pasos y reconocer callejones sin salida como el de la figura:
Cuando un autómata de seguimiento a la derecha está en la posición y su estado "indica" que acaba de seguir un cuadrado cerrado ( con un tamaño fijo codificado, no un cuadrado grande arbitrario ), puede girar con seguridad a la izquierda y evitar visitar el callejón sin salida zona. Como se subraya en mi comentario a continuación, el autómata aplicará el acceso directo en cada laberinto que contenga uno (o más) "submazes" como el de la figura, por lo que funcionará mejor en infinitos laberintos. En los laberintos que no contienen un submaze como el de la figura, funcionará como un autómata de seguimiento a la derecha estándar.A
De manera similar, puede codificar un número finito de diferentes formas de tamaño fijo para evitar callejones sin salida y acelerar su autómata. Como consecuencia, no existe un solucionador de laberintos miopes "óptimo" para laberintos conectados simplemente con la salida colocada en el borde.
El truco funciona si la entrada se coloca dentro del laberinto y la salida también en el borde; pero si la salida se coloca dentro del laberinto, entonces no funciona porque se deben visitar todas las ubicaciones y, en este caso, su solucionador miope es óptimo.
Obviamente, no puede aplicar el mismo truco para resolver laberintos conectados no simplemente (pero debería funcionar si hay un límite superior fijo en el tamaño de cada componente no conectado).
fuente
Pregunta 1
Creo que su definición de mejor es demasiado estricta en el sentido de que lo finito es demasiado restrictivo (pero no tengo una mejor definición).
Construimos una familia de laberintos . Cada R i es un corredor de longitud i que termina con un giro a la derecha. Lo mismo con L y izquierda, respectivamente. Podemos construir un transductor A R y A L que resuelva de manera óptima los subconjuntos R y L , respectivamente. Entonces no transductor es mejor que A R o A L .R = ( Ryo)yo Ryo yo L UNR UNL R L UNR UNL
Los transductores probabilísticos probablemente pueden descartarse ya que un transductor determinista será más rápido en estos conjuntos infinitos de laberintos.
Pregunta 2 (gracias a la discusión con OP )
No. (fuente: este documento innovador de Lothar Budach. El teorema se establece más claramente en el resumen de este artículo de Frank Hoffmann).
fuente