Cuốn giáo trình “Trí tuệ nhân tạo”, một môn cơ sở chuyên ngành trong chương trình đào tạo cử nhân tin học, ngoài mục đích xây dựng nhiều giáo trình trên một khung chương trình đào tạo, mà còn giúp cho sinh viên có tài liệu học tập phù hợp với hoàn cảnh thực tế của Đại học Huế. Đi sâu vào tìm hiểu, giáo trình có nội dung gồm 6 chương phần 1 sách gồm 3 chương đầu với nội dung: Chương mở đầu, chương 1. Biểu diễn bài toán trong không gian trạng thái, chương 2. Các phương pháp tìm kiếm lời giải trong không gian trạng thái.
ĐẠI HỌC HUẾ TRƯỜNG ĐẠI HỌC KHOA HỌC Giáo trình TRÍ TUỆ NHÂN TẠO Huế, 2004 Lời nói đầu Trong năm qua, nhiều tài liệu ngành công nghệ thông tin giới thiệu nhiều cho cán nghiên cứu, ứng dụng sinh viên bậc đại học Tuy nhiên giáo trình ngành học chưa đáp ứng dược nhu cầu sinh viên trường đại học, đặc biệt sinh viên khu vực miền Trung Vì vậy, chúng tơi biên soạn giáo trình “Trí tuệ nhân tạo”, mơn sở chuyên ngành chương trình đào tạo Cử nhân Tin học, ngồi mục đích xây dựng nhiều giáo trình khung chương trình đào tạo, mà giúp cho sinh viên có tài liệu học tập phù hợp với hoàn cảnh thực tế Đại học Huế Trong sách này, sinh viên làm quen với số kiến thức phương pháp tìm kiếm lời giải phương pháp xử lý tri thức Ngoài ra, sách giới thiệu số chương trình cài đặt, nhằm giúp sinh viên hiểu cách tường tận giải thuật, đồng thời tin tưởng giải thuật áp dung thực tế cài đặt máy tính cách dễ dàng Các nội dung trình bày sách giảng cho sinh viên ngành Công nghệ Thông tin Đại học Huế năm vừa qua Cuốn sách đời giúp đỡ mặt vật chất tinh thần Đại học Huế, Trường Đại học Khoa học đặc biệt Ban chủ nhiệm Khoa Công nghệ Thông tin đồng nghiệp thuộc Bộ môn Khoa học Máy tính Chúng tơi xin gửi tới họ lòng biết ơn Xin chân thành cám ơn bạn bè cổ cũ gíup cho sách sớm hồn thành Mặc dù cố gắng, nhiên sách khơng tránh khỏi thiếu sót Chúng tơi mong góp ý độc giả, đặc biệt đồng nghiệp sinh viên để sách ngày hoàn thiện Huế, tháng năm 2004 Tác giả Tài liệu tham khảo Bạch Hưng Khang, Hồng Kiếm Trí tuệ nhân tạo: Các phương pháp ứng dụng Nhà xuất Khoa học Kỹ thuật, 1989 Đinh Mạnh Tường Giáo trình Trí tuệ nhân tạo, Đại học Quốc gia Hà nội Nguyễn Thanh Thuỷ Trí tuệ nhân tạo: Các phương pháp giải vấn đề kỹ thuật xử lý tri thức Nhà xuất Giáo dục, 1996 N Nilson Artificial Intelligence Ed McGrawhill, 1971 Patrick Henry Winston Artificial Intelligence Ed Addison Wesley, 1992 Mục lục Chương Mở đầu Tổng quan Khoa học Trí ruệ nhân tạo Lịch sử phát triển Trí tuệ nhân tạo Một số vấn đề Trí tuệ nhân tạo quan tâm Các khái niêm 2 10 Chương Biểu diễn tốn khơng gian trạng thái Đặt vấn đề Mơ tả trạng thái Tốn tử chuyển trạng thái Khơng gian trạng thái tốn Biểu diễn không gian trạng thái dạng đồ thị Bài tập 12 12 12 14 17 18 21 Chương Các phương pháp tìm kiếm lời giải khơng gian trạng thái Phương pháp tìm kiếm theo chiều rộng Phương pháp tìm kiếm theo chiều sâu Phương pháp tìm kiếm sâu dần Phương pháp tìm kiếm tốt Tìm kiếm đường có giá thành cực tiểu - Thuật tốn AT Tìm kiếm cực tiểu sử dụng hàm đánh giá - Thuật tốn A* Phương pháp tìm kiếm leo đồi Phương pháp sinh thử Phương pháp thoả mãn ràng buộc 10 Cài đặt số giải thuật 11 Bài tập 23 23 30 34 36 39 43 46 49 51 53 72 Chương Phân rã tốn – Tìm kiếm lời giải đồ thị Và/Hoặc Đặt vấn đề Đồ thị Và/Hoặc Các phương pháp tìm kiếm lời giải đồ thị Và/Hoặc Cây tìm kiếm đấu thủ 90 90 92 94 104 Chương Biểu diễn toán logic phương pháp chứng minh 107 Biểu diễn vấn đề hờ logic hình thức Một số giải thuật chứng minh Ví dụ tập 108 130 138 Chương Tri thức phương pháp suy diễn Tri thức liệu Các dạng mô tả tri thức Suy diễn luật sản xuất 148 148 149 152 Tài liệu tham khảo 163 Chương MỞ ĐẦU Tổng quan khoa học Trí tuệ nhân tạo Trong Cơng Nghệ Thơng Tin, Trí Tuệ Nhân Tạo (Artificial Intelligence) ngành mới, phát triển mạnh mẽ đem lại nhiều kết to lớn Con người thường tự cho sinh vật thơng minh khả trí tuệ đóng vai trò quan trong sống Trong văn học có câu chuyện đề cao trí thơng minh người Trí Tuệ Nhân Tạo hình thành từ năm 1956 Tuy nhiên, việc nghiên cứu trí tuệ có từ lâu Trên 2000 năm trước, nhà triết học tìm hiểu cách thức nhìn nhận, học tập, nhớ suy lý Việc đời máy tính điện tử vào năm 50 kỷ 20 sinh khuynh hướng đưa lĩnh vực nghiên cứu trí tuệ vấn đề lý thuyết thực nghiệm máy 1.1 Đối tượng mục tiêu nghiên cứu trí tuệ nhân tạo Trí tuệ nhân tạo nghiên cứu cách hành xử thông minh (intelligent behaviour) với mục tiêu xây dựng lý thuyết đầy đủ thơng minh để giải thích hoạt động thông minh sinh vật áp dụng hiểu biết vào máy móc nói chung, nhằm phục vụ cho người - Về mặt kỹ thuật: Tạo máy thông minh để giải vấn đề thực tế dùng kỹ thuật AI - Khoa học: Phát triển khái niệm thuật ngữ để hiểu hành xử thông minh sinh vật 1.2 Vai trò Trí Tuệ Nhân Tạo Trí tuệ nhân tạo bao quát nhiều lĩnh vực nghiên cứu hẹp Nó nghiên cứu từ lĩnh vực tổng quát máy nhận biết, suy luận logic, đến tốn chơi cờ, chứng minh định lý Thường nhà khoa học lĩnh vực khác tìm đến với trí tuệ nhân tạo kỹ thuật hệ thống hoá tự động hoá xử lý tri thức phương pháp thuộc lĩnh vực mang tính người Trí tuệ nhân tạo nghiên cứu kỹ thuật làm cho máy tính “suy nghĩ cách thơng minh” mơ q trình suy nghĩ người đưa định, lời giải Trên sở đó, thiết kế chương trình cho máy tính để giải tốn Sự đời phát triển Trí tuệ nhân tạo tạo bước nhảy vọt chất kỹ thuật kỹ nghệ xử lý thông tin Trí tuệ nhân tạo sở cơng nghệ xử lý thông tin mới, độc lập với công nghệ xử lý thông tin truyền thống dựa văn giấy tờ Điều thể qua mặt sau: - Nhờ cơng cụ hình thức hố (các mô hinh logic ngôn ngữ, logic mờ, ), tri thức thủ tục tri thức mơ tả biểu diễn máy Do trình giải toán tiến hành hữu hiệu - Mơ hình logic ngơn ngữ mở rộng khả ứng dụng máy tính lĩnh vực đòi hỏi tri thức chun gia trình độ cao, khó như: y học, sinh học, địa lý, tự động hóa - Một số phần mềm trí tuệ nhân tạo thể tính thích nghi tính mềm dẻo lớp toán thuộc nhiều lĩnh vực khác - Khi máy tính trang bị phần mềm trí tuệ nhân tạo ghép mạng cho phép giải toán cỡ lớn phân tán 1.3 Các kỹ thuật Trí tuệ nhân tạo Có nhiều kỹ thuật nghiên cứu, phát triển ngành khoa học Trí tuệ nhân tạo Tuy vậy, kỹ thuật Trí tuệ nhân tạo thường phức tạp cài đặt cụ thể, lý kỹ thuật thiên xử lý ký hiệu tượng trưng đòi hỏi phải sử dụng tri thức chuyên môn thuộc nhiều lĩnh vực khác Do vậy, kỹ thuật Trí tuệ nhân tạo hướng tới khai thác tri thức lĩnh vực quan tâm mã hoá máy cho đạt mức độ tổng quát; dễ hiểu, dễ diễn đạt thông qua ngôn ngữ chuyên môn gần gũi với ngôn ngữ tự nhiên; dễ sửa đổi, hiệu chỉnh, dễ sử dụng, khai thác nhằm thu hẹp khả cần xét để tới lời giải cuối Các kỹ thuật Trí tuệ nhân tạo bao gồm : - Lý thuyết giải tốn suy diễn thơng minh: Lý thuyết giải tốn cho phép viết chương trình giải câu đố, chơi trò chơi thơng qua suy luận mang tính người; hệ thống chứng minh định lý Ngồi hệ thống hỏi đáp thơng minh cho phép lưu trữ xử lý khối lượng lớn thơng tin - Lý thuyết tìm kiếm may rủi: Lý thuyết bao gồm phương pháp kỹ thuật tìm kiếm với hỗ trợ thơng tin phụ để giải tốn cách có hiệu - Các ngơn ngữ Trí tuệ nhân tạo: Để xử lý tri thức người ta không sử dụng ngơn ngữ lập trình dùng cho xử lý liệu số, mà cần có ngơn ngữ khác Các ngôn ngữ chuyên dụng cho phép lưu trữ xử lý thông tin ký hiệu Một số ngôn ngữ nhiều người biết đến IPL.V,LISP, PROLOG - Lý thuyết thể tri thức hệ chuyên gia: Trí tuệ nhân tạo khoa học thể sử dụng tri thức Mạng ngữ nghĩa, lược đồ, logic vị từ, khung phương pháp thể tri thức thông dụng Việc gắn liền cách thể sử dụng tri thức sở hình thành hệ chuyên gia - Lý thuyết nhận dạng xử lý tiếng nói: Giai đoạn phát triển đầu Trí tuệ nhân tạo gắn với lý thuyết nhận dạng Các phương pháp nhận dạng gồm: nhận dạng hình học, nhận dạng dùng tâm lý học, nhận dạng theo phương pháp hàm thế, dùng máy nhận dạng ứng dụng phương pháp việc nhận dạng chữ viết, âm - Người máy: Cuối năm 70, người máy công nghiệp đạt nhiều tiến Người máy có phận cảm nhận chế hoạt động nối ghép theo điều khiển thơng minh Khoa học học Trí tuệ nhân tạo tích hợp khoa học người máy - Tâm lý học xử lý thông tin : Các kết nghiên cứu tâm lý học giúp Trí tuệ nhân tạo xây dựng chế trả lời theo hành vi, có ý thức; giúp cho việc thực suy diễn mang tính người - Ngồi ra, xử lý danh sách, kỹ thuật đệ quy, kỹ thuật quay lui xử lý cú pháp hình thức kỹ thuật tin học truyền thống có liên quan trực tiếp đến Trí tuệ nhân tạo Lịch sử phát triển Trí Tuệ Nhân Tạo Lịch sử Trí tuệ nhân tạo cho thấy ngành khoa học có nhiều kết đáng ghi nhận Theo mốc phát triển, người ta thấy Trí tuệ nhân tạo sinh từ năm 50 với kiện sau: Turing coi người khai sinh ngành Trí tuệ nhân tạo phát ơng máy tính lưu trữ chương trình liệu Tháng 8/1956 J.Mc Carthy, M Minsky, A Newell, Shannon Simon ,… đưa khái niêm “trí tuệ nhân tạo” Vào khoảng năm 1960 Đại học MIT (Massachussets Institure of Technology) ngôn ngữ LISP đời, phù hợp với nhu cầu xử lý đặc trưng trí tuệ nhân tạo - ngơn ngữ lập trình dùng cho trí tuệ nhân tạo Thuật ngữ Trí tuệ nhân tạo dùng vào năm 1961 MIT Những năm 60 giai đoạn lạc quan cao độ khả làm cho máy tính biết suy nghĩ Trong giai đoạn người ta chứng kiến máy chơi cờ chương trình chứng minh định lý tự động Cụ thể: 1961: Chương trình tính tích phân bất định 1963: Các chương trình Heuristics: Chương trình chứng minh định lý hình học khơng gian có tên “tương tự”, chương trình chơi cờ Samuel 1964: Chương trình giải phương trình đại số sơ cấp, chương trình trợ giúp ELIZA (có khả làm việc giống chuyên gia phân tich tâm lý) 1966: Chương trình phân tích tổng hợp tiếng nói 1968: Chương trình điều khiển người máy (Robot) theo đồ án “Mát – tay”, chương trình học nói Vào năm 60, giới hạn khả thiết bị, nhớ đặc biệt yếu tố thời gian thực nên có khó khăn việc tổng qt hố kết cụ thể vào chương trình mềm dẻo thơng minh Vào năm 70, máy tính với nhớ lớn tốc độ tính tốn nhanh phương pháp tiếp cận Trí tuệ nhân tạo cũ thất bại (do bùng nổ tổ hợp q trình tìm kiếm lời giải tốn đặt ra) Vào cuối năm 70 vài kết xử lý ngôn ngữ tự nhiên, biểu diễn tri thức giải vấn đề Những kết tạo điều kiện cho sản phẩm thương mại Trí tuệ nhân tạo đời Hệ chuyên gia, đem áp dụng lĩnh vực khác (Hệ chuyên gia phần mềm máy tính chứa thơng tin tri thức lĩnh vực cụ thể đó, có khả giải yêu cầu người sử dụng mức độ đó, trình độ chuyên gia người có kinh nghiệm lâu năm) Một kiện quan trọng vào năm 70 đời ngôn ngữ Prolog, tương tự LISP có sở liệu kèm - Phương tìm kiếm leo đồi (giả thiết đỉnh kề với đỉnh xáe có khoảng cách đên đỉnh lớn đỉnh có triển vọng đến đích nhất) ((0,0), (2,4))E k= (3,0) c[(0,0), (3,0)]=5 ((3,0), (2,4)) E k= (0,3) c[(3,0), (0,3)]=5 ((0,3), (2,4)) e k= (3,3) c[(0,3), (3,3)]=5 ((3,3), (2,4)) E dừng c[(3,3), (2,4)]=5 Quá trình đong nước theo phương pháp leo đồi là: (0,0)(3,0)(0,3)(3,3)(2,4) với chi phí 20 Bài tập Đại dương xem mặt phẳng toạ độ có n đảo với toạ độ (x1, y1), (x2, y2), …, (xn, yn) Một ca nô xuất phát từ đảo d1 muốn tuần tra đến đảo d2 bình xăng ca nô chứa đủ xăng để quãng đường dài không m (km) Trên đường ca nơ ghé số đảo để tiếp thêm xăng, lúc ca nô tiếp thêm xăng đầy bình chứa Hãy đường từ đảo d1 đến đảo d2 cho số lần ghé đảo trung gian để tiếp thêm xăng Hướng dẫn Ta xem hai đảo kề khoảng cách chúng không vượt m (km) Bài tốn cần tìm đường từ đảo d1 đến đảo d2 thông qua đảo kề Thuật tốn tìm kiếm theo chiều rộng cho phép tìm đường tìm đường nối hai đảo qua cạnh trung gian (tức đảo trung gian nhất) Dữ liệu vào lưu file dạng text, dòng đầu chứa số đảo n, dòng thứ hai chứa khoảng cách lớn cano liên tục, n dònh dòng chứa hai giá trị tương ứng với toạ độ đảo 75 Bài tập Một mạng lưới giao thông n thành phố (các thành phố đánh số từ đến n) cho ma trận a=(aij)n*n , đó: 0, khơng có đường trực tiếp từ i đến j aij= 1, có đường trực tiếp từ i đến j đường an toàn 2, có đường trực tiếp từ i đến j phải qua chặng đường nguy hiểm Quy ước: aii=1, i =1 n Cho trước hai thành phố i0, i1 tìm đường từ i0 đến i1 cho số chặng đường nguy hiểm phải qua Hướng dẫn: Trước hết phải xác định đồ thị biểu diễn toán Ở dễ thấy thành phố tương ứng với đỉnh đồ thị, vấn đề xác định tập cung E vào giả thiết toán Bài tập Cho bảng vuông gồm m*n ô Trên ô ghi số hay a Từ ô chuyển sang ô chứa số có chung cạnh với giả sử (h,c) Hãy tìm xem có cách di chuyển từ ô ô mép bảng hay không? Tìm cách chuyển qua b Một miền bảng tập hợp có chung cạnh có giá trị đếm xem bảng có miền miền lớn có c Cho phép thay đổi giá trị tất ô miền Hãy xác định miền cần thay đổi để số miền giảm nhiều d Hãy xác định miền cần thay đổi để thu miền lớn Hướng dẫn: Mỗi ô tương ứng với đỉnh đồ thị Hai đỉnh kề hai tương ứng chuyển sang Mỗi miền bảng tương ứng với miền liên thông đồ thị 76 Bài tập Lập chương trình tốn đong nước, với số m, n, k số dương nhập từ bàn phím thực chương trình Hướng dẫn: Sử dụng thuật tốn tìm kiếm rộng cho số lần thao tác Bài tập Một tồ lâu đài mơ tả hình chữ nhật có m*n Giữa có số tưòng ngăn cách chia lâu đài thành phòng Như vậy, phòng tương ứng với tập ô thông Tại ô (i,j), cho biết thơng tin có tường ngăn với bốn kề với khơng giá trị aij số nhị phân chữ số tương ứng (i,j) có (1) khơng có (0) tường phía Tây, Bắc, Đơng, Nam Ví dụ aij = 1001 có nghĩa (i,j) có tường phía Tây Nam, khơng có tường phía Bắc Đơng Hãy viết chương trình thực u cầu sau: a Đếm số phòng tồ lâu đài b Cho biết phòng lớn có diện tích ô c Cho biết nên phá tường ngăn hai phòng để phòng có diện tích lớn Hương dẫn: Giá trị aij nhận tương ứng với số thập phân từ đến 15 Vì ta lưu liệu file dạng text có cấu trúc sau: dòng đầu chứa hai số m,n Từ dòng thứ hai đến dòng thứ m+1, chứa hàng ma trận A = (aij) Kết đưa file dạng text có cấu trúc sau: dòng đầu chứa số phòng, dònh hai chứa diện tíach phòng lớn dong ba chứa hàng, cột, hướng tường cần phá Chẳng hạn liệu vào 11 11 10 13 15 10 12 13 13 11 10 10 12 13 77 Dữ liệu là: Dong Bài tập Một sân chơi hình chữ nhật gồm m*n đơn vị Trên (i,j) có đóng trụ bê tơng chiều cao aij Giả thiết nước không thấm qua cạnh hai trụ bê tông kề Sau trận mưa đủ lớn, tính nước đọng lại sân Hướng dẫn Chia nước thành tầng có chiều cao Tính thể tích nước đọng tầng theo thuật tốn loang tìm thành phần liên thơng Bài tập Tìm chữ số phân biệt a b cho thoã mãn hai điều kiện sau: a a2b chia hết cho b a2b - ab=110 Bài tập 10 Gảii toán đoán chữ sau DONALD CROSS + GERALD + ROADS ROBERT DANGER 78 Bài tập 11 Cho số có hai chữ số Nếu viết thêm hai chữ số bên phải số số lớn số ho 1986 đơn vị Hãy tìm số cho hai chữ số viết thêm Bài tập 12 Giải tốn đoán chữ sau: T + TH THA THAN 4321 Chương trình tham khảo Program cano_di_tuan; { Bài tập 3} uses crt; type dao = record x,y: integer; end; var n,d1,d2,so: byte; m: word; a: array[byte] of dao; b: array[byte] of boolean; tr: array[byte] of byte; procedure nhap; var f: text; s: string[20]; 79 i: byte; begin clrscr; write('ten file du lieu:'); readln(s); assign(f,s); reset(f); readln(f,n); readln(f,m); for i:=1 to n with a[i] readln(f,x,y); close(f); end; procedure indulieu; var i: byte; begin writeln('so dao:',n); writeln('gioi han khoang cach:',m); for i:=1 to n with a[i] writeln('toa dao ',i,' : (',x,',',y,')'); end; procedure khoitao; var i: byte; begin for i:=1 to n 80 b[i]:= true; end; function kc(i,j: byte):real; begin kc:= sqrt(sqr(a[i].x-a[j].x)+sqr(a[i].y-a[j].y)); end; procedure bfs(i: byte); var j,k,d,c: byte; q: array[byte] of byte; begin d:=1; c:=1; q[1]:=i; b[i]:= false; while d1) and (ph[k-1,l] = 0) then 85 begin c:=c+1; qh[c]:=k-1; qc[c]:=l; ph[k-1,l]:=so; end; if A[k,l] >=1 then A[k,l]:= A[k,l]-1 else if (l>1) and (ph[k,l-1]=0) then begin c:=c+1; qh[c]:=k; qc[c]:=l-1; ph[k,l-1]:=so; end; end; end; procedure demphong; var i,j: size; begin for i:=1 to m for j:=1 to n if ph[i,j] = then begin so:= so+1; bfs(i,j); 86 end; end; procedure smax; var i: word; j,k: size; begin dt:=0; for i:=1 to so begin S[i]:=0; for j:=1 to m for k:=1 to n if ph[j,k]=i then S[i]:= S[i]+1; if S[i] > dt then dt:= S[i]; end; end; procedure phatuong; { Chỉ cần phá phía Đơng phía Nam, phía Tây ô (i,j) tương ứng phía Đông ô (i,j-1), tươnh tự, phía Bắc (i,j) tương ứng phía Nam ô (i1,j)} var i,j: size; max,tg: word; begin max:=0; for i:=1 to m 87 for j:=1 to n begin if i< m then if ph[i,j] ph[i+1,j] then begin tg:= S[ph[i,j]] + S[ph[i+1,j]]; if tg >= max then begin hang :=i; cot:=j; huong:= 'nam'; max:= tg; end; end; if j= max then begin hang:=i; cot:=j; huong:= 'dong'; max:= tg; end; end; end; end; 88 procedure inkq; var i,j: size; f: text; begin assign(f,'out.pas'); rewrite(f); writeln(f,so); writeln(f,dt); writeln(f,hang,' ',cot,' ',huong); close(f); end; BEGIN nhap; khoitao; demphong; smax; phatuong; inkq; END 89 ... (12 3) (13 1) (12 1) (12 2) (233) (2 31) (2 21) (222) (223) (322) (232) (323) ( 212 ) ( 213 ) (3 21) ( 313 ) ( 211 ) ( 311 ) (3 31) ( 312 ) (332) (333) 20 BÀI TẬP Xây dựng không gian trạng thái toán sau: 6 .1 Cho... thị G1, ta có List (1) = [2, 3, 4] Ví dụ Bài toán đong nước m=3, n=2, k =1 (0,0) (3,0) (0,2) (1, 2) (3,2) (1, 0) (0 ,1) (2,0) (2,2) (3 ,1) Ví dụ Tháp Hà Nội với n = (11 1) (11 2) (11 3) (13 2) (13 3) (12 3)... lại 19 Nếu G đồ thị vơ hướng ma trận kề A ma trận đối xứng Ví dụ Với đồ thị vơ hướng G1 đồ thị có hướng G2 ta có ma trận kề sau: G1: 0 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0 1 0 G2: 1