I.Giới thiệu thuật giải A*A* là một giải thuật tìm kiếm sử dụng tri thức thức bổ sung để gán giá trị nhãn cho mỗi nút •Nếu không gian các trạng thái là hữu hạn và có giải pháp để tránh
Trang 1Đề tài:
GVHD: Phạm Văn Hải
Đề tài:
GVHD: Phạm Văn Hải
BÀI TẬP LỚN AI
Áp dụng thuật toán A* vào trò chơi
PUZZLE
Áp dụng thuật toán A* vào trò chơi
PUZZLE
Trang 2I.Giới thiệu thuật giải A*
A* là một giải thuật tìm kiếm sử dụng tri thức thức bổ sung để gán giá trị nhãn cho mỗi nút
•Nếu không gian các trạng thái là hữu hạn và có giải pháp để tránh việc xét lại các trạng thái thì A *
là hoàn chỉnh nhưng không đảm bảo tối ưu.
•Nếu không gian các trạng thái là hữu hạn và không có giải pháp để tránh việc xét lại các trạng thái thì A* là không hoàn chỉnh.
•Nếu không gian các trạng thái là vô hạn thì A* là
không hoàn chỉnh.
Trang 3I.Giới thiệu thuật giải A*
•Độ phức tạp và hiệu quả của giải thuật A* phụ thuộc rất nhiều vào hàm heuristic.
•Độ phức tạp thời gian tính toán của A* trong trường hợp xấu nhất là một hàm mũ, nhưng nó sẽ là một hàm
đa thức nếu hàm heuristic thỏa mãn điều kiên:
|h(n)-h*(n)| ≤ O(log(h*(n)))
Trong đó h*(n) là chí phí thực tế đi từ nút n đến nút đích
Trang 4II Ví dụ bài toán n-puzzle
3 1 2
4 7 5
6 8
3 1 2
4 7 5
3 1 2
7 5
4 6 8
3 1 2
6 7 8
3 1 2
4 7 5
6 8
3 1 2
4 7 5
6 8
1 2
3 4 5
6 7 8
Begin state End state
Hàm lượng giá:
f(n) = g(n)+h(n)
g=1
h=3
f=4
g=1 h=4 f=5
g =2
h =4
f =6
g=2
h=2
f=4
3 1 2
4 7 5
6 8
g =2
h =4
f =6
Trang 5II Ví dụ Bài toán n-puzzle
3 1 2
4 5
6 7 8
3 2
4 1 5
6 7 8
3 1 2
4 5
6 7 8
1 2
3 4 5
6 7 8
g=3
h=1
f=4
g=3 h=3 f=6
g=3 h=3 f=6
g=4
h=0
f=4
3 1 2
4 5
6 7 8
g=3 h=3 f=6
WIN!
Trang 6III Áp dụng A* vào trò chơi Puzzle
1-Giới thiệu trò chơi
Trang 7III Áp dụng A* vào trò chơi Puzzle
1-Giới thiệu trò chơi
Chúng ta có một lưới ô vuông n x n, một tấm hình sẽ được chia thành nxn ô vuông tương ứng rồi được xáo trộn một một cách ngẫu nhiên Trong các ô vuông này có một ô được để trống Nhiệm vụ của người chơi là di chuyển ô vuông trống này sang các ô chung cạnh sắp xếp các ô vuông còn lại để được bước ảnh như ban đầu sao cho tốn ít bước dịch chuyễn nhất
Người chơi sẽ trải qua các cấp độ chơi từ dễ đến khó Ở cấp
độ khó hơn bức ảnh sẽ được chia thành nhiều ô vuông hơn
Trang 8III Áp dụng A* vào trò chơi Puzzle
2- Các bước cài đặt
Bước 1 : khởi tạo
- Chia bức ảnh thành nxn bức ảnh nhỏ
- Điền các bức ảnh một cách ngẫu nhiên trên lưới ô vuông để tạo trạng thái ban đầu
Bước 2 : cài đặt A*
- Tạo hai trạng bắt đầu và kết thúc beginState, endState
- Để lưu trữ không gian trạng thái ta dùng một ArrayList
<State> arrayState
- Ở mỗi bước lặp chúng ta chọn ra trạng thái có giá trị cost nhỏ nhất, đây là giá trị được tính bằng hàm lượng giá, sau đó sinh
ra các trạng thái con của nó rồi nạp vào arrayState
Trang 9III Áp dụng A* vào trò chơi Puzzle
3 Hàm lượng giá
Một hàm luợng giá h1(n) đuợc xem là ưu thế hơn hàm lựơng giá h2(n) khi h1(n), h2(n) đều là các hàm ước lượng chấp nhận được và h1(n) ≥h2(n) đối với nút n Hàm lượng giá h(n) là chấp nhận được khi h(n)<h*(n) trong dó h*(n) là chí phí thực tế đi từ nút n đến nút đích
Trong trò chơi này chúng tôi đề xuất ba hàm heuristic như sau:
Trang 10III Áp dụng A* vào trò chơi Puzzle
3 Hàm lượng giá
h1(n)= số ô nằm sai vị trí so với trạng thái đích
Ví dụ:
Trang 11III Áp dụng A* vào trò chơi Puzzle
3 Hàm lượng giá
h2(n) = tổng khoảng cách ngắn nhất của các ô đến vị trí đúng của nó
ví dụ:
Trang 12III Áp dụng A* vào trò chơi Puzzle
3 Hàm lượng giá
Nếu ta lưu giá trị các ô của trạng thái vào mảng một chiều theo thứ tự từ trái sang phải và từ trên xuống dưới như sau:
Khí đó ta có hàm lượng giá được tính như sau:
trong đó size là kích thước của lưới ô vuông
Trang 13III Áp dụng A* vào trò chơi Puzzle
3 Hàm lượng giá
(n)= Sum1- 1.5*Sum1 + Sum2
Trong đó:
Sum1= số ô vuông là hàng xóm đang nằm ngược vị trí của nhau
sum2
Theo đánh giá thực tế thu được chúng tôi thấy được hàm heuristic h3(n) ưu thế hơn h1(n) và h2(n)
Trang 14VI Demo
THANK FOR WATCHING