Đồ án thực hành trí tuệ nhân tạo Thuật toán A dùng trong kĩ thuật ghép tranh sử dụng ngôn ngữ Python. tài liệu có đầy đủ các yêu cầu của một bài báo cáo, ảnh minh họa thuật toán và ảnh chạy thử sẵn thuật toán.
BỘ CƠNG THƯƠNG TRƯỜNG ĐẠI HỌC CƠNG THƯƠNG TP.HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN o0o TIỂU LUẬN HỌC PHẦN: TRÍ TUỆ NHÂN TẠO THUẬT TỐN A* ỨNG DỤNG TRONG BÀI TỐN GHÉP TRANH Thành phố Hồ Chí Minh, tháng 12 năm 2023 BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CƠNG THƯƠNG TP.HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN o0o THUẬT TOÁN A* ỨNG DỤNG TRONG BÀI TOÁN GHÉP TRANH Giảng viên hướng dẫn: Ngô Thanh Hùng Thành viên: Lê Minh Tuyết Kỳ - 2001215901 Nguyễn Phương Loan - 2001215917 Thành phố Hồ Chí Minh, tháng 12 năm 2023 BẢNG PHÂN CƠNG Họ tên Cơng việc Hồn thành Tìm hiểu code ứng dụng Lê Minh Tuyết Kỳ ghép tranh, soạn word 100% Tìm hiểu code ứng dụng Nguyễn Phương Loan ghép tranh, soạn powepotn 100% LỜI MỞ ĐẦU Trong ngành khoa học máy tính, giải thuật tìm kiếm thuật tố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 toá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 ba thuật tìm kiếm tốn tiêu biểu với lý thuyết đồ thị là: Tìm kiếm theo chiều rộng, Tìm kiếm theo chiều sâu Tìm kiếm A* Qua đó, chúng em áp dụng giải thuật tìm kiếm A* để giải toán puzzle, 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 toán MỤC LỤC LỜI MỞ ĐẦU NỘI DUNG CHƯƠNG GIỚI THIỆU MƠ TẢ BÀI TỐN THỰC TẾ ĐƯỢC GIẢI QUYẾT 1.1 Lý chọn đề tài 1.2 Mơ tả tốn ghép tranh CHƯƠNG THUẬT TOÁN A* ĐỂ GIẢI QUYẾT BÀI TOÁN 2.1 Giới thiệu thuật toán .5 2.2 Mơ tả thuật tốn 2.3 Cài đặt thuật toán 2.4 Nhận xét .7 2.5 Độ phức tạp CHƯƠNG CÁC CHỨC NĂNG CHÍNH VÀ HƯỚNG PHÁT TRIỂN .8 3.1 Tổng quan chức giao diện 3.1.1 Chức bắt đầu xếp 3.1.2 Chức tạm dừng xếp 10 3.1.3 Chức radom hình ảnh 11 3.1.4 Chức thay đổi vị trí số hình ảnh 12 3.2 Hướng phát triển 13 KẾT LUẬN 14 TÀI LIỆU THAM KHẢO 15 NỘI DUNG CHƯƠNG GIỚI THIỆU MƠ TẢ BÀI TỐN THỰC TẾ ĐƯỢC GIẢI QUYẾT 1.1 Lý chọn đề tài Tính cấp thiết: Bài toán ghép tranh toán cổ điển lĩnh vực trí tuệ nhân tạo Bài tốn có nhiều ứng dụng thực tế sống, chẳng hạn trò chơi ghép tranh, giải vấn đề xếp lịch, phân phối tài nguyên, Tính khả thi: Thuật tốn A* thuật tốn tìm kiếm tối ưu sử dụng rộng rãi nhiều ứng dụng thực tế Thuật tốn giải tốn ghép tranh cách hiệu xác Tính mẻ: Mặc dù thuật tốn A* nghiên cứu ứng dụng rộng rãi, việc ứng dụng thuật toán A* toán ghép tranh vấn đề mẻ Việc nghiên cứu đề tài góp phần nâng cao hiệu độ xác việc giải tốn ghép tranh 1.2 Mơ tả 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 như: 8-puzzle, 15-puzzle, Gem puzzle, Boss puzzle Bài toán N-puzzle vấn đề cổ điển cho mơ hình thuật tốn liên quan đến trí tuệ nhân tạo Bài tốn đặt phải tìm đường từ trạng thái tới trạng thái đích Và chưa có thuật tốn tối ưu để giải 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 Python, 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 nhờ thuật tốn A* u cầu xây dựng bảng vuông n hàng, n cột Bảng gồm ô trống n-1 ô chứa số phạm vi [1, n-1] Xuất phát từ cách xếp bất kì, di chuyển ô trống lên trên, xuống dưới, sang phải, sang trái để đưa trạng thái đích Sử dụng chuột hay phím chức để di chuyển trống Chương trình có chức tự động chơi trạng thái Mỗi trạng thái bảng số hoán vị n 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 theo thứ tự tăng dần từ trái qua phải, từ xuống dưới) Để đơn giản cách tiếp cận tố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 cách di chuyển đến trạng thái khác(trái, phải, lên, xuống) Hình ảnh trạng thái đầu trạng thái đích Bước di chuyển trống: Hình ảnh bước di chuyển trống CHƯƠNG THUẬT TỐN A* ĐỂ GIẢI QUYẾT BÀI TOÁN 2.1 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 tóa 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 tố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 2.2 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 𝑛0 tới 𝑛) Ta xác định hàm đánh giá: 𝑓(𝑛) = 𝑔(𝑛) + ℎ(𝑛) g(n) chi phí từ nút gốc 𝑛0 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 ≤ ℎ(𝑛) ≤ ℎ ∗ (𝑛) Trong h*(n) chi phí thật để từ nút n đến đích 2.3 Cài đặt thuật tố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 𝑛𝑖 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 𝑛𝑖; (ký hiệu Cha(𝑛𝑖)): cho biết trạng thái dẫn đến trạng thái 𝑛𝑖 Danh sách trạng thái 𝑛𝑖: danh sách lưu trữ trạng thái 𝑛𝑘 nị cho chi phí đến 𝑛𝑘 thông qua 𝑛𝑖; 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(𝑛0,𝑛𝑔𝑜𝑎𝑙) 3.1 Đặt OPEN chứa 𝑛0 Đặt g(𝑛0) = h(𝑛0) = f(𝑛0) = Đặt CLOSE tập rỗng 3.2 Lặp lại bước sau gặp điều kiện dừng 3.2.a Nếu OPEN rỗng: tốn vơ nghiệm, 3.2.b Ngược lại, chọn 𝑛𝑖 OPEN cho f(𝑛𝑖 ) cho f(𝑛𝑖) nhỏ 3.2.b.1 Lấy 𝑛𝑖 khỏi OPEN đưa 𝑛𝑖vào CLOSE 3.2.b.2 Nếu 𝑛𝑖 đích 𝑛𝑔𝑜𝑎𝑙 thơng báo lời giải 𝑛𝑖 3.2.b.3 Nếu 𝑛𝑖, khơng phải đích Tạo danh sách tất trạng thái 𝑛𝑖 Gọi trạng thái 𝑛𝑘 Với 𝑛𝑘, làm bước sau: 3.2.b.3.1 Tính g(𝑛𝑘) = g(𝑛𝑖) + cost(𝑛𝑖, 𝑛𝑘); h(𝑛𝑘); f(𝑛𝑘) = g(𝑛𝑘) + h(𝑛𝑘) 3.2.b.3.2 Đặt Cha(𝑛𝑘) = 𝑛𝑖 3.2.b.3.3 Nếu 𝑛𝑘 chưa xuất OPEN CLOSE thêm 𝑛𝑘 vào OPEN Nhận xét Thuật tốn A* có tính “đầy đủ” theo – có nghĩa ln tìm thấy lời giải tốn có lời giải Bên cạnh A* cịn “tối ưu” Muốn A* tối ưu hàm h(n) phải có tính chấp nhận – tức khơng đánh giá cao chi phí nhỏ thực việc tới đích (trong trường hợp tập đóng) Nếu khơng dùng tập đóng, h(n) phải có tính đơn điệu (hay quát quán) – tức khơng đánh giá chi phí từ nút tới nút kề cao chi phí thực Một cách hình thức, m nút n thì: ℎ(𝑛) ≤ 𝑔(𝑚) – 𝑔(𝑛) + ℎ(𝑚) Thuật tốn A* cịn có tính chất hiệu cách tối ưu với hàm heuristic h, có nghĩa khơng có thuật tốn sử dụng hàm heuristic mà phải mở rộng nút A*, trừ có số lời giải chưa đầy đủ mà ℎ h dự đốn xác chi phí đường tối ưu 2.4 Độ phức tạp Độ phức tạp A* phụ thuộc vào hàm đánh giá h(n) Độ phức tạp hàm đa thức h(n) thỏa mãn điều kiện sau: |ℎ(𝑛) – ℎ ∗ (𝑛)| 𝑂(𝑙𝑜𝑔 ℎ ∗ (𝑛)) Với h*(n) hàm cho kết chi phí xác để từ nút xét n tới đích.Cụ thể, sai số h(n) khơng nên tăng nhanh log h*(n) Trong trường hợp xấu nhất, độ phức tạp lên đến hàm mũ, vấn đề sử dụng nhớ A* rắc rối, phải ghi nhớ số lượng nút tăng theo hàm mũ Một số biến thể A* phát triển để giải vấn đề CHƯƠNG CÁC CHỨC NĂNG CHÍNH VÀ HƯỚNG PHÁT TRIỂN 3.1 Tổng quan chức giao diện 3.1.1 Chức bắt đầu xếp Chức bắt đầu xếp trị chơi ghép hình Side Puzzle chức cho phép người chơi bắt đầu giải câu đố Để sử dụng chức này, người chơi cần nhấn nút “Bat Dau” Khi nhấn nút này, câu đố xáo trộn ngẫu nhiên người chơi bắt đầu giải câu đố từ đầu Trên hình, thấy câu đố có đánh số từ đến Các ô xếp theo thứ tự ngẫu nhiên Để giải câu đố, người chơi cần xếp ô cho chúng hiển thị số từ đến theo thứ tự tăng dần, từ trái sang phải Chức bắt đầu xếp chức quan trọng trò chơi ghép hình Side Puzzle Nó cho phép người chơi bắt đầu giải câu đố lúc Chức giúp người chơi làm trí nhớ tiếp tục thử thách thân 3.1.2 Chức tạm dừng xếp Chức dừng xếp cho phép người chơi tạm dừng trò chơi họ giải câu đố Để sử dụng chức này, người chơi cần nhấn nút “Dung” Khi nhấn nút này, trò chơi tạm dừng người chơi tiếp tục giải câu đố sau Chức Dừng xếp chức hữu ích trị chơi ghép hình Side Puzzle Nó cho phép người chơi tạm dừng trò chơi lúc nào, chẳng hạn họ cần nghỉ ngơi họ cần giải vấn đề khác Chức giúp người chơi tránh bị tiến độ họ phải dừng trò chơi đột ngột 3.1.3 Chức radom hình ảnh Chức Random Image trị chơi Slide Puzzle cho phép người chơi tạo câu đố thú vị cách sử dụng hình ảnh ngẫu nhiên Để sử dụng chức này, người chơi cần nhấp vào nút "Random" Sau đó, hình ảnh hiển thị bàn cờ Người chơi tiếp tục sử dụng phím mũi tên để di chuyển số cố gắng xếp chúng thành hình ảnh hồn chỉnh Chức Random Image giúp người chơi giải trí thư giãn Nó sử dụng để tạo thách thức thú vị Dưới số ví dụ cách sử dụng chức Random Image: Người chơi sử dụng chức Random Image để tạo câu đố ngẫu nhiên Người chơi sử dụng chức Random Image để tạo câu đố theo chủ đề Ví dụ, họ đặt mục tiêu giải câu đố với hình ảnh động vật, hoa phong cảnh 3.1.4 Chức thay đổi vị trí số hình ảnh Chức "Thay đổi vị trí số hình ảnh" trị chơi xếp hình Slide Puzzle chức cho phép người chơi thay đổi vị trí số hình ảnh Chức sử dụng để tạo bố cục ngẫu nhiên để tạo bố cục phù hợp với sở thích người chơi Chức truy cập cách nhấn vào nút "Thay doi vi tri so" phía hình Khi nút nhấn, menu xuất cho phép người chơi chọn số mà họ muốn di chuyển Người chơi di chuyển số theo hướng cách sử dụng phím mũi tên bàn phím cách vuốt hình Chức "Thay đổi vị trí số hình ảnh" chức bổ sung thú vị trò chơi xếp hình Slide Puzzle Chức cho phép người chơi có nhiều cách để chơi trị chơi tạo bố cục thú vị 3.2 Hướng phát triển - Cài đặt thêm chức chọn nhiều ô hơn: Chức giúp người chơi thử thách thân với chơi lớn Khi kích thước chơi lớn hơn, độ khó trị chơi tăng lên Người chơi cần có khả tư logic tính tốn tốt để hồn thành trị chơi Ví dụ: 16 ô, 25 ô… - Kết hợp thêm thuật toán Best First Search hay Breadth First Search: Kết hợp thêm thuật tốn tìm kiếm giúp trị chơi trở nên thú vị hấp dẫn Khi sử dụng thuật tốn tìm kiếm, máy tính tự động tìm đường ngắn từ trạng thái ban đầu đến trạng thái đích Người chơi theo dõi q trình tìm kiếm máy tính học hỏi thêm thuật tốn tìm kiếm - Cài đặt thêm chức đếm số bước đi: Chức giúp người chơi theo dõi tiến độ q trình chơi Người chơi cố gắng giảm số bước di chuyển để đạt thành tích cao - Cài đặt thêm chức chọn hình ảnh cho người chơi chọn hình ảnh u thích cho phép người chơi chọn hình ảnh u thích giúp tăng tính sáng tạo trị chơi Người chơi sử dụng trí tưởng tượng để tạo bố cục thú vị cho hình ảnh KẾT LUẬN Thơng qua việc tìm hiểu nghiên cứu đề tài này, chúng em có kiến thức bổ ích ứng dụng trí tuệ nhân tạo vào giải vấn đề thực tế Cụ thể, chúng em làm quen với toán ghép tranh (8-puzzle), toán cổ điển trí tuệ nhân tạo Chúng em tìm hiểu phương pháp giải toán này, bao gồm tìm kiếm theo chiều rộng, tìm kiếm theo chiều sâu tìm kiếm A* Chúng em nhận thấy phương pháp có ưu nhược điểm riêng Tìm kiếm theo chiều rộng có độ phức tạp thời gian thấp, dẫn đến nhớ cạn kiệt Tìm kiếm theo chiều sâu tìm giải pháp trường hợp, có độ phức tạp thời gian cao Tìm kiếm A* phương pháp hiệu nhất, có độ phức tạp thời gian trung bình tìm kiếm theo chiều rộng tìm kiếm theo chiều sâu Chúng em hy vọng nghiên cứu đánh giá chúng em góp phần bổ sung thêm hướng giải cho toán ghép tranh (8-puzzle) Do thời gian có hạn nên đề tài khơng tránh khỏi sai sót, mong thầy góp ý, đánh giá giúp chúng em có thêm kinh nghiệm quý báu