TRÍ TUỆ NHÂN TẠO ARTIFICIAL INTELLIGENCE

108 415 0
TRÍ TUỆ NHÂN TẠO ARTIFICIAL INTELLIGENCE

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Giáo trình TRÍ TUỆ NHÂN TẠO ARTIFICIAL INTELLIGENCE Phạm Thọ Hoàn, Phạm Thị Anh Lê Khoa Công nghệ thông tin Trường Đại học Sư phạm Hà Nội Hà nội, 2011 MỤC LỤC Chương – Giới thiệu .5 Trí tuệ nhân tạo gì? Lịch sử Các lĩnh vực AI Nội dung môn học Chương – Bài toán phương pháp tìm kiếm lời giải 10 Bài toán thành phần toán 10 Giải thuật tổng quát tìm kiếm lời giải 14 Đánh giá giải thuật tìm kiếm 17 Các giải thuật tìm kiếm thông tin phản hồi (tìm kiếm mù) 18 Chương –Các phương pháp tìm kiếm heuristic 25 Giải thuật tìm kiếm tốt (best first search) 25 Các biến thể giải thuật best first search 28 Các giải thuật khác 31 Chương – Các giải thuật tìm kiếm lời giải cho trò chơi .37 Cây trò chơi đầy đủ 37 Giải thuật Minimax 39 Giải thuật Minimax với độ sâu hạn chế 41 Giải thuật Minimax với cắt tỉa alpha-beta 44 Chương – Các phương pháp tìm kiếm lời giải thỏa mãn ràng buộc 47 Các toán thỏa mãn ràng buộc 47 Giải thuật quay lui vét cạn 50 Các cải tiến giải thuật quay lui 51 Các giải thuật tối ưu địa phương 54 Chương – Các phương pháp lập luận logic mệnh đề 55 Lập luận Logic 55 Logic mệnh đề: cú pháp, ngữ nghĩa 55 Bài toán lập luận giải thuật lập luận logic mệnh đề 58 Câu dạng chuẩn hội luật phân giải 60 Câu dạng Horn tam đoạn luận 63 Thuật toán suy diễn dựa bảng giá trị chân lý 65 Thuật toán suy diễn dựa luật phân giải 65 Thuật toán suy diễn tiến, lùi dựa câu Horn 67 Kết chương 70 Chương – Các phương pháp lập luận logic cấp .72 Cú pháp – ngữ nghĩa 74 Lập luận logic vị từ cấp 78 Phép đồng hai vị từ, thuật giải đồng 80 Câu dạng chuẩn hội, luật phân giải tổng quát 82 Câu dạng Horn tam đoạn luận tổng quát logic cấp 84 Giải thuật suy diễn phân giải 86 Thuật toán suy diễn tiến dựa câu Horn 89 Thuật toán suy diễn lùi dựa câu Horn 91 Chương – Prolog 92 Lập trình logic, môi trường lập trình SWI Prolog 92 Ngôn ngữ Prolog bản, chương trình Prolog 95 Câu truy vấn 97 Vị từ phi logic (câu phi logic) 97 Trả lời truy vấn, quay lui, cắt, phủ định 98 Vị từ đệ qui 104 Cấu trúc liệu Prolog 105 Thuật toán suy diễn Prolog 106 Chương – Lập luận với tri thức không chắn 107 Chương 10 – Học mạng nơron nhân tạo 108 Chương – Giới thiệu Trí tuệ nhân tạo gì? Để hiểu trí tuệ nhân tạo (artificial intelligence) bắt đầu với khái niệm bay nhân tạo (flying machines), tức máy bay Đã từ lâu, loài người mong muốn làm máy mà di chuyển không trung mà không phụ thuộc vào địa hình mặt đất, hay nói cách khác máy bay Không có ngạc nhiên ý tưởng làm máy bay từ nghiên cứu cách chim bay Những máy biết bay thiết kế theo nguyên lý “vỗ cánh” chim bay quãng đường ngắn lịch sử hàng không thực sang trang kể từ anh em nhà Wright thiết kế máy bay dựa nguyên lý khí động lực học (aerodynamics) Các máy bay nay, thấy, có sức trở lớn bay quãng đường vòng quanh giới Nó không thiết phải có nguyên lý bay chim bay chim (dáng vẻ), tốt chim Quay lại câu hỏi Trí tuệ nhân tạo Trí tuệ nhân tạo trí thông minh máy người tạo Ngay từ máy tính điện tử đời, nhà khoa học máy tính hướng đến phát hiển hệ thống máy tính (gồm phần cứng phần mềm) cho có khả thông minh loài người Mặc dù nay, theo quan niệm người viết, ước mơ xa thành thực, thành tựu đạt không nhỏ: làm hệ thống (phần mềm chơi cờ vua chạy siêu máy tinh GeneBlue) thắng vua cờ giới; làm phần mềm chứng minh toán hình học; v.v Hay nói cách khác, số lĩnh vực, máy tính thực tốt tương đương người (tất nhiên tất lĩnh vực) Đó hệ thống thông minh Có nhiều cách tiếp cận để làm trí thông minh máy (hay trí tuệ nhân tạo), chẳng hạn nghiên cứu cách não người sản sinh trí thông minh loài người ta bắt chước nguyên lý đó, có cách khác sử dụng nguyên lý hoàn toàn khác với cách sản sinh trí thông minh loài người mà làm máy thông minh người; giống máy bay bay tốt chim có chế bay giống chế bay chim Như vậy, trí tuệ nhân tạo nói đến khả máy thực công việc mà người thường phải xử lý; dáng vẻ ứng xử kết thực máy tốt tương đương với người ta gọi máy thông minh hay máy có trí thông minh Hay nói cách khác, đánh giá thông minh máy dựa nguyên lý thực nhiệm vụ có giống cách người thực hay không mà dựa kết dáng vẻ ứng xử bên có giống với kết dáng vẻ ứng xử người hay không Các nhiệm vụ người thường xuyên phải thực là: giải toán (tìm kiếm, chứng minh, lập luận), học, giao tiếp, thể cảm xúc, thích nghi với môi trường xung quanh, v.v., dựa kết thực nhiệm vụ để kết luận có thông minh hay không Môn học Trí tuệ nhân tạo nhằm cung cấp phương pháp luận để làm hệ thống có khả thực nhiệm vụ đó: giải toán, học, giao tiếp, v.v cách làm có người hay không mà kết đạt dáng vẻ bên người Trong môn học này, tìm hiểu phương pháp để làm cho máy tính biết cách giải toán, biết cách lập luận, biết cách học, v.v Lịch sử Vào năm 1943, Warren McCulioch Walter Pitts bắt đầu thực nghiên cứu ba sở lý thuyết bản: triết học chức noron thần kinh; phân tích mệnh đề logic; lý thuyết dự đoán Turing Các tác giả nghiên cứu đề xuât mô hình noron nhân tạo, noron đặc trưng hai trạng thái “bật”, “tắt” phát mạng noron có khả học Thuật ngữ “Trí tuệ nhân tạo” (Artificial Intelligence - AI) thiết lập John McCarthy Hội thảo chủ đề vào mùa hè năm 1956 Đồng thời, ông đề xuất ngôn ngữ lập trình Lisp – ngôn ngữ lập trình hàm tiêu biểu, sử dụng lĩnh vực AI Sau đó, Alan Turing đưa "Turing test" phương pháp kiểm chứng hành vi thông minh Thập kỷ 60, 70 Joel Moses viết chương trình Macsyma - chương trình toán học sử dụng sở tri thức thành công Marvin Minsky Seymour Papert đưa chứng minh giới hạn mạng nơ-ron đơn giản Ngôn ngữ lập trình logic Prolog đời phát triển Alain Colmerauer Ted Shortliffe xây dựng thành công số hệ chuyên gia trợ giúp chẩn đoán y học, hệ thống sử dụng ngôn ngữ luật để biểu diễn tri thức suy diễn Vào đầu năm 1980, nghiên cứu thành công liên quan đến AI hệ chuyên gia (expert systems) – dạng chương trình AI mô tri thức kỹ phân tích nhiều chuyên gia người Vào năm 1990 đầu kỷ 21, AI đạt thành tựu to lớn nhất, AI áp dụng logic, khai phá liệu, chẩn đoán y học nhiều lĩnh vực ứng dụng khác công nghiệp Sự thành công dựa vào nhiều yếu tố: tăng khả tính toán máy tính, tập trung giải toán cụ thể, xây dựng mối quan hệ AI lĩnh vực khác giải toán tương tự, chuyển giao nhà nghiên cứu cho phương pháp toán học vững chuẩn khoa học xác Các lĩnh vực AI ¾ Lập luận, suy diễn tự động: Khái niệm lập luận (reasoning), suy diễn (reference) sử dụng phổ biến lĩnh vực AI Lập luận suy diễn logic, dùng để tiến trình rút kết luận (tri thức mới) từ giả thiết cho (được biểu diễn dạng sở tri thức) Như vậy, để thực lập luận người ta cần có phương pháp lưu trữ sở tri thức thủ tục lập luận sở tri thức ¾ Biểu diễn tri thức: Muốn máy tính lưu trữ xử lý tri thức cần có phương pháp biểu diễn tri thức Các phương pháp biểu diễn tri thức bao gồm ngôn ngữ biểu diễn kỹ thuật xử lý tri thức Một ngôn ngữ biểu diễn tri thức đánh giá “tốt” có tính biểu đạt cao tính hiệu thuật toán lập luận ngôn ngữ Tính biểu đạt ngôn ngữ thể khả biểu diễn phạm vi rộng lớn thông tin miền ứng dụng Tính hiệu thuật toán lập luận thể chi phí thời gian không gian dành cho việc lập luận Tuy nhiên, hai yếu tố dường đối nghịch nhau, tức ngôn ngữ có tính biểu đạt cao thuật toán lập luận có độ phức tạp lớn (tính hiệu thấp) ngược lại (ngôn ngữ đơn giản, có tính biểu đạt thấp thuật toán lập luận có hiệu cao) Do đó, thách thức lớn lĩnh vực AI xây dựng ngôn ngữ biểu diễn tri thức mà cân hai yếu tố này, tức ngôn ngữ có tính biểu đạt đủ tốt (tùy theo ứng dụng) lập luận hiệu ¾ Lập kế hoạch: khả suy mục đích cần đạt nhiệm vụ đưa ra, xác định dãy hành động cần thực để đạt mục đích ¾ Học máy: lĩnh vực nghiên cứu AI phát triển mạnh mẽ có nhiều ứng dụng lĩnh vực khác khai phá liệu, khám phá tri thức,… ¾ Xử lý ngôn ngữ tự nhiên: nhánh AI, tập trung vào ứng dụng ngôn ngữ người Các ứng dụng nhận dạng tiếng nói, nhận dạng chữ viết, dịch tự động, tìm kiếm thông tin,… ¾ Hệ chuyên gia: cung cấp hệ thống có khả suy luận để đưa kết luận Các hệ chuyên gia có khả xử lý lượng thông tin lớn cung cấp kết luận dựa thông tin Có nhiều hệ chuyên gia tiếng hệ chuyên gia y học MYCIN, đoán nhận cấu trúc phân tử từ công thức hóa học DENDRAL, … ¾ Robotics ¾ … Nội dung môn học Giáo trình viết với nội dung nhập môn AI cho sinh viên chuyên ngành Tin học Công nghệ thông tin Các tác giả có tham khảo số tài liệu, giáo trình trường Đại học Quốc gia Hà nội, Đại học Bách khoa Hà nội, … Nội dung gồm phần sau: Chương Giới thiệu: trình bày tổng quan AI, lịch sử đời phát triển lính vực ứng dụng AI Chương Các phương pháp tìm kiếm lời giải: trình bày kỹ thuật tìm kiếm áp dụng để giải vấn đề áp dụng rộng rãi lĩnh vực trí tuệ nhân tạo Chương Các giải thuật tìm kiếm lời giải cho trò chơi: trình bày số kỹ thuật tìm kiếm trò chơi có đối thủ Chương Các phương pháp lập luận logic mệnh đề: trình bày cú pháp, ngữ nghĩa logic mệnh đề số thuật toán lập luận logic mệnh đề Chương Các phương pháp lập luận logic vị từ cấp một: trình bày cú pháp, ngữ nghĩa logic vị từ cấp số thuật toán lập luận logic vị từ cấp Chương Prolog: Giới thiệu chung ngôn ngữ Prolog, cú pháp, ngữ nghĩa cấu trúc chương trình Prolog, số phiên Prolog SWI Prolog,… Chương Lập luận với tri thức không chắn: Giới thiệu tri thức không chắn số cách tiếp cận biểu diễn xử lý tri thức không chắn Chương Học mạng noron nhân tạo: Giới thiệu phương pháp kỹ thuật lập luận sử dụng mạng noron nhân tạo Chương – Bài toán phương pháp tìm kiếm lời giải Bài toán thành phần toán Chương giới thiệu giải thuật máy tính giải toán mà thông thường đòi hỏi trí thông minh người, toán đong nước, toán sô bàn cờ, toán tìm đường mô tả bên Để thiết kế giải thuật chung giải toán này, nên phát biểu toán theo dạng thành phần: Trạng thái toán, trạng thái đầu, trạng thái đích, phép chuyển trạng thái, lược đồ chi phí phép chuyển trạng thái (viết gọn chi phí) a Bài toán đong nước 3l 5l 9l Sử dụng ba can lít, lít lít, làm để đong lít nước Bài toán phát biểu lại theo thành phần sau: - Trạng thái: Gọi số nước có can a, b, c (a ≤ 3, b ≤ 5, c ≤ 9), ba (a, b, c) trạng thái toán - Trạng thái đầu: (0, 0, 0) // ba can rỗng - Trạng thái đích (-, -, 7) // can thứ chứa lít nước - Phép chuyển trạng thái: từ trạng thái (a,b,c) chuyển sang trạng thái (x,y,z) thông qua thao tác làm rỗng can, chuyển từ can sang can đến can nguồn can đích bị đầy - Chi phí phép chuyển trạng thái: phép chuyển trạng thái có chi phí Môi trường lập trình SWI Prolog: SWI Prolog cài đặt thủ tục suy diễn hỗ trợ câu Horn có bổ sung thêm số thành phần phi logic (các phép toán input/output, phép toán tăng sức mạnh biểu diễn tăng tính hiệu thuật toán suy diễn) Bộ suy diễn SWI Prolog sử dụng giải thuật phân giải SLD (Selective Linear Definite clause resolution), ý tưởng biểu diễn câu Horn dạng câu tuyển (clause) có literal dương, áp dụng giải thuật phân giải lùi Giải thuật phân giải SLD mô tả chi tiết phần cuối Chương SWI Prolog download miễn phí địa sau: http://www.swi-prolog.org/download/stable Sauk cài đặt chạy chương trình SW Prolog, Hệ thống hiển thị dấu nhắc yêu cầu nhập vào câu truy vấn sau: 1?- | Tất nhiên, trước nhập câu truy vấn, phải cho Hệ thống biết truy vấn sở tri thức Một sở tri thức khai báo kiện luật lĩnh vực đó, lưu file Để load file sở tri thức, ta sử dụng menu File Æ Consult Æ Chọn file Các mô tả kiện luật (các câu Horn) file sở tri thức gọi chương trình prolog Nhiệm vụ người lập trình logic viết chương trình prolog câu truy vấn Ví dụ, ta soạn thảo file chương trình prolog (cơ sở tri thức) có tên file giapha.pl (có thể sử dụng soạn thảo văn nào, sử soạn thảo SWI Prolog cung cấp cách sử dụng menu Æ File Æ New/Edit Æ Nhập tên file), nội dung file sau: cha( hoan, nam ) % cha cua hoan la nam cha( duong, hoan ) me( duong, hoa ) chame( X, Y ) :- cha( X, Y ) chame( X, Y ) :- me( X, Y ) ongba( X, Y ) :- chame( X, Z ), chame( Z, Y ) Trong môi trường SWI, load file chương trình (File Æ Consult Æ giapha.pl), sau nhập câu truy vấn từ dấu nhắc SWI Prolog Ví dụ câu truy vấn trả lời truy vấn sau: 1?-chame(duong,hoa) true 2?-ongba(X,nam) X=duong Trong phần tiếp theo, tìm hiểu câu khai báo file chương trình loại câu truy vấn Ngôn ngữ Prolog bản, chương trình Prolog Qui ước đặt tên biến tên hằng: Prolog ngôn ngữ cho máy tính, cần qui ước quan trọng việc đặt tên biến tên hằng, theo đó, tên biến phải bắt đầu ký tự in hoa (chẳng hạn X, Sinhvien, v.v.), tên phải bắt đầu ký tự in thường (ví dụ: an, binh, lasinhvien, v.v.) Vì Prolog ngôn ngữ câu Horn logic vị từ cấp nên biến xuất hạng thức tham số vị từ Chương trình Prolog, câu Horn dương: Chương trình prolog dãy (hội) câu Horn dương (câu tuyển có literal dương) Các câu có dạng Horn dương prolog có dạng tổng quát sau: head:- p1, p2, …, pn {nghĩa là: if (p1 and p2 and … and pn) then head} Ở head, P1, p2, …, pn vị từ (có thể có tham số); vị từ head gọi phần đầu luật, P1, p2, …, pn gọi phần thân (phần điều kiện) luật Nếu n>0 câu Horn dương câu dạng luật; n=0 câu phần điều kiện, ta có câu mô tả kiện viết đơn giản là: head Chú ý: câu chương trình prolog kết thúc dấu chấm (“.”) Tất câu câu đóng, có ký hiệu biến xuất câu ta ngầm hiểu biến biến buộc, đặt lượng từ ∀ , trừ biến xuất phần điều kiện câu biến hiểu đặt lượng từ ∃ (thực chất chuyển dạng câu tuyển ∃ chuyển sang ∀ chuyển vế lấy phủ định) Vị từ, hạng thức: Như giới thiệu trên, chương trình prolog bao gồm hai loại câu: câu kiện (câu đơn) câu luật (câu phức) Các câu xây dựng từ vị từ (head, P1, p2, …, pn), vị từ có cú pháp sau: tên _vi_tu(hang_thuc1, hang_thuc2, …, hang_thucn) tên_vị_từ tuân theo qui tắc đặt tên hằng; hạng_thứci là: Giá trị: o tên ký hiệu, ví dụ an, x, mauxanh, v.v o xâu, ví dụ ‘Xin chao’ o số nguyên số thực, ví dụ 5, 3.1416, v.v tên biến, ví dụ X, Sinhvien, v.v (chú ý: tên biến bắt đầu ký tự viết hoa; biến kiểu biến, nhận giá trị nào; tất biến biến địa phương câu xuất hiện) cấu trúc (nhóm hạng thức lại thành cấu trúc), ví dụ như: mau[red, green, blue], [march, 17, 2011], v.v Hai trường hợp đặc biệt cấu trúc list string tìm hiểu sâu phần sau Chương Ví dụ chương trình Prolog: chương trình lưu file giapha.pl ví dụ trước bao gồm ba câu đầu câu kiện câu cuối câu luật; có ký hiệu vị từ là: cha, me, chame, ongba; có tên hằng: nam, hoan, hoa, duong; có biến: X,Y,Z Câu truy vấn Câu truy vấn tổng quát có dạng tổng quát sau: p1, p2, …, pn Chúng ta chia câu truy vấn thành hai loại: Câu truy vấn không chứa biến: câu truy vấn có nghĩa “biểu thức logic (p1 and p2 and …and pn) có (có giá trị true) sở tri thức (chương trình prolog) cho hay không?” Chẳng hạn, câu truy vấn chame(duong, hoa) ví dụ Phần hỏi: “có phải hoa chame duong không?” Trong trường hợp này, SWI Prolog trả lời true false Câu truy vấn có chứa tập biến (ví dụ X,Y, …): khác với câu sở tri thức (chương trình prolog) mà mặc định hiểu biến với lượng từ ∀ , biến câu truy vấn lại ngầm định với lượng từ ∃ , câu truy vấn có nghĩa là: “có ∃ X, Y, … cho biểu thức logic (p1 and p2 and …and pn) có (có giá trị true) không?” Chẳng hạn, câu truy vấn ongba(X,nam) ví dụ Phần hỏi: “có tồn X mà có nam ongba X không?” Trong trường hợp SWI Prolog tìm giá trị X cho ongba(X,nam) có giá trị true Nếu muốn SWI Prolog tìm tất giá trị X thỏa mãn ongba(X,nam), sau trả lời Hệ thống, ấn phím “;” thay ấn phím “enter” Chú ý: câu truy vấn q Prolog có dạng tương đương ¬q câu dạng Horn âm ∀ x,y,… (¬p1 ∨ ¬p2 ∨ … ∨ ¬pn) (câu tuyển literal dương nào) Vị từ phi logic (câu phi logic) Chương trình dãy (thứ tự quan trọng!) câu kiện câu luật có cú pháp định nghĩa Ngoài câu chuẩn Horn logic vị từ cấp (các câu khai báo tri thức), Prolog có vị từ phi logic để điều khiển việc thực suy diễn để vào/ra liệu ngôn ngữ thủ tục Ví dụ câu phi logic (mặc dù câu phi logic, Prolog gán giá trị cho chúng): write(hang_thuc) % lệnh in hang_thuc hình nl % đưa trỏ hình xuống dòng read(ten_bien) X is bieu-thuc % nhập giá trị từ bàn phím vào biến % gán giá trị bieu-thuc cho biến X Ví dụ, chương trình Hello.pl có nội dung sau: xinchao:-write('What is your name?'), nl, read(X), write('Hello '), write(X) Sau load chương trình Hello.pl chạy chương trình (câu truy vấn) kết sau: ?- xinchao What is your name? |: hoan % ý: kết thúc nhập liệu dấu chấm (“.”) Hello hoan true Trong phần sau Chương này, gặp thêm số câu phi logic khác câu lệnh cắt (!) Trả lời truy vấn, quay lui, cắt, phủ định Trả lời truy vấn – quay lui: Để tìm hiểu chương trình Prolog đuợc thực thi (trình biên dịch Prolog trả lời câu truy vấn nào), tìm hiểu ví dụ sau: Bài toán viết chương trình Prolog tìm số lớn hai số Chúng ta soạn thảo file chương trình timsolonnhat.pl với vị từ bigger(N,M) để in số lớn sau: bigger(N,M):- N < M, write(‘The bigger number is ‘), write(M) bigger(N,M):- N > M, write(‘The bigger number is ‘), write(N) bigger(N,M):- N =:= M, write(‘Numbers are the same‘) Sau load chương trình, nhập câu truy vấn sau (câu trả lời truy vấn xuất sau truy vấn): ?- bigger(3,5) The bigger is true.b ?- bigger(8,7) The bigger is true ?- bigger(10,10) Numbers are the same true Để trả lời câu truy vấn trên, SWI Prolog thực đồng câu truy vấn với vị từ phần đầu luật theo thứ tự từ xuống Khi gặp luật đồng được, SWI Prolog thực đồng câu truy vấn với phần đầu luật thực lệnh phần thân luật Nếu tất biến luật (sau đồng nhất) xác định giá trị SWI Prolog trả cho người dùng kết true đợi tương tác với người dùng Khi người dung muốn tìm kết tiếp theo, nhấn phím “;”, SWI Prolog chuyển sang tìm, đồng thực luật Khi câu truy vấn đồng với luật mà có biến chưa xác định giá trị, SWI Prolog hình thành câu truy vấn vị từ chứa biến; sau thực đệ qui việc tìm, đồng thực luật sở tri thức theo thứ tự từ câu truy vấn trung gian (đích trung gian) Việc thực suy diễn lùi gọi quay lui Một điểm lưu ý nữa, sau tìm luật đồng với câu truy vấn, SWI Prolog thực phần thân luật theo thứ tự từ trái qua phải Vì phần thân luật có dạng hội vị từ, nên thực hiện, gặp vị từ mà có giá trị chân lý false SWI Prolog không thực vị từ sau Vị từ Cắt (!): Khi thực chương trình, SWI Prolog thực từ xuống, từ trái qua phải, chứng minh câu truy vấn quay lui (lùi) Khi tìm lời giải câu truy vấn, SWI Prolog thực quay lui vét cạn để tìm lời giải Trong trường hợp cần tìm lời giải, trường hợp biết chắn lời giải thực quay lui, ta đặt vị từ cắt (!) sau danh sách vị từ mong muốn Khi có vị từ cắt xuất câu SWI Prolog không thực quay lui vị từ đặt trước Để hiểu chế ngắt quay lui vị từ cắt (!), ta lấy ví dụ sau: a(X, Y) :- b(X), c(Y) a(4,4) a(X,Y) b(1) b(X) b(2) b(3) {X|1 c(1) c(1) c(2) b(1) c(Y) b(2) b(3) c(3) Khi thực truy vấn: ?- a(X,Y) a(X, Y) :- b(X), c(Y) a(4,4) a(4,4) c(2) c(3) kết sau: ?- a(X,Y) X = 1, Y=1; X = 1, Y=2; X = 1, Y=3; X = 2, Y=1; X = 2, Y=2; X = 2, Y=3; X = 3, Y=1; X = 3, Y=2; X = 3, Y = Bây thay câu lệnh chương trình a(X, Y) :- b(X), c(Y) câu lệnh (chèn vị từ ngắt ! vào vị trí khác nhau): a(X, Y) :- !, b(X), c(Y) % không quay lui vị từ a a(X, Y) :- b(X),!, c(Y) % không quay lui vị từ a,b a(X, Y) :- b(X), c(Y),! % không quay lui vị từ a,b,c Và thực lại câu truy vấn ta kết khác hình vẽ sau a(X,Y) b(X) {X|1 c(Y) c(1) b(1) b(2) a(4,4) c(2) c(3) b(3) a(X, Y) :- !, b(X), c(Y) a(4,4) a(X,Y) b(X) {X|1 b(1) c(Y) c(1) b(2) b(3) a(X, Y) :- b(X),!, c(Y) a(4,4) a(4,4) c(2) c(3) a(X,Y) b(X) {X|1 b(1) c(Y) c(1) b(2) a(4,4) c(2) c(3) b(3) a(X, Y) :- b(X), c(Y), ! a(4,4) Vị từ phủ định: Trong SWI Prolog, vị từ not(X) có giá trị true SWI không chứng minh X Hay nói cách khác, kiện mà SWI không chứng minh true SWI cho kiện false (giả thuyết đóng) Ví dụ, cho chương trình logic sau: lacontrai( binh) % binh la trai lacontrai( an) khonglacontrai( X) :- not (lacontrai(X)) Nếu ta thực câu truy vấn: ? - khonglacontrai(X) false SWI không tìm đối tượng làm cho vị từ khonglacontrai(X) Nhưng thực truy vấn sau: ? - khonglacontrai(thanh) true kết cho true SWI không chứng minh lacontrai( thanh) Vị từ not có tác dụng số trường hợp, chẳng hạn toán kiểm tra xem số có số nguyên tố không, tức số mà không chia hết cho số nhỏ (trừ số nó) Bài toán độc giả xem phần cuối chương Vị từ đệ qui Vị từ đệ quy vị từ xuất phần đầu phần than luật, hay nói cách khác, vị từ gọi Định nghĩa vị từ đệ qui có phần, phần kiện phần đệ qui Ví dụ, chương trình sau định nghĩa vị từ fibonaci(N,X) để tính phần từ thứ N dãy fibonaci, kết đưa vào biến X (dãy Fibonaci dãy có phần tử thứ 0, phần tử thứ hai 1, phần tử thứ ba trở tổng hai phần tử liền trước) fibonaci( 1,0) % phần tử fibonaci( 2,1) % phần tử thứ fibonaci( N,F) :- N>2, N1 is N-1, N2 is N-2, fibonaci(N1,F1), fibonaci(N2,F2), F is F1+F2 Truy vấn chương trình logic với tham số N khác ta kết lưu biến F phần tử thứ N dãy Ví dụ: ? - fibonaci(3,F) F=1 ? - fibonaci(4,F) F=2 ? - fibonaci(10,F) F=34 Chú ý: Vị từ fibonaci(N,F) để định nghĩa phần tử thứ N dãy Fibonaci kết lưu F, mà SWI thực câu truy vấn mà tham số thứ số, ví dụ câu truy vấn fibonaci(10,F) để tìm phần tử thứ 10 dãy; câu truy vấn fibonaci(10,34) để kiểm tra xem phần tử thứ 10 dãy có 34 không; câu truy vấn fibonaci(N,34) không thực SWI! Cấu trúc liệu Prolog Danh sách: Danh sách cấu trúc liệu tạo dựng sẵn SWI Prolog có sẵn phép toán để lấy phần tử đầu phần đuôi danh sách Danh sách nhóm hạng thức với dấu “[“ “]” phân cách dấu “,” Ví dụ [a,b,c,d] danh sách gồm phần tử Thao tác để thao tác với danh sách tách phần tử đầu danh sách Ví dụ: ? – [X|Y]=[a,b,c,d] X=a, Y=[b,c,d] ? – [X,Y|Z]=[a,b,c,d] X=a, Y=b, Z=[c,d] ? – [X,[Y|Z]]=[a,b,c,d] X=a, Y=b, Z=[c,d] Ngoài thao tác trên, SWI xây dựng số thao tác khác, ví dụ: ? – member(b,[a,b,c,d]) không? true % b có phải phần tử danh sách [a,b,c,d] ? – append([a,b,c],[d,e,f],X) % nối hai danh sách X = [a, b, c, d, e, f] Để hiểu rõ thêm danh sách, xét ví dụ sau: viết chương trình đảo ngược danh sách my_reverse([],[]) my_reverse([H|T],L):- my_reverse(T,R),append(R,[H],L) Câu truy vấn là: ? – my_reverse([a,b,c,d],Y) Y=[d,c,b,a] Ví dụ xếp danh sách theo thứ tự tăng dần Để giải toán này, xây dựng vị từ có hai tham số sapxep(X,Y), với X danh sách cần xếp, Y kết danh sách xếp Trong ví dụ đây, ta sử dụng giải thuật xếp theo kiểu chèn, sử dụng biến trung gian sapxep (X,Y):-i_sort(X,[],Y) i_sort([],Y,Y) i_sort([H|T],Z,Y):-insert(H,Z,Y1),i_sort(T,Y1,Y) insert(X,[Y|T],[Y|NT]):-X>Y,insert(X,T,NT) insert(X,[Y|T],[X,Y|T]):-X=[...]... toán tìm đường đi trong lý thuyết đồ thị Tuy nhiên, trong rất nhiều trường hợp, không gian trạng thái của bài toán là rất lớn, việc duyệt toàn bộ không gian trạng thái là không thể Trong môn học Trí tuệ nhân tạo này, chúng ta sẽ tìm hiểu các phương pháp tìm kiếm lời giải trong các bài toán có không gian trạng thái lớn b Giải thuật tổng quát tìm kiếm lời giải của bài toán Với các bài toán có 5 thành... xếp 8 quân cờ trên bàn cờ 3x3), hàm định hướng h định nghĩa như sau: h(n) = tổng khoảng cách Manhatan các vị trí của từng quân cờ trên bàn cờ n với vị trí của nó trên bàn cờ đích Chẳng hạn, nếu n là trạng thái đầu như trong hình của mục 1.b, h(n) có thể xác định như sau: Quân cờ Vị trí trên n Vị trí trên bàn Khoảng cách (số lần dịch cờ đích chuyển khi bàn cờ không có quân cờ khác) Trạng thái n là trạng... sau minh họa việc mở rộng cây tìm kiếm khi sử dụng giải thuật trên: Cây có gốc là trạng thái đầu với giá trị h(đầu) = 8 Từ trạng thái gốc có hai phép chuyển: chuyển ô trống đổi vị trí cho ô số 7 (hàm h giảm đi 1) và đổi vị trí ô trống cho ô số 8 (hàm h tăng lên 1) Lúc này danh sách sắp xếp có 2 nút lá tương ứng với hai trạng thái có hàm h=7 và h=9 Trong 2 nút lá này, giải thuật sẽ chọn nút có giá trị... Độ phức tạp thời gian và độ phức tạp không gian của giải thuật tìm kiếm lời giải của bài toán có thể đánh giá dựa trên kích thước đầu vào của giải thuật Các tham số kích thước đầu vào có thể là: - b – nhân tố nhánh của cây tìm kiếm: số nhánh tối đa của một nút, hay là số phép chuyển trạng thái tối đa của một trạng thái tổng quát - d – độ sâu của lời giải có chi phí nhỏ nhất - m – độ sâu tối đa của cây... thuật theo chiều rộng Cây tìm kiếm của giải thuật theo chiều rộng Đánh giá giải thuật tìm kiếm theo chiều rộng: 9 Tính đầy đủ: giải thuật sẽ cho lời giải của bài toán nếu bài toán tồn tại lời giải và nhân tố nhánh b là hữu hạn 9 Độ phức tạp thời gian: 1+b+b2+…+bd (số vòng lặp khi gặp trạng thái đích) = O(bd) 9 Độ phức tạp không gian: số lượng ô nhớ tối đa sử dụng trong giải thuật (chủ yếu là biến Queue,... đến một thành phố mới, nó có bộ cảm biến đọc được biển chỉ đường đến các thành lân cận, trên biển chỉ đường có khoảng cách Bài toán tìm đường có thể phát biểu theo 5 thành phần như sau: - Trạng thái: vị trí của ôtô robot (tên thành phố) - Trạng thái đầu: Thành phố Arad - Trạng thái đích: Thành phố Bucharest - Phép chuyển trạng thái: từ thành phố sang thành phố lân cận - Chi phí: khoảng cách giữa 2 thành... trên Bài toán di chuyển 8 số trên bàn cờ có thể phát biểu dưới dạng 5 thành phần như sau: - Biểu diễn trạng thái: mảng 2 chiều kích thước 3x3, phần tử của mảng lưu số hiệu quân cờ (từ 0 đến 9, 0 là vị trí trống) Cũng có thể biểu diễn trạng thái bàn cờ bằng mảng một chiều gồm 9 phần tử: ba phần tử đầu tiên biểu diễn các ô thuộc dòng đầu tiên của bàn cờ, ba phần tử tiếp biểu diễn các quân cờ thuộc dòng... đánh giá Mở rộng trạng thái hiện tại và đánh giá các trạng thái con của nó bằng hàm đánh giá heuristic Tại mỗi bước, nút lá “tốt nhất” sẽ được chọn để đi tiếp Procedure Hill-Climbing_search; Begin 1 Khởi tạo ngăn xếp S chỉ chứa trạng thái đầu; 2 Loop do 2.1 If S rỗng then {thông báo thất bại; stop}; 2.2 Lấy trạng thái u ở đầu ngăn xếp S; 2.3 If u là trạng thái kết thúc then {thông báo thành công; stop};... tức là cắt bỏ những nhánh xuất phát từ w, và quay lên cha của w để tiếp tục đi xuống trạng thái tốt nhất trong số những trạng thái còn lại chưa được phát triển Procedure Branch-and-Bound; Begin 1 Khởi tạo ngăn xếp S chỉ chứa trạng thái đầu; Gán giá trị ban đầu cho cost; /*cost là giá trị đường đi tối ưu tạm thời*/ 2 Loop do 2.1 If S rỗng then {thông báo thất bại; stop}; 2.2 Lấy trạng thái u ở đầu ngăn

Ngày đăng: 02/04/2016, 05:30

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan