Heuristic được sử dụng trong NavMeshes là gì?


7

Các heuristic làm gì để lập trình viên sử dụng trong A * pathfinding cho NavMeshes?

NavMesh = Navigation Lưới, đây là một loại tìm đường sử dụng các mắt lưới thay vì các điểm mốc.


Hãy làm rõ câu hỏi của bạn. Tôi không biết ý của bạn khi bạn nói "NavMeshes" (viết hoa như thể đó là Tên sản phẩm ™). Bạn đang yêu cầu các thuật toán thay thế cho A * tạo ra các đường dẫn gần đúng hơn nhưng trong thời gian nhanh hơn?
Ricket


Gotcha, cảm ơn! Tôi đã nghe nói về họ nhưng chưa bao giờ làm bất cứ điều gì với họ vì vậy tôi đã không nhận ra cái tên cô đọng :)
Ricket

Câu trả lời:


9

Bạn chọn đi:

http://theory.stanford.edu/~amitp/GameProgramming/Heuristic.html

Có rất nhiều phương pháp phỏng đoán được mô tả trong liên kết đó, cho tốc độ hoặc độ chính xác. Luôn luôn có một sự đánh đổi, vì vậy tôi cho rằng các nhà phát triển sẽ sử dụng phương pháp phỏng đoán chính xác nhất sẽ gây ra tác động tối thiểu đến hiệu suất trò chơi của họ.


Đây là cho bản đồ lưới. Các lưới Nav tôi giả sử sẽ sử dụng một phương pháp phỏng đoán khác để di chuyển từ poly này sang poly khác. Có lẽ một số hình thức heuristic hình học để chọn poly tốt nhất tiếp theo dựa trên kích thước của cạnh hoặc một cái gì đó.
Shawn Mclean

3
Đồng ý, nhưng heuristic được sử dụng để ước tính con đường ngắn nhất đến đích tuyệt đối cuối cùng để giúp chi phí cho poly tiếp theo. Họ nên đánh giá thấp khoảng cách để trở thành một "heuristic đáng ngưỡng mộ". Lưới điều hướng vẫn là biểu đồ, giống như bản đồ lưới là biểu đồ. Vì vậy, tôi cho rằng hầu hết các heuristic đều có thể áp dụng được, tùy thuộc vào nhà phát triển để xem cái nào phù hợp nhất.
Ray Dey

1

Một heuristic rất, rất thô (nhưng rất nhanh) để sử dụng là: (khoảng cách Manhattan)

vec1 = start vector
vec2 = end vector

heuristic = abs(vec2.x - vec1.x) + abs(vec2.y - vec1.y))

Điều này tránh bất kỳ root vuông, có thể tốn kém (khoảng cách Pythagore).


Manhattan khoảng cách, không?
Ray Dey

Tôi nghĩ rằng nó đã được, sau đó chỉnh sửa nó vì tôi mặc dù nó có thể không được.
Vịt Cộng sản

Bạn cũng có thể sử dụng chiều dài bình phương (khoảng cách Pythagore mà không cần lấy căn bậc hai). Nó nhanh và rất có thể là một heuristic tốt hơn khoảng cách Manhattan (trừ khi nhân vật của bạn chỉ có thể di chuyển theo chiều ngang và chiều dọc)
bummzack

@bummzack: Vui lòng đọc phần "Khoảng cách Euclide, bình phương" trên trang heuristic của Amit. Khoảng cách bình phương không phải là một heuristic đáng ngưỡng mộ, và sẽ dẫn đến đường dẫn dưới mức tối ưu.

1
Khoảng cách bình phương quá nhỏ cho khoảng cách ngắn (A * lãng phí thời gian) và quá lớn cho khoảng cách dài (A * tìm thấy đường dẫn tồi tệ hơn). Có những lý do chính đáng để có khoảng cách đánh giá quá cao heuristic, nhưng tránh sqrt không phải là một trong số đó. Hoặc sử dụng xấp xỉ sqrt nhanh hoặc sử dụng khoảng cách đường chéo hoặc nếu biểu đồ điều hướng của bạn rõ ràng, hãy tính khoảng cách Euclide / Pythagore một lần và lưu trữ nó với cạnh giữa các nút.
amitp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.