Я дурачился с демоверсией Google Blocky's Maze и вспомнил старое правило, что если вы хотите решить лабиринт, просто держите левую руку на стене. Это работает для любого односвязного лабиринта и может быть реализовано конечным преобразователем.
Пусть наш робот будет представлен преобразователем со следующими действиями и наблюдаемыми:
- Действия: идти вперед ( ), повернуть налево ( \ leftarrow ), повернуть направо ( \ rightarrow )→
- Наблюдаемые: стена впереди ( ), нет стены впереди ( )
Тогда мы можем построить левый решатель лабиринтов как (простите мой ленивый рисунок):
Если наблюдение за наблюдаемой заставит нас следовать за соответствующим краем из состояния при выполнении действия, связанного с этим краем. Этот автомат решит все односвязные лабиринты, хотя это может занять некоторое время после тупиков. Мы называем другой автомат лучше, чем если:A
делает строго больше шагов только на конечном количестве лабиринтов, и
делает строго меньше шагов (в среднем; для вероятностных вариантов) на бесконечном количестве лабиринтов.
Мои два вопроса:
Есть ли конечный автомат лучше, чем нарисованный выше? Что если мы допустим использование вероятностных преобразователей?
Существует ли конечный автомат для решения лабиринтов, которые не обязательно просто связаны?
источник
Ответы:
Если я хорошо понял вопрос, я думаю, что вы можете применить трюк ускорения, чтобы получить более быстрые автоматы на бесконечном количестве лабиринтов (при условии, что выход расположен на одной из границ): вы можете просто использовать внутренние состояния для хранения конечное число шагов и распознайте тупики, как показано на рисунке:
Когда правый следящий автомат находится в положении и его состояние «сигнализирует», что он только что прошел за закрытым квадратом ( с закодированным фиксированным размером, а не произвольным большим квадратом ), тогда он может безопасно повернуть налево и избежать посещения тупика зона. Как подчеркнуто в моем комментарии ниже, автомат будет применять ярлык к каждому лабиринту, который содержит один (или несколько) «субмазов», как показано на рисунке, поэтому он будет работать лучше на бесконечном количестве лабиринтов. В лабиринтах, которые не содержат субмази, как на рисунке, он будет работать как обычный правый следующий автомат.A
Аналогичным образом вы можете кодировать конечное число различных фигур фиксированного размера, чтобы избежать тупиков и ускорить работу вашего автомата. Как следствие, не существует «оптимального» решателя близоруких лабиринтов для односвязных лабиринтов с выходом на границе.
Трюк работает, если вход находится внутри лабиринта, а выход - на границе; но если выход находится внутри лабиринта, он не работает, потому что все места должны быть посещены, и в этом случае ваш близорукий решатель является оптимальным.
Очевидно, что вы не можете применить тот же трюк для решения не просто связанных лабиринтов (но он должен работать, если есть фиксированная верхняя граница для размера каждого неподключенного компонента).
источник
Вопрос 1
Я думаю, что ваше определение лучше слишком строго в том смысле, что конечное слишком ограничительно (но у меня нет лучшего определения).
Мы строим семейство лабиринтов . Каждый - это коридор длины который заканчивается поворотом направо. То же самое с и слева, соответственно. Мы можем построить преобразователь и который оптимально решает подмножества и соответственно. Тогда ни один датчик не лучше, чем или .R i i L A R A L R L A R A LR=(Ri)i Ri i L AR AL R L AR AL
Теперь наоборот: с учетом мы можем построить что доказывает, что ни один решатель не лучше, чем . Я хочу сказать, что я думаю, что мы можем сделать то же самое для левой решающей задачи лабиринта, но набор лабиринтов был бы более сложным. R A RAR R AR
Вероятностные преобразователи могут быть исключены, поскольку детерминированный преобразователь будет быстрее на этих бесконечных наборах лабиринтов.
Вопрос 2 (благодаря обсуждению с ОП )
Нет. (Источник: эта новаторская статья Лотара Будаха. Эта теорема более четко изложена в аннотации этой статьи Фрэнка Хоффмана.)
источник