Nhƣ vậy quy tắc r đƣợc tô điểm thành quy tắc:
Pbf(X, Y) qbf(X, Z) sbf(Z, Y)
Khi đã hoàn thành việc tô điểm các vị từ trong thân quy tắc, ta có thể tiếp tục với các quy tắc định nghĩa những vị từ này. Nếu có biến thể khác nhau của tô điểm của vị từ đã đƣợc tô điểm thì ta tạo ra bản sao của mỗi quy tắc định nghĩa vị từ đó và dùng biến thể mới này để tô điểm cho đầu quy tắc mới. Sau khi các quy tắc đƣợc xử lý bởi kỹ thuật này, thân của quy tắc mới sẽ bắt đầu đƣợc tô điểm. Chẳng hạn với quy tắc tô điểm pbf(X, Y) qbf(X, Z) qfb(Y, Z), quy tắc này chứa hai phiên bản tô điểm của vị từ q,
p(X, Y) q(X, Z) s(Z, Y)
vì vậy ta tạo ra hai quy tắc trong Pa d
cho mỗi quy tắc trong P có đầu là q. Mỗi quy tắc đƣợc tô điểm bf và một quy tắc đƣợc tô điểm fb.
Ví dụ Xem chƣơng trình Datalog trong ví dụ 3.7: r1: p(X, Y) p1(X, Y) p2(Y, X)
r2: p1(X, Y) e1(X, Y)
r3: p1(X, Y) e1(X, Z) p1(Z, Y) r4: p2(Y, X) e2(Y, X)
r5: p2(Y, X) e2(Y, Z) p2(Z, X)
Trong đó e1, e2 là những vị từ EDB, p1, p2, p là các vị từ IDB. Câu truy vấn ?p(a, Y).
Quy tắc r1 định nghĩa vị từ p, đối đầu tiên X của p bị buộc vào hằng a. Đồ thị truyề n thông tin IPG của quy tắc r1 nhƣ sau:
,
1 2
X X Y
p p p
Trong quy tắc này, thông tin đƣợc truyền từ p vào p1 qua biến X và từ vị từ p1, thông tin đƣợc truyền sang p2 qua các biến X, Y. Nhƣ vậy quy tắc r1 đƣợc tô điểm thành quy tắc: pbf
(X, Y) p1bf(X, Y) p2bb(Y, X)
Lú này vị từ p1 đƣợc tô điểm bf và vị từ p2 đƣợc tô điểm bb, tiếp tục thực hiện việc tô điểm cho các vị từ p1, p2.
Xét quy tắc r3 định nghĩa vị từ p, đối đầu tiên X của p1 bị buộc. Đồ thị truyền thông IPG của quy tắc r3 nhƣ sau: p1 X e1 Z p1
Nhƣ vậy quy tắc r3 đƣợc tô điểm thành quy tắc:
p1bf(X, Y) e1(X, Z) p1bf(Z, Y) Tƣơng tự quy tắc r3 đƣợc tô điểm thành quy tắc:
p2bb(Y, X) e2(Y, Z) p2bb(Z, X) Kết quả nhận đƣợc chƣơng trình tô điểm nhƣ sau: pbf(X, Y) p bf(X, Y) p bb(Y, X)
p1bf(X, Y) e1(X, Y)
p1bf(X, Y) e1(X, Z) p1bf(Z, Y) p2bb(Y, X) e2(Y, X)
p2bb(Y, X) e2(Y, Z) p2bb(Z, X)
Trong ví dụ này thì việc truyền thông tin là rõ ràng bởi vì ta không thể chọn cách thức truyền thông tin nào khác khi xây dựng đồ thị IPG. Tuy nhiên có nhiều tình huống mà có thể có nhiều cách chọn để truyền thông tin trong quy tắc, ta hãy xem lại quy tắc r1 trong ví dụ 3.13, nhƣng ta đảo ngƣợc thứ tự các đích con:
r1: p(X, Y) p2(Y, X) p1(X, Y)
Lúc này đồ thị truyền thông tin IPG của quy tắc r1 nhƣ sau:
,
2 1
X X Y
p p p
và ta đƣợc quy tắc tô điểm:
pbf(X, Y) p2fb(Y, X) p1bb(X, Y) p1bf(X, Y) e1(X, Y)
p1bb(X, Y) e1(X, Z) p1bf(Z, Y) p2fb(Y, X) e2(Y, X)
p2fbY, X) e2(Y, Z) p2bb(Z, X) Ta có thuật toán sau:
Thuật toán 3.3 (Tô điểm chƣơng trình) Vào: Chƣơng trình Datalog P và câu truy vấn q.
Ra: Chƣơng trình tô điểm Pad .
Phƣơng pháp: Thuật toán thực hiện theo các bƣớc sau đây:
1. Khởi đầu tập các quy tắc tô điểm Pad
của chƣơng trình Datalog P là rỗng.
2. Tô điểm đích truy vấn của chƣơng trình ban đầu. Thêm đích đã tô điểm này vào Pa d . 3. Tô điểm đầu các quy tắc và chèn các quy tắc này vào Pa d
4. Đối với mỗi quy tắc r với tô điểm mới đƣợc thêm vào trong tập quy tắc tô điểm, thực hiện tô điểm thân các quy tắc.
5. Nếu ta nhận đƣợc một tô điểm của một vị từ chƣa đƣợc tô điểm hoặc một biến thể mới của một tô điểm của vị từ đã đƣợc tô điểm rồi thì quay lại bƣớc 3. Ngƣợc lại, dừng quá trình tô điểm, ta nhận đƣợc chƣơng trình Pad
gồm các quy tắc đƣợc tô điểm .
Định lý 3.5 [6] Thuật toán tô điểm chƣơng trình ở trên là đúng đắn và dừng sau một số
hữu hạn bƣớc.
Chứng minh: Tính đúng đắn đƣợc suy từ định lý 3.1. Quá trình lặp để tô điểm các quy
tắc sẽ dừng do quá trình lặp để tô điểm vị từ không bao giờ lặp lại vị từ đó và do số vị từ IDB cùng tập các quy tắc trong chƣơng trình là hữu hạn.[]
3.3.2. Tối ƣu bƣớc tô điểm chƣơng trình [7]
Một hạn chế của phép biến đổi ma tập là không xác định đƣợc thứ tự tối ƣu giữa các đích con để thực hiện ở giai đoạn tô điểm. Câu truy vấn đƣợc tô điểm trƣớc tiên nhằm xác định các đối nào của một vị từ là bị buộc và các đối nào là tự do. Chiến lƣợc truyền thông tin sang ngang cho trƣớc sẽ đƣợc dùng trong suốt quá trình tô điểm và thứ tự các đích con trong quy tắc phải đƣợc chỉ ra để thực hiện tô điểm. Vì vậy kỹ thuật ma tập sẽ hiệu quả hơn nếu ta xác định đƣợc một thứ tự giữa các đích con trong quy tắc để hỗ trợ cho quá trình tô điểm. Tuy nhiên, thƣờng thì không có nhiều thông tin để làm cơ sở đánh giá chi phí về thứ tự phép nối giữa các đích con và khi áp dụng kỹ thuật ma tập thì hoặc chấp nhận một thứ tự giống nhƣ thứ tự của các đích con trong quy tắc hoặc sử dụng một thứ tự đƣợc chỉ ra. Ta xét ví dụ sau đây:
Ví dụ 3.8 Cho chƣơng trình P gồm các quy tắc:
r1: p(X, Y) q(X, Z) s(Z, Y)
r2: q(X, Y) v(X, W, V, Y) w(Y, W, U, V) r3: s(X, Y) t(X, Z) u(X, Y)
Trong đó p, q, s là các vị từ IDB, r, u, v, w và t là các vị từ EDB.
Trong bƣớc tô điểm, đích con p(X, Y) trong truy vấn (Q) có tô điểm bf bởi vì đối thứ nhất của nó là đối thứ hai của vị từ EDB r(2, X). Vì vậy, quy tắc r1 đƣợc tô điểm với đầu là pbf. Ta cần phải đƣa ra một quyết định về thứ tự giữa các đích con q và s trong quy tắc r1. Lúc này thông tin duy nhất có thể sử dụng để xác định thứ tự các đích con q và s là biến X bị buộc vào một tập các hằng và nhƣ vậy có thể xác định thứ tự các đích con trong quy tắc r1 là (q, s). Kết quả ta nhận đƣợc chƣơng trình tô điểm Pad nhƣ sau:
ar1: pbf(X, Y) qbf(X, Z) sbf(Z, Y)
ar2: qbf(X, Y) v(X, W, V, Y) w(Y, W, U, V) ar3: sbf(X, Y) t(X, Z) u(X, Y)
Câu truy vấn (Q) đƣợc tô điểm: ? r(2, X) p(X, Y)
Bƣớc biến đổi chƣơng trình của phép biến đổi ma tập sẽ biến đổi chƣơng trình Pad thành chƣơng trình Mag_Pad sau đây:
mar1: pbf(X, Y) mag_pbf(X) qbf(X, Z) sbf(Z, Y)
mar2: qbf(X, Y) mag_qf(X) v(X, W, V, Y) w(Y, W, U, V) mar3: sbf(X, Y) mag_sbf(X) t(X, Z) u(X, Y)
mar4: mag_pbf(X) r(2, X) mar5: mag_qbf(X) mag_pbf(X)
mar6: mag_sbf(X) mag_pbf(X) qbf(X, Z) Câu truy vấn: (Q) ?r(2, X) pbf
(X, Y)
Trong chƣơng trình Mag_Pad, việc định giá trên quy tắc mar1 phụ thuộc vào số các bộ nhận đƣợc của vị từ mag_pbf(X). Mặt khác, từ quy tắc mar4, ta có thể xác định các bộ của r(2, X), từ đó có thể tính đƣợc các bộ của mag_pbf(X).
Nhƣ vậy, nếu biết thông tin về các vị từ cung cấp trị buộc thì điều này sẽ giúp ta xác định đƣợc thứ tự của các đích con trong bƣớc tô điểm. Tuy nhiên, chỉ khi thực hiện
xong bƣớc thứ nhất thì ta mới nhận đƣợc vị từ này. Ta có thể giải quyết vấn đề này bằng cách áp dụng vị từ magic đối với câu truy vấn (Q) ngay trong bƣớc tô điểm. Từ việc phân tích trên ta có thể cải tiến bƣớc tô điểm chƣơng trình cuả phép biến đổi ma tập nhƣ sau:
Sử dụng vị từ magic để biến đổi câu truy vấn, từ đó xác định một thứ tự giữa các đích con trong các quy tắc để biến đổi chƣơng trình P thành chƣơng trình tô điểm Pa d
.
Ví dụ 3.9 Xem chƣơng trình P trong ví dụ 3.14 Từ câu truy vấn (Q) ta tạo ra quy tắc magic (mar4) định nghĩa vị từ mag_pbf và thêm vị từ magic này nhƣ là một đích con vào quy tắc r1, ta nhận đƣợc chƣơng trình P’ nhƣ sau:
r1’: pbf
(X, Y) mag_pbf(X) q(X, Z) s(Z, Y) r2: q(X, Y) v(X, W, V, Y) w(Y, W, U, V) r3: s(X, Y) t(X, Z) u(X, Y)
r4: mag_pbf(X) r(2, X)
Để ý rằng các đích con trong quy tắc r1’ không đƣợc tô điểm bởi vì chúng ta chƣa xác định một thứ tự nối giữa các đích con q và s. Lúc này với các thông tin về vị từ mag_pbf(X) cùng với những thông tin của các đích con q và s ta có thể xác định một thứ tự của các đích con.
3.3.3. Cải tiến việc thực thi chƣơng trình Mag_Pad [6]
3.3.3.1. Hạn chế tính toán dƣ thừa trên chƣơng trình viết lại bởi phép biến đổi ma tập
Sau khi thực hiện phép biến đổi ma tập, ta nhận đƣợc một chƣơng trình mới và việc tìm kiếm lời giải của chƣơng trình viết lại này thƣờng đƣợc thực hiện bởi các thuật toán định giá dƣới lên chẳng hạn thuật toán nửa ngây thơ, thuật toán này cho phép ngăn chặn việc tính toán lại các sự kiện đã đƣợc tính ở bƣớc trƣớc. Tuy nhiên, nó không ngăn chặn đƣợc việc dẫn xuất ra các vị từ magic dƣ thừa.
Giữa các vị từ magic tô điểm, mặc dầu không có quan hệ về cú pháp nhƣng về mặt ngữ nghĩa, một vị từ magic tô điểm có thể chứa các vị từ magic tô điểm khác. Vấn đề ở đây chính là sử dụng các thông tin trong các tô điểm để xác định xem một vị từ magic có chứa vị từ magic khác hay không. Việc kiểm tra quan hệ giữa các vị từ magic có thể thu hẹp thành việc kiểm tra giữa các vị từ tƣơng ứng của chúng. Điều này đƣợc thực hiện qua thuật toán sau đây:
Thuật toán 3.4 (Kiểm tra quan hệ giữa các vị từ magic đƣợc tô điểm) [6]
Vào: Giả sử _ 1 _ a( ) mag p c và _ 2 _ ( )
mag p d là hai vị từ magic lần lƣợt có tô điểm là và .
Ra:Cho kết quả vị từ mag_ p c1a( )_ có chứa vị từ
_ 2
_ ( )
mag p d hay không.
Phƣơng pháp: Thuật toán thực hiện theo các bƣớc:
Bƣớc 1: Biến đổi các vị từ mag_p c1a( )_ thành hạng thức
_ 1( )
p x , trong đó x_ bao gồm các hằng trong c_ tƣơng ứng với ký tự 'b' và các biến phân biệt tƣơng ứng với ký tự 'f' trong
. Tƣơng tự, biến đổi các vị từ mag_ p2 ( )d_ thành hạng thức
_
2( )
p y .
Bƣớc 2: Nếu tồn tại hợp nhất tử tổng quát nhất (mgu) của
_ 1( ) p x và _ 2( ) p y sao cho p1 chính là p2 thì kết luận vị từ _ 1 _ a( ) mag p c chứa vị từ _ 2 _ ( ) mag p d , ngƣợc lại thì _ 1 _ a( )
mag p c không chứa vị từ
_ 2
_ ( )
mag p d .
Định lý 3.6 [6] Thuật toán 3.4 là đúng đắn
Chứng minh: Rõ ràng nếu tồn tại mgu của
_ 1( ) p x và _ 2( ) p y sao cho _ 1( ) p x = _ 2( ) p y thì _ 1( ) p x chứa _ 2( )
p y , điều này có nghĩa mag_ p c1a( )_ chứa
_ 2
_ ( )
Để ý rằng phép hợp nhất trở nên đơn giản hơn nhiều nếu một trong hai vị từ cần hợp nhất là nguyên tố nền. Trong trƣờng hợp này thì phép hợp nhất thu hẹp thành phép đối sánh hạng thức.[]
Ví dụ 3.10 Xét hai vị từ mag_pbff(a) và mag_pbbf(a, b). Ta có mag_pbff(a) tƣơng ứng với đích ?p(a,X,Y) và mag_pbbf(a, b) tƣơng ứng với đích ?p(a, b, Z), mặt khác hợp nhất tử tổng quát nhất của p(a, X, Y) và p(a, b, Z) là {X/b, Y/Z} và p(a, X, Y) = p(a, b, Z). Vì vậy mag_pbff(a) chứa mag_pbbf(a, b).
Ví dụ 3.11 Xét chƣơng trình Datalog P trong ví dụ 3.8:
r1: totien(X, Y) bome(X, Y)
r2: totien(X, Y) bome(X, Z) totien(Z, Y)
Trong đó: bome là vị từ EDB, totien là vị từ IDB. Giả sử quan hệ đối với vị từ EDB
bome gồm các bộ (a, b), (b, c), (c, d). Câu truy vấn ?totien(X, d).
Sử dụng chiến lƣợc truyền thông tin từ trái sang phải, sau giai đoạn 1 của phép biến đổi ma tập ta nhận đƣợc chƣơng trình tô điểm Pad
sau đây: ar1: totienfb(X, Y) bome(X, Y)
ar2: totienfb(X, Y) totienfb(Z, Y) bome(X, Z) ar3: totienbb(Z, Y) bome(X, Y)
ar4: totienbb(X, Y) totienbb(Z, Y) bome(X, Z) Đích truy vấn có tô điểm: ?totienfb(X, d)
Sau giai đoạn 2 của phép biến đổi ma tập, ta nhận đƣợc chƣơng trình: mar1: totienfb(X, Y) mag_totienfb(Y) bome(X, Y)
mar2: totienfb(X, Y) mag_totienfb(Y) totienbb(Z, Y) bome(X, Z) mar3: mag_totienbb(Z, Y) mag_totienfb(Y) bome(X, Z)
mar4: totienbb(X, Y) mag_totienbb(Z, Y) bome(X, Y)
mar5: totienbb(X, Y) mag_totienbb(X, Y) totienbb(Z, Y) bome(X, Z) mar6: mag_totienbb(Z, Y) mag_totienbb(X, Y) bome(X, Z)
mar7: mag_totienfb(d)
Áp dụng thuật toán nửa ngây thơ cho chƣơng trình MPa d
này, ta nhận đƣợc: Bƣớc 1: mag_totienfb(d) đƣợc tạo ra.
Bƣớc 2: totienfb(c, d), mag_totienbb(b, d), mag_totienbb(c, d), mag_totienbb(d, d) đƣợc thêm vào.
Bƣớc 3: totienbb(c, d) đƣợc thêm vào.
Bƣớc 4: totienbb(b, d), totienfb(b, d) đƣợc thêm vào. Bƣớc 5: totienbb(a, d) đƣợc thêm vào.
Bƣớc 6: Kết thúc, ta nhận đƣợc lời giải câu truy vấn (c, d), (b, d), (a, d).
Rõ ràng các vị từ mag_totienbb(b, d), mag_totienbb(c, d), mag_totienbb(d, d) đƣợc tạo ra ở bƣớc 2 là chứa trong vị từ magic biểu diễn câu truy vấn ban đầu
mag_totienfb(d), vì vậy chúng là dƣ thừa và không cần phải tính.
Tóm lại, tính toán dƣ thừa trong các thuật toán định giá câu truy vấn trên chƣơng trình viết lại bởi phép biến đổi ma tập sẽ tránh đƣợc bằng cách kết hợp thêm thuật toán kiểm tra vị từ magic đƣợc tạo ra ở mỗi bƣớc có chứa trong vị từ magic đã tạo ra ở bƣớc trƣớc hay không, nếu có thì ta loại bỏ nó.
3.3.3.2. Kết hợp các chiến lƣợc Sips trong quá trình định giá chƣơng trình
Mag_Pad
Chƣơng trình Mag_Pad
thƣờng đƣợc định giá bởi các thuật toán lặp kiểu dƣới lên, các thuật toán này đã không xem xét số các sự kiện đƣợc phát sinh trong quá trình định giá câu truy vấn, tức là số các sự kiện đƣợc tạo ra trong mỗi bƣớc lặp. Trong mỗi bƣớc lặp nếu ta chọn đƣợc một chiến lƣợc truyền thông tin “tốt” thì có thể giảm bớt sự phát sinh các sự kiện dƣ thừa và đạt đƣợc hiệu quả tối ƣu. Điều này thƣờng không thể nhận đƣợc trên chƣơng trình Mag_Pad
theo chiến lƣợc truyền thông tin chọn trƣớc. Vấn đề đặt ra trong việc định giá câu truy vấn là làm thế nào tránh đƣợc việc chọn một chiến lƣợc Sips kém hiệu quả trong khi lại không biết đƣợc một chiến lƣợc Sips nào tốt nhất. Tuy nhiên, ta có thể có những thông tin bổ sung về số sự kiện có liên
quan trong suốt quá trình định giá câu truy vấn. Trong việc xác định một chiến lƣợc Sips ở mỗi bƣớc lặp, ta cần xem xét một số vấn đề sau:
Các vị từ magic có thể chứa các vị từ magic khác, chẳng hạn mag_pbf(a) chứa
mag_pbb(a, k). Nghĩa là, với một tập quy tắc magic đã cho mà ở đó các truy vấn con
mag_pbf(a) và mag_pbf(a, k) đƣợc tạo ra trong suốt quá trình định giá, tất cả câu trả lời đối với truy vấn con thứ hai cũng sẽ đƣợc tạo ra bởi truy vấn con đầu tiên (tổng quát hơn). Vì vậy, các truy vấn con mag_pbf(a, _) không cần phải đƣợc định giá trong tập quy tắc này.
Các quy tắc ban đầu chỉ nên đƣợc xem xét lại sau khi một số khá lớn các sự kiện đƣợc phát sinh. Nhƣ vậy, chúng ta cần có một tiêu chuẩn chọn để xác định vào thời điểm nào thì nên thay đổi sang một chiến lƣợc Sips khác tốt hơn.
Ví dụ 3.12 Xét chƣơng trình Datalog P trong ví dụ 3.8
r1: totien(X, Y) bome(X, Y)
r2: totien(X, Y) bome(X, Z) totien(Z, Y) Câu truy vấn là ? totien(a, Y).
Hai chiến lƣợc truyền thông tin có thể đƣợc chọn để định giá các đích con trong thân quy tắc của totien là từ trái sang phải và từ phải sang trái.
Dùng chiến lƣợc trái sang phải ta nhận đƣợc tập các quy tắc sau:
totienbf(X, Y) mag_totienbf(X) bome(X, Y)
totienbf(X, Y) mag_totienbf(X) bome(X, Z) totien(Z, Y)
mag_totienbf(Z) mag_totienbf(X) bome(X, Z)
Dùng chiến lƣợc phải sang trái ta nhận đƣợc tập các quy tắc sau:
totienbf(X, Y) mag_totienbf(X) bome(X, Y)
totienbf(X, Y) mag_totienbf(X) totien(Z, Y) bome(X, Z)
mag_totienff mag_totienbf(X)
totienff(X, Y) mag_totienff totien(Z, Y) bome(X, Z) Hai chiến lƣợc này dẫn đến các tập truy vấn con Q1
= {mag_totienbf} và Q2 = {mag_totienbf, mag_totienff}. Trong Q2 truy vấn con mag_totienff chứa truy vấn con
mag_totienbf. Nhƣ vậy việc chọn chiến lƣợc Sips từ phải sang trái để định giá các đích con dẫn đến câu truy vấn ?totien(X, Y) và kiểm tra a có thuộc X không? Tuy nhiên, để ý rằng mag_totienff chứa, mag_totienbf, vì vậy thuộc chiến lƣợc từ trái sang phải là tốt hơn chiến lƣợc từ phải sang trái.
3.3.4. Phƣơng pháp ma tập cải tiến [6]
Vào: Chƣơng trình Datalog P và câu truy vấn q.
Ra: Câu trả lời truy vấn.
Phƣơng pháp
1. Tô điểm chƣơng trình Datalog đã cho thành chƣơng trình tô điểm Pad
theo thuật toán tô điểm chƣơng trình.
2. Biến đổi chƣơng trình P thành chƣơng trình Mag_Pad. 3. Định giá chƣơng trình Mag_Pad
bằng thuật toán dƣới lên nhƣ nửa ngây thơ, trong đó ở mỗi bƣớc lặp có kiểm tra quan hệ bao hàm giữa các vị từ magic đƣợc tô điểm để hạn chế tính toán dƣ thừa và một chiến lƣợc truyền thông tin sẽ đƣợc chọn dựa vào kích thƣớc nhỏ nhất của các quan hệ của các vị từ đƣợc tạo ra tại thời điểm đó.