Có những thuật toán tìm đường nào? [đóng cửa]


Câu trả lời:


34

Nếu bạn đang muốn nghiên cứu và tìm hiểu về tìm đường nói chung, tôi chắc chắn khuyên bạn nên học nhiều hơn một thuật toán. Bạn sẽ muốn hiểu các khái niệm tổng thể nhưng có thể áp dụng chúng cho bất cứ điều gì bạn đang làm việc. Hầu hết các nhà phát triển trò chơi, những người cần thực hiện bất kỳ tìm đường nghiêm túc nào đều phải viết các thuật toán tùy chỉnh của riêng họ, mặc dù dựa trên các giải pháp đã biết, mỗi trò chơi đều khác nhau và sẽ có các yêu cầu khác nhau.

Tôi sẽ bắt đầu bằng cách đọc một số phương pháp được biết nhiều hơn như A *, Thuật toán Dijkstra, Độ sâu và Độ sâu tìm kiếm đầu tiên. Có rất nhiều thông tin tốt trên internet về mỗi thứ này. ( http://en.wikipedia.org/wiki/Pathfinding )

Trong khi đọc chúng, hãy lưu ý về những mặt trái và nhược điểm của từng phương pháp, cũng như loại dữ liệu mà thuật toán có thể vận hành. Nó có thể được áp dụng cho các đường dẫn 3 chiều không? Nó có thể được sửa đổi để giải thích cho AI của con người chúng ta, những người muốn tránh mìn trên bản đồ không?

Khi nói đến tìm đường, A * gần như là tấm vé vàng mà mọi người đều sử dụng. Bạn chắc chắn nên biết làm thế nào nó hoạt động. ( http://en.wikipedia.org/wiki/A*_search_alacticm )

Đây là một ví dụ hay về A * khi áp dụng cho trò chơi RTS, cần đưa các thực thể có kích thước khác nhau vào tài khoản: http://aigamedev.com/open/tutorials/clparent-basing-pathfinding/

Chúc may mắn!


2
+1 cho bit về lập trình viên phải học cách thích nghi với các giải pháp đã biết. Đây là điều mà nhiều nhà phát triển trò chơi sẽ không hiểu.
Kỹ sư

22

Các thuật toán tìm đường về cơ bản là một thuật toán giải quyết vấn đề tìm kiếm đồ thị.

http://en.wikipedia.org/wiki/Pathfinding#Alacticms

Được biết đến nhiều nhất là thuật toán của Djikstra: http://en.wikipedia.org/wiki/Dijkstra's_alacticm

và biến thể thuật toán tìm kiếm A * của nó: http://en.wikipedia.org/wiki/A*


2
Liên kết cuối cùng bị hỏng vì * không được xem là một phần của nó: en.wikipedia.org/wiki/A%2A
Hendrik Brummermann

fixx0r3d cả hai liên kết
tenpn

Các thuật toán tìm kiếm đồ thị đơn giản chỉ là những điều cơ bản để tìm đường.
martinkunev

13

Đây là một nguồn tài nguyên khởi đầu tuyệt vời, xem xét tất cả các khía cạnh của việc tìm đường theo cách tiếp cận rất dễ tiêu hóa.

Ghi chú của Amit về Tìm đường

... Tìm đường giải quyết vấn đề tìm đường đi tốt từ điểm xuất phát đến mục tiêu tránh chướng ngại vật, tránh kẻ thù và giảm thiểu chi phí (nhiên liệu, thời gian, khoảng cách, thiết bị, tiền, v.v.). Phong trào giải quyết vấn đề đi một con đường và di chuyển dọc theo nó. Bạn chỉ có thể dành những nỗ lực của mình cho một trong số này. Ở một thái cực, một đường dẫn tinh vi kết hợp với thuật toán chuyển động tầm thường ...


1
+1 cho Amit. Tôi đã học A * từ trang web của anh ấy hơn 10 năm trước.
tenpn

Minh họa tuyệt vời quá. Chất lượng cao.
khỉ

5

Tìm đường là một vấn đề khá được giải quyết ... như đã đề cập trong hầu hết mọi câu trả lời ở đây, một số biến thể trên A * sẽ là những gì bạn sử dụng.

Thách thức lớn hơn với tôi, là cách bạn muốn đại diện cho con đường của mình . Sử dụng lưới, mã đường dẫn, điều hướng, lưới phân cấp hoặc các cấu trúc phức tạp khác, v.v.

Tôi không có bất kỳ tài liệu tham khảo cụ thể nào trong đầu, nhưng khám phá AIGameDev sẽ cung cấp cho bạn tất cả các loại ý tưởng về những gì ngoài kia.

Chỉ cần nhớ rằng mỗi đại diện có ưu và nhược điểm của nó; không phải là tìm kiếm "cái tốt nhất", mà là tìm ra thứ phù hợp nhất với lối chơi của bạn .


5

Có một danh sách hay trên Wikipedia: Pathfinding

Theo tôi biết, A * và D * đều khá phổ biến.


+1 để đề cập đến A * động được biết đến nhiều hơn với tên D *
David Young

4

Có một số thuật toán tìm đường ra khỏi đó.

Một trong những cái phổ biến nhất có lẽ là A * ( A-Star ). Đây là một thuật toán rất hữu ích nếu bạn có một hàm heuristic có thể cung cấp cho bạn chi phí ước tính để đạt được mục tiêu (ví dụ sẽ là khoảng cách tầm nhìn đến mục tiêu). A * rất hữu ích để tìm đường đi ngắn nhất từ ​​điểm bắt đầu đến điểm kết thúc.

Ngoài ra, còn có thuật toán của Dijkstra , rất hữu ích để tìm ra vật phẩm gần nhất trong số một số vật phẩm. Ví dụ. nếu bạn muốn tìm ra cách tăng sức mạnh (hoặc tương tự) gần nhất với nhân vật chơi game của bạn.

Có một số thuật toán khác, nhưng tôi đoán A * là thuật toán phổ biến nhất. Ví dụ, Mat Buckland có một chương xuất sắc về Tìm kiếm con đường trong Trò chơi lập trình sách AI của mình . Tôi rất khuyến khích bạn để có được một bản sao của nó. Nếu không, bạn sẽ tìm thấy vô số thông tin trực tuyến bằng cách tìm kiếm "Tìm kiếm ngôi sao".


Ôi trời. Trong khi tôi đang gõ cái này, câu trả lời tương tự đã được đưa ra khoảng một lần. Xin lỗi :)
bummzack

Chỉ cần lưu ý rằng cuốn sách được đề cập cũng có trên Google-Books (mặc dù chưa hoàn thành). Đọc nó ở đây: books.google.com/books?id=gDLpyWtFacYC
bummzack



2

Đây không phải là phần lớn, nhưng chúng tôi đã thảo luận nhiều về thuật toán đồ thị trong lớp thuật toán của chúng tôi vào mùa thu năm 2009. Chúng tôi đã sử dụng cuốn sách này,

Giới thiệu về Thuật toán, Ấn bản thứ ba của Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest và Clifford Stein

http://mitpress.mit.edu/alerskyms/

và nó cũng có các bài giảng youtube đi kèm từ một lớp MIT.

http://ocw.mit.edu/cifts/electrical-engineering-and-computer-science/6-046j-intributiontion-to-alerskyms-sma-5503-fall-2005/video-lectures/

Chương 17, 18 và 19 xử lý những con đường ngắn nhất.


2

Xem [Thuật toán tìm kiếm đồ thị và cây] trên Wikipedia 1 . Chúng gần như chỉ là một biến thể của Tìm kiếm không gian trạng thái, Bạn chỉ cần đi qua tất cả những thứ này và tìm nơi chúng khác nhau.

Ngoài ra còn có Collaborative Diffusion , đây là một trong những thuật toán được đề cập trước đây được thực hiện một cách thú vị.


+1 Tài liệu đó về Khuếch tán hợp tác khá thú vị.
Kỹ sư

1
Tôi nghĩ rằng liên kết bị hỏng. Có lẽ đây là một trong những chính xác: scalablegamedesign.cs.colorado.edu/gamewiki/index.php/
gợi

-2

Điều này có vẻ thú vị:

http://www.codeproject.com/Articles/455 Tôi tự hỏi liệu nó có tốt hơn A * không?


Chào mừng đến với trang web. Những gì bạn đã đưa ra được gọi là câu trả lời chỉ liên kết, không được khuyến khích. Sẽ là tốt hơn để tóm tắt phẩm chất của phương pháp trong câu trả lời của bạn. Sau đó, bạn có thể tranh luận liệu nó có tốt hơn A * đơn giản hay không, thay vì ngớ ngẩn suy nghĩ về nó trong văn bản.
Seth Battin

Tôi thấy câu trả lời của bạn ít nhiều ngang bằng với câu hỏi này (điều không may). Tôi không có ý loại bạn ra, tôi chỉ đơn thuần vượt qua mục của bạn trong hàng đánh giá bài viết đầu tiên . Bất kể, cải thiện câu trả lời của bạn luôn được chào đón.
Seth Battin

Tôi sẽ chỉ lặp lại những gì Seth nói. Tóm tắt.
Xám
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.