Trí tuệ nhân tạo (Artificial Intelligence) có thể được định nghĩa như một ngành của khoa học máy tính liên quan đến việc tự động hoá các hành vi thông minh. AI là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực này. Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri thức, các thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và kĩ thuật lập trình dùng cho việc cài đặt chúng.
TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN BỘ MÔN CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN : TRÍ TUỆ NHÂN TẠO (Artificial Intelligence) Đề Tài: BÀI TOÁN MÃ ĐI TUẦN Giáo viên hướng dẫn : Ths Lưu Minh Tuấn Sinh viên thực hiện : Đào Tiến Duẩn Lớp : CNTT47 Bộ môn : CNTT Bài toán Mã đi tuần Hà Nội 11-2008 MỤC LỤC I. GIỚI THIỆU II. NỘI DUNG 1. Yêu cầu bài toán 2. Yêu cầu thuật toán hueristic 3. Cách cài đặt III. KẾT LUẬN Đào Tiến Duẩn Lớp: CNTT 47 2 Bài toán Mã đi tuần I. GIỚI THIỆU Trí tuệ nhân tạo (Artificial Intelligence) có thể được định nghĩa như một ngành của khoa học máy tính liên quan đến việc tự động hoá các hành vi thông minh. AI là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực này. Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri thức, các thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và kĩ thuật lập trình dùng cho việc cài đặt chúng. Những đặc điểm của trí tuệ nhân tạo: • Sử dụng máy tính vào suy luận trên các ky hiệu, nhận dạng, học và một số hình thức suy luận khác. • Tập trung vào một số vấn đề không thích hợp với các lời giải mang tính thuật toán. Điều này dựa trên cơ sở tin tường vào phép tìm kiếm heuristic như một kỹ thuật giải quuyết vấn đề AI. • Sự quan tâm đến các kỹ thuật giải quyết vấn đề bằng những thông tin không chính xác, thiếu hụt hoặc được định nghĩa một cách nghèo nàn, và sự sử dụng các hình thức biểu diễn cho phép người lập trình bù đắp được những thiếu sót này. • Suy luận những đặc trưng định tính quan trọng của tình huống. • Một cố gắng để giải quyết những vướng mắv về ý nghĩa, ngữ nghĩa cũng như là hình thức cú pháp. • Những câu trả lời không chính xác cũng như tối ưu, nhưng trong một chừng mực nào đó được coi là “đủ”. Đây là kết quả của sự tin cậy cốt yếu vào các phương pháp giái quyết vấn đề theo kiểu heuristic trong những tình huống mà kết quả tối ưu hoặc chính xác là quá tốn kém hoặc không thể thực hiện được, • Sử dụng những khối lượng lớn tri thức chuyên ngành trong giải quyết vấn đề. Đây là cơ sở cho các hệ chuyên gia. • Sử dụng các tri thức cấp meta (meta-level knowledge) để tăng thêm sự tinh vi cho viêc kiểm soát các chiến lược giải quyết vấn đề. Tuy rằng đây là một vấn đề rất khó khăn, được chú ý trong một số khá ít các ậê thống gần đây, nó đã nổi bật lên như một lĩnh vực nghiên cứu chủ yếu. Đào Tiến Duẩn Lớp: CNTT 47 3 Bài toán Mã đi tuần Mục tiêu nghiên cứu của ngành AI: • Xây dựng lý thuyết về thông minh để giải thích các hoạt động thông minh • Tìm hiểu cơ chế sự thông minh của con người - Cơ chế lưu trữ tri thức. - Cơ chế khai thác tri thức. • Xây dựng cơ chế hiện thực sự thông minh. • Áp dụng các hiểu biết này vào các máy móc phục vụ con người. Mã đi tuần (hay hành trình của quân mã) là bài toán về việc di chuyển một quân mã trên bàn cờ vua ( 8 x 8). Quân mã được đặt ở một ô trên một bàn cờ trống nó phải di chuyển theo quy tắc của cờ vua để đi qua mỗi ô trên bàn cờ đúng một lần. Có rất nhiều lời giải cho bài toán này, chính xác là 26.534.728.821.064 lời giải trong đó quân mã có thể kết thúc tại chính ô mà nó khởi đầu. Một hành trình như vật được gọi là hành trình đóng. Có những hành trình, trong đó quân mã sau khi đi hết tất cả 64 ô của bàn cờ (kể cả ô xuất phát), thì từ ô cuối của hành trình không thể đi về ô xuất phát chỉ bằng một nước đi. Những hành trình như vậy được gọi là hành trình mở. Nhiều biến thể của chủ đề này được các nhà toán học nghiên cứu, trong đó có nhà toán học Euler. Các biến đổi có thể theo các hướng: • thay đổi kích thước bàn cờ • biến thành trò chơi hai người theo tư tưởng này • giảm nhẹ các yêu cầu trên đường đi của quân mã. Bài toán mã đi tuần là một dạng của bài toán tổng quát hơn là bài toán tìm đường đi Hamilton trong lý thuyết đồ thị, là một bài toán NP-đầy đủ. Bài toán tìm hành trình đóng của quân mã là một bài toán cụ thể của bài toán tìm chu trình hamiltonian. Đào Tiến Duẩn Lớp: CNTT 47 4 Bài toán Mã đi tuần II. NỘI DUNG Yêu cầu bài toán: Trên bàn cờ tổng quát n*n (n chẵn, 6≤n≤20), có đặt quân mã ở một ô nào đó. Hãy tìm một hành trình của quân mã từ ô xuất phát, đi qua tất cả các ô đúng 1 lần. Đây là bài toán mã đi tuần - một bài toán kinh điển của các bài toán về Thuật toán và Giải thuật. Có hai cách giải phổ biến là giải bằng đệ quy (hay còn gọi là vét cạn) và heuristic. Trong đó cách giải bằng thuật toán đệ quy có rất nhiều hạn chế (chậm, rườm rà,…). Chính vì thế chúng ta sẽ dùng thuật toán hueristic để giải quyết những hạn chế đó. Yêu cầu thuật toán Hueristic: Về nguyên tắc là phải chọn bước đi kế tiếp cho con mã sao cho nó đi kín hết bàn cờ 8x8=64 ô. Cách chọn bước đi kế tiếp từ 1 bước đi hiện tại là dựa trên sự đánh giá những hướng đi xung quanh, chọn ra hướng đi có đánh giá nhỏ nhất mà đi vào đó. Có hai cách đánh giá như sau: Cách 1: Tại mỗi hướng đi kế tiếp có thể đi đến, ta đếm số hướng đi tiếp theo có thể đi tiếp, đó là cách đánh giá dựa trên đếm số hướng đi. Cách 2: Tại mỗi hướng đi kế tiếp có thể đi đến, đánh giá hướng đi này bằng công thức: h(i,j) = min(8-i, i-1) + min(j-1, 8- j)// i: chỉ số dòng; j: chỉ số cột. Đào Tiến Duẩn Lớp: CNTT 47 5 Bài toán Mã đi tuần Cách cài đặt: Nhận xét: một ô mà con mã đứng tại đó sẽ có 8 nước đi hợp lệ. Tức là nước kế tiếp của nó sẽ luôn là ô có màu khác với màu mà nó đang đứng. Theo cách này các thì các ô nằm sát biên và gần góc sẽ có số nước đi kế tiếp ít nhất. Vì thế khi chọn nước đi kế tiếp, một là nhảy và ô gần gốc, hai là nhảy vào ô nào mà ô đó có số nước có thể đi ở nước tiếp theo nữa là ít nhất. Nếu các ô kế tiếp có số nước đi kế tiếp nửa bằng nhau thì ta sẽ lấy ô đầu tiên. Ví dụ: với bàn cờ 5x5, có tất cả 25 ô. Ta mặc định ô bắt đâu là ô thứ nhất (1,1). 1,1 1,2 1,3 1,4 1,5 2,1 2,2 2,3 2,4 2,5 3,1 3,2 3,3 3,4 3,5 4,1 4,2 4,3 4,4 4,5 5,1 5,2 5,3 5,4 5,5 Quy định đặt vị trí ô như sau: Ví dụ ô(1,2) thì “1” cho biết số dòng của bàn cờ; “2” cho biết số cột. Vậy ô (1,2) nằm ở dòng thứ nhất và cột thứ hai của bàn cờ. Có nhiều cách đặt khác nhau tùy tùy thuộc vào cách triển khai và tính tiện lợi cho bài toán. Như vậy tại một ô bất kỳ ta sẽ biết được các nước đi kế tiếp (tất nhiên là không tính các nước đã đi qua rồi). Do đó ta có bảng như sau: Thứ Ô hiện hành Các ô kế t i ế p Độ ưu tiên Ô kế Hình 1 (1,1) (3,2) (2,3) 5 5 (3,2) Đào Tiến Duẩn Lớp: CNTT 47 6 Bài toán Mã đi tuần 2 (3,2) (1,3) (2,4) (4,4) (5,3) (5,1) 4 4 4 4 2 (5,1) 2 (5,1) (4,3) 6 (4,3) 3 (4,3) (2,4) (3,5) (5,5) (3,1) (2,2) 2 3 1 3 3 (5,5) 4 (5,5) (3,4) 5 (3,4) 5 (3,4) (1,5) (5,3) (4,2) (2,2) (1,3) 1 2 3 3 2 (1,5) 6 (1,5) (2,3) 4 (2,3) Đào Tiến Duẩn Lớp: CNTT 47 7 Bài toán Mã đi tuần 7 (2,3) (3,5) (4,4) (4,2) (3,1) 2 2 2 2 (3,5) 8 (3,5) (1,4) (5,4) 2 2 (1,4) 9 (1,4) (2,2) (3,3) 1 7 (2,2) 10 (2,2) (4,1) 2 (4,1) 11 (4,1) (3,3) (5,3) 6 1 (5,3) 12 (5,3) (4,5) 2 (4,5) 13 (4,5) (3,3) 5 (2,4) Đào Tiến Duẩn Lớp: CNTT 47 8 Bài toán Mã đi tuần (2,4) 1 14 (2,4) (1,2) 2 (1,2) 15 (1,2) (3,3) (3,1) 4 1 (3,1) 16 (3,1) (5,2) 2 (5,2) 17 (5,2) (3,3) (4,4) 3 1 (4,4) 18 (4,4) (2,5) 2 (2,5) 19 (2,5) (3,3) (1,3) 2 1 (1,3) Đào Tiến Duẩn Lớp: CNTT 47 9 Bài toán Mã đi tuần 20 (1,3) (2,1) 2 (2,1) 21 (2,1) (3,3) (4,2) 1 1 (3,3) 22 (3,3) (5,4) 1 (5,4) 23 (5,4) (4,2) 1 (4,2) Nhận xét: theo cách giải này thì con mã sẽ đi các ô ở rìa bàn cờ trước và cuối cùng mới vào các ô chính giữa. Mở rộng: - Bạn có thể chọn bất kỳ ô nào làm ô bắt đầu cho mã đi tuần. - Bạn có thể tùy chọn số ô trên bàn cờ từ 3x3 đến 15x15. Cái này do mình định nghĩa - Có thể mở rộng bài toán như sau: cho ô bắt đầu và ô kết thúc, hãy tìm đường đi ngắn nhất của con mã để đi giữa hai ô đó. Đào Tiến Duẩn Lớp: CNTT 47 10