Jestem prawdziwym maniakiem prędkości, jeśli chodzi o algorytmy i wtyczki, które stworzyłem dla gry.Szybsza alternatywa dla algorytmu Dijkstry dla systemu GPS
Prędkość jest ... trochę ... niezadowalająca. Zwłaszcza podczas jazdy samochodem i nie podążania ścieżką, ścieżka musi zostać ponownie obliczona ... i zajmuje to trochę czasu, więc GPS w grze gromadzi wiele sygnałów "niewłaściwej drogi" (i układa sygnały w górę oznacza więcej kalkulacji po każdym niewłaściwym ruchu), ponieważ chcę mieć szybki system live-gps, który stale aktualizuje się.
Zmieniłem stary algorytm (niektóre prosta implementacja Dijkstra) zwiększanie :: Dijkstry obliczyć drogę od węzła A do węzła B
(całkowita lista węzeł jest około ~ węzły 15k z ~ połączenia 40K, dla ciekawy ludzie tutaj to mapa: http://gz.pxf24.pl/downloads/prv2.jpg (12 MB), krawędzie w czerwonych liniach są węzłami),
, ale tak naprawdę nie zwiększyło to prędkości. (Przynajmniej nie zauważalnie, może 50 ms).
Informacje, które są przechowywane w tablicy węzeł jest:
The ID of the Node,
The position of the node,
All the connections to the node (and which way it is connected to the other nodes, TO, FROM, or BOTH)
Distance to the connected nodes.
Jestem ciekawy, czy ktoś zna jakieś szybsze alternatyw w C/C++? Wszelkie sugestie (+ przykłady kodu?) Są mile widziane!
Jeśli ktoś jest zainteresowany projektem, to jest tutaj (źródło + binarne):
https://gpb.googlecode.com/files/RouteConnector_177.zip
W tym filmie można zobaczyć, co GPS-System jest tak:
http://www.youtu.be/xsIhArstyU8
jak widać czerwona trasa aktualizuje się powoli (no, dla nas - graczy - jest powolna).
(ByTheWay: luki między czerwonymi liniami zostały ustalone dawno temu: P)
Czy próbowałeś A *? Jest to najbardziej rozpowszechniony (na pewno najprostszy) heurystyczny algorytm wyszukiwania ścieżki. A w sytuacji podobnej do GPS "heurystyczna odległość" w linii prostej zwykle działa całkiem dobrze. – biziclop
@biziclop ma boost ma implementację A *? Nie mogę znaleźć niczego | google = a * boost lub * algorytm boost –
Druga możliwość optymalizacji wynika z faktu, że w sytuacji przeliczenia GPS cel jest zawsze taki sam, a twoje źródło nie jest dalekie od poprzedniej iteracji, więc jeśli przechowujesz najkrótszy czas z poprzedniej kalkulacji, musisz tylko szukać, aż dotrzesz do węzła, który jest już na tej liście. – biziclop