Tìm hiểu giải thuật A* , ứng dụng giải bài toán 8-puzzle... Ở trạng thái bắt đầu, các ô được sắp đặt ngẫu nhiên, và nhiệm vụ của người giải là tìm cách di chuyển các ô sao cho các con số
Trang 1Tìm hiểu giải thuật A* , ứng dụng
giải bài toán 8-puzzle
Trang 2Nội dung
Giao diện
Sử dụng A* vào bài toán Giải thuật A*
Phân tích bài toán
Giới thiệu bài toán N-puzlle
Trang 3Bài toán 8-puzzle
Bài toán gồm một bảng 3×3 với các ô số được đánh từ 1->8 và một ô trống Ở trạng thái bắt đầu, các ô được sắp đặt ngẫu nhiên, và nhiệm vụ của người giải là tìm cách di chuyển các ô sao cho các con số về đúng thứ tự, bài toán đặt ra ở đây là tìm phương án tối ưu sao cho số lần di chuyển là ít nhất
Trạng thái đầu Trạng thái đích
Trang 4Bài toán 8-puzzle
Điều đầu tiên cần phải quan tâm để giải bài toán này là xác định trạng thái đích Trạng thái đích được xác định dựa trên trạng thái đầu Vậy trạng thái đích được xác định như thế nào
A
C
B
với trạng thái đầu như trên thì có thể có 3 trạng thái đích có thể xảy ra
Trang 5Company Logo
Phân tích
Cho trạng thái đầu tiên như hình dưới, duyệt qua từng ô theo thứ tự từ
trái qua và từ trên xuống, ở mỗi ô số duyệt đến, bạn hãy đếm xem có bao nhiêu ô số có giá trị bé hơn nó :
N= 0+ 3 +4+ 0 +0 +1 +0 +0 = 8
Với số N này ta chỉ cần biết 1 thông tin là nó có chia hết cho 2 hay không (lẻ hay chẵn) Nếu N là số chẵn thì chúng ta chỉ có thể có đáp án là trạng thái đích là A hoặc B, ngược lại là trạng thái C
Trang 6
Tổng quan về A*
Trong khoa học máy tính, A* (đọc là A sao) là một thuật toán tìm kiếm trong đồ thị
Thuật toán này tìm một đường đi từ một nút khởi đầu tới một nút đích cho trước (hoặc tới một nút thỏa mãn một điều kiện đích
Thuật toán này sử dụng một "đánh giá heuristic" để xếp loại từng nút theo ước lượng về tuyến đường tốt nhất đi qua nút
đó Thuật toán này duyệt các nút theo thứ tự của đánh giá
heuristic này Do đó, thuật toán A* là một ví dụ của tìm kiếm theo lựa chọn tốt nhất (best-first search)
Trang 7Tổng quan về A*
Sử dụng hàm đánh giá f(n) = g(n) + h(n) trong đó :
g(n) = chi phí từ nút gốc cho đến nút hiện tại n
h(n) = chi phí ước lượng từ nút hiện tại n tới đích
f(n) = chi phí tổng thể ước lượng của đường đi qua nút hiện tại n đến đích
Giải thuat A với hàm heuristic h(n) luôn luôn giá trị thực đi
Trang 8Tổng quan về A*
Trang 15 Tính hoàn chỉnh?
Có (trừ khi có rất nhiều các nút có chi phí f ≤ f(G) )
của độ dài đường đi của lời giải
Tính tối ưu?
Có
Trang 16Sử dụng A* vào bài toán
Thuật toán A*:
Gọi G(n) là số bước đã di chuyển ô trống
H(n) là hàm heuristic, ước tính số hao tổn để tới trạng thái đích, tính bằng tổng các quãng đường của các ô ở vị trí sai
để về tới vị trí đúng
F(n)=G(n)+H(n)
? Tính H(n)
Trang 17Sử dụng A* vào bài toán
Trong bảng số 3×3 trên, để di chuyển ô số 5 vào đúng vị trí ta cần di chuyển nó 1 lần, để di chuyển ô số 7 về đúng vị trí ta cần cần 4 lần (qua 4
ô khác)
| row1 - row2| + |column1 – column2|
Với :
RowIndex = Index / m
ColIndex = Index % m
Trang 18Tổng quan về A*
Ví dụ ô số 7 có thứ tự trong bảng là 6 (tính từ 0 với m là cạnh) ta có row = 6 / 3 = 2, col = 6 % 3 = 0
h = 0+1+4+2+2+0+1+1+1 = 12
Trang 19Không gian trạng thái*
Trang 20Cảm ơn các bạn đã lắng nghe!