Tinh chỉnh AStar để tìm vị trí gần nhất với điểm đến không thể truy cập


11

Tôi đã triển khai AStar trong Java và nó hoạt động tốt đối với một khu vực có chướng ngại vật nơi có thể tiếp cận đích đã chọn.

Tuy nhiên, khi đích đến không thể truy cập được, "đường dẫn" được tính toán không có cách nào đến vị trí gần nhất (đến vị trí không thể truy cập) mà thay vào đó là một đường dẫn ngẫu nhiên.

Có cách nào khả thi để điều chỉnh AStar trong việc tìm đường dẫn đến vị trí gần nhất đến đích không thể truy cập không?

Câu trả lời:


20

Theo dõi nút với mức thấp nhất EstimatedDistanceToEnd(tức là thấp nhất h(x)) và nếu không có nút cuối nào có thể truy cập được để quay lại từ, thay vào đó hãy quay lại từ nút đó.


Đơn giản. Tôi thích nó!
John McDonald

Tôi chỉ tát đầu và "làm" khi tôi đọc câu trả lời của bạn. Cảm ơn!
Shivan Dragon

1

Đây không thực sự là một câu hỏi A *. A * là tất cả về việc tìm đường đi từ điểm A đến điểm B. Mặc dù có thể mở rộng, kết quả có thể dễ dàng lộn xộn và không thể đoán trước. Những gì bạn cần thay vào đó là một thuật toán chọn đích đến gần nhất.

Đây là một cách để làm điều này: Nếu A * trả về một đường dẫn hợp lệ (các nút bắt đầu / kết thúc trong các nút đầu vào khớp với đường dẫn), hãy trả về đường dẫn. Nếu không thì...

  • Bắt đầu tìm kiếm từ nút ban đầu
  • Di chuyển tất cả các nút được liên kết (nhớ gắn cờ các nút đã truy cập để tránh đệ quy vô hạn)
  • So sánh khoảng cách đến đích để tìm nút gần nhất

Một cái gì đó giống như Flood Fill có vẻ phù hợp với en.wikipedia.org/wiki/Flood_fill lưu ý rằng bạn vẫn cần A * từ nút bắt đầu đến nút có khoảng cách thấp nhất. Cũng lưu ý rằng điều này luôn liên quan đến việc kiểm tra tất cả các nút được kết nối và do đó có thể cực kỳ chậm.
Roy T.

Vâng, nó có thể chậm. Nhưng sự chậm chạp có lẽ sẽ đến từ việc các nút nằm rải rác trong bộ nhớ; có thể dễ dàng sửa chữa. Ngoài ra, có thể tăng tốc nó bằng cách hy sinh một số độ chính xác - chỉ cần bỏ qua các liên kết quá xa hoặc chỉ sai hướng.
rắn5

1
@Roy: A *, BFS, và tất cả các thuật toán tìm đường tương tự sẽ được chính xác chậm như lũ điền, bởi vì tất cả họ đều cần phải kiểm tra tất cả các nút kết nối để đảm bảo không không có đường dẫn đến cùng. Tuy nhiên, có nhiều cách để giảm bớt vấn đề này; thấy ở đây .
BlueRaja - Daniel Pflughoeft
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.