Thuật toán A*

Định nghĩa

Thuật toán A* là một thuật toán tìm kiếm đường đi ngắn nhất giữa 2 điểm, sử dụng hàm heuristic để ước lượng khoảng cách từ một node đến đích. Kết hợp ưu điểm của thuật toán Dijkstra và thuật toán tìm kiếm tham lam.

Các khái niệm cơ bản

Node: Mỗi vị trí trên bản đồ được coi là một node. Ví dụ trên một grid 10x10 thì mỗi ô được coi là một node.

Cạnh (Edge): Đường nối giữa 2 node được gọi là cạnh. Cạnh thể hiện mối liên hệ giữa các vị trí ví dụ như đường đi giữa 2 ô trên bản đồ.

Chi phí đường đi (G cost): Chi phí để di chuyển từ điểm node ban đầu đến node hiện tại. Giá trị này có thể được tính dựa trên khoảng cách thực tế, thời gian di chuyển hoặc các yếu tố khác. G cost được tính bằng tổng G cost của các step trước đó.

Hàm heuristic (H cost): Hàm ước lượng khoảng cách từ node hiện tại đến node đích. hàm heuristic đóng vai trò quan trọng trong việc hướng dẫn A* tìm đường đi hiệu quả. Có nhiều loại hàm heuristic khác nhau (Khoảng cách Manhattan, khoảng cách Euclid hoặc khoảng cách đường chim bay).

Tổng chi phí ước tính (F cost): Tổng chi phí ước tính để di chuyển từ node bắt đầu đến node đích đi qua điểm hiện tại. F = G + H.

Hàm heuristic (H cost)

Định nghĩa

Hàm heuristic là hàm ước lượng khoảng cách từ một nút bất kỳ đến nút đích. Nó đưa ra một dự đoán về chi phí tối thiểu để di chuyển từ điểm node hiện tại đến node đích mặc dù không biết chính xác đường đi thực tế.

Vai trò

Hàm heuristic có vai trò như một "la bàn" chỉ dẫn thuật toán A* tìm đường đi hiệu quả hơn. Bằng cách ước lượng khoảng cách đến đích, nó giúp thuật toán ưu tiên khám phá các node có khả năng nằm trên đường đi ngắn nhất, tránh lãng phí thời gian tìm kiếm những hướng không hiệu quả.

Các loại hàm heuristic thường gặp

  1. Khoảng cách Manhattan
    • Định nghĩa: tính tổng số bước di chuyển theo chiều ngang và chiều dọc giữa 2 node
    • Công thức: H = Abs(x1 - x2) + Abs(y1 - y2)
      • x1, x2 là toạ độ node hiện tại.
      • y1, y2 là toạ độ node đích.
    • Ưu điểm: Đơn giản, dễ tính toán, phù hợp với bản đồ dạng lưới. Nơi chỉ có thể di chuyển theo 4 hướng (lên xuống trái phải).
    • Nhược điểm: Không chính xác khi có thể di chuyển theo đường chéo hoặc trong môi trường phức tạp.
  2. Khoảng cách Euclid
    • Định nghĩa: tính khoảng cách đường thẳng giữa 2 node.
    • Công thức: H = Sqrt((x1 - x2)2 + (y1 -y2)2)
      • x1, x2 là toạ độ node hiện tại.
      • y1, y2 là toạ độ node đích.
    • Ưu điểm: chính xác hơn khoảng cách Manhattan khi có thể di chuyển theo mọi hướng.
    • Nhược điểm: tốn kém hơn về mặt tính toán.
  3. Khoảng cách đường chim bay.
    • Định nghĩa: Ước lượng khoảng cách thực tế giữa 2 điểm trên bản đồ tính đến các chướng ngại vật.
    • Ưu điểm: Chính xác nhất trong các loại hàm heuristic, phù hợp với các ứng dụng thực tế như định vị GPS.
    • Nhược điểm: Khó tính toán, thường yêu cầu các thuật toán phức tạp để xác định đường đi tránh các chướng ngại vật.
  4. Hàm heuristic đường chéo
    • Định nghĩa: là một biến thể của khoảng cách Manhattan, cho phép di chuyển theo đường chéo với chi phí lớn hơn di chuyển theo chiều ngang hoặc chiều dọc.
    • Ưu điểm: Đa dụng hơn khoảng cách Manhattan khi có thể di chuyển theo chiều dọc.
    • Nhược điểm: Không chính xác bằng khoảng cách Euclid trong môi trường không gian 3 chiều.

Lưu ý: Việc lựa chọn hàm heuristic phù hợp có thể ảnh hưởng đáng kể đến hiệu suất của thuật toán A*. Một hàm heuristic tốt sẽ giúp A* tìm ra đường đi ngắn nhất một cách nhanh chóng và hiệu quả.

Tính chất của hàm heuristic

Ảnh hưởng đến thuật toán A*

Cách thức hoạt động

A* hoạt động bằng cách duyệt qua các node trên bản đồ, bắt đầu từ node bắt đầu và kết thúc tại node đích. Thuật toán sử dụng một danh sách các node mở (open list) và một danh sách node đóng (closed list) để theo dõi quá trình tìm kiếm.

Khởi tạo

Thêm node bắt đầu vào open list.

Tìm kiếm

Xây dựng đường đi.

Nếu tìm thấy node đích. Truy ngược từ node đích về node đầu bằng cách sử dụng thông tin node cha để xây dựng đường đi ngắn nhất.

Ưu và nhược điểm của thuật toán A*

Ưu điểm

Nhược điểm










Revision #1
Created 2025-06-22 10:28:38 UTC by ThanhDV
Updated 2025-06-22 10:32:21 UTC by ThanhDV