1. Trang chủ
  2. » Giáo Dục - Đào Tạo

AI bai thuc hanh 3 tnmthu 2042017 kho tài liệu bách khoa

10 134 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 715,21 KB

Nội dung

CT332: TRÍ TUỆ NHÂN TẠO BÀI THỰC HÀNH SỐ HƯỚNG DẪN LẬP TRÌNH PROLOG I GIỚI THIỆU PROLOG Cài đặt Phiên Prolog sử dụng tài liệu SWI-Prolog phiên 7.4 Jan Wielemaker Chương trình tải từ http://www.swiprolog.org/#download Chọn phiên phù hợp với hệ thống thực cài đặt Giao diện SWI Prolog hình Hình Giao diện SWIProlog Có cách để thực thi chương trình Prolog:   Lập trình trực tiếp: o Gõ [user] từ dấu nhắc Prolog ấn phím ENTER o Lần lượt gõ mệnh đề o Sau kết thúc ấn tổ hợp phím Ctrl + D Soạn thảo trình soạn thảo khác & nạp chương trình: o Sử dụng chương trình soạn thảo văn bất kỳ, viết lưu chương trình Có thể sử dụng trình soạn thảo Notepad++ (http://notepad-plus- plus.org/) o Nạp chương trình lên Prolog  Từ dấu nhắc, gõ consult('ten_file')  Hoặc chọn menu File/Consult… Chương trình Prolog Từ dấu nhắc, gõ write(‘Hello world!’) Chương trình in chuỗi Hello world!Lên hình Hình In chuỗi Hello world! hình Giờ ta thử cách khác để lập trình Mở Nodepad++ trình soạn văn mà bạn có, soạn chương trình có nội dung sau: Hình Soạn chương trình Prolog Lưu chương trình vào file D:\hello.pl Để nạp chương trình lên Prolog từ dấu gõ: consulte(‘D:\\hello.pl’) consulte(‘D:/hello.pl’) Để thực thi ta viết chương trình, gõ: hello (có dấu chấm cuối chữ hello) Kết chương trình hình Hình Kết chương trình ‘hello.pl’ Truy vấn Prolog Soạn thảo chương trình có nội dung hình nạp chương trình lên Prolog Hình Chương trình ‘familly.pl’ Bây giờ, ta truy vấn Prolog theo kiểu đúng/sai để kiểm tra xem peter có phải cha mary khơng; peter có phải cha daisy khơng, mary có phải mẹ daisy không Từ dấu nhắc gõ (ấn phím ENTER sau câu truy vấn):    father(peter, mary) father(peter, daisy) mother(mary, daisy) Ngoài kiểu truy vấn đúng/sai, ta truy vấn Prolog theo kiểu Ai ? Cái ? Ví dụ: ta “hỏi” Prolog xem peter cha ?; mẹ john ? phức tạp hơn: cha ? Lần lượt gõ câu truy vấn sau:   father(peter, X) mother(X, john)  father(X, Y) Với câu hỏi có nhiều câu trả lời, để xem câu trả lời kế tiếp, gõ dấu chấm phẩy (;) sau câu trả lời Truy vấn “ai ?/cái ?” với Prolog Tổng kết:    Tải SWI-Prolog cài đặt theo hướng dẫn Có cách để lập trình Prolog o Trực tiếp o Gián tiếp trình soạn thảo khác sau nạp chương trình lệnh consult Có kiểu truy vấn Prolog o Truy vấn đúng/sai, kết trả sai o Truy vấn ai? gì?, kết trả giá trị Nguyên lý lập trình Prolog Vị từ (predicate) - Tư lập trình định nghĩa vấn đề Prolog Đối với Prolog, chương trình hiểu tri thức người lập trình cung cấp cho hệ thống Prolog Nhờ vào kiến thức cung cấp, hệ thống trả lời câu hỏi đặt ra, câu trả lời đạt nhờ chế suy luận hệ thống dựa kiến thức cung cấp ban đầu Đơn vị kiến thức mà người lập trình cung cấp cho Prolog gọi vị từ (predicate) Vị từ dùng để biểu diễn khái niệm mà người lập trình muốn hệ thống dùng để suy luận để đạt kiến thức khác mà mong muốn Về mặt kỹ thuật, vị từ xem hàm, giá trị trả giá trị luận lý - sai Và giá trị trả sử dụng để suy luận, Prolog khơng có định nghĩa chồng cho hàm ngôn ngữ thủ tục khác (overriding function: chế cho phép nhiều hàm có tên khác tham số), điều làm người quen với việc lập trình thủ tục gặp khó khăn bước đầu lập trình với Prolog Cơng việc lập trình Prolog định nghĩa vị từ - khái niệm mà cần cung cấp cho chương trình Xét ví dụ sau: VD1: Biểu diễn tri thức Mọi người phải chết Socrates người Yêu cầu: Chúng ta muốn hệ thống phải có khả suy luận trả lời vấn đề liên quan đến khái niệm trên: người, không người, phải chết, chết Ở có suy luận thông minh đặc trưng cho sức mạnh Prolog: hệ thống tự động suy luận Socrates phải chết (điều không cung cấp ban đầu) Để biểu diễn vấn đề ngôn ngữ Prolog, cần phải xác định cần phải biểu diễn khái niệm Trong vấn đề có hai khái niệm cần biểu diễn: thực thể người (hoặc khơng), thực thể chết Như biểu diễn vấn đề theo kiểu ngôn ngữ Prolog có dạng sau: nguoi(X) với X biến hay Chúng ta trở lại vấn đề sau Như vừa định nghĩa khái niệm: đối tượng X người, đối tượng khác khơng phải người Nếu hiểu định nghĩa hàm ngôn ngữ thủ tục, xem định nghĩa hàm mang tên nguoi, hàm có tham số X (kiểu bất kỳ, GNU Prolog không cần khai báo kiểu biến), kết hàm này, không cần phải khai báo thuộc kiểu Đối với Prolog, kết vị từ sai, nên kiểu bool Nhiệm vụ Prolog phải trả lời với giá trị X nhập vào nào, hàm cho kết sai, tức đối tượng X có phải người hay khơng Prolog làm điều như cung cấp cho hệ thống chế suy luận đắn, tức giải thích cho Prolog hiểu người? Tương tự vậy, định nghĩa vấn đề thực thể phải chết vị từ sau: chet(X) Như với toán nêu, đặt hai vị từ: nguoi(X) chet(X) VD2: Tính giá trị giai thừa số nguyên Bài tốn khơng cho biết kiện ban đầu Chúng ta phải cung cấp kiện ban đầu, để Prolog dựa vào để suy luận, để từ hệ thống giải yêu cầu Việc cung cấp kiện ban đầu cho hệ thống quan trọng định vấn đề giải yêu cầu Một cách giải lựa chọn cho hệ thống biết giá trị giai thừa toàn số nguyên: giai thừa 1, giai thừa 1, giai thừa 2, giai thừa 6, giai thừa 24… Dễ dàng nhận thấy cách không khả thi, thực tế, người không tiếp thu tri thức theo cách Chúng ta cung cấp kiện cho hệ thống theo cách khác: giai thừa số tích số từ đến số Như với cách giải này, có hai khái niệm cần phải cung cấp: giai thừa số gì, tích số nguyên tính từ đến số gì? Cách đặt vấn đề giải tốn, nhiên đặt vấn đề theo cách khác đơn giản, hợp với tinh thần Prolog hơn: giai thừa 1, giai thừa số lớn giai thừa số liền trước nhân với Với cách đặt vấn đề này, có khái niệm phải biểu diễn: giai thừa số gì? (thật số khái niệm phải đưa ra: số đứng trước số gì, nhân hai số nghĩa gì, nhiên Prolog cung cấp toán tử để giải vấn đề Hiểu theo nghĩa đó, vấn đề tiên đề, khơng cần phải giải thích với hệ thống.) Nếu quen với ngơn ngữ lập trình thủ tục, có khuynh hướng khai báo vị từ diễn tả khái niệm giai thừa sau: giaithua(X) Ở cách đặt vấn đề khơng thích hợp với ngơn ngữ Prolog,   Một vị từ trả lời sai, mong muốn kết trả theo cách khai báo số.\ Ngôn ngữ Prolog định nghĩa chồng hàm, nghĩa kết hàm (vị từ) dùng tham số cho vị từ khác, định dùng kết hàm để tính tiếp giá trị cho hàm khác.(Chúng ta định dùng hàm để tính giai thừa n – 1, nhân tiếp cho n để kết cuối cùng) Vị từ thích hợp khai báo sau: giaithua(X, Y) Điều này, hiểu theo ngôn ngữ thủ tục, nghĩa khai báo hàm có tham số hai số nguyên, kết trả sai Điều muốn diễn tả có nghĩa là: giai thừa số nguyên (integer) số nguyên khác Nếu giải thích cho Prolog hiểu giai thừa số nguyên tính nào, hệ thống có khả trả lời cho câu hỏi thuận (giai thừa số nguyên gì), câu hỏi nghịch (số nguyên có giai thừa số nguyên này), nghi vấn (giai thừa số ngun X có phải số ngun Y hay khơng) Tuy nhiên mục đích cung cấp kiện để hệ thống trả lời câu hỏi thuận (và trả lời thêm câu hỏi nghi vấn) mà thơi Tóm tắt:  Lập trình Prolog cung cấp cho hệ thống khái niệm diễn giải khái niệm  Các khái niệm cung cấp qua vị từ  Các vị từ xem hàm trả giá trị sai  Việc hệ thống trả lời câu hỏi liên quan đến khái niệm cung cấp phụ thuộc vào việc diễn giải khái niệm cho hệ thống Mệnh đề (clauses) – Cách giải thích vấn đề Prolog Sau cung cấp cho hệ thống khái niệm cần thiết, cần phải giải thích khái niệm cung cấp, Prolog dùng lời giải thích để thực việc suy luận trả lời câu hỏi Các lời giải thích gọi mệnh đề (clauses) Có hai dạng mệnh đề: kiện(fact), luật (rule) Sự kiện điều mà công nhận Luật quy tắc mà xác định điều kiện cho chúng VD3: viết phần clause cho vị từ nguoi định nghĩa VD1 Dữ kiện ban đầu cung cấp cho vấn đề liên quan đến người: Socrates người Theo cách tư khơng gian tốn, có người nhất: Socrates Khơng khác người Như viết phần clause cho vị từ sau: nguoi(socrates) Chúng ta vừa viết kiện: socrates người điều chắn Bất kỳ ký hiệu có tên socrates socrates người điều chắn đúng, khơng cần phải có điều kiện ràng buộc kèm theo Lưu ý: Có hai cách viết dạng (literal) cho ký hiệu (symbol) Prolog:  Một danh biểu (tên biến, tên hàm, tên vị từ) mở đầu ký tự thường (socrates, sOCRATES …)  Một chuỗi ký hiệu đặt cặp dấu nháy đơn ‘,’ (‘socrates’, ‘SOCRATES’, ‘ sOCRATES’, ‘Socrates’, …) Một mệnh đề kết thúc dấu chấm ( ) II CÁC VÍ DỤ THỰC HÀNH Ví dụ Biểu diễn câu sau ngôn ngữ Prolog (1) Marcus người đàn ông (2) Marcus người Pompei (3) Mọi người Pompei người La mã (4) Ceasar nhà thống trị (5) Mọi người La mã trung thành với Ceasar ghét ông ta (6) (7) (8) Mỗi người trung thành với người Người ta tìm cách ám sát nhà thống trị mà họ không trung thành với Marcus tìm cách ám sát Ceasar Ta có bảng phân tích stt Phát biểu Marcus người đàn ông Marcus người Pompei Mọi người Pompei người La mã Ceasar nhà thống trị Mọi người La mã trung thành với Ceasar ghét ông ta Mỗi người trung thành với người Người ta tìm cách ám sát nhà thống trị mà họ khơng trung thành với Marcus tìm cách ám sát Ceasar Vị từ sở Biểu diễn Prolog man(X) = X người đàn ông man(X) pompeian(X) =X người Pompei pompeian(X) roman(X) = X người La mã roman(X) ruler(X) = X nhà thống trị ruler(X) loyalto(X,Y) = X trung thành với Y hate(X, Y) = X căm ghét Y loyalto(X,Y) hate(X, Y) person(X) = X người person(X) try_assassinate(X, Y) = X tìm cách ám sát Y not(loyalto(X,Y)):try_assassinate(X, Y),person(X), ruler(Y), try_assassinate(X, Y) = X tìm cách ám sát Y try_assassinate(X,Y) Tri thức phân thành nhóm: tri thức kiên tri thức luật Tri thức kiện Marcus người đàn ông man(‘Marcus’) Marcus người Pompei pomeian(‘Marcus’) Ceasar nhà thống trị ruler(‘Ceasar’) Marcus tìm cách ám sát Ceasar try_assassinate(Marcus , Ceasar) Tri thức suy diễn – luật Mọi người Pompei người La mã roman(X):-pompeian(X) Mọi người La mã trung thành loyalto(X,’Ceasar’) :-roman(X),not(try_assassinate(X, ‘Ceasar’)) với Ceasar ghét ông ta hate(X, ‘Ceasar’):roman(X),not(loyalto(X,’Ceasar’)) Mỗi người trung thành với person(X):-man(X) người person(X):-loyalto(X,_) Người ta tìm cách ám sát nhà not(loyalto(X,Y)):-try_assassinate(X, thống trị mà họ không trung thành Y),person(X),ruler(Y) với Nạp chương trình truy vấn: a Marcus có ám sát Ceasar không ? 
 b Ai người La mã? 
 c Ai lãnh chúa ? 
 d Ai ám sát ai? e Marcus có trung thành với Ceasar? f loyalto(‘Marcus’,’Ceasar’) Ví dụ Cho Luật kiện hình, sử dụng prolog (suy diễn lùi để xác định x câu parent(x, adrien) Cài đặt Prolog parent(X,Y):-father(X,Y) parent(X,Y):-mother(X,Y) ?parent(X, adrien) III BÀI TẬP THỰC HÀNH Bài tập a) Xây dựng chương trình Prolog sau (1) (2) (3) (4) (5) (6) (7) Tri thức Gà thức ăn Táo thức ăn Thứ mà có ăn vào mà sống thức ăn Bill ăn đậu phộng Bill sống John ăn tất thức ăn Sue ăn thứ mà Bill ăn (1) (2) (3) (4) Truy vấn Cái thức ăn ? John có ăn đậu phộng khơng ? Sue ăn ? Ai ăn ? Biểu diễn Prolog Tri thức kiện thucan(ga) thucan(tao) an(bill, dau phong) consong(bill) Bài tập Cho sở tri thức sau (1) If [X croaks and eats flies] Then [X is a frog] (2) If [X chirps and sings] Then [X is a canary] (3) If [X is a frog] Then [X is colored green] (4) If [X is a canary] Then [X is colored yellow] (5) [Fritz croaks and eats flies] ? [Fritz is colored Y]? (1) (2) (4) (5) ... kiện thucan(ga) thucan(tao) an(bill, dau phong) consong(bill) Bài tập Cho sở tri thức sau (1) If [X croaks and eats flies] Then [X is a frog] (2) If [X chirps and sings] Then [X is a canary] (3) ... Prolog sau (1) (2) (3) (4) (5) (6) (7) Tri thức Gà thức ăn Táo thức ăn Thứ mà có ăn vào mà sống thức ăn Bill ăn đậu phộng Bill sống John ăn tất thức ăn Sue ăn thứ mà Bill ăn (1) (2) (3) (4) Truy vấn... kiện(fact), luật (rule) Sự kiện điều mà công nhận Luật quy tắc mà xác định điều kiện cho chúng VD3: viết phần clause cho vị từ nguoi định nghĩa VD1 Dữ kiện ban đầu cung cấp cho vấn đề liên quan

Ngày đăng: 08/11/2019, 17:09

TỪ KHÓA LIÊN QUAN