Tôi có một tilemap 2d lớn, có kích thước từ hàng trăm đến hàng ngàn. Bản đồ được hình thành bởi các khối 8x8. Tôi hiện đang sử dụng A * nhưng nó không hiệu quả lắm vì tôi có thể có hàng trăm đối tượng tìm đường cùng lúc. Con đường không nhất thiết phải ngắn nhất tuyệt đối, nhưng sẽ có một mức độ ngắn nhất định.
Tôi đã nhìn vào đây và thấy rằng HPA * có thể hoạt động với tôi vì bản đồ của tôi bị vỡ thành nhiều phần nhỏ hơn. Tuy nhiên, vì bản đồ rất năng động (giả sử rằng ít nhất hai khối được sửa đổi mỗi giây), có vẻ như có thể có các lựa chọn thay thế tốt hơn.
Ngoài ra, D * / Lite (được đề cập trong liên kết) có thể hoạt động, nhưng làm thế nào nó có thể được tối ưu hóa cho lưới dựa trên khối?
Câu hỏi của tôi không đặc biệt về HPA * hoặc D *, mà là về việc tìm kiếm một thuật toán tối ưu cho một tilemap lớn và năng động, dựa trên khối.
EDIT: Các đoạn chứa nội dung được tạo theo thủ tục. Hầu hết thời gian điều này có nghĩa là khối này trống rỗng, ngoại trừ khoảng 10-20% số gạch của nó, tuy nhiên đôi khi con số này có thể lên tới 90% (đó là trong trường hợp tạo ra các "đốm màu"). Các khối sẽ chứa dữ liệu gần tùy ý và hai khối sẽ hiếm khi giống nhau.
Hơn nữa, mỗi tác nhân sẽ có một đường dẫn độc lập, tuy nhiên vì bản đồ là động, nó có thể chứa các hành lang nhân tạo và các lối đi dài có thể dẫn đến việc chúng được chia sẻ thường xuyên bởi nhiều tác nhân.
Hầu hết các mục tiêu sẽ được đặt tùy ý, tuy nhiên cũng sẽ có một số mục tiêu được xác định trước (vị trí). Đối với những vị trí được xác định trước, tôi đang xem xét sử dụng trường vectơ (giống như bản đồ nhiệt) có thể được sử dụng để tiếp cận nó. Tuy nhiên, làm điều này cho mọi mục tiêu sẽ rất kém hiệu quả, đặc biệt là vì tôi chỉ sử dụng trường được tạo một lần (hoặc trong trường hợp tốt hơn, có thể một vài lần).