Tải bản đầy đủ (.docx) (36 trang)

Cài đặt cấu trúc lưu trữ mô hình COKB trên ngôn ngữ hướng đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (475.79 KB, 36 trang )

ĐẠ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


(Networks of Computaionals Objects).
Em xin chân thành cám ơn thầy PGS.TS Đỗ Văn Nhơn đã truyền đạt
những kiến thức quý báu cho em về bộ môn “Biểu diễn tri thức và ứng dụng”
để em có thể hoàn thành bài thu hoạch 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
Mục lục
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
PHẦN I : CƠ SỞ LÝ THUYẾT
I. Mô hình COKB
1. Đối tượng tính toán
Một đối tượng tính toán (Computational Object) viết tắt là C-object bao
gồm các tính chất sau:
a) Nó có các thuộc tính có giá trị. Một tập hợp bao gồm tất cả các thuộc
tính của đối tượng O sẽ được ký hiệu bởi M(O).
b) Có những quan hệ tính toán nội tại giữa các thuộc tính bên trong một
C-object O. Những quan hệ đó được thể hiện theo những đặc trưng
của một đối tượng:
- Cho một tập con A của M(O). Đối tượng O có thể thể hiện những
tính chất mà có thể được xác định từ A.
- Đối tượng O có thể cho giá trị của một thuộc tính cần lấy.
- Nó còn có thể thể hiện các tiến trình suy diễn nội tại trong quá
trình xác định các thuộc tính.
Cấu trúc của C-object bao gồm 4 phần chính: Attrs, F, Facts, Rules.
Trong đó:
• Attrs là tập các thuộc tính.
• F là tập các biểu thức được gọi là quan hệ 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

Mô hình cơ sở tri thức của các C-objects (mô hình COBK) bao gồm 6
thành phần sau:
(C, H, R, Ops, Funcs, Rules)
Trong đó:
• C: là tập các khái niệm về C-objects. Mỗi khái niệm trong C là một
lớp của C-objects.
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
• H: là tập hợp các quan hệ phân cấp giữa các khái niệm. Quan hệ này
là một quan hệ theo thứ tự trên tập C. Hình dưới đây thể hiện những
quan hệ đặc biệt đó trong các lớp của tam giác:
• R: là tập hợp các quan hệ khác trên C-object. Trong trường hợp a quan
hệ với r thì quan hệ đó là quan hệ nhị phân và quan hệ đó có thể có
các tính chất phản xạ, đối xứng, bắt cầu v.v… Ví dụ: quan hệ “Thuộc”
giữa 1 điểm và 1 đường thẳng, quan hệ “Trung điểm” giữa một điểm
và một đoạn thẳng, v.v…
• Ops: là tập hợp các toán tử trên tập C. Thành phần này thể hiện một
phần tri thức về toán tử trên các đối tượng. Hầu hết các miền tri thức
đều có một thành phần bao gồm các toán tử. Trong hình học giải tích,
vector có một số toán tử như là tích vô hướng giữa các vector, khoảng
cách giữa 2 điểm trong một vector v.v…
• Funcs: là tập hợp các hàm giữa các C-objects. Tri thức về hàm còn là
một loại phổ biến của tri thức trong hầu hết các miền tri thức trong
thực tế, đặc biệt là các lãnh vực về khoa học tự nhiên như toán, lý ,
hóa. Ví dụ: trong hình học giải tích, chúng ta có các hàm như sau:
khoảng cách giữa 2 điểm, khoảng cách từ một điểm tới một đường
thẳng, phép chiếu một điểm hoặc một đường thẳng trên một mặt
phẳng.
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
• 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.

• Ma trận A là một ma trận vuông.
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ự kiện loại 2: Tính xác định của một đối tượng hay của một thuộc tính
của đối tượng.
Sự kiện loại 3: Tính xác định của một đối tượng hay của một thuộc tính
của đối tượng thông qua một giá trị hay một biểu thức hằng.
Ví dụ:
• Trong tam giác ABC, giả sử chiều dài cạnh BC = 5.
• Trong mặt phẳng (P) có phương trình 2x + 3y –z + 6 = 0 và điểm M
có tọa độ (1, 2, 3).
Sự kiện loại 4: Sự bằng nhau của một đối tượng hay một thuộc tính của
đối tượng với một đối tượng hay một thuộc tính khác. Sự kiện loại 4 rất hay
gặp, và có rất nhiều các vấn đề liên quan tới nó trên cơ sở tri thức.
Ví dụ:
Cho hình bình hành ABCD. M và N là 2 điểm của đoạn thẳng AC sao
cho AM = CN. Chứng minh hai tam giác ABC và CDN bằng nhau.
Trong bài toán trên, chúng ta phải xác định sự bằng nhau giữa các C-
objects.
Sự kiện loại 5: Sự phụ thuộc giữa các đối tượng và các thuộc tính của
các đối tượng thông qua một công thức tính toán hay một đẳng thức theo các
đối tượng hay các thuộc tính khác.
Ví dụ
Trong hình học giải tích: w = 2.u + 3.v; trong đó u,v,w là các vector.
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ự kiện loại 6: Một quan hệ trên các đối tượng hay trên các thuộc tính
của các đối tượng.

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

trong tập H. Vấn đề đó kí hiệu là H  G.
Ví dụ 1: Trong hình dưới đây, giả sử AB = AC, cho trước góc A và cạnh
BC. ABDE và ACFG là hình vuông. Tính cạnh EG.
Bài toán được mô tả theo mạng C-Objects như sau:
O = { O1: tam giác ABC với AB = AC, O2: tam giác AEG, O3: hình
vuông ABDE, O4: hình vuông ACFG }
F = { f1, f2, f3, f4, f5 } với:
• f1: O1.c = O3.c
{ Cạnh c trong tam giác ABC = cạnh hình vuông ABDE }
• f2: O1.b = O4.a
{ Cạnh b của tam giác ABC = cạnh của hình vuông ACFG }
• f3: O2.b = O4.a
{ Cạnh b của tam giác AEG = cạnh của hình vuông ACFG }
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
• f4: O2.c = O3.a
{ Cạnh c của tam giác AEG = cạnh của hình vuông ABDE }
• f5: O1.A + O2.A =
Thuật toán 1: tìm lời giải cho bài toán H  G trên mạng C-objects gồm
5 bước sau:
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;
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;

goto step 5;
end;
else
goto step 3;
end;
end;
Bước 5:
if not Solution_found then
There is no solution found;
else
Solution is a solution of the problem;
Ví dụ 2: Cho một mạng C-objects (O, F) ở ví dụ 1 trên, cho giả thiết H =
{ O1.a, O1.A }, tìm { O2.a }
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
Ta có:
M(f1) = { O1.c , O3.a },
M(f2) = { O1.b , O4.a },
M(f3) = { O2.b , O4.a },
M(f4) = { O2.c , O3.a },
M(f5) = { O1. , O2.α },
M = { O1.a, O1.b, O1.c, O1.A, O2.b, O2.c, O2.A , O2.a, O3.a, O4.a }.
Theo thuật toán trên, tiến trình tìm ra lời giải sẽ là:
A0 A1 A2 A3 A4 A5 A6 A7
Trong đó:
A0 = A = { O1.a, O1.A },
A1 = { O1.a, O1.A, O2.A },
A2 = { O1.a, O1.A, O2.A, O1.b, O1.c },
A3 = { O1.a, O1.A, O2.A, O1.b, O1.c, O3.a},

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
{

private string _tenDiem;
public string TenDiem
{
get { return _tenDiem; }
}
public Diem(string temDiem)
{
_tenDiem = temDiem;
}
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
}
Thuộc tính tên điểm là A hoặc B hoặc C v.v Có thể khai bao thêm
nhiều thuộc tính nếu có nhu cầu cần thiết.
Với đối tượng cấp 1 như đoạn thẳng, cạnh, chúng ta có thể mô tả như
sau:
public class Canh
{
private Diem _diemDau;
private Diem _diemCuoi;
private float? _chieuDai;
public float? ChieuDai
{
get { return _chieuDai; }
set { _chieuDai = value; }
}
public Canh(string canh)
{
string[] dsDiem = canh.Split(',');

_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;

private Goc _goc3;
}
Để khai báo tập các thuộc tính Attrs cho đối tượng tam giác trên, ta sử
dụng một mảng để lưu trữ các thuộc tính với các phần tử trong mảng là các
chuỗi.
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í dụ: ThuocTinh = new string[] { "diem1", "diem2", "diem3", "canh1",
"canh2", "canh3", "goc1", "goc2", "goc3", "ChuVi", "DienTich" };
Để gán các tên cụ thể trong mảng (ví dụ như "canh1" được gán bằng
"AB") và gán các tên cụ thể cho các thuộc tính trong class Tam giác, ta xây
dựng một hàm KhoiTaoGiaTri(string chuoiThongTin) với chuỗi thông tin chính
là giả thiết từ đề bài toán đã cho. Chuỗi từ đề bài này phải là một chuỗi đã được
quy ước định dạng. Định dạng hiện tại được lưu theo dạng:
"TamGiac|ABC:Canh|AB=4;Canh|AC=3;ChuVi=10".
Phần TamGiac|ABC chính là phần khai báo tên đối tượng và kiểu của
đối tượng. Nếu có một class hình vuông thì khai báo chính là HinhVuong|
DEFG. Khi thực thi chương trình, chương trình sẽ tự động tìm tên class trùng
với phần khai báo (TamGiac, HinhVuong v.v…) và khởi tạo đối tượng.
Hàm KhoiTaoGiaTri(string chuoiThongTin) sẽ tự động thay thế các
chuỗi trong mảng ThuocTinh như "diem1" với giá trị "A", canh1 với giá trị
"AB", "goc1" với giá trị "BAC", tương tự như thế với các giá trị khác. Đồng
thời trong hàm cũng phải gán các giá trị cho các thuộc tính trong class TamGiac
, ví dụ với thuộc tính “_canh1” thì có _canh1.TenCanh = AB và
_canh1.ChieuDai = 4. Như vậy, sau hàm KhoiTaoGiaTri(string
chuoiThongTin) thì các giá trị tương ứng trong mảng ThuocTinh sẽ là
ThuocTinh = { "A", "B", "C", "AB", "BC", "AC", "BAC", "ABC",
"ACB", "ChuVi", "DienTich" }
và các thuộc tính trong class TamGiac đều được khởi tạo giá trị. Mục

đí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 +

_canh3.ChieuDai);
solution = //Ghi ra loi giai
}
else if (!_canh2.ChieuDai.HasValue)
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
{
_canh2.ChieuDai = _chuVi.GiaTri - (_canh1.ChieuDai +
_canh3.ChieuDai);
solution = //Ghi ra loi giai
}
else if (!_canh3.ChieuDai.HasValue)
{
_canh3.ChieuDai = _chuVi.GiaTri - (_canh1.ChieuDai +
_canh2.ChieuDai);
solution = //Ghi ra loi giai
}
else if (!_chuVi.GiaTri.HasValue)
{
_chuVi.GiaTri = _canh1.ChieuDai + _canh2.ChieuDai +
_canh3.ChieuDai;
solution = //Ghi ra loi giai
}
return solution;
}
Để có thể gọi phương thức với một tên phương thức trong chuỗi, ta sử
dụng class MethodInfo được cài đặt sẵn trong VisualStudio. Khi gọi:
MethodInfo methodInfo = this.GetType().GetMethod(hamSuKien);
Với "this" chính là con trỏ trong class TamGiac, " hamSuKien " chính là

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;

}
}
Trong tập các luật suy diễn Rules, tất cả các luật trong tập luật suy diễn
được mô tả trong một mảng LuatSuyDienR. Khác với tập sự kiện Facts, các
hàm trong biểu thức không trả về giá trị true/false mà sẽ trả về các sự kiện mới.
Ví dụ: LuatSuyDien1 :- { a = b } <=> { A = B }, khi hàm
LuatSuyDien1() được gọi, nếu cạnh a = cạnh b thì sẽ sinh ra sự kiện mới là A =
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, nếu một trong A và B có giá trị thì góc còn lại sẽ được gán giá trị. Do
LuatSuyDien1 là quan hệ hai chiều nên cũng có thể từ { A = B } => { a = b }.
Định dạng của tập luật suy diễn có thể quy ước như sau:
LuatSuyDienR = new string[] { LuatSuyDien1: [ canh1 = canh1 ] <=>
[ goc1 = goc2 ]: canh1, canh2, goc1, goc2: <=> }
Các thành phần trong LuatSuyDienR:
• LuatSuyDien1: Khi chương trình đang thực thi suy diễn, nếu phương
thức LuatSuyDien1 tạo ra được sự kiện mới thì thêm sự kiện mới
được tạo đó vào tập giả thiết để từ đó chương trình thực thi tiếp các
phép tính khác.
• [ canh1 = canh1 ] <=> [ goc1 = goc2 ]: là diễn giải cho luật suy diễn.
• canh1, canh2, goc1, goc2: tập các thuộc tính tham gia trong phép suy
diễn.
• <=>: dùng với mục đính mô tả luật suy diễn một chiều (A => B) hay
hai chiều (A <=> B).
Một C-objects bên trong nó phải có một bộ suy diễn nội tại để có thể tính
toán các giá trị của các thuộc tính cần thiết. Do đó, để có thể xây dựng một
động cơ suy diễn chung cho tất cả các đối tượng tính toán, chúng ta xây dựng
một class BaseClass để chứa phương thức DongCoSuyDienNoiTai(). Sau đó,
những đối tượng tính toán nào cần thực hiện suy diễn nội tại, chúng ta chỉ cần

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;

end;
if G H then
Solution_found  true;
Select new f F;
end; { while }
Until Solution_found or (H = Hold);
Bước 4:
if not Solution_found then
There is no solution found;
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
else
Solution is a solution of the problem;
2. Mô hình COKB
Trong phần trên, chúng ta đã thiết kế và cài đặt C-objects trong ngôn ngữ
hướng đối tượng. Trong phần này, em xin trình bày cách cài đặt cấu trúc lưu trữ
của mô hình COKB trong ngôn ngữ C#. Trong mô hình COKB gồm có 6 thành
phần (C, H, R, Ops, Funcs, Rules). Trong cấu trúc lưu trữ của C-Objects đã cài
sẵn hai thành phần là C và H. C là tập các khái niệm của đối tượng tính toán. Để
lưu trữ các C-objects có liên quan đến bài toán, chúng ta xây dựng một class
MoHinhCOKB để chứa danh sách các C-objects thông qua một Hashtable.
Các quan hệ phân cấp H được thể hiện qua tính kế thừa trên ngôn ngữ
C#. Ví dụ: class TamGiacVuong có thể kế thừa từ class TamGiac và class
TamGiacVuongCan được kế thừa từ TamGiacVuong. Khi đó class
TamGiacVuong sẽ được kết thừa đầy đủ các thuộc tính và các quan hệ nội tại
của TamGiac. Và TamGiacVuongCan sẽ kế thừa đầy đủ các thuộc tính và quan
hệ nội tại của TamGiacVuong và TamGiac. Hạn chế trong C# là chỉ hỗ trợ đơn
kế thừa. Vì thế nên chúng ta không thể thể hiện tam giác vuông cân được kế
thừa từ tam giác cân và tam giác vuông. Chúng ta có thể giải quyết vấn đề này

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

Với Declare là từ khóa cho việc khai báo đối tượng, “TamGiac| ABC” là
khai báo kiểu đối tượng và tên đối tượng, phần còn lại “Canh|AB=4;Canh|
AC=3;ChuVi=10” chính là các giá trị cho các thuộc tính. Các khai báo được
cách nhau với ký tự “#”. Để có thể khởi tạo các C-objects và gán giá trị cho các
thuộc tính. Ta tạo phương thức PhanTichDeBai(string giaThietDeBai, string
cauHoiDeBai) để khởi tạo các đối tượng. Các đối tượng trên chuỗi
“giaThietDeBai” thuộc kiểu string. Do đó, đoạn code sau sẽ khởi tạo các đối
tượng với loại đối tượng động không được xác định trước:
Assembly assemply = Assembly.LoadFile(Application.StartupPath +
@"\COKB_Model.dll");
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

Type type = assemply.GetTypes().Where(c => c.Name ==
doiTuong[0]).SingleOrDefault();

object obj = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("KhoiTaoGiaTri");

methodInfo.Invoke(obj, cacThuocTinhDaCoGiaTri);
Trong đó chuỗi “cacThuocTinhDaCoGiaTri” chính là chuỗi “Canh|
AB=4;Canh|AC=3;ChuVi=10”.
Sau khi khởi tạo xong một đối tượng, gọi phương thức KhoiTaoGiaTri
(Xem lại Phần 2.II.1) để gán các thuộc tính có giá trị được lấy từ đề bài. Sau
phương thức PhanTichDeBai, tất cả các đối tượng trong đề bài đưa ra được lưu
trữ trong Hashtable để sử dụng.
Đối với các quan hệ tính toán F, ta sử dụng một mảng chứa các quan hệ
F được phân tích từ đề bài. Các quan hệ được định dạng với kiểu:
KieuDoiTuong1|TenDoiTuong1 : KieuThuocTinh|TenThuocTinh =

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

×