Potrzebuję pomocy w zrozumieniu algorytmu trójkąta A * (TA *) opisanego przez Demyen w jego dokumencie „ Efficient-Triangulation-Based Pathfinding” na stronach 76-81.
Opisuje, jak dostosować zwykły algorytm A * do triangulacji, aby szukać innych możliwie bardziej optymalnych ścieżek, nawet po osiągnięciu / rozwinięciu końcowego węzła. Zwykły A * zatrzymuje się po rozwinięciu ostatniego węzła, ale nie zawsze jest to najlepsza ścieżka, gdy jest używana na wykresie triangulowanym. To właśnie mam problem.
Problem zilustrowano na stronie 78, rysunek 5.4:
Rozumiem, jak obliczyć wartości g i h przedstawione w artykule (strona 80).
Myślę, że warunkiem zatrzymania wyszukiwania jest:
if (currentNode.fCost > shortestDistanceFound)
{
// stop
break;
}
gdzie currentNode to węzeł wyszukiwania wyskakujący z otwartej listy (kolejka priorytetowa), która ma najniższy wynik f. shortestDistanceFound to rzeczywista odległość najkrótszej znalezionej do tej pory ścieżki.
Ale jak wykluczyć wcześniej znalezione ścieżki z przyszłych wyszukiwań? Bo jeśli powtórzę wyszukiwanie, to oczywiście znajdzie tę samą ścieżkę. Czy resetuję zamkniętą listę? Muszę coś zmodyfikować, ale nie wiem, co muszę zmienić. Papier nie ma pseudokodu, więc byłoby to pomocne.
źródło