Heuristic trong thuật toán A*

Một phần của tài liệu Tính toán đường đi trong môi trường giao thông động (Trang 40)

Heuristic H(n) sẽ ước tính cho ta giá trị nhỏ nhất để đi từ ô n nào đó tới vị trí đích. Và việc chọn được một heuristic tốt cho thuật toán là cực kì quan trọng.

Sử dụng heuristic trong thuật toán A*

Heuristic sẽ quyết định tới kết quá thực hiện của thuật toán A* như sau: 1. Trong trường hợp đặc biệt nếu H(n)  0 khi đó sẽ chỉ có G(n) thực hiện vai trò trong thuật toán, như vậy A* sẽ chính là thuật toán Dijkstra, và hiển nhiên sẽ đảm bảo việc thuật toán chỉ ra được đường đi ngắn nhất.

2. Nếu như H(n) luôn nhỏ hơn hoặc bằng chi phí thực tế để di chuyển từ ô n tới ô đích thì khi đó thuật toán A* có thể đảm bảo sẽ đưa ra được đường đi ngắn nhất. Giá trị H(n) càng nhỏ sẽ càng làm tăng số lượng ô mà thuật toán cần phải xét tới, điều này sẽ khiến thời gian thực hiện thuật toán tăng lên.

3. Nếu H(n) bằng đúng chi phí thực tế để di chuyển từ ô n tới ô đích thì khi đó A* sẽ chỉ đi theo đúng đường đi ngắn nhất và không phải kiểm tra bất kì ô nào khác nữa, thuật toán sẽ thực hiện nhanh nhất có thể. Mặc dù không thể thực hiện được điều này đúng trong mọi trường hợp, tuy nhiên ta vẫn có thể thực hiện được chính xác trong một số trường hợp đặc biệt. Hoàn toàn dễ hiểu nếu thông tin được đưa vào là hoàn hảo thì thuật toán sẽ thực thi một cách hoàn hảo.

4. Nếu trong một vài trường hợp mà giá trị H(n) lớn hơn giá trị thực tế thì khi đó thuật toán A* sẽ không thể đảm bảo chỉ ra chính xác đường đi ngắn nhất, tuy nhiên tốc độ thực hiện thuật toán sẽ là rất cao.

5. Trong một vài trường hợp đặc biệt nếu giá trị H(n) là lớn hơn nhiều so với giá trị G(n) thì khi đó thuật toán A* sẽ chuyển thành thuật toán “BFS”

Như vậy ta sẽ có một bài toán khá thú vị, là việc ta phải lựa chọn heuristic cho thuật toán. Nếu tìm được heuristic chính xác thì ta sẽ có được đường đi ngắn nhất và nhanh nhất. Nếu heuristic là quá nhỏ thì, thì ta vẫn có được đường đi ngắn nhất tuy nhiên tốc độ thực hiện sẽ chậm đi. Nếu heuristic là quá lớn thì sẽ không thể có được đường đi ngắn nhất nhưng khi đó tốc độ thực hiện thuật toán sẽ rất nhanh.

Trong lập trình game thực tại ảo thì thuộc tính này của A* là rất hữu dụng. Ví dụ như một số trường hợp mà ta sẽ gặp trong game thì chỉ cần một đường đi tốt chứ không cần một đường đi hoàn hảo nhưng lại cần đáp ứng điều kiện về thời gian thực thi thuật toán thì khi đó ta sẽ chỉ cần thay đổi heuristic là có thể có được kết quả mong muốn. Chỉ với một thao tác đơn giản là cân bằng giữa hai giá trị G(n) và H(n) là ta đã có thể thay đổi được hoàn toàn kết quả của thuật toán.

Một phần của tài liệu Tính toán đường đi trong môi trường giao thông động (Trang 40)

Tải bản đầy đủ (PDF)

(69 trang)