Ich habe mit der Maze-Demo von Google Blocky herumgespielt und mich an die alte Regel erinnert: Wenn Sie ein Labyrinth lösen möchten, halten Sie einfach Ihre linke Hand an der Wand. Dies funktioniert für jedes einfach verbundene Labyrinth und kann von einem endlichen Wandler implementiert werden.
Lassen Sie unseren Roboter durch einen Wandler mit den folgenden Aktionen und Observablen dargestellt werden:
- Aktionen: vorwärts gehen ( ), links abbiegen ( \ leftarrow ), rechts abbiegen ( \ rightarrow )
- Observables: Wand voraus ( ), keine Wand voraus ( )
Dann können wir den linken Labyrinthlöser wie folgt erstellen (entschuldigen Sie meine faule Zeichnung):
Wenn wir ein Observable sehen, folgen wir der entsprechenden Kante außerhalb des Zustands, während wir die mit dieser Kante verbundene Aktion ausführen. Dieser Automat löst alle einfach verbundenen Labyrinthe, obwohl es nach Sackgassen einige Zeit dauern kann. Wir nennen einen anderen Automaten besser als wenn:
macht streng mehr Schritte auf nur einer endlichen Anzahl von Labyrinthen, und
unternimmt auf einer unendlichen Anzahl von Labyrinthen streng weniger Schritte (im Durchschnitt; für probabilistische Varianten).
Meine zwei Fragen:
Gibt es einen endlichen Automaten, der besser ist als der oben gezeichnete? Was ist, wenn wir probabilistische Wandler zulassen?
Gibt es einen endlichen Automaten zum Lösen von Labyrinthen, die nicht unbedingt einfach miteinander verbunden sind?