You are on page 1of 6

THỰC THI CSTT BẰNG HỆ THỐNG DLV

3.1. Tổng quan về hệ thống DLV

DLV là một hệ thống biểu diễn tri thức và suy diễn được xây dựng bởi một nhóm nghiên
cứu người Ý và Áo (thuộc trường Đại học Calabria và trường Đại học Công nghệ Vienna). Địa
chỉ trang Web của hệ thống DLV là:
www.dlvsystem.com
Phiên bản đầu tiên của hệ thống DLV ra đời vào năm 1997 và đã được cải tiến đáng kể
trong những năm vừa qua: tăng khả năng ngôn ngữ, kết hợp các tính năng mới và các kỹ thuật tối
ưu có liên quan vào tất cả các module của hệ thống.
Hệ thống DLV được cài đặt trên các hệ điều hành (HĐH) Unix/Linux hoặc Windows.
Đường link của hệ thống DLV:
http://www.dlvsystem.com/dlv
Sau đây là kiến trúc tổng quát của hệ thống DLV.

Hình 3.1. Kiến trúc tổng quát của hệ thống DLV


Ngay khi khởi động, chương trình đầu vào đặc tả bởi người dùng được phân tích cú pháp
và biến đổi vào một cấu trúc dữ liệu nội tại của hệ thống. Chương trình đầu vào có thể viết dưới
dạng tập tin văn bản, nhưng DLV còn cung cấp một giao diện đối với cơ sở dữ liệu quan hệ qua
ODBC. Module IG (Intelligent Grounder) phát sinh một chương trình nền Ground(P) có kích
thước nhỏ hơn nhiều so với chương trình nền đầy đủ. Sau đó, sự tính toán được thực hiện bởi các
module MG (Model Generator) và MC (Model Checker).
3.2. Thực thi CSTT bằng hệ thống DLV
Sau khi tải về từ Website của DLV, hệ thống DLV là một tập tin nhị phân có tên
dlvmingw.exe. Một CSTT để thực thi trên DLV thường có phần mở rộng là .dl. Trước hết, ta
thực hiện viết CSTT trong một tập tin văn bản theo cấu trúc ngôn ngữ của hệ thống DLV và lưu
vào một thư mục nào đó. Sau đó, thực hiện dòng lệnh thực thi CSTT từ dấu nhắc lệnh như sau:
Đường dẫn\dlvmingw.exe [Các tùy chọn] Tên CSTT
Trong đó, một số tùy chọn thường sử dụng là:
-filter=tên vị từ[, tên vị từ[, . . . .] chỉ xuất ra màn hình các thể hiện của các vị từ được chỉ
định.
-silent nếu ta không muốn thấy dòng thông tin trạng thái của hệ thống.
-nofacts nếu ta không muốn xuất hiện các sự kiện trong kết xuất.
-n=n chỉ tính nhiều nhất là n mô hình. Nếu n là rỗng hoặc all thì tất cả mô hình đều được
tính.
Chú ý: Trong hệ thống DLV, các sự kiện và các quy tắc suy diễn có thể lưu trữ trong các file
khác nhau. Lúc đó, câu lệnh thực thi có dạng:
dlvmingw.exe [Các tùy chọn] Tên_file_1 Tên_file_2

trong đó tên_file_1 chứa các sự kiện và tên_file_2 chứa các quy tắc suy diễn.

3.3. Sử dụng vị từ cài đặt sẵn trên hệ thống DLV


Khi viết các chương trình logic ngoài các vị từ được người sử dụng định nghĩa,trong hệ
thống DLV còn chứa một số vị từ đã được xây dựng sẳn như các vị từ số học, vị từ quan hệ, vị từ
danh sách… Trong phần này sẽ trình bày một số vị từ số học thường hay được sử dụng.
Khi suy luận và tính toán trên tập hợp dãy số nguyên có các vị từ số học như sau: #int,
#succ, #prec, #mod, #absdiff, #rand, +, *, -, /
Trong đó:
#int(X, Y, Z) trả về giá trị đúng khi X ≤ Y ≤ Z.
#int(X) trả về giá trị đúng khi X là số nguyên.
#succ (X, Y) có giá trị đúng khi X + 1 = Y.
#prec (X, Y) có giá trị đúng khi X-1 = Y.
#mod (X, Y, Z) có giá trị đúng khi X%Y = Z.
#absiff (X, Y, Z) có giá trị đúng khi abs (X-Y) = Z.
+ (X, Y, Z) là lựa chọn tính toán Z = X+Y là đúng khi Z = X+Y.
* (X,Y,Z) Z = X*Y có giá trị đúng khi Z = X*Y.
-(X,Y,Z) Z = X-Y có giá trị đúng khi Z = X- Y.
/(X,Y,Z) Z = X/Y có giá trị đúng khi Z = X/Y.

3.4. Cài đặt và thực thi một số bài toán bằng hệ thống DLV
Phần này sẽ cài đặt một số ví dụ và thực thi bằng hệ thống DLV.
Bài toán 1: Xem cơ sở tri thức để mô tả các quan hệ anh/em (sibling), chú/bác (cousin), họ hàng
(related), gồm các quy tắc và các sự kiện sau đây:
r1:sibling(X, Y)  parent(X, Z)  parent(Y, Z)  X  Y
r2:cousin(X, Y)  parent(X, Xp)  parent(Y, Yp)  sibling(Xp, Yp)
r3:cousin(X, Y)  parent(X, Xp)  parent(Y, Yp)  cousin(Xp, Yp)
r4:related(X, Y)  sibling(X, Y)
r5:related(X, Y)  related(X, Z)  parent(Y, Z)
r6:related(X, Y) related(Z, Y)  parent(X, Z)

parent (c, a) parent (d, a) parent (d, b) parent (e, b) parent (f, c)
parent (g, c) parent (h, d) parent (i, e) parent (f, e), parent (j, f)
parent (j, h) parent (k, g) parent (k, i)}

Trong CSTT này, parent là vị từ chỉ quan hệ cha/mẹ và parent(X, Y) có nghĩa là X là


cha/mẹ của Y, các vị từ sibling, cousin, related lần lượt chỉ các quan hệ anh/em, chú/bác, họ
hàng.
Quy tắc r1 có nghĩa: "Với mọi X và Y, X là anh/em của Y nếu tồn tại Z là cha/mẹ của X và Y
và X, Y không phải cùng một người" tức là: sibling(X, Y) là đúng nếu X, Y là những người cùng
chung cha mẹ, nhưng loại trừ trường hợp sibling(a, a) do X  Y trong quy tắc r1.
Quy tắc r2 và r3 định nghĩa vị từ cousin và các quy tắc r4, r5, r6 định nghĩa vị từ related.
Giả sử đã biết quan hệ của vị từ parent gồm các bộ được cho bởi tập sau:

Mã hóa CSTT bằng DLV, ta được:


parent(c,a). parent(d,a). parent(d,b). parent(e,b).parent(f,c).
parent(g,c). parent(h,d). parent(i,d). parent(i,e). parent(f,e).
parent(j,f). parent(j,h). parent(k,g). parent(k,i).
sibling(X,Y):- parent(X,Z),parent(Y,Z), X != Y.
cousin(X,Y) :- parent(X,Xp),parent(Y,Yp),
sibling(Xp,Yp).
cousin(X,Y) :- parent(X,Xp),parent(Y,Yp),
cousin(Xp,Yp).
related(X,Y) :- sibling(X,Y).
related(X,Y) :- related(X,Z), parent(Y,Z).
related(X,Y) :- related(Z,Y) , parent(X,Z).
Thực thi CSTT này bằng DLV ta tìm được tập sự kiện mới thu được như trong hình sau
đây:

Hình 2.2. Kết quả thực thi của chương trình P1


Bài toán 2: Xét CSTT mô tả quan hệ đường đi (path) trong một đồ thị có hướng, gồm các quy
tắc và các sự kiện sau đây:
r1: path(X, Y)  edge(X, Y)
r2: path(X, Y)  edge(X, Z), path(Z, Y)
edge (1, 2), edge (2, 3), edge (3, 4), edge (4, 5), edge (5, 6), edge (6, 7),
edge (7, 8), edge (8, 9), edge (9, 10), edge (10, 11), edge (11, 12)
Mã hóa CSTT bằng DLV, ta được:
edge(1,2). edge(2,3). edge(3,4). edge(4,5).
edge(5,6). edge(6,7). edge(7,8). edge(8,9).
edge(9,10). edge(10,11). edge(11,12).
path(X,Y) :- edge(X,Y).
path(X,Z) :- edge(X,Y), path(Y,Z).
Thực thi CSTT này bằng DLV ta tìm được tập sự kiện mới thu được như trong hình sau
đây:
Bài toán 3: Xem một CSTT gồm các quy tắc và sự kiện sau:
p1(X,Y)  e1(X,Y)
p1(X,Y)  e1(X,Z)  p1(Z,Y)
p2(X,Y)  e2(X,Y)
p2(X,Y)  e2(X,Z)  p2(Z,Y)
p(X,Y)  p1(X,Z)  p2(Z,Y)
Quan hệ của các vị từ e1 và e2 lần lược cho bởi các tập sau:
e1 (a, b), e1 (b, c), e1(c, d)
e2(d, f), e2(f, g), e2 (g, h).
Mã hóa CSTT này bằng DLV, ta được:
e1(a,b). e1(b,c). e1(c,d).
e2(d,f). e2(f,g). e2(g,h).
p1(X,Y) :- e1(X,Y).
p1(X,Y) :- e1(X,Z), p1(Z,Y).
p2(X,Y) :- e2(X,Y).
p2(X,Y) :- e2(X,Z), p2(Z,Y).
p(X,Y) :- p1(X,Z), p2(Z,Y).
Thực thi CSTT này bằng DLV ta tìm được tập sự kiện mới thu được như trong hình sau
đây:

You might also like