CHIẾN LƯỢC TÌM KIẾM TỐI ƯU BÀI TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT • Cho khơng gian trạng thái Giả sử chi phí để đưa trạng thái u thành v k(u,v)>=0 Tìm đường từ trạng thái đầu đến trạng thái đích, cho tổng chi phí nhỏ • Ví dụ: Bài tốn tìm đường đồ giao thơng Tìm đường ngắn từ A đến B BT TÌM ĐƯỜNG ĐI NGẮN NHẤT • Giải pháp • Trước đây? • Bây • Tìm kiếm A* • Tìm kiếm nhánh cận TÌM KIẾM A* • Tìm kiếm tốt với hàm đánh giá f(u) • Hàm đánh giá f(u) = g(u) + h(u) • g(u)? • h(u)? Procedure TimKiemA* begin Khởi tạo danh sách L chứa trạng thái ban đầu loop 2.1 if L rỗng then {thông báo tìm kiếm thất bại; stop}; 2.2 Loại trạng thái u đầu danh sách L; 2.3 if u trạng thái kết thúc then {thơng báo tìm kiếm thành cơng; stop}; 2.4 for trạng thái v kề u { g(v) = g(u) + k(u,v); f(v) = g(v) + h(v); Xen v vào danh sách L cho L theo thứ tự tăng dần f; } end; VÍ DỤ • Trạng thái khởi đầu: A • Trạng thái kết thúc: B A-14 20 G-12 F-7 13 C-15 D-6 E-8 6 H-10 K-2 I-4 B-0 TÌM KIẾM NHÁNH VÀ CẬN • Sử dụng kỹ thuật tìm kiếm leo đồi với hàm đánh giá f(u) Procedure TimKiemNhanhVaCan begin Khởi tạo danh sách L chứa trạng thái ban đầu; gán giá trí cho cost loop 2.1 if L rỗng then stop 2.2 Loại trạng thái u đầu danh sách L; 2.3 if u trạng thái kết thúc then if g(u)cost then Quay lại 2.1 2.5 for trạng thái v kề u {g(v) = g(u) + k(u,v); f(v) = g(v) + h(v); Xen v vào danh sách L1 cho L1 theo thứ tự tăng dần f}; 2.6 Chuyển danh sách L1 vào đầu danh sách L end; ... Tìm kiếm tốt với hàm đánh giá f(u) • Hàm đánh giá f(u) = g(u) + h(u) • g(u)? • h(u)? Procedure TimKiemA* begin Khởi tạo danh sách L chứa trạng thái ban đầu loop 2.1 if L rỗng then {thơng báo tìm... B-0 TÌM KIẾM NHÁNH VÀ CẬN • Sử dụng kỹ thuật tìm kiếm leo đồi với hàm đánh giá f(u) Procedure TimKiemNhanhVaCan begin Khởi tạo danh sách L chứa trạng thái ban đầu; gán giá trí cho cost loop 2.1