Có bất kỳ thuật toán tìm đường nào sẽ xử lý các loại chuyển động khác nhau không?


12

Tôi đang phát triển bot cho trình giả lập trò chơi trên bảng BattleTech http://en.wikipedia.org/wiki/BattleTech , nó được phát triển theo lượt.

Bảng được chia thành các hình lục giác, mỗi hình có một loại địa hình và độ cao khác nhau. Bạn lái một con robot di chuyển qua chúng, để tiêu diệt những con robot khác.

Tôi chỉ biết các thuật toán tìm đường dijkstra và A *, nhưng vấn đề là có 3 loại chuyển động: đi bộ, chạy và nhảy một số hình lục giác (mỗi loại có một quy tắc riêng). Đi bộ và chạy gần như giống nhau.

Con đường tốt nhất có thể là sự kết hợp hoặc từng loại chuyển động. Dưới đây là một ví dụ về bản đồ http://megamek.info/sites/default/files/isometric_view.png

Bạn có biết một thuật toán tốt cho tìm đường phức tạp này hoặc cách kết hợp các kết quả A * cho từng loại chuyển động không?


Tôi nghĩ rằng điều này thường được xử lý bằng một số thao tác thông minh của đường dẫn có trọng số với A * (trọng số là chi phí của đường dẫn / hình vuông đó). Ví dụ: nếu nhảy là thích hợp hơn, nó sẽ có trọng lượng thấp hơn (ví dụ 5) so với đi bộ (ví dụ: 10).
tro999

Làm thế nào chính xác làm ba loại chuyển động khác nhau? Chúng có thể được kết hợp (đi bộ đến gạch A, sau đó chạy đến B và sau đó nhảy đến C trong cùng một lượt)? Khi có, các quy tắc ngăn người chơi luôn sử dụng phương pháp rẻ nhất để chuyển từ ô A sang ô B là gì?
Philipp

@Philipp Có, họ có thể, khi sử dụng A *. Bạn có thể thêm mọi ô bạn có thể di chuyển đến với mọi loại chuyển động vào danh sách mở, sau đó dựa trên giá của từng loại + một heuristic tốt mà bạn có thể xác định loại nào sẽ tiếp tục.
akaltar

@Philipp Không, bạn chỉ có thể sử dụng một loại di chuyển mỗi lượt.
alexvisio

Đi bộ: di chuyển qua các hình lục giác với rất ít sự khác biệt về độ cao. Chạy: giống nhau nhưng bạn có thể đi xa, mặc dù bạn sẽ tạo ra nhiệt và mất độ chính xác (vì vậy nó không phải lúc nào cũng tốt nhất). Nhảy: bạn có thể nhảy chướng ngại vật (một bức tường hoặc dòng sông) thay vì xung quanh chúng đi bộ.
alexvisio

Câu trả lời:


10

Cả Dijkstra và A * có thể thêm các chi phí khác nhau cho các cạnh (= kết nối) từ ô này sang ô khác. Chúng cũng cho phép kết nối hai nút (= gạch) với nhiều hơn một cạnh, mỗi nút có chi phí khác nhau.

Chế độ nhảy thay thế có nghĩa là có một cạnh trực tiếp thay thế từ mỗi ô tới từng ô trong khoảng cách nhảy. Nhưng bởi vì một mech có thể đi bộ hoặc nhảy trong một lượt, chi phí cho việc sử dụng cạnh này sẽ là các điểm di chuyển của cả một lượt, cộng với các điểm còn lại của lượt hiện tại khi đã có lượt di chuyển trong lượt này.

Theo mô tả của bạn, quyết định đi bộ so với chạy không tạo ra nhiều sự khác biệt liên quan đến lựa chọn con đường, nhưng nó dường như là một quyết định chiến lược để đưa ra. Các diễn viên chắc chắn có thể đi bộ khi có thể đạt đến đích trong lượt hiện tại mà không cần phải chạy. Nhưng nếu không, có nhiều yếu tố để tham gia, như:

  • mức nhiệt hiện tại và khả năng tham gia chiến đấu trước khi có thể hạ nhiệt
  • độ khó của bất kỳ cú đánh nào cần phải bắn trong vòng này
  • chiến lược quan trọng như thế nào để đến đích nhanh chóng

Không có quy tắc cứng để đưa ra quyết định này. Điều tốt nhất bạn có thể làm là sử dụng một cách tiếp cận heuristic. Gán các giá trị điểm tích cực hoặc tiêu cực cho tất cả các trường hợp, thêm chúng và xem kết quả là dương hay âm.

Ngoài ra còn có một yếu tố khác trong việc tìm đường mà bạn nên tính đến: Trong một số điều kiện, có thể có ý nghĩa đối với một mech để tránh kết thúc lượt của nó tại các địa điểm nhất định. Khi ở trong khu vực nguy hiểm, sử dụng ba lượt để đi từ A đến B nhưng kết thúc mỗi lượt trong vỏ bọc có thể tốt hơn là chỉ sử dụng hai lượt, nhưng bị lộ ở cuối mỗi lượt. Hoặc có thể không. Nó phụ thuộc vào hoàn cảnh và cơ chế trò chơi chính xác. Đây, một lần nữa, là một quyết định chiến lược bạn phải đưa ra dựa trên kinh nghiệm. Bạn có thể thể hiện điều này bằng cách thêm một chi phí bổ sung vào các cạnh kết thúc việc bật một ô nguy hiểm để ngăn cản AI thực hiện bước này.

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.