2016-03-19 31 views
5

google „algorytm A * na siatki nawigacji” tylko dostać niewłaściwych sposobów szacowania wartości G, jak toBiorąc pod uwagę początek i cel, jak znaleźć najkrótszą drogę w siatce nawigacji?

enter image description here

czy to enter image description here

sumując długość niebieski odcinki linii, otrzymujemy wartość g, ale jest ona zawyżona (wartość g powinna być niedoceniana). Ten algorytm zwróci zoptymalizowaną ścieżkę, ale nie gwarantuje, że jest najkrótszy.

Jedyny sposób, jaki mogę wymyślić, to narysować wykres widoczności oparty na siatce nawigacji. Ale kosztowałoby to za dużo pamięci.

enter image description here

Czy są jakieś inne sposoby, aby obliczyć najkrótszą drogę w nawigacji siatki?

+0

Sądzę, że powinieneś przestudiować algorytm A *, bardziej szczegółowo, jakie są jego założenia i jakie gwarancje oferuje. Dzięki temu będziesz mógł zadawać więcej istotnych pytań. Na przykład w pytaniu brakuje precyzyjnej definicji tego, co * my * uważasz za błędne w odniesieniu do wyniku A *. –

+0

@UlrichEckhardt A * ma rację, ale nie mogę zastosować algorytm * do siatki wykres nawigacyjny bezpośrednio .A * potrzebuje typowy wykres z węzłów i krawędzi, dzięki czemu można go stosować Dijkstra-jak wyszukiwanie, aby dowiedzieć się najkrótszą drogę .Przy wyszukiwanie jest zakończone, żadna ścieżka nie może być krótsza niż ścieżka, którą teraz zwrócono. Ale siatka nawigacyjna nie jest wykresem zawierającym tylko węzły i krawędzie, składa się z łatwych do przejechania obszarów, więc szukałem w Google sposobu, w jaki mogę zastosować A * w siatce nawigacji. – iouvxz

+0

Artykuły te uznają, Zig Zag ścieżki przechodzi centroidów lub Zig Zag ścieżek przechodząc przez wszystkie krawędzie wszystkich wielokątów środkowym punkcie jako wartość G .Ale to się dzieje, tego rodzaju g wartości przecenienia odległość od punkt początkowy do bieżącego wielokąta (lub krawędzi). Kiedy wyszukiwanie zostanie zakończone, wszystkie niezaznaczone ścieżki są zawyżone i porzucone. – iouvxz

Odpowiedz

2

Aby uzyskać najkrótszą ścieżkę bliżej od tego, co masz na myśli, powinieneś przestać używać punktów stałych jako węzłów gwiazdy A, tj. Przestań używać środka trójkątów lub środka trójkątów.

Spróbuj przenieść punkty w miarę rozchodzenia się gwiazdy A. Na przykład, należy a-star węzłów w triangles'edge którymi są:

  • albo przecięcia krawędzi trójkąta następnego węzła A-gwiazda z segmentem utworzonym przez poprzedni węzeł A-gwiazda i przeznaczenia

  • lub najbliższym punktem od skrzyżowania wymienionym powyżej na krawędzi trójkąta węzła obok a-gwiazdkowego

albo, spróbuj zmienić węzły ścieżki po obliczeniowej swoją a-gwiazda jak obecnie odbywa się za pomocą podobnego kryteria.

Należy pamiętać, że wygładzi to końcową ścieżkę (jak czerwona linia na rysunkach). Ale to tylko pomoże zredukować przeszacowanie, nie gwarantuje to znalezienia najkrótszych ścieżek, jak to było zamierzone.

Lepiej spróbuj zmienić węzły ścieżki po obliczeniowej swoją A-gwiazdkę przy użyciu środka triangles'edges, wykorzystując ciąg ciągnąc a.k.a algorytmu lejka. To da ci najkrótszą ścieżkę przez trójkąty przechodzące przez ścieżkę wyjściową gwiazdy A.

+0

W końcu zdecydowałem się na implementację generatora grafów widoczności w C++, to jedyne rozsądne rozwiązanie. – iouvxz