Hướng dẫn a star algorithm shortest path python - một thuật toán sao con đường ngắn nhất python
Hôm nay, chúng tôi sẽ đi qua thuật toán A* Pathfinding, cách thức hoạt động và việc triển khai của nó trong mã giả và mã thực với Python. Show
Tìm kiếm chỉ mã giả hoặc mã nguồn? Cuộn xuống! Nếu bạn là một nhà phát triển trò chơi, bạn có thể luôn muốn thực hiện một lối đi* nhân vật (hoặc kẻ thù). Tôi biết một vài năm trước đây tôi đã làm, nhưng với trình độ lập trình của tôi tại thời điểm tôi gặp vấn đề với các bài viết hiện tại ngoài kia. Tôi muốn viết điều này như một phần giới thiệu dễ dàng với một ví dụ về mã nguồn rõ ràng cho một pathfinding* để bất cứ ai cũng có thể dễ dàng chọn nó và sử dụng nó trong trò chơi của họ. F = g + hMột khía cạnh quan trọng của A* là
Hãy cùng xem một đồ họa nhanh chóng để giúp minh họa điều này. wow những con số như vậy, rất màuĐáng kinh ngạc! Hãy nói rằng G
H là heuristic - khoảng cách ước tính từ nút hiện tại đến nút cuối. Hãy cùng xem một đồ họa nhanh chóng để giúp minh họa điều này. wow những con số như vậy, rất màu
Hãy cùng xem một đồ họa nhanh chóng để giúp minh họa điều này. wow những con số như vậy, rất màu Đáng kinh ngạc! Hãy nói rằng G Nếu chúng ta đếm ngược, chúng ta có thể thấy rằng node(4) cách nút bắt đầu 4 khoảng trống của chúng ta.
G là khoảng cách giữa nút hiện tại và nút bắt đầu. H là heuristic - khoảng cách ước tính từ nút hiện tại đến nút cuối.Hãy cùng xem một đồ họa nhanh chóng để giúp minh họa điều này. wow những con số như vậy, rất màu Ở đây, một đồ họa để minh họa. Trên đầu, chúng tôi có thuật toán Dijkstra, trong đó tìm kiếm mà không có giá trị Thuật toán Dijkstra Vì vậy, hãy nhìn vào thuật toán Dijkstra, chúng tôi thấy rằng nó chỉ tiếp tục tìm kiếm. Nó không biết nút nào là ’tốt nhất, vì vậy nó tính toán các đường dẫn cho tất cả chúng. Một* thuật toán Với A*, chúng ta thấy rằng một khi chúng ta vượt qua chướng ngại vật, thuật toán ưu tiên nút có Các bước phương pháp - từ Patrick LesterTôi đã dán các bước cho A* từ bài viết của Patrick Lester, mà bạn có thể xem ở đây. Các trang web tương tự cũng được liệt kê dưới đây trong tài nguyên. Đây là một lời giải thích cực kỳ tốt, và là lý do tại sao tôi quyết định đi với nó hơn là viết lại. 1. Thêm hình vuông bắt đầu (hoặc nút) vào danh sách mở. 2. Lặp lại như sau: A) Tìm kiếm hình vuông chi phí F thấp nhất trong danh sách mở. Chúng tôi gọi đây là hình vuông hiện tại. B). Chuyển nó sang danh sách đóng. C) Đối với mỗi trong số 8 hình vuông liền kề với hình vuông hiện tại này
D) Dừng khi bạn:
3. Lưu đường dẫn. Làm việc ngược từ hình vuông mục tiêu, đi từ mỗi hình vuông đến hình vuông cha mẹ của nó cho đến khi bạn đến quảng trường bắt đầu. Đó là con đường của bạn. Mã giảTheo ví dụ dưới đây, bạn sẽ có thể thực hiện A* bằng bất kỳ ngôn ngữ nào. // A* (star) Pathfinding// Initialize both open and closed list Mã nguồn (trong Python)Hãy sử dụng mã này trong các dự án của riêng bạn. CẬP NHẬT: Vui lòng xem các nhận xét về ý chính của tôi ở đây và một ngã ba ý chính của tôi ở đây - nó bao gồm các bản sửa lỗi có mặt trong mã bên dưới.: Please see the comments on my gist here, and a fork of my gist here — It includes bug fixes that are present in the code below. ResoucesCó một số trang web tuyệt vời dưới đây bạn nên kiểm tra. Tôi đặc biệt đề xuất một* pathfinding cho người mới bắt đầu. Một python * thuật toán * là gì?Thuật toán tìm kiếm* là một thuật toán tìm kiếm đơn giản và hiệu quả có thể được sử dụng để tìm đường dẫn tối ưu giữa hai nút trong biểu đồ. Nó sẽ được sử dụng cho việc tìm đường ngắn nhất. Đây là một phần mở rộng của thuật toán đường dẫn ngắn nhất của Dijkstra (thuật toán của Dijkstra).a simple and efficient search algorithm that can be used to find the optimal path between two nodes in a graph. It will be used for the shortest path finding. It is an extension of Dijkstra's shortest path algorithm (Dijkstra's Algorithm).
Có phải A * tìm thấy con đường ngắn nhất?A* là sự lựa chọn phổ biến nhất cho Pathfinding, bởi vì nó khá linh hoạt và có thể được sử dụng trong một loạt các bối cảnh. A* giống như thuật toán của Dijkstra ở chỗ nó có thể được sử dụng để tìm một con đường ngắn nhất. A* giống như tìm kiếm đầu tiên tốt nhất tham lam ở chỗ nó có thể sử dụng một heuristic để hướng dẫn chính nó.it can be used to find a shortest path. A* is like Greedy Best-First-Search in that it can use a heuristic to guide itself.
Thuật toán A * là gì?A* là một thuật toán tìm kiếm thông tin hoặc tìm kiếm đầu tiên tốt nhất, có nghĩa là nó được xây dựng theo các biểu đồ có trọng số: bắt đầu từ một nút bắt đầu cụ thể của biểu đồ, nó nhằm mục đích tìm đường đến nút mục tiêu đã cho cóChi phí (ít nhất đi lại, thời gian ngắn nhất, v.v.).
Làm thế nào để tôi tìm thấy con đường ngắn nhất trong Python?Thuật toán đường dẫn ngắn nhất của Dijkstra.. Gán cho mọi nút Một giá trị khoảng cách dự kiến: Đặt nó thành 0 cho nút ban đầu của chúng tôi và vô cực cho tất cả các nút khác..... Đánh dấu tất cả các nút không bị ảnh hưởng..... Đặt nút ban đầu là hiện tại..... Đối với nút hiện tại, hãy xem xét tất cả các hàng xóm không được biết đến của nó và tính toán khoảng cách dự kiến của chúng .. |