A * có hiệu quả ngay cả khi các chướng ngại vật đang di chuyển không?


30

Tôi mới bắt đầu tìm hiểu về tìm đường và đã tìm hiểu thuật toán A * và mối quan tâm chính của tôi là tất cả các ví dụ tôi đã thấy cho thấy những trở ngại tĩnh mà nó tính toán xung quanh.

Nếu tôi có chướng ngại vật di chuyển, ví dụ như các nhân vật khác, di chuyển xung quanh cũng là nhân vật phải tìm đường đi, tôi cho rằng tôi sẽ phải chạy thuật toán từng khung hình, nhưng tôi lo rằng điều đó sẽ trở nên khá tốn kém cho phần cứng để xử lý từng khung cho mỗi tác nhân di chuyển.

Vì vậy, A * vẫn đủ hiệu quả để sử dụng bất cứ khi nào chướng ngại vật di chuyển quá, hoặc có một phương pháp tìm đường khác xử lý các chướng ngại vật di chuyển một cách hùng hồn hơn?

Câu trả lời:


27

Có nhiều thuật toán nhanh hơn A * khi bạn cần tính toán lại một con đường với các chướng ngại vật di chuyển. Xem ở đây dưới "Tính toán lại đơn giản".

Tuy nhiên, bạn có thể sẽ không tìm thấy một giải pháp sẵn có cho bất kỳ ai trong số họ, vì vậy trong 99% trường hợp họ quá mức cho một trò chơi. Thời gian của bạn sẽ được sử dụng tốt hơn bằng cách sử dụng giải pháp A * hiện có, được tối ưu hóa hoàn toàn và sử dụng các thủ thuật phổ biến hiện có để tăng tốc độ tìm đường trong các trò chơi:

  • Chỉ tính toán lại con đường tốt nhất trong khoảng thời gian không thường xuyên
  • Chia sẻ đường dẫn tốt nhất giữa nhiều đơn vị ( ví dụ )
  • Tạo một biểu đồ phân cấp để bạn chỉ cần tính toán lại một phần của đường dẫn

v.v. Bạn có thể tìm thêm thông tin về các thủ thuật này và hơn thế nữa trên trang web này hoặc trên các trang A * của Amit


10

Vâng. A * vẫn là con đường để đi trong hầu hết mọi trường hợp. Đó là tính toán chi phí nút của bạn trở nên năng động và do đó phức tạp hơn để tính toán và theo dõi.

Nếu bạn đã biết các chướng ngại vật di chuyển sẽ ở đâu trong tương lai, A * của bạn có thể tính đến tính tạm thời của các chướng ngại vật trong hàm chi phí.

Ví dụ: Nút này sẽ đạt được trong 4 tick, chiếm từ tick # 3 cho đến tick # 6, vì vậy chi phí đi lại trên nút này là 6 - 4 = +2 tick. Đó có thể vẫn là con đường tốt nhất.

Hướng di chuyển của chướng ngại vật cũng phải được tính đến.

Nếu bạn không biết trước thì bạn có thể cho rằng không có chướng ngại vật và tính toán lại con đường khi đạt được chướng ngại vật nhưng bạn sẽ cần phải làm gì đó về những bế tắc và những cuộc sống. (Điều tương tự cũng được áp dụng nếu bạn có thể dự đoán chướng ngại vật sẽ ở đâu nhưng bản thân nó là một loại tránh bế tắc / khóa sống và điều đó có thể đủ tốt cho mục đích của bạn.)

Bế tắc là khi cả hai chờ người kia di chuyển và không ai di chuyển.

Một livelock là khi cả hai ( hoặc nhiều hơn <- điều này rất quan trọng để xem xét) di chuyển để tránh người khác theo cùng một hướng và cuối cùng trở lại và không có tiến triển.

Việc giải quyết các bản nhạc có thể trở nên rất phức tạp và điều đó phụ thuộc hoàn toàn vào các quy tắc và cơ chế va chạm trong trò chơi của bạn (ví dụ: họ có nên chiến đấu và tiêu diệt chướng ngại vật không?).

Nó thường quay trở lại việc các đối tượng chuyển động của bạn lên lịch đặt trước nút / đường dẫn (đừng quên hủy bỏ khi chúng thay đổi đường dẫn hoặc chết) để các đối tượng chuyển động khác có thể lên kế hoạch trước.

Một khi bạn có thông tin này, bạn cũng có thể lập kế hoạch đánh chặn.


19
Ôi chúa ơi, "livelock" - bạn đã mô tả cái thứ né tránh bên trái khủng khiếp mà cuối cùng tôi phải làm ở hành lang.
Ethan The Brave

2
Một giải pháp sống / bế tắc đơn giản là chọn ngẫu nhiên giữa các tùy chọn có sẵn (ví dụ: 50% cơ hội không di chuyển và 50% cơ hội di chuyển sang trái). Miễn là mỗi diễn viên chọn ngẫu nhiên, có một cơ hội khác không là khóa sẽ được giải quyết.
Draco18

@ Draco18s Và tăng theo cấp số nhân của sự bay bổng của bạn qua lại cho đến khi một cách nhường chỗ (tôi có thể vừa mô tả cách giải quyết các va chạm Ethernet!)
Cort Ammon - Phục hồi Monica

Tôi cho rằng họ có thể chơi Rock Paper Kéo hoặc một trò chơi thân thiện của Petri Dish Prisoner's Dilemma . ; P
Draco18
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.