ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT QUA MẠNG
________________
BÁO CÁO THU HOẠCH MÔN HỌC
BIỂU DIỄN TRI THỨC & ỨNG DỤNG
Đề tài: Cài đặt cấu trúc lưu trữ mô
hình COKB trên ngôn ngữ hướng đối
tượng
Giáo viên hướng dẫn: PGS.TS Đỗ Văn Nhơn
Học viên thực hiện: Du Chí Hào
Mã số học viên: CH1101083
Tp.HCM 2012
Lời nói đầu
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Với việc phát triển và phân bố ngày càng rộng rãi trong tất cả các lĩnh
vực, dữ liệu là rất lớn và vẫn chưa khác thác để tìm thấy những tính chất, quy
luật, điểm mạnh và điểm yếu. Do đó, trí tuệ nhân tạo ra đời, đã giúp cho máy
tính có khả năng phân tích, suy luận ra các quy luật để tìm ra các tri thức mới.
Biểu diễn tri thức cũng là một trong những phần quan trọng trong trí tuệ
nhân tạo. Biểu diễn tri thức cũng đã được áp dụng vào các lĩnh vực như giáo
dục để giải quyết các bài toán, lý, hóa v.v…; y học để chuẩn đoán bệnh cho
bệnh nhân v.v…
Trong quá trình học tập môn Biểu diễn tri thức và ứng dụng, thầy
PGS.TS Đỗ Văn Nhơn đã truyền đạt mô hình COKB (Knowledge Bases of
Computational Objects) và cài đặt cấu trúc lưu trữ trên dựa trên phần mềm
Mapple. Trong bài thu hoạch này, em xin nêu ra ý tưởng về cài đặt cấu trúc lưu
trữ dựa trên ngôn ngữ hướng đối tượng, cụ thể là sử dụng ngôn ngữ C#. Dựa
trên cấu trúc lưu trữ đó, em đã thực hiện một demo để tính toán dựa trên các tri
thức đã cài đặt sẵn theo mô hình COBK và mạng các đối tượng tính toán
• Facts là tập các sự kiện của đối tượng.
• Rules là tập của các luật suy diễn trên tập Facts.
Ví dụ: tri thức về tam giác bao gồm các góc, cạnh v.v… được thể hiện
qua C-object như sau:
Attrs = {A, B, C, a, b, c, R, S, p, }
F = {A+B+C=π; a/sin(A)=2R; b/sin(B)=2R; c/sin(C)=2R;
a/sin(A)=b/sin(B); },
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Facts = {a+b>c; a+c>b; b+c>a ; …},
Rules = { {a>b}<=>{A>B}; {b>c}<=>{B>C}; {c>a}<=>{C>A};
{a=b}<=>{A=B}; {a^2= b^2+c^2}=>{A=pi/2};
{A=pi/2}=>{a^2 = b^2+c^2, bc}; }.
Một đối tượng còn có những hành vi cơ bản cho việc giải quyết các bài
toán dựa trên những thuộc tính của đối tượng đó. Một đối tượng được trang bị
khả năng giải quyết các bài toán như:
a) Xác định bao đóng của một tập các thuộc tính.
b) Thực thi suy diễn và đưa ra đáp án cho những câu hỏi về những bài
toán có dạng: xác định một số thuộc tính từ một số thuộc tính khác
cho trước.
c) Thực thi tính toán
d) Đề xuất hoàn tất giả thiết nếu cần thiết.
Ví dụ: Cho một đối tượng tam giác với giả thiết cho trước là {a, B, C},
câu hỏi là tính diện tích S. Đối tượng tam giác đó sẽ cho lời giải gồm ba bước
sau:
• Bước 1: xác định A, theo quan hệ F: A = π–B–C;
• Bước 2: xác định b, theo quan hệ F: b= a.sin(B)/sin(A);
• Bước 3: xác định S, theo quan hệ F: S = a.b.sin(C)/2;
2. Thành phần của mô hình COKB
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
• Rules: là tập hợp các luật suy diễn. Các luật suy diễn thể hiện cho các
phát biểu, định lý, nguyên lý, công thức v.v… Hầu hết các luật này
đều được viết dưới dạng “if <facts> then <facts>” trong đó facts là tập
các sự kiện.
Theo mô hình COKB, cơ sở tri thức có thể tổ chức như sau:
a) Một từ điển gồm các khái niệm, trong đó bao gồm các loại đối tượng,
thuộc tính, toán tử, hàm, quan hệ và các khái niệm liên quan.
b) Bảng về sự mô tả các cấu trúc và chức năng của các đối tượng. Ví dụ:
chúng ta có thể yêu cầu một tam giác tính toán và trả về các thuộc
tính của nó.
c) Bảng mô tả quan hệ phân cấp giữa các đối tượng.
d) Bảng mô tả các quan hệ khác giữa các khái niệm.
e) Bảng mô tả các biểu diễn tri thức về toán tử.
f) Bảng mô tả các biểu diễn tri thức về hàm.
g) Bảng mô tả các loại sự kiện. Ví dụ: Một quan hệ sự kiện bao gồm
loại quan hệ và danh sách của các đối tượng trong quan hệ.
h) Bảng mô tả các luật. Ví dụ: Một luật suy diễn bao gồm phần lý thuyết
và phần kết luận. Cả hai đều là các danh sách của các sự kiện.
i) Một danh sách hay một tập hợp các luật.
j) Một danh sách hay một tập hợp các mẫu bài toán.
3. Các loại sự kiện trong mô hình COBK
Mô hình COBK gồm có 11 loại sự kiện được chấp nhận. Các sự kiện này
được đề xuất từ quá trình nghiên cứu các yêu cầu thực tế và các vấn đề trong
các miền tri thức khác nhau.
Sự kiện loại 1: Thông tin về loại đối tượng.
Ví dụ:
• ABC là một tam giác vuông.
• ABCD là hình bình hành.
Ví dụ:
Hai đường thẳng song song.
Đường thẳng vuông góc với mặt phẳng.
Một điểm thuộc về một đoạn thẳng.
Sự kiện loại 7: Tính xác định của một hàm.
Sự kiện loại 8: Tính xác định của một hàm thông qua một giá trị hay
một biểu thức hằng.
Sự kiện loại 9: Sự bằng nhau giữa một đối tượng với một hàm.
Sự kiện loại 10: Sự bằng nhau giữa một hàm với một hàm khác
Sự kiện loại 11: Sự phụ thuộc của một hàm theo các hàm hay các đối
tượng khác thông qua một công thức tính toán.
Năm sự kiện cuối cùng có liên quan đến tri thức về hàm và thành phần
Funcs trong mô hình COKB.
II. Mạng đối tượng tính toán
Một quan hệ tính toán F giữa các thuộc tính của các đối tượng hoặc giữa
các đối tượng được gọi mà một quan hệ giữa các đối tượng. Một mạng các đối
tương tính toán bao gồm một tập các C-objects O = {O1, O2, O3, O4, … , On}
và một tập các quan hệ tính toán F = {f1, f2, f3, f4, … , fm}. Mạng các đối
tượng tính toán được ký hiệu (O, F).
Các ký hiệu trong mạng tính toán:
M(fi) = tập các thuộc tính của các đối tượng tính toán trong quan hệ fi.
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
M = tập các thuộc tính của các C-objects.
Mi = M M(Oi), i = 1, 2, 3, …, m. Mi là tập các thuộc tính trong đối
tượng Oi.
Trong một mạng C-Objects (O, F), chúng ta phải giải quyết vấn đề để
xác định (hoặc tính toán) các thuộc tính trong tập G từ các thuộc tính cho trước
Bước 3:
Repeat
Hold H;
Select f F;
while not Solution_found and (f found) do
begin
if (applying f from H produces new facts) then
begin
H H M(f);
Add f to Solution;
end;
if G H then
Solution_found true;
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Select new f F;
end; { while }
Until Solution_found or (H = Hold);
Bước 4:
if not Solution_found then
begin
Select Oi O such that Oi(H) <> H;
if (the selection is successful) then
begin
H Oi(H);
Add Oi to Solution;
if (G H) then
begin
Solution_found true;
A4 = { O1.a, O1.A, O2.A, O1.b, O1.c, O3.a, O4.a},
A5 = { O1.a, O1.A, O2.A, O1.b, O1.c, O3.a, O4.a, O2.b},
A6 = { O1.a, O1.A, O2.A, O1.b, O1.c, O3.a, O4.a, O2.b, O2.c},
A7 = { O1.a, O1.A, O2.A, O1.b, O1.c, O3.a, O4.a, O2.b, O2.c, O2.a}.
PHẦN II : CÀI ĐẶT CẤU TRÚC LƯU TRỮ CỦA MÔ HÌNH
COKB TRÊN NGÔN NGỮ HƯỚNG ĐỐI TƯỢNG
I Tổng quan
Mô hình COKB đã được cài đặt thành công và thể hiện tính khả thi khi
xây dựng các chương trình phần mềm có liên quan đến biểu diễn tri thức, cụ thể
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
là cài đặt trên phần mềm Maple. Do phần mềm Maple là phần mềm tính phí và
ngôn ngữ lập trình trên Maple không được phổ biến, nên một số công ty phần
mềm có thể sẽ không đầu tư vào Mapple. Nhưng mô hình COBK rất hay trong
việc giải quyết các vấn đề tính toán đòi hỏi phải có tính suy luận. Nên trong bài
thu hoạch này, em xin phép nêu lên ý tưởng về cài đặt mô hình này trên ngôn
ngữ hướng đối tượng, cụ thể là ngôn ngữ C# phổ biến. Do mô hình COBK cũng
sử dụng cách tiếp cận hướng đối tượng để biểu diễn tri thức.
III. Thiết kế và cài đặt
1. Đối tượng tính toán
C-objects được cài đặt thông qua các class. Trong class đó sẽ bao gồm
tất cả các thuộc tính của đối tượng, các hành vi, biểu thức và các luật suy diễn.
Theo mô hình COKB thì các đối tượng tính toán được chia thành các đối tượng
cơ bản, đối tượng cấp một, đối tượng cấp hai v.v… Và trong một đối tượng tính
toán phải có một động cơ suy diễn nội tại của nó.
Đối với các đối tượng tính toán cơ bản như điểm, góc trong 1 tam giác,
ta có thể cài đặt như sau:
public class Diem
{
_diemDau = new Diem(dsDiem[0]);
_diemCuoi = new Diem(dsDiem[1]);
}
public string TenCanh
{
get
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
{
return _diemDau.TenDiem + _diemCuoi.TenDiem;
}
}
}
Trong đó, điểm đầu và điểm cuối tương ứng với hai điểm của đoạn
thẳng, thuộc tính "Chiều dài" dùng để lưu lại chiều dài của đoạn thẳng. Trong
đối tượng cấp 1 này có sử dụng đối tượng cơ bản lả "Diem".
Với đối tượng cấp 2 trở lên có thể sử dụng các đối tượng cơ bản và đối
tượng cấp 1. Ví dụ: trong class tam giác thì có các đối tượng cơ bản là Diem,
Canh, Goc v.v
public class TamGiac
{
private Diem _diem1;
private Diem _diem2;
private Diem _diem3;
private Canh _canh1;
private Canh _canh2;
private Canh _canh3;
private Goc _goc1;
private Goc _goc2;
đích của việc tách riêng thành 2 phần: một phần là một mảng chứa các thuộc
tính và một phần là các thuộc tính trong class với mục đích sử dụng mảng cho
việc suy diễn, sau đó các giá trị sẽ được lưu lại trong các thuộc tính của class
cho các mục đích so sánh, tính toán sau này.
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Để khai báo cho tập các biểu thức tính toán, ta cũng sử dụng tương tự
một mảng để lưu trữ các biểu thức với các phần tử trong mảng là một chuỗi.
Mảng này được lưu trữ với định dạng “Tên hàm trong class:Diễn giải biểu
thức:tập các thuộc tính liên quan đến công thức”. Ví dụ, ta có mảng:
BieuThucF = new string[] { "TinhChuVi: canh1 + canh2 + canh3 =
ChuVi: canh1, canh2, canh3, ChuVi }.
Trong mảng trên, được chia thành 3 thành phần:
• TinhChuVi: Khi chương trình đang thực thi suy diễn, nếu biểu thức
trên có thể tạo ra sự kiện mới thì chương trình sẽ tự động gọi phương
thức TinhChuVi() trong class TamGiac, sau đó phương thức
TinhChuVi() sẽ trả về những giá trị cần tính.
• canh1 + canh2 + canh3 = ChuVi: là diễn giải cho biểu thức.
• canh1, canh2, canh3, ChuVi: là tập các thuộc tính có liên quan trong
biểu thức. Nếu như giả thiết có canh2, canh3, ChuVi thì hàm
TinhChuVi có thể tính được giá trị còn lại là canh1. Đây là tập được
sử dụng cho việc suy diễn.
Hàm TinhChuVi() được cài đặt như sau:
public string TinhChuVi()
{
string solution = string.Empty;
if (!_canh1.ChieuDai.HasValue)
{
_canh1.ChieuDai = _chuVi.GiaTri - (_canh2.ChieuDai +
phương thức muốn gọi. Ví dụ: hamSuKien = “TinhChuVi” thì sau khi
GetMethod xong, phương thức TinhChuVi trong class TamGiac sẽ được gọi
thực thi.
Với tập các sự kiện Facts của đối tương tính toán, ta cũng cài đặt tương
tự như tập các biểu thức F. Nhưng do so sánh có hai vế nên trong tập các thuộc
tính sẽ được chia làm hai phần tương ứng với vế trái và vế phải của phép so
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
sánh và hàm trả về phải là giá trị true/false. Ví dụ, trong tam giác ABC, tập
Facts có thể được cài đặt như sau:
SuKienF = new string[] { "SoSanhCanh12VS3: canh1 + canh2 > canh3:
canh1, canh2 : canh3 }.
SuKienF được chia thành 3 thành phần:
• SoSanhCanh12VS3: Khi chương trình đang thực thi suy diễn, nếu
phương thức trả về giá trị true thì sự kiện đó được xem như là một sự
kiện mới.
• canh1 + canh2 > canh3: là diễn giải cho sự kiện.
• canh1, canh2: là tập các thuộc tính trong vế trái của sự kiện.
• canh3: là tập các thuộc tính trong vế phải của sự kiện.
Hàm SoSanhCanh12VS3 được cài đặt như sau:
public bool SoSanhCanh12VS3()
{
if (_canh1.ChieuDai + _canh2.ChieuDai > _canh3.ChieuDai)
{
return true;
}
else
{
return false;
cho đối tượng đó kế thừa từ BaseClass. Ví dụ: class TamGiac sẽ kế thừa
BaseClass, TamGiacVuong kế thừa từ class TamGiac, do nút gốc trong quan hệ
kế thừa này là BaseClass nên các lớp TamGiac, TamGiacVuong không cần phải
viết lại bộ động cơ suy diễn nội tại.
Thuật toán được áp dụng cho bộ suy diễn nội tại là áp dụng suy diễn tiến
trong thuật toán “Mạng tính toán với các biến số đơn giản” (Computational
Networks with Simple Valued Variables). Thuật toán được mô tả như sau:
Thuật toán 2:
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Bước 1: Solution empty;
Bước 2:
if G H then
begin
Solution_found true;
goto step 5;
end
else
Solution_found false;
Bước 3:
Repeat
Hold H;
Select f F;
while not Solution_found and (f found) do
begin
if (applying f from H produces new facts) then
begin
H H M(f);
Add f to Solution;
bằng cách có thể chuyển sang ngôn ngữ C++ với cấu trúc lưu trữ tương tự.
Đối với thành phần R, ta sử dụng một mảng QuanHeTrenC để thể hiện
tất cả các quan hệ trên các C-objects. Mảng QuanHeTrenC được định dạng như
sau:
QuanHeTrenC = new string[] { TrungDiem:M_TrungDiem_AB:M,
AB };
Trong đó:
• TrungDiem: Khi chương trình đang thực thi suy diễn, nếu phương
thức TrungDiem tạo ra được sự kiện mới (AM = BM v.v…) hay các
giá trị mới (như cạnh AM, BM v.v…) thì thêm sự kiện mới được tạo
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
đó vào tập giả thiết để từ đó chương trình thực thi tiếp các phép tính
còn lại.
• M_TrungDiem_AB: là diễn giải cho quan hệ.
• M, AB: tập các thuộc tính có liên quan trong quan hệ.
Cách cài đặt cho các thành phần còn lại cũng tương tự.
3. Mạng các đối tượng tính toán
Mạng các đối tượng tính toán có liên quan đến các thành phần:
• O: tập các các đối tượng tính toán.
• F: tập các quan hệ tính toán giữa các phần tử trong tập O.
• H: giả thiết cho trước
• G: kết quả cần tìm.
Trong phần trên, ta đã xây dựng class MoHinhCOKB để chứa các thành
phần trong mô hình COBK. Trong đó, Hashtable đã được mô tả sẽ lưu trữ các
đối tượng tính toán được phân tích trong giả thiết H. Để lưu trữ được các đối
tượng trên đề bài. Chúng ta quy ước định dạng cho đề bài như sau:
Declare:TamGiac|ABC:Canh|AB=4;Canh|
AC=3;ChuVi=10#Declare:TamGiac|DEF:Canh|DE=5;Canh|EF=3
KieuDoiTuong2|TenDoiTuong2 : KieuThuocTinh|TenThuocTinh
Ví dụ: cho tam giác ABC và tam giác DEF, cạnh AC = cạnh DF sẽ được
viết bằng: TamGiac|ABC:Canh|AC=TamGiac|DEF:Canh|DE.
Một đề bài hoàn chỉnh sẽ bao gồm các khai báo đối tượng (tương ứng
với tập O), các quan hệ tính toán (tương ứng với tập F), các thuộc tính với giá
trị cho trước trong tập H và câu hỏi. Để tiến hành suy diễn, ta tạo phương thức
BoSuyDienPhatSinhLuat() trong class MoHinhCOKB. Phương thức này áp
dụng thuật toán 1 trong phần 1.II để tiến hành suy diễn.
Như vậy trong class MoHinhCOKB sẽ bao gồm các thành phần sau:
MÔN HỌC : BIỂU DIỄN TRI THỨC & ỨNG DỤNG