Tôi nên thay thế A * như thế nào?


10

Tôi đã có một kẻ thù trùm tìm đường tìm kiếm người chơi bằng thuật toán A *. Đó là một môi trường khá phức tạp và tôi đang thực hiện nó trong Flash, vì vậy việc tìm kiếm có thể hơi chậm khi tìm kiếm trên một khoảng cách xa. Nếu người chơi đứng yên, tôi chỉ có thể tìm kiếm một lần, nhưng hiện tại tôi đang tìm kiếm mọi khung hình. Điều này mất đủ thời gian mà tốc độ khung hình của tôi là đau khổ.

Giải pháp thông thường cho vấn đề này là gì? Có cách nào để "thay thế" A * mà không làm lại toàn bộ tìm kiếm không? Tôi có nên tìm kiếm ít hơn một chút thường xuyên (mỗi nửa giây hoặc giây) và chấp nhận rằng sẽ có một chút không chính xác trong đường dẫn?

Câu trả lời:


13

Bạn không phải tìm kiếm toàn bộ đường dẫn trong một khung hình, tôi đã thực hiện điều này bằng cách đưa ra giới hạn cho vòng tìm kiếm, sau đó AI sẽ bắt đầu theo dõi thông tin nhỏ mà nó có và khung tiếp theo tôi sẽ tìm kiếm thêm , có thể mất 3 khung cho đến khi tìm thấy đường dẫn. Nó có thể trông khá thuyết phục, vì có vẻ như AI đang thực sự tìm kiếm.


+1. Đây cũng là những gì Mat Buckland mô tả trong cuốn sách AI của mình. Ông gọi đó là "Lập kế hoạch con đường cắt lát thời gian" ( Books.google.ch/ mài ). Đồ tốt.
bummzack

8

Bạn có thể sử dụng phát hiện độ gần để chạy thuật toán cứ sau vài khung hình nếu khoảng cách là rất lớn (vì trong hầu hết các trường hợp nếu khoảng cách lớn, đường dẫn đích sẽ không thay đổi mạnh từ khung hình này sang khung hình khác). Ví dụ:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

Điều này giả định rằng có một khoảng cách mà việc chạy A * mỗi khung hình có hiệu suất vẫn có thể chấp nhận được. Nói tóm lại, tôi sẽ chọn lựa chọn thứ hai của bạn. Đặc biệt là nếu những gì bạn đang làm việc, tôi sẽ tránh thực hiện lại một cái gì đó khác nếu tôi có thể thu nhỏ lại những gì đang hoạt động tốt. Điểm mấu chốt là bạn sẽ phải dùng thử để xem nó có hoạt động cho trò chơi của bạn không.


8

Không thực sự trả lời chính xác câu hỏi của bạn, nhưng ... nếu bạn sẵn sàng "gian lận", bạn có thể khiến người chơi rời khỏi "mẩu bánh mì" và để ông chủ theo dõi họ. Nếu đường dẫn bánh mì đi qua chính nó, hãy đi theo con đường gần đây nhất (điều này khiến ông chủ tránh được các vòng lặp và các đường dẫn khác có thể quá dài, chưa kể đến việc không đi theo con đường chính xác của người chơi)

Điều này sẽ hoạt động tốt nếu ông chủ là một loại động vật có khứu giác tốt. Điều này sẽ làm việc rất nhiều như theo mùi hương của người chơi :)


5

Trường hợp của bạn là khá nhiều những gì HPA * đã được phát minh để giải quyết. Tuy nhiên, nếu nó có vẻ như quá mức cần thiết, tôi có xu hướng nghĩ rằng việc tìm đường trong mỗi nửa giây hoặc lâu hơn sẽ hoạt động khá tốt.


4

Nếu đó là một môi trường tĩnh thì bạn có thể xác định trước đường dẫn ngắn nhất của tất cả các cặp.


2
Nếu đó là một môi trường tĩnh nhỏ .

Phụ thuộc vào nền tảng và bộ nhớ có sẵn.
Nate

@Joe, @Nate, đúng.
Peter Taylor

2

Tôi đã tạo một trò chơi cho một cuộc thi 48 trò chơi trong đó một nhân vật A * theo dõi người chơi quanh một cấp độ. Bởi vì việc triển khai A * của tôi rất chậm (nó không thể chạy mọi khung hình) nên tôi đặt khoảng thời gian trễ ba giây. Điều này có kết quả ngoài ý muốn cho phép người chơi "lừa" AI trong một vài khoảnh khắc. Nó thực sự làm cho trò chơi vui hơn.

Sau đó, tôi đã cải thiện hiệu suất của việc triển khai A * và thử chạy nó trên mọi khung hình. Trò chơi đã ngừng vui vì kẻ thù sẽ luôn tìm kiếm người chơi một cách hoàn hảo.

Đó là bất ngờ và một kinh nghiệm học tập tốt.


1
Đó là một điểm hay. Tôi nhớ đã đọc về việc tìm đường trong pac-man nơi họ cố tình sử dụng thuật toán không hoàn hảo, cho phép người chơi vượt qua những con ma. Mỗi con ma có một sự không hoàn hảo khác nhau mang lại cho chúng nhiều tính cách hơn. Điều đáng nói ở đây là trong các trò chơi, vui vẻ> tất cả những thứ khác.
Nick Van Brunt

0

Trừ khi bạn hoàn toàn muốn (hoặc cần) sử dụng A *, bạn cũng có thể xem qua Hành vi chỉ đạo . Vì không có quy hoạch đường dẫn hoàn chỉnh cho mỗi khung liên quan, nên nó sẽ nhẹ hơn rất nhiều khi xử lý.


Tôi sử dụng Hành vi chỉ đạo (cụ thể là Tìm kiếm) trong trường hợp không có chướng ngại vật giữa tác nhân và mục tiêu của nó. Thật không may, môi trường của tôi chứa những thứ như xoắn hành lang, nơi cần một giải pháp thông minh hơn.
Gregory Avery-Weir
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.