1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo trình: Trí tuệ nhân tạo Phạm Thọ Hoàn ĐH SPHN

108 98 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 108
Dung lượng 1,1 MB

Nội dung

Trong khoa học máy tính, trí tuệ nhân tạo hay AI (tiếng Anh: Artificial Intelligence), đôi khi được gọi là trí thông minh nhân tạo, là trí thông minh được thể hiện bằng máy móc, trái ngược với trí thông minh tự nhiên được con người thể hiện. Thông thường, thuật ngữ "trí tuệ nhân tạo" thường được sử dụng để mô tả các máy móc (hoặc máy tính) bắt chước các chức năng "nhận thức" mà con người liên kết với tâm trí con người, như "học tập" và "giải quyết vấn đề".[1] Khi máy móc ngày càng tăng khả năng, các nhiệm vụ được coi là cần "trí thông minh" thường bị loại bỏ khỏi định nghĩa về AI, một hiện tượng được gọi là hiệu ứng AI.[2] Một câu châm ngôn trong Định lý của Tesler nói rằng "AI là bất cứ điều gì chưa được thực hiện."[3] Ví dụ, nhận dạng ký tự quang học thường bị loại trừ khỏi những thứ được coi là AI, đã trở thành một công nghệ thông thường.[4] khả năng máy hiện đại thường được phân loại như AI bao gồm thành công hiểu lời nói của con người,[1] cạnh tranh ở mức cao nhất trong trò chơi chiến lược (chẳng hạn như cờ vua và Go),[5] xe hoạt động độc lập, định tuyến thông minh trong mạng phân phối nội dung, và mô phỏng quân sự. Trí tuệ nhân tạo có thể được phân thành ba loại hệ thống khác nhau: trí tuệ nhân tạo phân tích, lấy cảm hứng từ con người và nhân tạo.[6] AI phân tích chỉ có các đặc điểm phù hợp với trí tuệ nhận thức; tạo ra một đại diện nhận thức về thế giới và sử dụng học tập dựa trên kinh nghiệm trong quá khứ để thông báo các quyết định trong tương lai. AI lấy cảm hứng từ con người có các yếu tố từ trí tuệ nhận thức và cảm xúc; hiểu cảm xúc của con người, ngoài các yếu tố nhận thức và xem xét chúng trong việc ra quyết định. AI nhân cách hóa cho thấy các đặc điểm của tất cả các loại năng lực (nghĩa là trí tuệ nhận thức, cảm xúc và xã hội), có khả năng tự ý thức và tự nhận thức được trong các tương tác. Trí tuệ nhân tạo được thành lập như một môn học thuật vào năm 1956, và trong những năm sau đó đã trải qua nhiều làn sóng lạc quan,[7][8] sau đó là sự thất vọng và mất kinh phí (được gọi là " mùa đông AI "),[9][10] tiếp theo là cách tiếp cận mới, thành công và tài trợ mới.[8][11] Trong phần lớn lịch sử của mình, nghiên cứu AI đã được chia thành các trường con thường không liên lạc được với nhau.[12] Các trường con này dựa trên các cân nhắc kỹ thuật, chẳng hạn như các mục tiêu cụ thể (ví dụ: " robot học " hoặc "học máy"),[13] việc sử dụng các công cụ cụ thể ("logic" hoặc mạng lưới thần kinh nhân tạo) hoặc sự khác biệt triết học sâu sắc.[14][15][16] Các ngành con cũng được dựa trên các yếu tố xã hội (các tổ chức cụ thể hoặc công việc của các nhà nghiên cứu cụ thể).[12] Lĩnh vực này được thành lập dựa trên tuyên bố rằng trí thông minh của con người "có thể được mô tả chính xác đến mức một cỗ máy có thể được chế tạo để mô phỏng nó".[17] Điều này làm dấy lên những tranh luận triết học về bản chất của tâm trí và đạo đức khi tạo ra những sinh vật nhân tạo có trí thông minh giống con người, đó là những vấn đề đã được thần thoại, viễn tưởng và triết học từ thời cổ đại đề cập tới.[18] Một số người cũng coi AI là mối nguy hiểm cho nhân loại nếu tiến triển của nó không suy giảm.[19] Những người khác tin rằng AI, không giống như các cuộc cách mạng công nghệ trước đây, sẽ tạo ra nguy cơ thất nghiệp hàng loạt.[20] Trong thế kỷ 21, các kỹ thuật AI đã trải qua sự hồi sinh sau những tiến bộ đồng thời về sức mạnh máy tính, dữ liệu lớn và hiểu biết lý thuyết; và kỹ thuật AI đã trở thành một phần thiết yếu của ngành công nghệ, giúp giải quyết nhiều vấn đề thách thức trong học máy, công nghệ phần mềm và nghiên cứu vận hành.[11]

Giáo trình TRÍ TUỆ NHÂN TẠO ARTIFICIAL INTELLIGENCE Phạm Thọ Hồ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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 khơng có 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 lồ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 tố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 lồi người CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 lồ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 ngồi 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 tố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 tố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 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 tố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 đề xt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 tố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 CuuDuongThanCong.com https://fb.com/tailieudientucntt ¾ 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 tố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 tố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 tố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 tố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ệ chun 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ệ chun 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt ¾ … 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chương – Bài toán phương pháp tìm kiếm lời giải Bài tốn thành phần toán Chương giới thiệu giải thuật máy tính giải tốn mà thơng thường địi hỏi trí thơng minh người, tốn đong nước, tốn sơ bàn cờ, tố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 tốn đong nước 3l 9l 5l Sử dụng ba can lít, lít lít, làm để đong lít nước Bài tố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í CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 tố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 ) CuuDuongThanCong.com https://fb.com/tailieudientucntt 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; cịn n=0 câu khơng có phần điều kiện, ta có câu mơ tả kiện viết đơn giản là: CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 khơng có 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 khơng có 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ịn 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ụ CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 tố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: CuuDuongThanCong.com https://fb.com/tailieudientucntt 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ừ cịn chứa biến; sau thực đệ qui việc tìm, đồng thực luật CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 khơng có 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) a(4,4) c(2) b(3) c(3) Khi thực truy vấn: ?- a(X,Y) CuuDuongThanCong.com a(X, Y) :- b(X), c(Y) a(4,4) https://fb.com/tailieudientucntt 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): CuuDuongThanCong.com https://fb.com/tailieudientucntt 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) a(4,4) c(2) c(3) b(3) a(X, Y) :- b(X),!, c(Y) a(4,4) CuuDuongThanCong.com https://fb.com/tailieudientucntt 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) CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 tố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 tố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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 tốn để lấy phần tử đầu phần 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? % b có phải phần tử danh sách [a,b,c,d] true CuuDuongThanCong.com https://fb.com/tailieudientucntt ? – 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 tố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=

Ngày đăng: 24/08/2020, 00:30

TỪ KHÓA LIÊN QUAN

w