Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
1,53 MB
Nội dung
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUN ĐỀ HỌC PHẦN MƠN NHẬP MƠN TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: Thuật toán A* ứng dụng toán ghép tranh Sinh viên thực Giảng viên hướng dẫn : HOÀNG NGỌC LONG NGUYỄN QUANG HUY GIANG QUỐC TỒN : VŨ VĂN ĐỊNH Ngành : CƠNG NGHỆ THÔNG TIN Chuyên ngành : CÔNG NGHỆ PHẦN MỀM Lớp : D15CNPM4 Khóa : 2020-2024 Hà Nội, tháng 10 năm 2022 PHIẾU CHẤM ĐIỂM STT Họ tên sinh viên Hoàng Ngọc Long Nguyễn Quang Huy Giang Quốc Toàn Họ tên giảng viên Giảng viên chấm 1: Giảng viên chấm 2: Nội dung thực Chữ ký Điểm Chữ ký Ghi MỤC LỤC I BÀI TOÁN GHÉP TRANH II THUẬT TOÁN A* Giới thiệu thuật toán 2 Mô tả thuật toán 3 Cài đặt thuật toán .3 III CÀI ĐẶT BÀI TOÁN Trạng thái xuất phát Cài đặt A* Hàm ước lượng heuristic 3.1 Các hàm ước lượng heuristic .6 3.2 Ví dụ so sánh hàm heuristic III Kết Giao diện .9 So sánh .10 KẾT LUẬN 13 LỜI MỞ ĐẦU Trong ngành khoa học máy tính, giải thuật tìm kiếm thuật toán lấy đầu vào toán trả kết lời giải cho tốn đó, thường sau cân nhắc loạt lời giải Tập hợp tất lời giải cho tốn gọi khơng gian tìm kiếm Có thuật tốn tìm kiếm “sơ đẳng” khơng có thơng tin, phương pháp đơn giản trực quan, thuật tốn tìm kiếm có thơng tin sử dụng hàm đánh giá heuristic giúp ta giảm đáng kể thời gian cần thiết cho việc tìm kiếm lời giải Để áp dụng giải thuật tìm kiếm, ta cần chuyển khơng gian tìm kiếm dạng đồ thị Với dạng đồ thị ta nắm bắt mối liên hệ, ảnh hưởng trạng thái tốn cách nhanh chóng ngắn gọn Trong phạm vi báo cáo, chúng em xin trình bày thuật giải tìm kiếm tốn tiêu biểu với lý thuyết đồ thị là: Tìm kiếm A* Qua đó, chúng em áp dụng giải thuật tìm kiếm A* để giải tốn ghép tranh , toán quen thuộc với người lập trình, chúng em đưa chế thuật toán, ưu nhược điểm độ phức tạp thuật tốn Trong q trình thực đề tài khơng tránh khỏi sai sót, nhóm chúng em mong nhận góp ý đánh giá thầy Nhóm em xin chân thành cảm ơn! I BÀI TỐN GHÉP TRANH Game ghép tranh(N-Puzzle) trị chơi hay trí tuệ, biết đến với nhiều phiên tên gọi khác nhau: 8-puzzle, 15-puzzlae, Gem puzzle, Boss puzzle Bài toán N-puzzle vấn đề cổ điển mơ hình thuật tốn cổ điển trí tuệ nhân tạo Bài tốn đặt phải tìm tráng thái đến trạng thái đích chưa có thuật tốn tơi ưu để giải thuật toán Phần mềm N-puzzle chương trình xây dựng trị chơi giải toán Phần mềm viết java, sử dụng giao diện đồ họa để mơ trị chơi thuật tốn A* để tìm đường Người dùng sử dụng chuột/bàn phím chơi với kích thước khác với hình ảnh khác sử dụng chức tìm lời giải thuật toán A* Yêu cầu xây dựng bảng ô vuông n hàng, n cột Bảng gồm ô trống n^21 ô chứa số phạm vi [1, n 2-1] Xuất phát từ cách xếp chuyển trống lên xuống sang phải sang trái để đưa ô trạng thái đích chương trình có chức chơi từ trạng thái trạng thái bảng số hoán vị n^2 phần từ Ở ta mở rộng việc thêm hình ảnh vào game gắn số vào hình ảnh để gợi ý cho người chơi Ở trạng thái ban đầu, ô xếp ngẫu nhiên nhiệm vụ người chơi tìm cách đưa chúng trạng thái đích(Ơ đầu trống, khác tăng dần từ trái qua phải, từ xuống dưới) Để đơn giản theo cách tiếp cận toán, ta giả định ô trống di chuyển bảng di chuyển đến vị trí khác Như trạng thái có tối đa bốn cách di chuyển đến trạng thái khác(trái, phải, lên, xuống) 1.1.1: Trạng thái bắt đầu đích Bước di chuyển trống: 1.1.2 Bước di chuyển qua ô trống II THUẬT TỐN A* Giới thiệu thuật tốn Thuật tốn A* mơ tả lần năm 1986 Peter Hart, Nils Nilson Bertram Raphael Trong báo cáo họ, thuật toán gọi thuật toán A, sử dụng thuật toán với hàm đánh giá heuristic thích hợp thu hoạt động tối ưu, mà có tên A* Trong khoa học máy tính, A* thuật tốn tìm kiếm đồ thị Thuật tốn tìm đường từ nút khởi đầu tới nút đích cho trước( tới nút thỏa mãn điều kiện đích) Thuật toán sử dụng đánh giá heuristic để xếp loại nút theo ước lượng tuyến đường tốt qua nút Thuật tốn duyệt nút theo thứ tự đánh giá heuristic Do đó, thuật tốn A* ví dụ tìm kiếm theo lựa chọn tốt nhất(best-first search) Xét tốn tìm đường – tốn mà A* thường dùng để giải A* xây dựng tăng dần tất tuyến đường từ điểm xuất phát tìm thấy đường chạm tới đích Tuy nhiên, tất thuật tốn tìm kiếm có thơng tin xây dựng tuyến đường dần đích Để biết tuyến đường có khả dẫn tới đích, A* sử dụng hàm đánh giá heuristic khoảng cách từ điểm đích Trong trường hợp tìm đường đi, đánh giá khoảng cách đường chim bay đánh giá xấy xỉ thường dùng cho khoảng cách đường giao thông Điểm khác biệt A* tìm kiếm theo lựa chọn tốt cịn tính đến khoảng cách qua Điều làm cho A* đầy đủ tối ưu, nghĩa A* ln tìm thấy đường ngắn tồn đường A* không đảm bảo chạy nhanh thuật tốn tìm kiếm đơn giản Trong mơi trường dạng mê cung, cách để đến đích trước hết phải phía xa đích cuối quay trở lại Trong trường hợp đó, việc thử nút theo thứ tự “gần đích thử trước” gây tốn thời gian Mơ tả thuật tốn Giả sử n trạng thái đạt tới(có đường từ trạng thái ban đầu n0 tới n) Ta xác định hàm đánh giá: f(n) = g(n) + h(n) g(n) chi phí từ nút gốc n0 tới nút n h(n) chi phí ước lượng từ nút n tới đích f(n) chi phí tổng thể ước lượng đường qua nút n đến đích Một ước lượng heuristic h(n) xem chấp nhận với nút n: ≤ h(n) ≤ h*(n) Trong h*(n) chi phí thật(thực tế) để từ nút n đến đích Cài đặt thuật toán OPEN(FRINGE): tập chứa trạng thái sinh chưa xét đến OPEN hàng đợi ưu tiên mà phần tử có độ ưu tiên cao phần tử tốt CLOSE: tập chứa trạng thái xét đến Chúng ta cần lưu trữ trạng thái nhớ để phịng trường hợp có trạng thái tạo lại trùng với trạng thái mà ta xét đến trước Khi xét đến trạng thái ni OPEN bên cạnh việc lưu trữ giá trị g, h, f để phẩn ánh độ tốt trạng thái đó, A* cịn lưu trữ thêm hai thơng số sau: Trạng thái cha trạng thái ni (ký hiệu Cha(ni)): cho biết trạng thái dẫn đến trạng thái ni Danh sách trạng thái ni: danh sách lưu trữ trạng thái nk ni cho chi phí đến nk thơng qua ni từ trạng thái ban đầu thấp Thực chất danh sách tính từ thuộc tính Cha trạng thái lưu trữ Tuy nhiên việc tính tốn nhiều thời gian(khi tập OPEN,CLOSE mở rộng) nên người ta thường lưu trữ danh sách riêng Thuật toán A*: function Astar(n0, ngoal) Đặt OPEN n0 Đặt g(n0) = h(n0) = f(n0) = Đặt CLOSE tập rỗng Lặp lại bước sau gặp điều kiện dừng 2.a Nếu OPEN rỗng: tốn vơ nghiệm, 2.b Ngược lại, chọn ni OPEN cho f(ni) cho f(ni)min 2.b.1 Lấy ni khỏi OPEN đưa ni vào CLOSE 2.b.2 Nếu ni đích ngoal thông báo lời giải ni 2.b.3 Nếu ni đích Tạo danh sách tất trạng thái ni Gọi trạng thái nk Với nk, làm bước sau: 2.b.3.1 Tính g(nk) = g(ni) + cost(ni, nk); h(nk); f(nk) = g(nk) + h(nk) 2.b.3.2 Đặt Cha(nk) = ni 2.b.3.3 Nếu nk chưa xuất OPEN CLOSE thêm nk vào OPEN III CÀI ĐẶT BÀI TOÁN Trạng thái xuất phát Rất dễ thấy trạng thái bảng số hoán vị n2 phần tử( với n kích thước cạnh), khơng gian trạng thái n2!, 8-puzzle 9! = 362880(n = 3) 15-puzzle 16! = 20922789888000(n = 4),… Khi m tăng lên đơn vị không gian trạng thái tăng lên nhanh, điều khiến cho việc giải với phiên n > áp dụng Để tạo trạng thái ban đầu trò chơi ta dùng mảng chiều sinh ngẫu nhiên mảng trạng thái hoán vị n2 phần tử đoạn (0; n2-1) Với việc sinh ngẫu nhiên tạo trạng thái không hợp lệ(trạng thái không dẫn tới trạng thái đích tốn), ta cần phải kiểm tra xem trạng thái có dẫn tới đích hay khơng trước khởi tạo giao diện Ngồi ta trộn ngẫu nhiên trạng thái đích đến trạng thái 1.1.3: Trạng thái bắt đầu 15-puzzle 8-puzzle Cài đặt A* Việc cài đặt thuật toán A* toán N-Puzzle giống phần nêu: FRINGE tập chứa trạng thái sinh chưa xét đến M tập trạng thái trạng thái ni KQ tập trạng thái kết quả, lưu trạng thái từ trạng thái tới đích Đầu vào: trạng thái tại, trạng thái đích Đầu ra: tập trạng thái từ trạng thái tới trạng thái đích Điều kiện dừng thuật tốn: tìm thấy kết giới hạn thời gian người dùng cho phép dừng Trong toán ta cải tiến việc bỏ tập CLOSE Ta thấy bước 2.b.3 sau tìm trạng thái trạng thái ni Khi ni có tối đa trạng thái con, trạng thái ni có trạng thái trùng với trạng thái cha ni Vì ta loại bỏ trạng thái để tránh việc xét lặp Khi loại bỏ trạng thái không tồn trạng thái trùng với trạng thái tập CLOSE Việc loại bỏ tránh việc kiểm tra bước 2.b.3.3 gây tốn nhiều thời gian Ngoài ra, game cịn cài đặt thêm thuật tốn A* sâu dần(IDA*) biến thể thuật tốn tìm kiếm A* IDA* giúp loại bỏ hạn chế nhớ A* mà ko hy sinh giải pháp tối ưu Mỗi lần lặp thuật tốn q trình tìm kiếm theo chiều sâu, f(n) = g(n) + h(n), tạo nút Khi nút tạo có chi phí vượt q ngưỡng cutoff nút bị cắt giảm, trình tìm kiếm backtracks trước tiếp tục Các ngưỡng chi phí khởi tạo ước lượng heuristic trạng thái ban đầu, lần lặp làm tăng tổng chi phí nút có chi phí thấp cắt tỉa trước Thuật tốn chấm dứt trạng thái đích có tổng chi phí khơng vượt q ngưỡng 1.1.4: Minh họa A* Hàm ước lượng heuristic 3.1 Các hàm ước lượng heuristic 3.1.1 Heuristic1 Bằng tổng khoảng cách dịch chuyển (←,→,↑,↓) ngắn để dịch chuyển sai vị trí nó(khoảng cách Manhattan) 1.1.5: Minh họa Giả sử: + rowđ, colđ tọa độ(dịng cột) vị trí + rows, cols tọa độ(dịng cột) vị trí sai + xd = |cols – colđ| + yd = |rows – rowđ| d = xd + yd khoảng cách ngắn để di chuyển vị trí h1 = ∑d Trong bảng số 3x3 trên, để di chuyển ô số vị trí cần lần, để di chuyển số vị trí cần lần(qua ô khác) Để thu kết ta làm phép tính đơn giản: lấy tổng khoảng cách dịng cột hai vị trí(vị trí vị trí đúng) - Lấy tọa độ số vị trí ta có: rows = 1, cols = - Lấy tọa độ số vị trí : rowđ = 1/3 = 0; cols = 1%3 = - Vậy khoảng cách ngắn để di chuyển ô số vị trí đúng: d1 = |rows – rowđ| + |cols – colđ| = |1 – 0| + |0 – 1| = Tương tự, tính tất khoảng cách d sai cịn lại ta h1 = 1+0+2+1+1+0+1+1 = 3.1.2 3.1.2 Heuristic2 Bằng tổng khoảng cách dịch chuyển (←,→,↑,↓) ngắn để dịch chuyển sai vị trí cộng thêm số phạt cặp hàng xóm với nằm ngược vị trí h2 = ∑d + a Trong a số phạt cặp hàng xóm nằm ngược vị trí Cặp (2,1) muốn vị trí cần dịch chuyển bước(khơng để ý tới khác), bước tính ∑d nên a = Vì 1.1.6b có cặp hàng xóm nằm ngược vị trí nên a = 2+2 = 3.1.3 heuristic3 Xét ô nằm sai vị trí: d = |rows – rowđ|2 + |cols – colđ|2 Đặt d3 = ∑d h3 = d3 – [0.15*d3] + a 3.1.4 heuristic4 Xét ô sai nằm sai vị trí: d = |rows – rowđ|2 + |cols – colđ|2 Đặt d4 = ∑d h4 = d4 + a 3.2 Ví dụ so sánh hàm heuristic Xét trạng thái hình + heuristic1 = + + + + + + + = 14 + heuristic2 = heuristic1 + = 16 (a = 2) + d34 = + + + + + + + = 22 + heuristic3 = d34 – [0.15*d34] + = 21 + heuristic4 = d34 + = 24 III Kết Giao diện So sánh Với trạng thái ban đầu trạng thái hình trên: (*) Thuật giải A* + heuristic 1: Số bước tại: Số nút xét: 36819 Tổng số nút cây: 73742 Thời gian giải quyết: 38598ms + heuristic Số bước tại: 37 Số nút xét: 25950 Tổng số nút cây: 52228 Thời gian giải quyết: 19370ms 10 + heuristic Số bước tại: 37 Số nút xét: 400 Tổng số nút cây: 809 Thời gian giải quyết: 17ms 11 + heuristic Số bước tại: 41 Số nút xét: 475 Tổng số nút cây: 939 Thời gian giải quyết: 20ms 12 KẾT LUẬN Như vậy, phương pháp có ưu nhược điểm riêng, nhiên giải thuật A* áp dụng cho toán ghép tranh hiệu Giải thuật A* thuật tốn tìm kiếm đồ thị có thơng tin phản hồi, sử dụng đánh giá heuristic để xếp loại nút duyệt nút theo hàm đánh giá Với dạng toán tìm kiếm khơng gian trạng thái, có hai trường hợp cần tới heuristic: Những vấn đề có nghiệm xác mệnh đề khơng phát biểu chặt chẽ hay thiếu liệu để khẳng định kết Những vấn đề có nghiệm xác chi phí tính tốn để tìm nghiệm lớn (dẫn đến bùng nổ tổ hợp) Heuristic giúp ta tìm kiếm đạt kết với chi phí thấp 13