Trong chương 2 luận văn đã trình bày về hệ thống Des trong giảng dạy Datalog: cách cài đặt, mô tả hệ thống và hai ngôn ngữ truy vấn: Datalog và SQL. Sau đó so sánh được sự khác nhau cơ bản giữa hai ngôn ngữ trên.
Chương 3
THỬ NGHIỆM VỚI HỆ THỐNG DES 3.1. Bài toán tìm đường đi
3.1.1. Tìm đường đi dùng cơ sở dữ liệu suy diễn
Ta có tập dữ liệu các đường đi trong đồ thị, vấn đề là tìm các đường đi có thể có giữa hai điểm.
Bài toán cụ thể sẽ sử dụng đệ quy trong DES bằng cách xác định đường đi trong đồ thị và một tập các bộ dữ liệu <xuất phát, đích đến>, như vậy là có một đường đi từ điểm “xuất phát” tới “đích đến”.
Hình 3.1. Các đường đi trong đồ thị
3.1.2. Biểu diễn các trực kiện và các quy tắc dùng cơ sở dữ liệu suy diễn
Để biểu diễn các nội dung của một cơ sở dữ liệu suy diễn gồm các trực kiện và các quy tắc chúng ta dùng ngôn ngữ Datalog. Một trong các việc mở rộng Datalog là khả năng dùng các tệp tin cơ sở dữ liệu bên ngoài đã và đang tồn tại như các phần sở hữu của cơ sở dữ liệu bên ngoài. Các tệp tin này được dùng để lưu hầu hết các dữ liệu được mô tả tình huống thực tế của các mạng đường đi và thông tin về các trạng thái dự đoán trước.
(C1) path (X,Y) :- edge (X,Y).
(C2) path (X,Y) :- path (X,Z), edge (Z,Y). (C3) path (X,X).
a
b
c
(C4) edge (a,b). (C5) edge (a,c). (C6) edge (b,a). (C7) edge (b,d).
Dòng (C1), (C2) và (C3) miêu tả các quy tắc. Dòng (C4), (C5), (C6) và (C7) định nghĩa các trực kiện, ví dụ: có một đường đi từ a đến b…
3.1.3. Hệ thống tìm đường đi
Cấu trúc gợi ý của một hệ thống tìm đường đi dùng cơ sở dữ liệu suy diễn:
Để thể hiện cây tìm kiếm, ta sử dụng cây tìm kiếm OLD [6] là trường hợp đặc biệt của cây SLD (phép hợp giải SLD)[1]. Một truy vấn path(a,X), mỗi nút (được gán nhãn) là một trạng thái đích hoặc mệnh đề âm, và mỗi nút con của một nút là kết quả của việc áp dụng một mệnh đề trong chương trình đối với đích trái nhất của một trạng thái đích cha. Ký hiệu □ là ký hiệu trạng thái đích
Chương trình Datalog
Cơ sở dữ liệu suy diễn
Các câu truy vấn Câu trả lời
Hệ quản trị cơ sở dữ liệu quan hệ
Một số yếu tố ràng buộc khác (nếu có) Dữ liệu
trống hoặc mệnh đề Null. Mỗi cạnh được gán nhãn với tình huống con cho các biến của trạng thái đích cha cần thiết để mệnh đề này có thể áp dụng.
Hình 3.3 Cây tìm kiếm OLD
Các quá trình tìm kiếm đối với truy vấn path(a,X)
Hình 3.5 Quá trình tìm kiếm lần thứ 2 đối với path(a,X)
Hình 3.7. Hoàn tất quá trình tìm kiếm đối với path(a,X)
Quá trình tìm kiếm đối với truy vấn path(b,X)
Hình 3.8. Quá trình tìm kiếm lần thứ 1 đối với path(b,X)
Hình 3.10. Quá trình tìm kiếm lần thứ 3 đối với path(b,X)
Hình 3.11. Hoàn tất quá trình tìm kiếm đối với path(b,X)
3.1.4. Giải bài toán trên hệ thống DES 3.8
Đưa các trực kiện và quy tắc vào trong tập tin paths.dl có chứa đoạn mã Datalog như sau:
% Paths in a Graph
edge(a,b). edge(a,c). edge(b,a).
edge(b,d).
path(X,Y) :- path(X,Z), edge(Z,Y). path(X,Y) :- edge(X,Y).
Hình 3.12. Kết quả thực thi tập tin paths.dl
Truy vấn path(a,X) và path(b,X) cho ra các kết quả:
DES> path(a,X) { path(a,a), path(a,b), path(a,c), path(a,d) }
Info: 4 tuples computed.
DES> path(b,X) {
path(b,b), path(b,c), path(b,d) }
Info: 4 tuples computed.
Hình 3.13. Kết quả thực thi truy vấn path(a,X) và path(b,X)
Truy vấn tổng quát path(X,Y) cho ra các kết quả:
{ path(a,a), path(a,b), path(a,c), path(a,d), path(b,a), path(b,b), path(b,c), path(b,d) }
Hình 3.14. Kết quả thực thi truy vấn path(X,Y)
Đưa các trực kiện và quy tắc vào trong tập tin paths.sql có chứa đoạn mã SQL như sau:
create table edge(origin string,destination string); insert into edge values('a','b');
insert into edge values('a','c'); insert into edge values('b','a'); insert into edge values('b','d');
create view paths(origin,destination) as with
recursive path(origin,destination) as (select * from edge)
union
(select path.origin,edge.destination from path,edge
where path.destination =edge.origin) select * from path;
Kết quả nhận được khi thực thi câu lệnh SQL:
DES-SQL> select * from paths;
answer(paths.origin, paths.destination) -> { answer(a,a), answer(a,b), answer(a,c), answer(a,d), answer(b,a), answer(b,b), answer(b,c), answer(b,d) }
Info: 8 tuples computed.
Hình 3.15. Kết quả khi thực thi câu lệnh SQL (paths.sql)
3.2. Bài toán cây phả hệ
3.2.1. Mô tả bài toán
Bài toán định nghĩa cây phả hệ được biểu diễn ở hình 3.11. Bộ dữ liệu bao gồm:
<parent, child>: parent là bố mẹ của child (quan hệ parent);
<ancestor, descendant>: ancestor là tổ tiên của descendant (quan hệ ancestor);
<father, child>: father là bố của child (quan hệ father);
<mother, child>: mother là mẹ của child (quan hệ mother).
Hình 3.16. Cây phả hệ
3.2.2. Miêu tả hệ thống
Dùng phương pháp hợp giải để giải quyết vấn đề tìm tập các con cháu của Minh: ←ancestor(Minh,X).
Minh An
Thu
Thanh Long Mai
Duy Loan
Hình 3.17. Cây hợp giải mối quan hệ gia đình lần thứ 1
Hình 3.19. Cây hợp giải mối quan hệ gia đình lần thứ 3
Qua hữu hạn các bước hợp giải, cuối cùng cho ra kết quả các tập con cháu của Minh: (Minh,Thu), (Minh,Duy), (Minh,Khoa).
3.2.3. Giải bài toán trên hệ thống DES 3.8
Đưa các trực kiện và quy tắc vào trong tập tin family.dl có chưa đoạn mã Data- log như sau:
father('Minh','Thu'). father('Thanh', 'Duy'). father('Long', 'Loan'). father('Duy', 'Khoa'). mother('An', 'Thu'). mother('Thu', 'Duy'). mother('Mai', 'Loan'). mother('Loan', 'Khoa'). parent(X,Y) :- father(X,Y). parent(X,Y) :- mother(X,Y). ancestor(X,Y) :- parent(X,Y).
Hình 3.21.Kết quả thực thi tập tin family.dl
Truy vấn ancestor('Minh',X), tính tập các con cháu của Minh, cho ra các câu trả lời sau đây:
{
ancestor('Minh', 'Duy'), ancestor('Minh', 'Khoa'), ancestor('Minh','Thu') }
Info: 3 tuples computed.
Hình 3.22. Kết quả thực thi truy vấn ancestor('Minh',X)
Khung nhìn son:
Câu trả lời là tính các tập của son: Info: Processing: son(S,F,M) :- father(F,S),mother(M,S). { son('Duy','Thanh','Thu'), son('Khoa','Duy','Loan'), son('Loan','Long','Mai'), son('Thu','Minh','An') }
Info: 4 tuples computed.
Hình 3.23. Kết quả thực thi khung nhìn son(S,F,M)
Đưa các trực kiện và quy tắc vào trong tập tin family.sql có chứa đoạn mã SQL như sau:
create table father(father string,child string); insert into father values('Minh', 'Thu');
insert into father values('Thanh', 'Duy'); insert into father values('Long', 'Loan');
insert into father values('Duy', 'Khoa'); insert into mother values('An','Thu'); insert into mother values('Thu','Duy'); insert into mother values('Mai','Loan'); insert into mother values('Loan','Khoa'); create view parent(parent,child) as
select father, child from father union
select mother, child from mother;
create or replace view ancestor(ancestor,descendant) as select parent, child from parent
union
select parent, descendant from parent, ancestor where parent.child = ancestor.ancestor;
Kết quả nhận được khi thực thi câu lệnh SQL:
Select ancestor,descendant from ancestor where ancestor='Minh';
3.3. Nhận xét
Từ các quá trình tìm kiếm sử dụng phép hợp giải và khi thử nghiệm trên hệ thống DES thông qua hai ngôn ngữ Datalog và SQL, cho ta thấy các kết quả có được là đồng nhất với những dữ kiện của bài toán ứng dụng.
3.4. Kết luận chương 3
Trong chương này, luận văn đã trình bày được vấn đề đặt ra của bài toán, dùng Datalog và SQL để biểu diễn các trực kiện và các quy tắc cho các bài toán, sử dụng phép hợp giải SLD để giải quyết quá trình tìm kiếm. Sau đó mô phỏng các bài toán ứng dụng trong hệ thống DES 3.8.
KẾT LUẬN
Qua thời gian học tập và nghiên cứu, luận văn đã đạt được một số yêu cầu trong lĩnh vực nghiên cứu.
Những kết quả của luận văn
-Luận văn đã tìm hiểu được cơ sở dữ liệu suy diễn: sự hình thành và những thành phần của cơ sở dữ liệu suy diễn; tìm hiểu chương trình logic; chương trình Datalog; ngôn ngữ Prolog.
-Tìm hiểu về hệ thống DES trong giảng dạy Datalog: Luận văn đặt ra tìm hiểu và làm những vấn đề sau: Giới thiệu hệ thống DES 3.8; các thành phần tri thức và quy tắc trong hệ thống DES; tìm hiểu hai ngôn ngữ Datalog và SQL; giải bài toán trên DES và cài đặt thử nghiệm các bài toán ứng dụng trên DES 3.8.
Phương hướng nghiên cứu tiếp theo
-Tiếp tục nghiên cứu ứng dụng bài toán tìm đường đi để mở rộng nghiên cứu những bài toán tương tự như tìm đường đi trong mạng máy tính…
TÀI LIỆU THAM KHẢO Tiếng Việt
1. Lê Mạnh Thạnh, Trương Công Tuấn (2011), Giáo trình Chương trình Datalog, NXB Đại học Huế.
2. Phan Huy Khánh (2004), Lập trình Logic trong Prolog, NXB ĐHQG Hà Nội.
3. Lê Minh Hoàng (2002), chuyên đề Lý thuyết đồ thị, ĐHSP Hà Nội.
Tiếng Anh
4. Fernaldo Sáenz Pérez, Datalog Educational System V3.8 User’s Manual, Universidad Complutense de Madrid, 2014.
5. Ulle Endriss, Lecture Notes An Introduction to Prolog Programming, University of Amsterdam, 2013.
6. H. Tamaki and T. Sato, “OLD Resolution with Tabulation”, Proceedings of ICLP’86, Lecture Notes on Computer Science 225, Springer-Verlag, 1986.