BÀI TẬP LỚN MÔN: TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: TRÒ CHƠI Ô CHỮ PUZZLE SỬ DỤNG THUẬT TOÁN A*... • Bài toán đặt ra: di chuyển ô trống đổi chỗ với các ô số lân cận sao cho đưa về trạng thái đích
Trang 1BÀI TẬP LỚN MÔN: TRÍ TUỆ NHÂN TẠO
ĐỀ TÀI: TRÒ CHƠI Ô CHỮ PUZZLE SỬ
DỤNG THUẬT TOÁN A*
Trang 2• Nhóm sinh viên thực hiện:
– Nguyễn Huy Triển 20082751 – Trần Bá Tùng 20083041 – Đặng Vũ Hạnh 20080899
– Phùng Ngọc Duy 20101256 – Phan Việt Phong 20083429 – Nguyễn Anh Tuấn 20102772
Trang 3Phân công công việc:
- Triển, Tùng và Hạnh code chương trình.
- Duy viết báo cáo.
- Phong tìm hiểu thuật toán.
- Tuấn và Triển làm slide.
Trang 4Nội dung chính
1 Bài toán thực tế
2 Giải thuật A*
3 Phương pháp giải quyết
4 Vấn đề tồn tại
5 Hướng phát triển
Trang 5Bài toán thực tế
• Xáo trộn hoặc đưa ra trạng thái ban đầu (có lời giải) như hình
bên
• Bài toán đặt ra: di chuyển ô
trống (đổi chỗ với các ô số lân
cận) sao cho đưa về trạng thái
đích ở hình dưới
Trang 6Giải thuật A*
• Ý tưởng: tránh việc phát triển các nhánh tìm kiếm có chi phí cao
• Sử dụng hàm đánh giá f(n) = g(n) + h(n)
g(n): chi phí từ nút gốc đến nút hiện tại
h(n): chi phí ước lượng từ nút hiện tại n đến đích
f(n): chi phí tổng thể ước lượng đường đi của nút hiện tại n đến đích
Trang 7Ước lượng heuristic
• h(n) = h1 + h2
• h1 là tổng chi phí ngắn nhất để đưa các ô sai
về vị trí đúng, tính theo khoảng cách
manhattan
• h2 là hàm chặn Gọi x là khoảng cách theo chiều dọc sai vị trí và y là khoảng cách theo chiều ngang sai vị trí thì h2 cộng thêm giá trị lớn nhất max(x,y) với mỗi ô có (x+y)>1
Trang 8Phương pháp giải quyết
• Để đảm bảo giải thuật A* là hoàn chỉnh thì phải khử các vòng lặp
Giải pháp:
Mỗi nút con sinh ra, ta kiểm tra trạng thái của chúng xem có xuất hiện trong 2 tập open và hash
không, nếu không thì nạp vào open, ngược lại nếu
g nút mới sinh nhỏ hơn g nút đã tồn tại thì thay thế nút mới vào đồng thời cập nhật các nút con.
Trang 9Phương pháp giải quyết
• Để đảm bảo hệ thống sinh trạng thái đầu có lời giải, cần thỏa mãn:
- n lẻ : N mod 2 = 0
- n chẵn :
+ N mod 2 = 0 và ô trống nằm trên dòng chẵn tính từ trên xuống.
+ N mod 2 = 1 và ô trống nằm trên dòng lẻ tính từ
trên xuống.
N là tổng số ô có giá trị bé hơn mỗi ô trước.
Trang 10Phương pháp giải quyết
• Sử dụng tập hash như 1 bảng băm để tăng tốc
độ duyệt tìm các nút trùng nhau
Trang 11Vấn đề tồn tại
• Hàm h(n) chưa đánh giá hoàn chỉnh, chỉ sử
dụng được ở các mức thấp
• Duyệt tìm ở mức cao, phần tử trong hash có
số phần tử con rất lớn nên thuật toán bị chậm
Trang 12Hướng phát triển
• Tìm hàm h(n) tối ưu hơn để sử dụng ở các
mức cao hơn
• Xây dựng hàm băm tối ưu hơn để tăng tốc tìm kiếm
Trang 13• Về việc so sánh ưu thế và nhược điểm so với các nhóm làm đề tài puzzle khác, em nghĩ
demo chương trình không thể hiện được rõ Nếu phân tích code và thuật toán cài đặt sẽ thấy được ưu nhược điểm Trong đó em đề cao nhất là xuất phát điểm của bài toán và thuật giải Vì vấn đề đầu tiên đặt ra mới thể hiện ưu thế giải quyết bài toán của chương trình, thuật giải thể hiện tối ưu chương trình