Có phải Jump Point Search (A * với JPS) có thể áp dụng cho các lưới không chéo?


8

Tôi đang cố gắng tăng tốc độ tìm đường và phát hiện ra A * với JPS . Về cơ bản, nó cắt tỉa gạch trước khi thêm chúng vào bộ MỞ.

Tôi có thể sử dụng kỹ thuật đó với lưới của tôi chỉ cho phép chỉ đường thẳng không?

Câu trả lời:


10

Nếu bạn đọc bài viết , bạn sẽ thấy rằng họ liệt kê đây là một vấn đề mở trong phần "Kết luận":

"Một hướng thú vị cho công việc tiếp theo là mở rộng điểm nhảy sang các loại lưới khác, chẳng hạn như hình lục giác hoặc texes (Yap 2002). Chúng tôi đề xuất để đạt được điều này bằng cách phát triển một loạt các quy tắc cắt tỉa tương tự như quy tắc được đưa ra cho lưới vuông."

Vì vậy, để áp dụng Tìm kiếm Điểm nhảy vào lưới trực giao của bạn, bạn cần quyết định điểm nào sẽ được tính là điểm nhảy trên lưới đó. Sau khi suy nghĩ về điều này một lúc, tôi nghĩ - nhưng chưa được chứng minh! - rằng các quy tắc sau (dựa trên Định nghĩa 1 và 2 trong bài báo, phần nào được đọc lại để dễ đọc) có thể hoạt động:

Nút y là điểm nhảy từ nút x, hướng theo hướng d, nếu y có thể tiếp cận từ x bằng cách di chuyển thẳng theo hướng d và là nút gần nhất như vậy đến x để đáp ứng ít nhất một trong các điều kiện sau:

  1. nút y là nút mục tiêu,
  2. d là một di chuyển ngang và một trong hai ô liền kề với ô y - d (nghĩa là ô một bước trước y khi di chuyển theo hướng d) bị chặn, hoặc
  3. d là một bước di chuyển dọc và tồn tại một nút z là điểm nhảy từ y (theo điều kiện 1 hoặc 2) theo một số hướng ngang d '.

Tất nhiên, các từ "dọc" và "ngang" có thể được trao đổi trong định nghĩa trên. Vấn đề là chúng ta cần chọn một số cách phá vỡ tính đối xứng để chỉ một trong những đường có thể đi qua một khu vực hình chữ nhật mở được xem xét. Harabor và Grastien làm điều đó bằng cách ưu tiên các đường dẫn "đường chéo trước", nhưng vì chúng ta không thể làm điều đó, chúng ta phải thực hiện bằng cách thích các đường dẫn đầu tiên theo chiều dọc (hoặc ngang trước).

Cũng thể phát triển các quy tắc cắt tỉa thay thế tạo ra các đường dẫn "trông tự nhiên" hơn, chẳng hạn như thích tiêu đề hiện tại hơn là rẽ, hoặc thậm chí có thể thích liên tục rẽ các lối đi cầu thang. Quy tắc tôi đưa ra ở trên chỉ đơn giản là bản dịch đơn giản nhất của quy tắc Harabor & Grastien sang lưới trực giao mà tôi có thể nghĩ ra.


+1 Đây chính xác là những gì tôi sẽ trả lời. Có thể chứng minh rằng điều này vẫn sẽ là tối ưu.
BlueRaja - Daniel Pflughoeft

2

Trên thực tế, nếu bạn nhìn vào định nghĩa của tuyến đường 45 độ, luôn có thể chuyển đổi một đường dẫn với tuyến đường 45 độ thành một đường dẫn mà không rẽ 45 độ. Và nó cũng tối ưu (bạn có thể dễ dàng chứng minh điều đó bằng mâu thuẫn).

Vì vậy, cách đơn giản nhất là chạy tìm kiếm điểm nhảy và sau đó chuyển đổi nó thành tuyến đường trực giao.

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.