Mam mapę opartą na kwadratach. Dozwolony jest tylko ruch poziomy i pionowy (bez przekątnych). Koszt ruchu wynosi zawsze 1.
Wdrażam algorytm A * na tej mapie, używając odległości Manhattan jako heurystyki odległości. Czy to heurystyka jest spójna? Czy mogę uniknąć sprawdzania g(node)
węzłów znajdujących się w zestawie ZAMKNIĘTE?
Edycja: Przez konsekwentne mam na myśli monotonię.
tiles
path-finding
geometry
Emiliano
źródło
źródło
Odpowiedzi:
Aby odpowiedzieć na twoje pytanie: odległość manhatten jest spójna, gdy jesteś zmuszony poruszać się pionowo / horyzontalnie wzdłuż nieważonej siatki (można to łatwo zilustrować definicją na Wikipedii) . Tak, w twoim przypadku możesz uniknąć ponownego sprawdzania węzłów w zamkniętym zestawie.
Jednak po zezwoleniu na ruch ukośny lub pod dowolnym kątem manhatten odległość staje się niedopuszczalna, ponieważ przecenia koszty diagonalne, co niekoniecznie oznacza, że nie jest spójna.
źródło
h(x) = min(manhattan(p1), manhattan(p2))
(tj. Albo p1 albo p2 są dobrym punktem końcowym i chcę dotrzeć do najbliższego). Czy toh(x)
wciąż monotoniczne?h(x, p1)
ih(x, p2)
są spójne, tomin(h(x,p1), h(x,p2))
również będą spójne. Łatwo to pokazać z definicji na Wikipedii (musielibyśmy to pokazaćmin(h(x, p1), h(x, p2)) <= distance(x,y) + min(h(y, p1), h(y, p2))
dla wszystkich węzłówx
iy
z przewagą między nimi. Teraz załóżmy, żeh(x, p1)
jest to minimum; czy możesz pokazać, że jest to zdecydowanie<=
prawa strona, wykorzystując fakt, że obie heurystyki są spójne?)Tak, odległość między dwoma punktami na Manhattanie jest zawsze taka sama, jak zwykła odległość między nimi. Możesz myśleć o odległości Manhattanu jako składowych X i Y linii biegnącej między dwoma punktami.
Ten obraz ( z Wikipedii ) dobrze to ilustruje:
Zielona linia jest rzeczywista odległość.
W niebieski , czerwony i żółty linii oznaczających samej odległości Manhattan (12 jednostek). Bez względu na kombinację ruchów w górę i w prawo rysujesz od lewego dolnego punktu do prawego dolnego rogu, otrzymasz taką samą całkowitą odległość na Manhattanie.
źródło
h(x) = 1000
, co oczywiście nie jest spójne) . On może uniknąć ponownego sprawdzenia węzłów, ale tylko dlatego, Manhatten odległość jest zgodna, co ta odpowiedź nie pokazuje.2*manhatten
spełnia to, ale nie jest konsekwentne.W odpowiedzi na odpowiedź Byte56 chciałbym zwrócić uwagę, że w twoim konkretnym zbiorze danych użycie Manhattan Distance jako funkcji heurystycznej będzie zawsze zawsze idealną heurystą w tym sensie, że zawsze zwróci rzeczywisty koszt ścieżki (zakładając, że istnieje nic „nie blokuje” ścieżek).
Należy również zauważyć, że wszystkie węzły we właściwym kierunku (poziomo lub pionowo) dają taką samą oczekiwaną odległość (ponieważ istnieje wiele równie krótkich ścieżek do celu). Należy pamiętać, że kolejka priorytetowa (zestaw otwarty) powinna, w przypadku powiązanych priorytetów, najpierw usunąć kolejność dodanego węzła (LIFO - Last In First Out). W ten sposób zbadane zostaną tylko te węzły, które znajdą się na optymalnej ścieżce . Jeśli sprawdzisz równie odpowiednie węzły w trybie FIFO (First In First Out), będziesz skutecznie badać wszystkie węzły, które są częścią najlepszej ścieżki. Ten problem powstaje, ponieważ istnieje wiele równie dobrych ścieżek do węzła celu.
źródło
Nie jestem pewien, co rozumiesz przez „zawsze” konsekwentny. Czy odległość Manhattanu na stałej siatce jest niezależna od obranej ścieżki? Tak, jak powiedziała odpowiedź Byte56.
Jednak na przykład odległość Manhattanu nie jest niezmienna w przypadku rotacji. Np. Odległość Manhattanu ( norma L1 ) między punktem początkowym a punktem
(10,10)
wynosi|10-0| + |10-0| = 20
. Jeśli jednak obrócisz swoje współrzędne o 45 stopni (więc teraz twój stały punkt leży wzdłuż jednego z kierunków siatki), znajdziesz teraz ten sam punkt, w którym znajduje się teraz(10sqrt(2),0)
, a więc odległość Manhattanu do początku10sqrt(2)~14.14
.źródło