thuật toán 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 (bestfirst search). Thuật toán A được mô tả lần đầu vào năm 1968 bởi Peter Hart, Nils Nilsson, và Bertram Raphael. Trong bài báo của họ, thuật toán được gọi là thuật toán A; khi sử dụng thuật toán này với một đánh giá heuristic thích hợp sẽ thu được hoạt động tối ưu, do đó mà có tên A. Thuật toán A là thuật toán tìm kiếm có tính heuristic trên không gian trạng thái dựa vào hàm f, được định nghĩa như sau:f=g(n)+h’(n)g(n): chi phí thực sự đi từ nút đầu đến nút nh’(n): chi phí ước lượng đi từ nút n đến trạng thái đích Để cài đặt giải thuật A ta dùng hai danh sách để chứa các trạng thái, danh sách Open chứa các trạng thái chưa xét, danh sách Close chứa các trạng thái đã xét.
Trang 1Nhóm em xin chào cô và
các bạn
• Trần Ngọc Huấn
• Nguyễn Ngọc Hưng
• Nguyễn Quý Hưng
• Khiếu Xuân Phú
Trang 2Ứng dụng thuật toán
A* vào bài toán 8-
Puzzle
ĐỀ TÀI
Trang 3Thuật Toán
A*
Giới thiệu bài toán 8-puzzle
UD thuật toán
A*
vào bài toán 8-puzzle
Nội Dung :
Bài Toán
Trang 4Thuật toán 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)
- Thuật toán A* được mô tả lần đầu vào năm 1968 bởi Peter Hart, Nils Nilsson, và Bertram Raphael Trong bài báo của họ, thuật toán được gọi là thuật toán A; khi sử dụng thuật toán này với một đánh giá heuristic thích hợp sẽ thu được hoạt động tối ưu, do đó mà có tên A*
Trang 5Thuật toán A*
- Thuật toán A* là thuật toán tìm kiếm có tính heuristic trên không gian trạng thái dựa vào hàm f, được định nghĩa như sau:
f=g(n)+h’(n)
g(n): chi phí thực sự đi từ nút đầu đến nút n
h’(n): chi phí ước lượng đi từ nút n đến trạng thái đích
- Để cài đặt giải thuật A* ta dùng hai danh sách để chứa các trạng thái, danh sách Open chứa các trạng thái chưa xét, danh sách Close chứa các trạng thái đã xét
Trang 6Giới thiệu bài toán 8-puzzle.
Một bảng 3x3 với các ô trong đó có các số từ 1->8 và một ô trống , các ô được đặt ở các vị trí ngẫu nhiên, ô trống và các ô có thể đổi chỗ cho nhau , tìm cách
di chuyển các ô và số có thể đổi chỗ cho nhau , 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 ban đầu
Trang 7Giới thiệu bài toán 8-puzzle.
Trạng thái đích có thể có 2 trường hợp có thể xảy ra :
Và
Với mỗi trạng thái ban đầu chỉ tìm được 1 trạng thái đích có thể đạt tới
Điều cần tâm để giải bài toán 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 ban đầu
Vậy trạng thái đích được xác định như thế nào?
Trang 8Giới thiệu bài toán 8-puzzle.
Đầu tiên hãy tính có bao nhiêu
số bé hơn 8 ở sau ô chứa giá trị 8 kết
quả nhận được là 6 (những ô màu vàng )
Làm tương tự như vậy với ô có giá trị 6 Dễ thấy trong 3 ô (4,7,5) có 2 giá
trị nhỏ hơn 6 là (4,5)
Trang 9Giới thiệu bài toán 8-puzzle.
Làm như trên từ ô đầu tiên (2) tới ô cuối cùng (5) và cộng dồn các giá trị nhận được
N = 1+ 6 + 1 + 0 + 2 + 0 + 1 + 0 = 11
Nếu N là số lẻ thì chúng ta chỉ có thể có đáp án là trạng thái A , ngược lại trạng thái
là B
Chúng ta đã xác định được trạng thái đích cần đạt , bây giờ bắt đầu tìm kiếm giải thuật để tìm ra đích
Trang 10Các thuật toán giải quyết bài toán 8-puzzle.
search algorithm)
algorithm)
tìm kiếm theo chiều sâu) 4
(minh họa bằng giải thuật này)
Trang 11Áp dụng giải thuật A* cho bài toán 8-puzzle
Trò chơi 8 số ở mức độ khó vừa phải nên là một trò chơi thú vị , một giải pháp điển hình gồm 20 bước , con số này sẽ thay đổi dựa vào trạng thái ban đầu Hệ số rẽ
nhánh khoảng bằng 3 (khi ô ở giữa, có 4 khả năng di chuyển ; khi nó ở góc có 2 khả năng di chuyển và khi nó ở trên các cạnh , có 3 khả năng di chuyển ) Để giải bài toán này ta cần tìm 1 hàm Heuristic tốt
Ta có 2 hàm ước lượng :
H1= số lượng các số sai vị trí H2= tổng số khoảng cách của các số so với vị trí mục tiêu, là tổng khoảng cách theo chiều ngang hoặc chiều dọc
Bài toán 8-puzzle khi được giải bằng thuật toán A* sẽ thực hiện các bước sau:
Từ trạng thái ban đầu ta xác định được trạng thái đích
- Gọi G là số bước đã di chuyển ô trống
- H là hàm Heuristic , ước tính số hao tổn để tới trạng thái đích , tính bằng tổng quãng đường của các ô ở vị trí sai về vị trí đúng
F= G+H
Có 2 danh sách Open và Close , Open chứa các trạng thái chưa xét, Close chứa danh sách các trạng thái đã xét
Trang 12Áp dụng giải thuật A* cho bài toán 8-puzzle
Ban đầu ta thêm trạng thái khởi đầu vào Open, sau đó chọn trạng thái có
f = g + h nhỏ nhất, lúc này danh sách Open chứa duy nhất trạng thái khởi đầu nên ta lấy trạng thái khởi đầu khỏi Open, và đưa vào danh sách Close các trạng thái đã xét
Từ trạng thái đang xét ta xác định được trạng thái tiếp theo, dựa vào các hướng di chuyển của ô trống Đưa tất cả các trạng thái mới mà chưa có trong Close và Open vào danh sách Open Ta tiếp tục chọn trạng thái có f = g + h nhỏ nhất khỏi Open như bước đầu tiên cho đến khi tìm ra trạng thái đích thì dừng lại Từ trạng thái đích vừa tìm được đi ngược lại danh sách ta sẽ tìm được đường đi từ trạng thái khởi đầu đến trạng thái đích
Ví dụ: cho hình sau
N= 1+6+1+2+1=11 nên trạng thái đích là Các bước giải bài toán như sau:
Trang 13Áp dụng giải thuật A* cho bài toán 8-puzzle
Đầu tiên ta xác định trạng thái tiếp theo của bài toán trên:
Có ba trường hợp xảy ra
Đối với trường hợp 1 có g= 1, h= 4,f= h+g=5 Đối với trường hợp 2 có g= 1, h= 5,f= h+g=6 Đối với trường hợp 3 có g= 1, h= 6,f= h+g=7
So sánh các f với nhau ta thấy f của trường hợp 1 nhỏ nhất nên trạng thái tiếp theo là trạng thái 1
Trang 14Áp dụng giải thuật A* cho bài toán 8-puzzle
Từ 1 ta có ba trạng thái:
Đối với trường hợp 1.1 có g= 2, h= 3,f= h+g=5
Đối với trường hợp 1.2 có g= 2, h= 5,f= h+g=7
Đối với trường hợp 1.3 có g= 2, h= 5,f= h+g=7
So sánh các f với nhau ta thấy f của trường hợp 1 nhỏ nhất nên trạng thái tiếp theo là trạng thái 1.1
Trang 15Áp dụng giải thuật A* cho bài toán 8-puzzle
Từ 1.1 có hai trạng thái:
Đối với trường hợp 1.1.1 có g= 3, h= 2,f= h+g=5
Đối với trường hợp 1.1.2 có g= 3, h= 4,f= h+g=7
So sánh các f với nhau ta thấy f của trường hợp 1 nhỏ nhất nên trạng thái tiếp theo là trạng thái 1.1.1 :
Trang 16Áp dụng giải thuật A* cho bài toán 8-puzzle
Từ trạng này có: g= 4, h=1, f= 5
Ta có trạng thái đích
Từ 1.1.1 có một trạng thái
Trang 17Nguồn:
http://doc.edu.vn/tai-lieu/bai-tap-lon-tim-hieu-thuat-a-ap-dung-cho-tro-choi-8-so-53232/ https://tranhoangminh.wordpress.com/2012/04/01/ap-d%E1%BB%A5ng-gi%E1%BA
%A3i-thu%E1%BA%ADt-a-cho-bai-toan-tacanh/
http://text.123doc.org/document/2346098-bao-cao-mon-tri-tue-nhan-tao-bai-toan-n-puzzle-su-dung-thuat-toan-a.htm