TÌM HIỂU CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨCTRONG LẬP TRÌNH LOGIC

59 311 0
TÌM HIỂU CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨCTRONG LẬP TRÌNH LOGIC

Đ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

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN -  - BÀI THU HOẠCH BIỂU DIỄN TRI THỨC VÀ ỨNG DỤNG Đề tài: TÌM HIỂU CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨCTRONG LẬP TRÌNH LOGIC Giảng viên Học viên Mã số HV Lớp : PGS.TS Đỗ Văn Nhơn : Phạm Hùng Phương : CH1102006 : Cao học CNTT QM Khóa Hà Nội, tháng 12/2012 LỜI CẢM ƠN Em xin chân thành cảm ơn khoa sau đại học trường Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM tạo điều kiện giúp em hồn thành mơn học Em xin cám ơn sâu sắc đến Tiến sĩ Đỗ Văn Nhơn Thầy tận tình giảng dạy chuyển tải thơng tin đến cho lớp chúng em suốt thời gian học tập nghiên cứu môn Biểu diễn tri thức ứng dụng Bằng lượng kiến thức học tập nghiên cứu em cố gắng hoàn thành thu hoạch phạm vi cho phép, thời gian kiến thức hạn chế nên thu hoạch nhiều thiếu sót Kính mong thầy quan tâm giúp đỡ bảo để em hoàn thiện thu hoạch tốt Một lần em xin tỏ lòng biết ơn thày giảng dạy bảo tận tình, cám ơn thày khoa sau đại học nhà trường tạo điều kiện để chúng em hồn thành mơn học Hà Nội, ngày 10 tháng 01 năm 2013 Người làm thu hoạch Phạm Hùng Phương MỤC LỤC PHẦN TỔNG QUAN VỀ ĐỀ TÀI Tổng quan đề tài Logic tính tốn nhà logic học đưa vào năm 1950, dựa kỹ thuật tự động hóa trình suy diễn logic Logic tính tốn phát triển thành lập trình logic vào năm 1970 Từ hình thành khái niệm quan trọng lập trình khai báo (declarative programming) đối lập với lập trình cấu trúc (procedural programming) Về ý tưởng, lập trình viên cần đưa khai báo chương trình cịn việc thực cụ thể máy tính tự xác lập, việc thực chương trình hướng thủ tục lại xác lập cụ thể lập trình viên Ngơn ngữ Prolog cơng cụ thực rõ ý tưởng Chương trình dịch Prolog đời chứng tỏ ngơn ngữ thực hành phổ biến tồn giới Sự phát triển lập trình logic thức bắt đầu vào cuối năm 1970 Những phát triển xa đạt vào đầu thập kỷ 80, bắt đầu với xuất sách nói sở lập trình logic Việc lựa chọn lập trình logic làm mơ hình sở cho dự án Các hệ thống máy tính đời thứ Nhật (Japanese Fifth Generation Computer Systems Project) mở đầu cho phát triển ngôn ngữ lập trình logic khác Nhờ khả khai báo tự nhiên lập trình logic, Prolog nhanh chóng trở thành ứng cử viên cho việc biểu diễn tri thức Tính đầy đủ trở nên rõ ràng mối liên hệ chương trình logic với sở liệu suy diễn đưa vào thập kỷ 80 Ý nghĩa đề tài Việc sử dụng lập trình logic sở liệu suy diễn để biểu diễn tri thức gọi “cách tiếp cận logic cho việc biểu diễn tri thức” Cách tiếp cận dựa ý tưởng chương trình máy tính cung cấp đặc thù logic tri thức đó, độc lập với cách thực riêng biệt nào, với ngữ cảnh tự do, dễ dàng thao tác suy diễn Chính vậy, cú pháp ngơn ngữ lập trình phải kết hợp chương trình với đặc thù khai báo Khi đó, việc thực phương pháp tính tốn thơng qua so sánh thuộc tính cụ thể với cú pháp khai báo Việc đưa cú pháp thích hợp cho chương trình logic coi lĩnh vực nghiên cứu quan trọng khó lập trình logic Mục tiêu nghiên cứu Bài thu hoạch trình bày số nghiên cứu cú pháp ngữ nghĩa chương trình logic, bao gồm lập trình logic thơng thường lập trình logic mở rộng, tiếp đề cập mơi trường lập trình logic DLV (Datalog with Vel) cách thức kết hợp môi trường logic mã nguồn hướng đối tượng Java, cuối trình bày hai toán minh họa (bài toán N quân hậu toán Cây khung nhỏ nhất) cài đặt DLV chạy mã nguồn hướng đối tượng Java Nội dung nghiên cứu Nội dung thu hoạch gồm chương bao gồm: - Chương 1: Giới thiệu chương trình logic tổng quát - Chương 2: Các vấn đề lập trình logic mở rộng - Chương 3: Giới thiệu mơi trường lập trình logic DLV - Chương 4: Sử dụng toán để minh hoạ cho cách suy diễn tìm lời giải cho toán logic - Phần phụ lục: Cài đặt thử nghiệm toán minh hoạ PHẦN NỘI DUNG THỰC HIỆN Chương CHƯƠNG TRÌNH LOGIC TỔNG QUÁT 1.1 Mở đầu Ngơn ngữ Λ chương trình logic tổng quát Π xây dựng bảng chữ Α định nghĩa sau: Định nghĩa 1.1 Bảng chữ Α bao gồm loại ký hiệu sau: - Các biến - Các số đối tượng (có thể gọi số) - Các ký hiệu hàm (function symbol) - Các ký hiệu vị từ (predicate symbol) - Các liên kết logic: “not”, “←” “,” - Các ký hiệu phân cách “(“ “)” Trong đó, not liên kết logic gọi phủ định ngầm (negation as failure); biến xâu bao gồm ký tự bảng chữ chữ số, bắt đầu chữ viết hoa; số, ký hiệu hàm ký hiệu vị từ xâu bắt đầu chữ viết thường Thông thường, sử dụng chữ p, q, cho ký hiệu vị từ, X, Y, Z, cho biến, f, g, h, cho ký hiệu hàm a, b, c, cho số Định nghĩa 1.2 Một toán hạng định nghĩa sau: (i) biến toán hạng, (ii) số toán hạng, (iii) Nếu f ký hiệu hàm bậc n t1, , tn toán hạng f(t1, ,tn) tốn hạng Định nghĩa 1.3 Một tốn hạng gọi có tính chất (ground) khơng có biến xuất Định nghĩa 1.4 Một nguyên tố biểu diễn bảng chữ Α biểu thức có dạng p(t1, ,tn), p ký hiệu vị từ Α ti toán hạng Nếu ti tốn hạng ngun tố gọi có tính chất Một luật chương trình biểu diễn dạng: A0 ← A1, … , Am, not Am+1,…, not An (1.1) đó, Ai nguyên tố Vế trái luật gọi phần đầu kết luận, vế phải luật phần thân giả thiết Một tập luật tạo thành chương trình logic tổng qt (cịn gọi chương trình logic thơng thường) Chương trình logic tổng qt khơng chứa not gọi chương trình xác định Các biểu thức luật khơng chứa biến gọi có tính chất Định nghĩa 1.5 Khơng gian xác định Herbrand biểu diễn ngôn ngữ Λ chương trình Π, ký hiệu HU (Π), tập tất toán hạng biểu diễn với hàm số Λ Tập tất ngun tố ngơn ngữ chương trình Π định nghĩa HB(Π) (cơ sở Herbrand Π) Với vị từ p, atoms(p) định nghĩa tập HB(Π) biểu diễn dạng vị từ p với tập vị từ A, atoms(A) tập phần tử HB(Π) biểu diễn dạng vị từ thuộc A Ví dụ 1.1 Xét chương trình logic thơng thường Π sau: p(a) p(b) p(c) p(f(X)) ← p(X) Ngôn ngữ chương trình Π dựa bảng chữ bao gồm vị từ p, hàm f số a, b c HU (Π) = {a,b,c, f (a), f (b), f (c), f ( f (a)), f ( f (b)), } HB (Π) = {p(a), p(b), p(c), p( f (a)), p( f (b)), p( f (c)), p( f ( f (a))), } Một chương trình logic coi đặc tả cho phép xây dựng lý thuyết cho giới quan cịn luật chương trình ràng buộc mà lý thuyết cần phải thỏa mãn Ngữ nghĩa chương trình logic phân biệt tùy theo cách định nghĩa tính thỏa mãn luật Trong thu hoạch sử dụng ngữ nghĩa mơ hình ổn định dạng mở rộng Với ngữ nghĩa này, lý thuyết xác định nhờ tập ngun tố nền, gọi mơ hình ổn định chương trình Ngữ nghĩa định nghĩa sau: Định nghĩa 1.6 Mơ hình ổn định chương trình xác định Π tập nhỏ S HB cho với luật A0 ← A1, , Am Π, A1, , Am ∈ S A0 ∈ S Mơ hình ổn định chương trình xác định Π ký hiệu a(Π) Gọi Π chương trình logic tổng quát Với tập phần tử S, đặt ΠS chương trình thu từ Π cách xóa: (i) luật có chứa not A với A ∈ S (ii) tất not A luật lại Rõ ràng, ΠS khơng chứa not tồn mơ hình ổn định định nghĩa Nếu mơ hình ổn định trùng với S, ta nói S mơ hình ổn định Π Hay nói cách khác, mơ hình ổn định Π biểu diễn phương trình: S = a(ΠS ) (1.2) Một phần tử P S P ∈ S , ngược lại P sai (tức ¬P đúng) S Π suy diễn biểu thức f (ký hiệu Π|= f ) f mơ hình ổn định Π Ta nói câu trả lời cho truy vấn q có q mơ hình ổn định Π (tức Π|= q), khơng ¬q mơ hình ổn định Π (tức Π|= ¬q) khơng xác định trường hợp cịn lại Ví dụ 1.2 Xét ngơn ngữ chứa hai đối tượng a b chương trình Π : p(X) ← not q(X) q(a) Ta tập S = {q(a), p(b)} mơ hình ổn định Π Xây dựng chương trình ΠS theo cách trên, ta có ΠS = {p(b)←, q(a)←} có mơ hình ổn định trùng với S Do S mơ hình ổn định Π Dễ dàng nhận thấy chương trình logic khơng đơn điệu, tức việc thêm thông tin vào chương trình ảnh hưởng đến kết luận có trước chương trình Ví dụ, ta mở rộng chương trình ví dụ 1.2 cách thêm vào kiện q(b) Ta nhận thấy chương trình cũ suy diễn p(b) chương trình lại khơng thể Tồn mơ hình ổn định chương trình logic thuộc tính quan trọng Các chương trình có mơ hình ổn định gọi có tính tuyệt đối Khơng phải tất chương trình có tính tuyệt đối Có chương trình có nhiều mơ hình ổn định, gọi chặt chẽ; có chương trình khơng có mơ hình ổn định nào, gọi khơng chặt chẽ Ví dụ 1.3 Xét chương trình logic tổng quát Π = {p ← not p} Ta khơng chặt chẽ Giả thiết Π có mơ hình ổn định S Có hai trường hợp xảy ra: (i) p ∈ S ΠS rỗng mơ hình ổn định Nhưng S khơng rỗng nên khơng phải mơ hình ổn định Π (ii) p ∉ S ΠS = {p←}, mơ hình ổn định {p} S khơng mơ hình ổn định Π Vậy giả thiết ban đầu sai Π khơng có mơ hình ổn định Ví dụ 1.4 Xét chương trình logic tổng quát sau: p ← not q q ← not p Ta dễ dàng thấy chương trình có hai mơ hình ổn định {p} {q} Chặt chẽ tuyệt đối thuộc tính quan trọng chương trình logic Định nghĩa 1.7 Một lát cắt π0,…, πk cho tập tất ký hiệu vị từ chương trình logic tổng quát Π phân lớp Π, với luật có dạng (1.1) với p∈πs ,0 ≤ s ≤ k , A0 ∈ atoms(p) thì: (i) với 1≤ i ≤ m, có q j ≤ s cho q ∈ πj Ai ∈ atoms(q) (ii) với m+1 ≤ i ≤ n, có q j < s cho q∈ πj Ai ∈ atoms(q) tức π0, , πk phân lớp Π với luật Π , vị từ xuất dạng khẳng định thân luật nằm mức thấp mức vị từ phần đầu luật, vị từ xuất với phủ định ngầm nằm mức thấp mức vị từ phần đầu luật Sự phân lớp vị từ định nghĩa phân lớp luật mức Π0, , Πk , mức Πi bao gồm luật mà phần đầu vị từ nằm mức πi Πi coi định nghĩa quan hệ từ πi Các điều kiện cho phép định nghĩa sử dụng qua lại lẫn ngăn không cho sử dụng phủ định ngầm vị từ chưa xác định Chương trình gọi có tính phân lớp có phân lớp Ví dụ 1.5 Chương trình logic tổng qt Π bao gồm luật sau: p(f(X)) ← p(X), not q(X) p(a) q(X) ← not r(X) r(a) có tính phân lớp với phân lớp {r}, {q} {p} Với chương trình Π, đồ thị phụ thuộc DΠ Π bao gồm vị từ đỉnh < Pi, Pj, s > nhãn cạnh DΠ có luật r Π với Pi phần đầu Pj thuộc phần thân nó; s ∈ {+,−} định nghĩa Pj xuất với dạng khẳng định hay phủ định thân r Chú ý cạnh gán hai nhãn + − Một chu trình đồ thị phụ thuộc chương trình gọi chu trình âm chứa cạnh gán nhãn âm Mệnh đề 1.1 Một chương trình logic tổng quát Π gọi phân lớp đồ thị phụ thuộc DΠ không chứa chu trình âm Khái niệm phân lớp đóng vai trị quan trọng lập trình logic, sở liệu suy diễn trí tuệ nhân tạo Định lý sau mô tả thuộc tính quan trọng chương trình phân lớp Mệnh đề 1.2 Mọi chương trình logic tổng quát phân lớp có tính tuyệt đối Dễ dàng thấy chương trình ví dụ 1.2 có tính phân lớp có mơ hình ổn định Một chương trình logic tổng quát gọi chặt chẽ tương đối đồ thị phụ thuộc khơng có chu trình với số lượng lẻ cạnh âm Định lý 1.3 Một chương trình logic chặt chẽ tương đồ thị phụ thuộc có chu trình gồm cạnh dương có mơ hình ổn định Để tiếp tục thảo luận phần tiếp theo, ta cần thêm bổ đề sau chương trình logic tổng quát Bổ đề 1.4 Với mơ hình ổn định S chương trình logic tổng qt Π , ta có: (i) với luật có dạng (1.1) Π , {A1,…, Am} ⊆ S {Am+1, …, An} ∩ S = ∅ A0 ∈ S (ii) S mơ hình ổn định Π A0 ∈ S tồn luật có dạng (1.1) Π cho {A1,…, Am} ⊆ S {Am+1,…, An} ∩ S = ∅ 1.2 Biểu diễn tri thức chương trình logic tổng quát Trong phần đưa số ví dụ cách sử dụng chương trình logic tổng quát cho việc biểu diễn tri thức suy diễn thông thường Việc chứng minh gắn với phương thức sử dụng chương trình logic tổng qt để hình thức hóa câu nói chuẩn, tức câu sử dụng cách nói “A thơng thường B” Các câu nói dạng thường sử dụng kiểu khác suy diễn thơng thường Giả thiết đại lý có số thơng tin sau lồi chim: Đặc trưng lồi chim biết bay cánh cụt loài chim bay Ta biết Tweety chim thuê đóng chuồng chim cho khơng xây mái khơng biết Tweety có biết bay hay khơng biết bay Đó lý để nói sản phẩm đại lý có giá trị hay khơng Trong trường hợp Tweety khơng thể bay số lý (mà đại lý khơng biết) đại lý định làm mái cho chuồng chim ta có quyền từ chối trả tiền khơng cần thiết Ví dụ sau đưa cách biểu diễn thơng tin chương trình logic tổng quát Ví dụ 1.6 Xem xét chương trình Β bao gồm luật sau: flies(X) ← bird(X), not ab(r1, X) bird(X) ← penguin(X) ab(r1, X) ← penguin(X) make_ top(X) ← flies(X) với thực tế loài chim: f1 bird(tweety) f2 penguin(sam) Hầu hết tên vị từ ví dụ có ý nghĩa riêng r1 số ngơn ngữ chương trình, dùng để gán tên cho luật phần tử ab(r1,X) sử dụng cho lồi chim khơng chắn khả biết bay (tức sử dụng luật 1) Luật mơ tả câu nói thơng thường lồi chim biết bay (những câu nói loại gọi giả thiết ngầm định – default assumptions, ngầm định – default) Nó cho phép ta kết luận chim X biết bay trừ ta trường hợp đặc biệt Luật sử dụng để đưa trường hợp đặc biệt chim cánh cụt, gọi luật khử (cancellation rule) Tổng qt, câu nói thơng thường có dạng “a thông thường b” biểu diễn theo luật sau: b(X) ← a(X), not ab(r, X) (1.3) r số ngơn ngữ tên luật chương trình Tương tự, trường hợp đặc biệt câu nói thơng thường có dạng “c trường hợp ngoại lệ a, c không b”, biểu diễn sau: ab(r, X) ← c(X) (1.4) Trường hợp đặc biệt loại gọi ngoại lệ mạnh (strong exception) Dễ dàng nhận thấy chương trình tổng quát Β bao gồm luật từ đến kiện f1 f2 có tính chất phân tầng, chương trình có mơ hình ổn định Sử dụng bổ đề 1.4 để tìm câu trả lời cho số truy vấn khả biết bay loài chim khác Ta bắt đầu với truy vấn flies(tweety) Đặt S mơ hình ổn định B Do đó, flies(tweety) ∈ S khi: (i) bird(tweety) ∈ S (ii) ab(r1,tweety) ∉ S Ta có điều kiện (i) dựa kiện f1 bổ đề Để chứng minh (ii), ta cần có penguin(tweety) ∉ S suy từ bổ đề Khi đó, sử dụng (i) (ii), với luật 1, phần đầu bổ để, ta có flies(tweety) ∈ S Vậy câu trả lời cho truy vấn flies(tweety) Tương tự vậy, ta có câu trả lời cho truy vấn flies(sam) sai Tiếp theo đưa vài thảo luận ứng dụng lập trình logic tổng quát suy diễn kết hành động Điển hình cho dạng suy diễn phép ánh xạ thời gian (temporal projection), có mơ tả trạng thái khởi tạo ban đầu mô tả hiệu hành động Ta phải định trạng thái cuối sau thực chuỗi hành động Một ví dụ thường đưa cho dạng suy diễn tốn Bắn xác (Yale Shooting Problem - YSP) Cú pháp ngôn ngữ bao gồm ba loại biến: biến trạng thái S, S’, , biến xác F, F’, , biến hành động A, A’, Chỉ có biến trạng thái số s0, res(A, S) định nghĩa trạng thái thu nhận sau thực hành động A trạng thái S, hold(F, S) có nghĩa xác F trạng thái S Ngoài cịn có số ký hiệu vị từ chức khác Các loại tham số giá trị thể rõ cách sử dụng luật Ví dụ 1.7 Trong tốn Bắn xác (Yale Shooting Problem – YSP), có hai fluents: alive (sống) loaded (đã nạp), ba hành động: wait (chờ), load (nạp) shoot (bắn) Ta biết thực việc nạp đạn dẫn đến trạng thái súng nạp đạn bắn súng trạng thái súng nạp đạn, gà tây (tên Fred) chết Ta muốn sau thực hành động load, wait shoot (theo trình tự), Fred chết Tức dẫn đến chân lý qn tính “Các vật có xu hướng khơng đổi” Đây là kiểu nói thông thường, phù hợp với (3) biểu diễn sau: y1: holds(F, res(A, S)) ← holds(F,S), not ab(y1, A, F, S) Để biểu diễn hiệu hành động load, shoot wait, ta cần có luật sau: y2: holds(loaded, res(load, S)) ← luật khử: y3: ab(y1, shoot, alive, S) ← holds(loaded, S) biểu diễn mức ưu tiên tri thức đặc thù kết hành động thông qua luật quán tính Đặt s0 trạng thái ban đầu giả thiết ta có: y4: holds(alive, s0) Cho dù chương trình Ψ bao gồm luật y1 đến y4 khơng có tính phân tầng, ta có mơ hình ổn định Và Ψ suy diễn Holds(alive,res(load, s0)), ¬holds(alive,res(shoot,res(wait, (res(load, s0))))) Như ta thấy , lời giải lập trình logic cho tốn YSP thực đơn giản tự nhiên Biểu diễn dạng suy diễn kế thừa suy diễn dựa hành động lĩnh vực nghiên cứu thiết thực Một số công việc (works) hai dạng suy diễn thảo luận phần Đặc biệt ta muốn đề cập tới khó khăn quan trọng trình bày dạng tổng quát kế thừa, phát triển lý thuyết hành động tìm kiếm ý nghĩa tính tốn hiệu việc dò vòng lặp kết nối với truy vấn nhập nhằng Sự tồn mơ hình ổn định rõ ràng thêm vào lời giải thu nhận từ kiện mà thuộc vào lớp chương trình khơng lặp Ta mơ tả rõ ràng lớp chương trình thuộc tính 10 Ta kiểm tra đối tượng Mode có tên m có mơ hình hay khơng cách gọi phương thức m.isNoModel() kiểm tra m == Model.NO_ Model The Program class Lớp Program mơ hình hóa chương trình logic DLV có cấu mềm dẻo để biểu diễn chương trình đầu vào Nó cho phép chia chương trình logic thành nhiều file văn Lớp Program mở rộng cấu Trên thực tế, cho phép biểu diễn liệu vào cách sử dụng đối tượng String Predicate Sự mở rộng nhúng hoàn toàn chương trình logic vào chương trình Java Với cách này, DLV quản lý trực tiếp đối tượng Java Hơn nữa, ta lấy liệu từ bảng sở liệu quan hệ hỗ trợ JDBC cách sử dụng lớp JDBCPredicate 3.3.2 Kiến trúc gói DLV: lớp DlvHandler Trong phần này, ta phác thảo kiến trúc toàn diện gói DLV lớp DlvHandler chứa đặc tính gói DLV Ở phần trước, ta biết đến cách viết thực chương trình DLV Ta chạy từ dịng lệnh mơ tả thơng số cần thiết chương trình đầu vào Các tập trả lời DLV đưa dạng văn Gói DLV thực DLV cách xử lý mở rộng tự nhiên, thực dòng lệnh gọi Mỗi ứng dụng Java có lớp đơn java.lang.Runtime cho phép ứng dụng tự thực giao diện với mơi trường mà ứng dụng chạy Phương thức Runtime.exec() tạo tiến trình tự nhiên đưa lớp java.lang.Process sử dụng để điều khiển tiến trình thu nhận thơng tin Lớp java.lang.Process cung cấp phương thức để thực đầu vào đầu tiến trình, chờ cho tiến trình thực xong, kiểm tra trạng thái kết thúc phá hủy tiến trình Lớp DlvHandler quản lý đối tượng DLV tiến trình tự nhiên, cách sử dụng phương thức Runtime.exec() lớp java.lang.Process Tất điều khiển I/O DLV chuẩn định hướng đến đối tượng DlvHandler (bên máy ảo Java) Với cách này, lớp DlvHandler đưa liệu vào cho DLV lấy kết từ DLV Chú ý thông số cần thiết cho DLV file văn chứa chương trình vào xác định thơng số dịng lệnh mảng xâu Dữ liệu lưu nhớ (bằng cách sử dụng đối tượng Predicate) sở liệu định hướng đến DLV Đối tượng DlvHandler tập trung kết DLV phân tích chúng, xây dựng tập đối tượng Model Toàn q trình xử lý mơ tả hình 3.2 45 Hình 3.2 Quá trình xử lý DLV Tất lớp gói DLV Java đặt gói có tên DLV Để nhúng chương trình logic phân biệt vào bên câu lệnh Java, ta phải gọi đến gói DLV thực bước sau: Thiết lập thông số cần thiết liệu vào Chạy DLV Quản lý kết DLV Ta thiết lập liệu vào cách sử dụng đối tượng Program Ta sử dụng đối tượng DlvHandler để thiết lập thơng số cần thiết, chạy đối tượng tiến trình DLV quản lý kết DLV Lớp DlvHandler cung cấp điều khiển đầy đủ môi trường DLV Đối tượng DlvHandler gọi DLV, đưa liệu vào nhận kết Ngay DLV đưa kết quả, đối tượng DlvHandler phân tích tạo đối tượng Model Đối tượng DlvHandler lưu trữ đối tượng Model tập Ta lý tập đối tượng Model phương thức thích hợp Lớp DlvHandler thực giao diện tương ứng với giao diện java.util.Enumeration để truy nhập đến đối tượng Model Hơn nữa, đối tượng DlvHandler có đối tượng OutputDescriptor (xem hình 3.1) Lớp OutputDescriptor mơ tả cách phân tích kết DLV Đặc biệt OutputDescriptor mô tả cách xây dựng đối tượng Predicate thêm vào với đối tượng Model Gói DLV cung cấp ba kiểu đối tượng Predicate (xem hình 3.1): - lớp Predicate - lớp FilePredicate - lớp JDBCPredicate Lớp lưu trữ liệu nhớ chính; lớp thứ hai lưu trữ liệu file văn (theo định dạng datalog); lớp cuối lưu trữ liệu bảng sở liệu quan hệ Bằng cách sử dụng lớp OutputDescriptor, ta định rõ lớp vị từ sử dụng cho vị từ Với cách này, ta chọ thiết bị lưu trữ (bộ nhớ chính, đĩa cứng, v.v ) cho vị từ 46 Như nói trên, DLV sử dụng nhiều thời gian để tính tốn tập trả lời chương trình logic phân biệt tốn khó Nhưng mơ hình tính xong, DLV đưa Để nắm giữ đặc tính này, ta có ba trạng thái cho chương trình Java làm việc: đồng (synchronous), đồng mơ hình (model synchronous) khơng đồng (asynchronous) Nếu ta chạy DLV chế độ đồng bộ, luồng Java gọi DLV bị khóa DLV kết thúc việc tính tốn Luồng Java gọi DLV truy nhập vào kết DLV việc thực DLV kết thúc Nếu ta chạy DLV chế độ đồng mơ hình chế độ khơng đồng bộ, luồng Java gọi DLV truy nhập đến mơ hình vừa tính xong Gói DLV cung cấp phương thức kiểm tra liệu có mơ hình hay chưa Nếu ta chạy DLV chế độ đồng mơ hình, phương thức khóa luồng Java gọi DLV có mơ hình DLV kết thúc Nếu ta chạy DLV chế độ không đồng bộ, phương thức khơng khóa luồng Java gọi DLV Chương CÁC BÀI TOÁN MINH HỌA Một phương pháp tiếng cho cách giải toán logic phương pháp sinh lời giải kiểm tra, lời giải tốn tạo lời giải khơng tương ứng bị loại bỏ kiểm tra Cũng tương tự cách thông thường toán thuộc lớp NP, sau lựa chọn ngẫu nhiên, việc kiểm tra thực thời gian đa trị Phần sinh lời giải cách biểu diễn tốn có nhờ việc liệt kê khả phần kiểm tra có nhờ đưa ràng buộc để loại bỏ khả vi phạm điều kiện toán Do tập trả lời chương trình kết phù hợp với tốn đưa Ta cịn gọi cách thực theo phương pháp sinh lời giải kiểm tra liệt kê loại bỏ Việc giải toán theo cách biểu diễn phụ thuộc vào cách liệt kê khả có thể, tức biến sử dụng giá trị mà biến nhận Thông thường tri thức ẩn miền sử dụng để làm giảm kích thước khơng gian khả (hoặc khơng gian trạng thái) Và thêm số điều kiện kiểm tra bên phần sinh lời giải Một ví dụ cho cách toán N quân hậu Trong cách biểu diễn ràng buộc, cần phải lựa chọn cẩn thận với cách biểu diễn dạng thực tế luật Ví dụ, xem xét chương trình Π : p ← a q ← b a ← not b b ← not a Giả thiết ràng buộc chương trình: “p phải nhận giá trị đúng” Do ta loại bỏ khả để p không Nếu ta biểu diễn ràng buộc 47 dạng thực tế chương trình Π : p← kết chương trình có hai tập trả lời {a, p} {b, q, p} tập không mong muốn Cái ta cần loại bỏ b, q khỏi không gian trạng thái tập trả lời {a, p} Vậy cách đắn để biểu diễn ràng buộc chương trình Π là: ← not p Ta xét toán N quân hậu Cây bao trùm nhỏ để minh họa cho cách suy diễn tìm kiếm lời giải cho tốn logic Hai toán N quân hậu Cây khung nhỏ minh họa cách biểu diễn tri thức lập trình logic DLV Với tốn, có nhiều cách để biểu diễn tri thức, phần phân tích tiết cách biểu diễn cài đặt cụ thể cách biểu diễn môi trường lập trình DLV 4.1 Bài tốn N qn hậu 4.1.1 Phân tích tốn Với bảng kích thước n×n , ta cần phải đặt n quân hậu cho khơng qn hậu ăn lẫn Có nghĩa có xác qn hậu hàng cột, khơng có hai qn hậu đường chéo Theo cách tiếp cận liệt kê loại bỏ, ta cần phải liệt kê cách đặt n quân hậu bảng n×n sau loại bỏ trường hợp quân hậu ăn lẫn Dưới xem xét số cách biểu diễn phương pháp tiếp cận Sự khác cách nằm phần liệt kê phần loại bỏ Trong số phần liệt kê, thân chứa cách liệt kê kèm theo loại bỏ, đó, phần loại bỏ, điều kiện lại chứa liệt kê (1) Đặt quân hậu vào vng có thể: Ta đặt tên cho quân hậu từ đến n sử dụng vị từ at(I, X, Y) để biểu diễn quân hậu I vị trí (X, Y) Phần liệt kê bao gồm phép liệt kê khơng gian định nghĩa với có qn hậu khơng chứa phép loại bỏ cho quân hậu khơng có hai qn hậu vị trí Cách biểu diễn tốn viết sau: (a) Khai báo: Ta có miền ứng dụng sau: queen(1) ← … queen(n) ← Row(1) ← … row(n) ← Col(1) ← … col(n) ← (b) Liệt kê: Các luật liệt kê tạo khơng gian cho n quân hậu khác đặt bảng n× n vị trí khác Các luật sau: i Với vị trí (X, Y) quân hậu I, I đặt vị trí (X, Y) khơng at(I, X, Y) ← queen(I), row(X), col(Y), not not_at(I, X, Y) not_at(I, X, Y) ← queen(I), row(X), col(Y), not at(I, X, Y) ii Với quân hậu I, đặt nhiều vị trí ← queen(I), row(X), col(Y), row(U), col(Z), at(I, X, Y), at(I, U, Z), Y ≠ Z ← queen(I), row(X), col(Y), row(Z), col(V), at(I, X, Y), at(I, Z, V), X ≠ Z iii Với quân hậu I, đặt vị trí 48 placed(I) ← queen(I), row(X), col(Y), at(I, X, Y) ← queen(I), not placed(I) iv Khơng có hai qn hậu đặt vị trí ← queen(I), row(X), col(Y), queen(J), at(I, X ,Y), at(J, X, Y), I ≠ J (c) Loại trừ i Khơng có hai qn hậu khác hàng ii Khơng có hai qn hậu khác cột iii Khơng có hai quân hậu khác đường chéo Chú ý (1)(b)(iv) dạng hai luật (1)(c)(i) (1)(c)(ii) Nói cách khác, có (1)(c)(i) (1)(c)(ii), ta khơng cần đến luật (1)(b)(iv) Luật nhắc đến ta muốn liệt kê trường hợp (2) Đặt quân hậu vào vị trí định: Ta biểu diễn cách trình bày liệt kê trạng thái có thể, vấn đề quan tâm đây, quân hậu cần đặt vị trí định (a) Khai báo: giống (1)(a) (b) Liệt kê: i Kết nối hiệu (1)(b)(i) – (iii) luật sau, đảm bảo quân hậu đặt vị trí Hai luật định nghĩa other _ at(I, X ,Y) có nghĩa quân hậu I đặt vị trí khác với ( X,Y ) Luật thứ ba đảm bảo điều kiện quân hậu I khơng đặt vị trí khác với ( X ,Y ) phải đặt ( X ,Y ) other_at(I, X, Y) ← queen(I), row(X), col(Y), row(U), col(Z), at(I, U, Z), Y ≠ Z other_at(I, X, Y) ← queen(I), row(X), col(Y), row(Z), col(V), at(I, Z, V), X ≠ Z at(I, X, Y) ← queen(I), row(X), col(Y), not other_at(I, X, Y) ii Luật sau giống (1)(b)(iv), đảm bảo hai quân hậu đặt vị trí khác ← queen(I), row(X), col(Y), queen(J), at(I, X, Y), at(J, X, Y), I ≠ J (c) Loại bỏ: giống (1)(c) (3) Đặt quân hậu vào vị trí định cho chúng khơng thể ăn lẫn theo hàng dọc hàng ngang Với cách trình bày này, ta đặt hai ràng buộc liệt kê vào phần liệt kê Do đó, liệt kê trạng thái có thể, ta đảm bảo khơng có hai qn hậu hàng cột (a) Khai báo: giống (1)(a) (b) Liệt kê: i Giống (2)(b)(i): 49 ii Hai ràng buộc đầu (2)(c) giống (1)(c)(i) (1)(c)(ii) thay sau ta không sử dụng (2)(b)(ii) nữa, kết hợp luật sau: other_at(I, X, Y) ← queen(I), row(X), col(Y), col(V) queen(J), at(J, X, V), I ≠ J other_at(I, X, Y) ← queen(I), row(X), col(Y), row(U), queen(J), at(J, U, Y), I ≠ J (c) Loại bỏ: ta cần luật loại bỏ giống luật (1)(c)(iii) ← row(X), col(Y), row(U), col(V), queen(I), queen(J), at(I, X, Y),at (J, U, V), I ≠ J, abs(X-U) = abs(Y-V) (4) Đặt quân hậu với trạng thái bàn cờ: với ba cách trình bày trên, ta gán tên cho quân hậu đặt chúng vào vị trí Ta nhận hiệu tính tốn cách lập trình ngắn gọn cách bỏ qua việc gán tên cho quân hậu Dưới đây, ta xác định cách biểu diễn (1) cách không phân biệt quân hậu Ta sử dụng vị từ in(X, Y) có ý nghĩa quân hậu đặt vị trí ( X,Y ) (a) Khai báo: row(1) ← row(n) ← Col(1) ← col(n) ← (b) Liệt kê: bao gồm hai phần Vì ta không cần phân biệt quân hậu, nên không cần sử dụng đến (1)(b)(ii) – (iv) i Xác định có qn hậu hay khơng có not_in(X, Y) ← row(X), col(Y), not in(X, Y) in(X, Y) ← row(X), col(Y), not not_in(X, Y) ii Để chắn đặt tất n quân hậu, thay phải đếm, ta sử dụng tri thức quân hậu không ăn lẫn nhau, chúng phải khác hàng nhau, đó, quân hậu hàng, biểu diễn luật sau: has_queen(X) ← row(X), col(Y), in(X, Y) ← row(X), not has_queen(X) (c) Loại bỏ: sử dụng phiên (1)(c) i Hai quân hậu cột ← row(X), col(Y), row(XX), X ≠ XX, in(X, Y), in(XX, Y) ii Hai quân hậu hàng ← row(X), col(Y), col(YY), Y ≠ YY, in(X, Y), in(X, YY) iii Hai quân hậu đường chéo ← row(X), col(Y), row(XX), col(YY), X ≠ XX, Y ≠ YY, in(X, Y), in(XX, YY), abs(X, XX) = abs(Y, YY) 4.1.2 Cài đặt 50 Bài toán N quân hậu biểu diễn chương trình logic tổng qt mơi trường lập trình DLV Chương trình cài đặt theo thuật tốn (4) trình bày phần 4.1.1 Chương trình biểu diễn toán sau: row(X) :- #int(X), X > col(X) :- #int(X), X > out(X, Y) :- row(X), col(Y), not in(X, Y) in(X, Y) :- row(X), col(Y), not out(X, Y) has_queen(X) :- row(X), col(Y), in(X, Y) :- row(X), not has_queen(X) :- Y YY, in(X, Y), in(X, YY) :- X XX, in(X, Y), in(XX, Y) :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y2 = Y1 + N, N > :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y1 = Y2 + N, N > Trong đó, #int(X) hàm ngơn ngữ lập trình Datalog phân biệt, cho biết X nhận giá trị khoảng từ đến N, với N nhận từ dòng lệnh Dòng lệnh để chạy chương trình DLV sau: $ DLV -silent –N=4 NQueens4.dl Kết nhận sau: Trường hợp N = 4, ta có hai tập trả lời: Hình 4-1 Hai tập trả lời NQueens với N = Trường hợp N = 8, ta có 92 tập trả lời, hình liệt kê số lời giải tốn 51 Hình 4-2 Các tập trả lời NQueens với N = 4.2 Bài tốn Cây khung nhỏ 4.2.1 Mơ tả toán Trong thiết kế mạch điện, cần thiết phải có số phích cắm cho thiết bị điện tử tương ứng Để kết nối tập n phích cắm, ta sử dụng n-1 dây điện, dây nối hai phích cắm với Có nhiều cách nối phích điện với nhau, cách tối ưu cách sử dụng dây điện Ta mơ hình hóa tốn đồ thị liên thơng vơ hướng G=(V,E), V tập phích điện, E tập khả kết nối phích điện với nhau, cạnh (u,v) thuộc E, ta có trọng số w(u,v) lượng dây cần thiết để nối u v với Yêu cầu tốn tìm T tập E, nối tất đỉnh có tổng trọng số cạnh T nhỏ Do T khơng chứa chu trình kết nối tất đỉnh với nhau, nên T phải có dạng cây, gọi bao trùm đồ thị G Bài tốn cần tìm T gọi tốn bao trùm nhỏ Hình 4.3 đưa ví dụ đồ thị liên thơng vơ hướng bao trùm nhỏ Hình 4-3 Cây bao trùm nhỏ đồ thị vô hướng Trên cạnh đồ thị có trọng số, cạnh thuộc bao trùm nhỏ tô đậm Tổng trọng số 37 Cây bao trùm nhỏ tồn nhất, ta thay 52 cạnh (b,c) cạnh (a,h), ta nhận bao trùm nhỏ có tổng trọng số 37 4.2.2 Phân tích cài đặt a Chương trình logic DLV Chia liệu vào DLV thành nhiều nguồn khác Cơ sở liệu mở rộng EDB chương trình lưu file MST.inp, mô tả đồ thị liên thông vô hướng Cơ sở liệu IDB chương trình lưu file MST.dl, tập luật ràng buộc để mơ tả tốn Khai báo: - định đỉnh gốc cây, đồng thời đỉnh xuất phát trình liệt kê trường hợp bao trùm đồ thị - xác định (X,Y, C) cạnh đồ thị (X, Y, C) (Y, X, C) thuộc sở liệu mở rộng chương trình, tức thuộc file MST.inp root(a) is_edge(X, Y, C) :edge(X, Y, C) is_edge(X, Y, C) :edge(Y, X, C) Liệt kê: - Liệt kê tất trường hợp bao trùm đồ thị, với trường hợp, xác định cạnh đồ thị có thuộc hay không thuộc luật phân biệt sau: in_tree(X, Y, C) v out_tree(X, Y) :is_edge(X, Y, C), reached(X) - Vì cần xây dựng bao trùm đồ thị cho trước, nên ta cần phải biểu diễn tính chất khơng chứa chu trình bao trùm ràng buộc sau: :- in_tree(X, Y, _), has_path(X, Y) has_path(X, Y) :in_tree(X, Z, _), in_tree(Z, Y, _), X != Z, Z != Y has_path(X, Y) :in_tree(X, Z, _), have_path(Z, Y), X != Z, Z != Y Tức tồn đồng thời cạnh (X,Y) đường khác từ X đến Y 53 - Đảm bảo tất đỉnh phải duyệt tới trường hợp bao trùm: reached(X) :- root(X) reached(Y) :reached(X), in_tree(X, Y, C) :- node(X), not reached(X) Loại bỏ: Tối ưu hóa bao trùm ràng buộc yếu để nhận kết bao trùm nhỏ nhất: :~ in_tree(X, Y, C) [C:1] Kết chạy chương trình DLV: Hình 4-4 Tập trả lời cạnh thuộc bao trùm nhỏ có tổng trọng số 12 Và cuối cùng, ta chạy thử chương trình với thông số mức độ đánh giá ưu tiên truyền từ dịng Hình 4-5 Các bao trùm có trọng số nhỏ 13 b Cài đặt Java Chạy chương trình DLV Java, ta phải thực việc gọi DLV mã nguồn Java sau: Bước 1: Xây dựng đối tượng Program thiết lập liệu vào // build a Program object and setup input Program pr=new Program(); // set input pr.addProgramFile(this.dlvFileName); pr.addProgramFile(this.inputFileName); Bước 2: Xây dựng đối tượng DlvHandler // build a DlvHandler object DlvHandler dlv=new DlvHandler(this.dlvExeFile); 54 Bước 3: Tạo chương trình đầu vào thơng số cần thiết // set input program dlv.setProgram(pr); // set invocation parameters dlv.setNumberOfModels(1); //computes no more than solutions dlv.setIncludeFacts(false); dlv.setFilter(new String[]{"in_tree"}); Bước 4: Chạy DLV // run DLV by using model synchronous method of invocation dlv.run(DlvHandler.MODEL_SYNCHRONOUS); Bước 5: Quản lý kết DLV cách sử dụng lớp Model, Predicate, Literal // DLV output handling // for each model, wait until DLV find a new model while(dlv.hasMoreModels()) { Model m=dlv.nextModel(); // gets next model if(!m.isNoModel()) { // for each predicate in m while(m.hasMorePredicates()){ // gets next predicate Predicate p=m.nextPredicate(); System.out.println(p.toString()); } System.out.println(" - END Model"); } else System.out.println("I cannot find a model"); } Phần mềm MST_DLV bao gồm bốn file: - Node.java : định kiểu cho nút đồ thị, bao gồm tên nút, tọa độ x y nút khung kết - Edge.java : mơ tả cạnh đồ thị, bao gồm có đỉnh đầu, đỉnh cuối trọng số cạnh - MST.java : thực bước gọi DLV Java vẽ đồ thị khung tương ứng - MSTGUI.java : mô tả giao diện làm việc người sử dụng chương trình Giao diện làm việc MST sau: 55 Hình 4-6 Giao diện làm việc chương trình MST Ta cần nhập tên file tương ứng, file liệu vào chứa kiện mô tả đồ thị với vị từ node edge; file chương trình file bao gồm ràng buộc luật; cuối file kết chứa kết vừa tính với vị từ in_tree Với file MST6.inp, ta có kết khung nhỏ có tổng trọng số 16 Hình 4-7 Danh sách cạnh thuộc khung nhỏ với đồ thị đỉnh chứa file MST6.inp Hình 4-8 Đồ thị khung nhỏ MST6.inp Với file MST7.inp, ta nhận kết khung nhỏ có tổng trọng số 130 Hình 4-9 Danh sách cạnh thuộc khung nhỏ với đồ thị đỉnh chứa file MST7.inp 56 Hình 4-10 Đồ thị khung nhỏ MST7.inp Với file MST8.inp, Ta nhận kết khung nhỏ có tổng trọng số 103 Hình 4-11 Danh sách cạnh thuộc khung nhỏ với đồ thị đỉnh chứa file MST8.inp Hình 4-12 Đồ thị khung nhỏ MST8.inp KẾT LUẬN Bài thu hoạch trình bày số kết nghiên cứu cách biểu diễn tri thức lập trình logic Các chương trình logic khác có cách 57 biểu diễn tri thức khác Một chương trình logic coi đặc thù để xây dựng lý thuyết cho giới quan luật chương trình ràng buộc mà lý thuyết cần phải thỏa mãn Ngữ nghĩa chương trình logic khác cách định nghĩa tính thỏa mãn luật Chương trình logic tổng quát sử dụng ngữ nghĩa mơ hình ổn định dạng mở rộng Với ngữ nghĩa này, lý thuyết tương ứng tập nguyên tố nền, gọi mơ hình ổn định chương trình Chương trình logic mở rộng xuất thêm cách biểu diễn phủ định, phủ định Trong ngơn ngữ chương trình mở rộng, ta phân biệt truy vấn với ý nghĩa “nó khơng thành công” với truy vấn với ý nghĩa mạnh “phủ định thành cơng” Ngữ nghĩa chương trình logic mở rộng tập tập trả lời chương trình, tập trả lời chương trình tập phần tử coi dựa vào suy diễn chương trình Bài thu hoạch trình bày mơi trường lập trình logic hiệu quả, DLV (datalog với phép hoặc) hệ thống sở liệu tường thuật mạnh Nó tạo sở ngơn ngữ lập trình tường thuật datalog, thích hợp với loại suy diễn không đơn điệu, bao gồm chuẩn đốn lập kế hoạch Và ngồi ra, DLV nhúng vào mã nguồn hướng đối tượng Java thơng qua gói DLV Bằng cách sử dụng cách thứ tự thích hợp cho lớp Java, gói DLV cho phép kết nối mã nguồn Java với chương trình logic phân biệt Cuối hai toán minh họa: toán N quân hậu toán Cây khung nhỏ Các toán cài đặt mơi trường lập trình logic DLV chương trình mơ tả tốn Cây khung nhỏ nhúng vào mã nguồn Java chạy dạng chương trình hướng đối tượng Java Trong phạm vi thu hoạch tìm hiểu số phương pháp biểu diễn tri thức lập trình logic Hướng phát triển đề tài mở rộng nghiên cứu thêm độ phức tạp tính tốn chương trình, cải thiện tốc độ tính tốn phát triển phương pháp biểu diễn tri thức khác tốn NP khó TÀI LIỆU THAM KHẢO Tiếng Việt [1] Nguyễn Xuân Thái (1999), “Lập trình logic nguyên lý giải”, Luận văn Thạc sỹ khoa học, trường Đại học Khoa học Tự nhiên, Đại học Quốc Gia Hà Nội [2] Nguyễn Thanh Tú (2006), “Nghiên cứu phương pháp biểu diễn tri thức lập trình logic”, Luận văn Thạc sỹ CNTT, trường Đại học Bách khoa Hà Nội Tiếng Anh 58 [3] Chitta Baral (2004), “Knowledge Representation, Reasoning and Declarative Problem Solving”, Arizona State University, U.S.A [4] Chitta Baral, Michael Gelfond (1994), “Logic Programming and Knowledge Representation”, Computer Science Department, University of Texas at El Paso, El Paso, Texaz, U.S.A [5] Michael Gelfond (1994), “The Stable Model Semantics for Logic Programming”, University of Texas at El Paso, El Paso, Texaz, U.S.A [6] Vladimir Lifschitz, “Foundations of Logic Programming”, Department of Computer Sciences, University of Texas, U.S.A [7] Wolfgang Faber, Gerald http://www.dlvsystem.com/ Pfeifer (since 1996), DLV homepage, 59 ... nhỏ minh họa cách biểu diễn tri thức lập trình logic DLV Với tốn, có nhiều cách để biểu diễn tri thức, phần phân tích tiết cách biểu diễn cài đặt cụ thể cách biểu diễn mơi trường lập trình DLV 4.1... LẬP TRÌNH LOGIC Các chương trình logic phân biệt cơng cụ mạnh để biểu diễn tri thức suy diễn thông thường Sự phát tri? ??n gần môi trường lập trình logic phân biệt có tên DLV, cho phép sử dụng tri? ??t... lý tri thức Hình thức hóa sở logic cho việc biểu diễn suy diễn tri thức lập trình logic phân biệt trở thành công cụ thú vị để thỏa mãn cần thiết Các chương trình logic phân biệt chương trình logic

Ngày đăng: 10/04/2015, 09:58

Từ khóa liên quan

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

Tài liệu liên quan