Tôi nhận được cái này từ danh sách gửi thư. Chụp * là dựa trên cạnh, vì vậy nó đi từ cạnh này sang cạnh khác trong khi A * và Dijkstra đi từ đỉnh này sang đỉnh khác. Do đó, bạn cần một cấu trúc dữ liệu giữ tất cả các cạnh liền kề cho mọi cạnh của biểu đồ của bạn. Nó cũng có thể được thực hiện bằng cách tạo một biểu đồ đường (http://en.wikipedia.org/wiki/Line_graph) ra mạng lưới đường ban đầu của bạn. Và sau đó, bạn có thể chỉ định chi phí chuyển từ cạnh này sang cạnh khác (như một thuộc tính đặc biệt của cấu trúc cạnh liền kề hoặc là chi phí của biểu đồ đường) thực sự đại diện cho bất kỳ loại hạn chế hoặc hình phạt nào khi đi từ cạnh này sang cạnh khác - chẳng hạn như hạn chế rẽ trong trường hợp rẽ hoặc bất kỳ loại hạn chế nào khác như đèn giao thông. Có điều này, bạn có thể sử dụng A * hoặc bất kỳ thuật toán đường dẫn ngắn nhất nào khác sử dụng các cạnh làm đỉnh.
Vì vậy, đó là một ý tưởng đằng sau Bắn súng *.
Và tôi nhận được một agaian này từ Anton Patrushev:
http://doad.osgeo.org/pgrouting/forum/pgrouting.postlbs.org/discussion/topic/276.html . Bạn viết như thế này: Trong A *, chúng tôi đang sử dụng một cái gì đó tương tự như hàm Manhattan (| Dx | + | Dy |) / 2 http://pgrouting.postlbs.org/browser/trunk/core/src/astar_boost_wrapper.cpp#L75
Ở đó bạn sẽ thấy những nỗ lực khác được bình luận. Chúng tôi đã thử chức năng khác nhau là OK. Có lẽ, đó là lý do lịch sử. chức năng heuristic và vì một số lý do (tôi không nhớ bây giờ) đã quyết định rằng đối với một mạng lưới đường thông thường, trong Chụp này * chúng tôi đang sử dụng khoảng cách Euclidian. http://pgrouting.postlbs.org/browser/trunk/core/src/sh Boot_star_boost_wrapper.cpp#L100 .
Công thức khác: - Khoảng cách Euclide> Sqrt (Dx² + Dy² + Dz²); - Khoảng cách Manhattan> | Dx | + | Dy | + | Dz | ; - Khoảng cách tối đa> Tối đa (| Dx |, | Dy |, | Dz |).
Tôi vẫn chưa hiểu về tất cả. Bạn bè, bạn có thể cho tôi biết ngắn gọn và chi tiết về ngôi sao chụp thuật toán quy trình không?