Wygłupiałem się z prezentacją Google Blocky's Maze i przypomniałem sobie starą zasadę, że jeśli chcesz rozwiązać labirynt, trzymaj lewą rękę przy ścianie. Działa to dla każdego prostego połączenia labiryntu i może być zrealizowane przez skończony przetwornik.
Niech nasz robot będzie reprezentowany przez przetwornik z następującymi czynnościami i obserwowalnymi:
- Czynności: idź do przodu ( ), skręć w lewo ( ), skręć w prawo ( )
- Obserwowalne: ściana przed ( ), brak ściany przed ( )
Następnie możemy zbudować solver lewostronny jako (przepraszam za mój leniwy rysunek):
Widzenie obserwowalnego spowoduje, że będziemy podążać za odpowiednią krawędzią ze stanu podczas wykonywania akcji związanej z tą krawędzią. Ten automat rozwiąże wszystkie po prostu połączone labirynty, chociaż może zająć trochę czasu po ślepych zaułkach. Nazywamy inny automat lepszym niż A, jeżeli:
robi znacznie więcej kroków tylko na skończonej liczbie labiryntów i
wykonuje znacznie mniej kroków (średnio; dla wariantów probabilistycznych) na nieskończonej liczbie labiryntów.
Moje dwa pytania:
Czy istnieje automat skończony lepszy niż ten narysowany powyżej? Co jeśli pozwolimy na przetworniki probabilistyczne?
Czy istnieje skończony automat do rozwiązywania labiryntów, które niekoniecznie są po prostu połączone?
źródło
Odpowiedzi:
Jeśli dobrze zrozumiałem pytanie, myślę, że możesz zastosować sztuczkę przyspieszającą, aby uzyskać szybsze automaty na nieskończonej liczbie labiryntów (pod warunkiem, że wyjście znajduje się na jednej z granic): możesz po prostu użyć stanów wewnętrznych do przechowywania skończoną liczbę kroków i rozpoznaj ślepe zaułki jak na rysunku:
W podobny sposób możesz zakodować skończoną liczbę różnych kształtów o stałym rozmiarze, aby uniknąć ślepych zaułków i przyspieszyć swój automat. W rezultacie nie ma „optymalnego” krótkowzrocznego rozwiązania labiryntu dla prostych labiryntów z wyjściem umieszczonym na granicy.
Sztuczka działa, jeśli wejście znajduje się wewnątrz labiryntu, a także wyjście na granicy; ale jeśli wyjście znajduje się w labiryncie, to nie działa, ponieważ wszystkie miejsca muszą zostać odwiedzone, w tym przypadku twój krótkowzroczny solver jest optymalny.
Oczywiście nie można zastosować tej samej sztuczki do rozwiązywania niełatwo połączonych labiryntów (ale powinno to działać, jeśli istnieje stała górna granica wielkości każdego niepołączonego komponentu).
źródło
Pytanie 1
Myślę, że twoja definicja lepszego jest zbyt ścisła w tym sensie, że skończona jest zbyt restrykcyjna (ale nie mam lepszej definicji).
Prawdopodobnie można wykluczyć probabilistyczne przetworniki, ponieważ deterministyczny przetwornik będzie szybszy na tych nieskończonych zestawach labiryntów.
Pytanie 2 (dzięki dyskusji z PO )
Nie. (Źródło: ten przełomowy artykuł Lothara Budacha. Twierdzenie to jest wyraźniej określone w streszczeniu tego artykułu Franka Hoffmanna.)
źródło