Thuật toán Heuristic thường tỏ ra khá tự nhiên, gần gũi với cách suy nghĩ và hành động của con người. Chức năng Heuristic là tìm kiếm từ một mục tiêu có sẵn, nó cung cấp thông tin từ các nút lân cận để phục vụ cho các nhu cầu kết quả tìm kiếm mục tiêu được xác định.
Có nhiều phương pháp để xây dựng một thuật giải Heuristic, trong đó người ta thường dựa vào một số nguyên lý cơ bản như sau [18]:
Nguyên lý vét cạn thông minh: Trong một bài toán tìm kiếm nào đó, khi không gian tìm kiếm lớn, thường tìm cách giới hạn lại không gian tìm kiếm hoặc thực hiện một kiểu dò tìm đặc biệt dựa vào đặc thù của bài toán để nhanh chóng tìm ra mục tiêu.
Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của bài toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước (hay từng giai đoạn) trong quá trình tìm kiếm lời giải.
Nguyên lý thứ tự: Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt.
Bên cạnh việc áp dụng các nguyên lý để xây dựng thuật toán Heuristic thì việc xác định hàm Heuristic cũng thật sự cần thiết. Hàm Heuristic là các hàm đánh giá thô, giá trị của hàm phụ thuộc vào trạng thái hiện tại của bài toán tại mỗi bước giải. Nhờ giá trị này, có thể chọn được cách hành động tương đối hợp lý trong từng bước của thuật giải.
Để bài toán được giải một cách nhanh nhất và có hành trình đường đi ngắn nhất thì khi xây dựng giải thuật Heuristic thường ứng dụng nguyên lý Greedy. Tư tưởng của giải thuật như sau:
- Từ nút khởi đầu, liệt kê tất cả quãng đường đi từ điểm xuất phát đến các n nút cấp 2 của hệ thống, rồi chọn con đường đi ngắn nhất.
- Khi đã đi đến một nút cấp 2 thì cũng theo nguyên tắc trên, liệt kê tất cả đường đi từ vị trí nút hiện tại đến nút tiếp theo. Đồng thời cũng theo tiêu chí lựa chọn con đường ngắn nhất. Lập trình này sẽ thực hiện đến khi không còn nút nào để đi.
Hình 2.1: Quá trình tìm hành trình theo nguyên lý Greedy, đỉnh số 1 là điểm xuất phát.