Eu estava brincando com a demo do Google Blocky's Maze e lembrei da regra antiga de que, se você quiser resolver um labirinto, mantenha a mão esquerda na parede. Isso funciona para qualquer labirinto conectado simples e pode ser implementado por um transdutor finito.
Deixe nosso robô ser representado por um transdutor com as seguintes ações e observáveis:
- Ações: vá em frente ( ), vire à esquerda ( ), vire à direita ( )← →
- Observáveis: parede à frente ( ), sem parede à frente ( )⊤
Em seguida, podemos construir o solucionador de labirinto esquerdo como (perdoe meu desenho preguiçoso):
Onde ver um observável nos fará seguir a borda apropriada para fora do estado enquanto executamos a ação associada a essa borda. Esse autômato resolverá todos os labirintos simplesmente conectados, embora possa demorar um pouco após os becos sem saída. Chamamos outro autômato melhor que se:A
executa estritamente mais etapas em apenas um número finito de labirintos e
executa estritamente menos etapas (em média; para variantes probabilísticas) em um número infinito de labirintos.
Minhas duas perguntas:
Existe um autômato finito melhor que o desenhado acima? E se permitirmos transdutores probabilísticos?
Existe um autômato finito para resolver labirintos que não são necessariamente simplesmente conectados?