Je me moquais de la démo de Google Blocky Maze et je me souvenais de l'ancienne règle selon laquelle si vous voulez résoudre un labyrinthe, gardez simplement votre main gauche contre le mur. Cela fonctionne pour tout labyrinthe simple connecté et peut être mis en œuvre par un transducteur fini.
Que notre robot soit représenté par un transducteur avec les actions et observables suivants:
- Actions: avancer ( ), tourner à gauche ( ), tourner à droite ( )
- Observables: mur devant ( ), pas de mur devant ( )
Ensuite, nous pouvons construire le solveur de labyrinthe de gauche comme (pardonnez mon dessin paresseux):
Où voir un observable nous fera suivre le bord approprié hors de l'état tout en exécutant l'action associée à ce bord. Cet automate résoudra tous les labyrinthes simplement connectés, bien que cela puisse prendre son temps après les impasses. On appelle un autre automate meilleur que A si:
prend strictement plus d'étapes que sur un nombre fini de labyrinthes, et
prend strictement moins d'étapes (en moyenne; pour les variantes probabilistes) sur un nombre infini de labyrinthes.
Mes deux questions:
Existe-t-il un automate fini meilleur que celui dessiné ci-dessus? Et si nous autorisons les transducteurs probabilistes?
Existe-t-il un automate fini pour résoudre des labyrinthes qui ne sont pas nécessairement simplement connectés?