Thuật toán tìm đường tam giác A * (TA *)


11

Tôi cần trợ giúp để hiểu thuật toán Tam giác A * (TA *) được mô tả bởi Demyen trong bài viết Tìm đường dẫn dựa trên tam giác hiệu quả , trên trang 76-81.

Ông mô tả cách điều chỉnh thuật toán A * thông thường cho tam giác, để tìm kiếm các đường dẫn khác có thể tối ưu hơn, ngay cả sau khi nút cuối cùng được mở rộng / mở rộng. A * thông thường dừng khi nút cuối cùng được mở rộng, nhưng đây không phải luôn là đường dẫn tốt nhất khi được sử dụng trong biểu đồ tam giác. Đây chính xác là vấn đề tôi gặp phải.

Vấn đề được minh họa ở trang 78, Hình 5.4: nhập mô tả hình ảnh ở đây

Tôi hiểu cách tính giá trị g và h được trình bày trong bài báo (trang 80).

Và tôi nghĩ điều kiện dừng tìm kiếm là:

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

trong đó currentNode là nút tìm kiếm xuất hiện từ danh sách mở (hàng đợi ưu tiên), có điểm f thấp nhất. shortestDistanceFound là khoảng cách thực tế của con đường ngắn nhất được tìm thấy cho đến nay.

Nhưng làm cách nào để loại trừ các đường dẫn được tìm thấy trước đó khỏi các tìm kiếm trong tương lai? Bởi vì nếu tôi thực hiện tìm kiếm lại, rõ ràng nó sẽ tìm thấy cùng một đường dẫn. Tôi có thiết lập lại danh sách đã đóng không? Tôi cần sửa đổi một cái gì đó, nhưng tôi không biết tôi cần thay đổi cái gì. Bài báo thiếu mã giả, vì vậy sẽ rất hữu ích.

Câu trả lời:


3

Tôi đã không thực hiện điều này, nhưng khi tôi đọc nó, tôi nghĩ rằng bạn sẽ làm một cái gì đó như thế này:

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

Sự khác biệt là ngay cả khi bạn tìm thấy một con đường đến mục tiêu, nó không nhất thiết là con đường ngắn nhất . Nhưng bạn sẽ tiếp tục cải thiện các giới hạn trên trên con đường ngắn nhất, có nghĩa là bạn sẽ không phải mở tất cả các nút. Cuối cùng, bộ mở của bạn sẽ trống và con đường tốt nhất bạn tìm thấy cho đến nay phải là con đường ngắn nhất.

Chi phí g được sửa đổi mà ông mô tả có vẻ như là một sự đánh giá thấp, vì vậy tôi nghi ngờ về việc nó hoạt động tốt như thế nào trong thực tế.


Hmm, tôi có thể sai, nhưng tôi hiểu đó là điều kiện dừng chứ không phải là điều kiện để thêm vào danh sách mở. Các âm thanh sau đây giống như điều kiện để thêm vào danh sách mở: "Là một ghi chú bên cạnh, một đứa trẻ của trạng thái tìm kiếm sẽ không được tạo cho một tam giác liền kề cụ thể nếu một trạng thái tương ứng với tam giác đó đã là tổ tiên của trạng thái đó. loại trừ có thể được thực hiện bởi vì nó sẽ không bao giờ loại bỏ một đường dẫn tối ưu, chỉ có một đường dẫn có thể trở nên ngắn hơn bằng cách loại bỏ một phần của nó, như đã nêu trong Định lý 4.3.4. "
Không có
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.