Я дурачился с демоверсией Google Blocky's Maze и вспомнил старое правило, что если вы хотите решить лабиринт, просто держите левую руку на стене. Это работает для любого односвязного лабиринта и может быть реализовано конечным преобразователем.
Пусть наш робот будет представлен преобразователем со следующими действиями и наблюдаемыми:
- Действия: идти вперед ( ), повернуть налево ( \ leftarrow ), повернуть направо ( \ rightarrow )→
- Наблюдаемые: стена впереди ( ), нет стены впереди ( )
Тогда мы можем построить левый решатель лабиринтов как (простите мой ленивый рисунок):
Если наблюдение за наблюдаемой заставит нас следовать за соответствующим краем из состояния при выполнении действия, связанного с этим краем. Этот автомат решит все односвязные лабиринты, хотя это может занять некоторое время после тупиков. Мы называем другой автомат лучше, чем если:A
делает строго больше шагов только на конечном количестве лабиринтов, и
делает строго меньше шагов (в среднем; для вероятностных вариантов) на бесконечном количестве лабиринтов.
Мои два вопроса:
Есть ли конечный автомат лучше, чем нарисованный выше? Что если мы допустим использование вероятностных преобразователей?
Существует ли конечный автомат для решения лабиринтов, которые не обязательно просто связаны?