Cơ chế suy diễn là các cơ chế liên kết các tri thức đã có để suy dẫn ra những tri thức mới. Nó là bộ phận điều khiển logic cho toàn bộ hệ thống đảm nhiệm việc suy luận và đưa ra kết luận chứng minh.
a.Cơ chế suy diễn thường sử dụng trong thực tế ■ Cơ chế suy diễn tiến
Tư tưởng chung của cơ chế suy diễn tiến là ở điểm: xuất phát từ tập các giả thiết, sẽ làm “ Nở dần” bằng cách thêm vào các sự kiện mới, cho đến khi một trong các kết luận cần chứng minh được phát hiện.[3]
Giải thuật:
Vào:
Tập luật R ={ r1, r2 , rm}, ri: left ri right ri. Tập sự kiện ban đầu : F = { r1, r2 , rm } Sự kiện đích : {f0}
Ra :
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 25 Phương pháp: for j=l to m do Lab(ij)=0; Repeat { Fc = Fm; Cj=Fc; j =1 to m do {
If leftj là tập con của Cj and Lab(rj) = 0 then { Cj = Cj {rightj} Lab(rj)=1; } Fm = Cj; }
Until (F0 là tập con của Fm) or (Fc = Fm) If F0 Fm then exit(“thành công”); else exit(“Không thành công”); }
■ Cơ chế suy diễn lùi
Tư tưởng chung của cơ chế suy diễn lùi là ở điểm: để đưa ra kết luận B ta thử tìm tất cả các luật có dạng A1 A A2 … A An -> B. Để có B phải đưa ra các kết luận A1, A2 … An. Quá trình xác định A1 cũng tương tự đối với B. Nếu đến một lúc nào đó phát hiện được rằng có một Ai0 nào đó không dẫn xuất được từ các giả thiết thì ta quay luui sang sản xuất khác sinh ra B có dạng B1A B2 … A Bm -> B. Ngược lại nếu mọi Ai đều dẫn xuất được từ giả thiết thì quá trình ra B đã thành công.[3]
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
26 Sau đây là giải thuật:
Vào:
Tập luật R = { r1, r2, …..rm }, ri : left ri -> right ri Tập sự kiện ban đầu : F = { f1, f2, …, fn }
Sự kiện đích : { f0 } Ra:
Thông báo ”thành công” nếu suy ra đến sự kiện đích. Phương pháp :
{
if f0 là tập con của F0 then exit (“Thành công”) Else{ Goal = {f0}; For j = 1 to m do Lab (rj) = 0; track = 0; Repeat { f ←get(Goal); j = 0; track = track {f0}; If not f là tập con của F then
{ repeat
j = j + 1;
Until ( f là tập con rightj and Lab(rj) = 0) or j > m If j <= m then
{ Goal = Goal { leftj/F }; Lab(rj)=1;
pointer(f) = j }
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
27 { Back = true;
While f <> f0 and back do { k = 0;
Repeat k = k + 1
until pointer(track{k})=0 and f là tập con của leftj; j =0; g = track{k};
repeat j = j + 1;
until (q là tập con của rightj and Lab(rj)=0) or j > m; if j <= m then
{ Goal = Goal { leftj\F}\{left pointer(g)}; pointer (g)=j
back = false; track = track\{ left pointer(g)}; Lab(rj)=1; } else f = g; } } } }Until Goal = 0 or f = f0;
If f = f0 then exit(“Thành công”) else exit (“Không thành công”); }
}
b, Suy diễn tập trung.[3] ■ Suy diễn tại máy đơn
- Cấu trúc dữ liệu của cơ chế suy diễn
OPERNODEptr=^OPERNODE; XORNODEptr=^XORNODE;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
28 // Phần khai báo danh sách các luật (Rules) RULENODEptr= ^RULENODE;
RULENODE = record
Name:string;// Tên của sự kiện
style:byte; //xác định kiểu cùa sự kiện trong luật //0: khẳng định; 1: phủ định
Next:RULENODEptr; //Trỏ tới sự kiện tiếp theo trong luật Jump:RULENODEptr; //Trỏ tơí sự kiên cùng tên. Dùng để truyền ứng ptn:RULENODEptr;// Trỏ tới luật tiếp theo
NumRuletreal;// Số luật
NumLeft:integer; //Số các phần tử vế trái trong luật =-1 default;=-2 sau khi đã truyền ứng,>l vế phải.
CF:real; // Độ chắc chắn. Hiện tại chưa sử dụng.
Ref:string;// Dòng text dùng để chỉ luật này đo đâu mà có (Reference) end;
// Phần khai báo danh sách các sự kiện (facts) FACTNODEptr=AFACTNODE;
FACTNODE=record
Name:string;//Tên của sự kiện
style:byte;//0:đúng ; l:sai; 2:đã hỏi nhưng không biết;3: chưa hỏi
Jump:RULENODEptr;//Trỏ đến sự kiện có cùng tên đầu tiên trong luật ptr:FACTNODEptr;//Trỏ đến sự kiện tiếp theo
Ques:string;//Định nghĩa câu hỏi sự kiện Expl:string;// Định nghĩa câu giải thích Yes:string20;
No:string20;
Unknown:string20;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
29
Tso:integer;// trọng số của mỗi sự kiện. Hiện tại chưa sử dụng.
Oper: OPERNODEptr; // Trỏ đến một danh sách các biểu thức NumRule:real; // Luật dùng để chứng minh sự kiện này 0:giả thiết;-1 không chứng minh được;default -2
LinkXOR:XORNODEptr;// Trỏ đến danh sách các sự kiện XOR end;
// định nghĩa kiểu sự kiện là biểu thức OPERNODE=record
operator:byte;//l =;2 <>;3 <;4 >;5 <=;6>=; Value:real;//Giá trị của sự kiện
Jump:FACTNODEptr; //Nhảy đến sự kiện trong FACT ptr:OPERNODEptr; end;
// định nghĩa kiểu là sự kiện loại trừ. XORNODE=record
Name:string;
typecas:byte;// Biến này xác định xem có phải ép kiểu không 0:có ép kiểu; 1: không ép kiểu; 2: Đã thêm vào danh sách TRANS
Jump: FACTNODEptr; //Trỏ đến sự kiện trong FACT ptr:XORNODEptr; //Trỏ đến node tiếp theo
end;
// Khai báo kết luận, giả thiết; NODEptr=^NODE;
NODE=record
Name'.string; style:byte; ptr:NODEptr; end; //Khai báo dùng trong GOALTRACK GOALTRACKptr= ^GOALTRACK; GOALTRACK= record
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
30 style: byte;
Numl: real; // Chỉ luật mà sự kiện đang chứng minh. Num2: real; //Chỉ luật dùng để chứng minh sự kiện ptr: GOALTRACKptr;
end;
// Dùng để xây dựng danh sách truyền ứng TRANSNODEptr=^TRANSNODE;
TRANSNODE = record Name:string;
style:byte;
Jump:FACTNODEptr; //Con trỏ trô đến sự kiên trong FACT ptr:TRANSNODEptr; end;
// Dùng để chứa danh sách các luật đã dùng USEDRULEpt: ^AUSEDRULE;
USEDRULE=record // Trong suy diễn tiến Num: real;
ptr:USEDRULEptr; end;
Mô hình của cấu trúc dữ liệu trên khi chương trình suy diễn tải cơ sở tri thức lên bộ nhớ như sau :
Ví dụ: Xem xét bộ luật a và b c
n và c d m> 15 và b g
[a,m>l5]
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
31
Hình 12. Cấu trúc danh sách luật của hệ thống suy diễn tập trung Sau đây là cấu trúc danh sách các sự kiện (facts): FACT head
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
32
■ Suy diễn đơn vị xử lý trung tâm (ứng dụng thu thập được từ máy trạm) + Cơ chế hoạt động của motor suy diễn.
Có một mạng các máy tính, một máy làm đơn vị xử lý trung tâm, ở đây sẽ là nơi thực hiện các quá trình suy diễn, các cơ chế giải thích .... Khi suy diễn cần hỏi một sự kiện thì đơn vị xử lý trung tâm sẽ gởi câu hỏi đến tất cả các máy đã đăng nhập vào mạng, sau đó đơn vị xử lý trung tâm sẽ chờ cho đến khi tất cả các câu trả lời đã trả về, tiếp đến nó tổng hợp, đánh giá và đưa ra giá trị chân trị của sự kiện và tiếp tục tiến hành suy diễn.
Như vậy sẽ có hai loại chương trình cùng chạy trong quá trình suy diễn đó là : - Chương trình tại đơn vị xử lý trung tâm.
- Chương trình tại máy được hỏi ( máy trạm). Chương trình này chỉ đảm nhiệm hiển thị câu hỏi về sự kiện cho người sử dụng.
+ Cấu trúc dữ liệu của cơ chế suy diễn:
Cũng như ở trên trong cấu trúc của các nút RULE và FACT của suy diễn không có sự thay đổi chỉ có là do cần có một cơ chế quản lý danh sách các người dùng đã đăng nhập nên tồn tại thêm một danh sách tuyến tính đơn trong Đơn vị xử lý trung tâm có cấu trúc như sau :
PInfoUser = ^TInfoUser; TInfoUser = record
Username: string; // tên của người tham gia Numsock: TSocketBase;
end;
Trong đó Numsock chứa Socket của người sử dụng. Khi có yêu cầu gửi đến các máy trạm Đơn vị xử lý trung tâm sẽ lấy thông tin Numsock và từ đó gửi đúng đến các máy trạm tránh trường hợp hai người sử dụng cùng đăng nhập một tên.
■ Suy diễn đơn vị xử lý trung tâm (ứng dụng nhiều người cùng suy diễn) + Cơ chế hoạt động của motor suy diễn:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
33
Có một mạng các máy tính, một máy làm Đơn vị xử lý trung tâm, ở đây sẽ là nơi thực hiện các quá trình suy diễn, các cơ chế giải thích của các người sử dụng .... Khi suy diễn cần hỏi một sự kiện thì Đơn vị xử lý trung tâm sẽ gửi câu hỏi đến máy của sử dụng, sau đó Đơn vị xử lý trung tâm sẽ chuyển quyền điều khiển cho các tiến trình suy diễn của người khác, khi câu trả lời đã trả vể nó sẽ tiếp tục tiến hành suy diễn và kết quả chứng minh sau khi suy diễn xong nó gửi vể máy của người sử dụng. Tại máy cùa người sử đụng khi bắt đầu đăng nhập máy sẽ gửi các sự kiện giả thiết và các sự kiện kết luận.
Như vậy sẽ có hai loại chương trình suy diễn cùng chạy trong quá trình suy diễn đó là:
- Chương trình tại Đơn vị xử lý trung tâm.
- Chương trình tại máy được hỏi ( máy trạm). Chương trình này chỉ đảm nhiệm hiển thị câu hỏi về sự kiện cho người sử dụng, gởi các giả thiết, kết luận, nhận vết suy diễn...
Và có hai loại chương trình thiết lập cấu hình hộ chuyên gia. Người sử dụng chạy chương trình thiết lập hệ chuyên gia riêng của mình và Đơn vị xử lý trung tâm cũng có chương trình thiết lập cấu hình riêng.
+ Cấu trúc dữ liệu của cơ chế suy diễn
Cũng như ở trên trong cấu trúc của các nút RULE và FACT của suy diễn không có sự thay đổi chỉ có là do cần có một cơ chế quản lý danh sách các người dùng đã đãng nhập nên tổn tại thêm một danh sách tuyến tính đơn trong đơn vị xử lý trung tâm có cấu trúc như sau :
PInfoUser = ^TInfoUser; TInfoUser = record
Username: string; // tên của người tham gia numsock: TSocketBase;
Flag:booIean;// Biến này dùng để lật khi có câu trả lời về RULEhead: RULENODEptr,
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
34 FACThead: FACTNODEptr;
RESULThead,SUPOSEhead: NODEptr; GOALTRACKhead:GOALTRACKptr;
RuleCurrent,factCurrent: RULENODEptr;// Biến dùng để giải thích trong suy diễn tiến
ResultSuposeEnd:booìean; // báo là đã truyền hết giả thiết & kết luận ReceivedFlag:Boolean; //Cờ báo hiệu đã nhận được các xâu Track HowFlag:Boolean; //Cờ báo hiệu đã nhận được các xâu How ReceivedWhyFlag:Boolean; //Cờ báo hiệu đã nhận được các xâu Why USEDRULEhead: USEDRULHptr; //dùng cho suy diễn tiến
end;
Trong đó Numsock chứa Socket của người sử dụng. Khi có yêu cầu gửi đến các máy trạm Đơn vị xử lý trung tâm sẽ lấy thông tin Numsock và từ đó gửi đúng đến các máy trạm tránh trường hợp hai người sử dụng cùng đăng nhập một tên. Các biến khác dùng trong quá trình suy diễn, bởi lẽ phải xây dựng danh sách Rule và fact riêng cho từng người sử dụng.
c, Suy diễn phân tán
■ Cơ chế hoạt động của motor suy diễn
Có một mạng các máy tính, một máy làm đơn vị đảm nhiệm việc truyền thông, ở đây sẽ là nơi thực hiện nhiêm vụ truyền thồng giữa các chương trình suy diễn phân tán và các chương trình suy diễn phân tán là nơi tiến hành các quá trình suy diễn. Ở đây quá trình suy diễn là phân tán thực sự, phân tán cả cơ sở tri thức và phản tán cả motor suy diễn. nghĩa là các chương trình suy diễn phân tán trong quá trình suy diễn nếu có yêu cầu “ nhờ chứng minh hộ” đến các máy khác thì nó gởi yêu cầu đến đơn vị đảm nhiệm viêc truyền thông, tại đây sẽ phân phối các loại yêu cầu đến các chương trình suy diễn phân tán.
Như vậy sẽ có hai loại chương trình suy diễn cùng chạy trong quá trình suy diễn đó là :
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
35
- Chương trình tại đơn vị đảm nhiệm việc truyền thông. - Chương trình suy diễn phân tán.
■ Cấu trúc dữ liệu của cơ chế suy diễn + Tại đơn vị đảm nhiệm việc truyền thông:
{ Khai báo danh sách các user đăng nhập vào mạng) PInfoUser = ^TInfoUser;
TInfoUser = record
Usemame: string; //tên của người tham gia
MachineNamerstring;// Tên máy của người tham gia numsock: TSocketBase;
ptr:PInfoUser; end;
+ Tại chương trình suy diễn phân tán:
FACTEXTENSIONptr= ^FACTEXTENSlON; FACTEXTENSION= record
Name:string;// Tên của sự kiên
style:byte; //O: đúng ; l:sai; 2:đã hỏi nhưng không biết;4: sự kiện biểu thức Numl: real; // luật mà sự kiện chứng minh
Num2:real; // Luật dùng để chứng minh sự kiện
NameTerminal: string;//Tên của Terminal trả về sự kiện ptr:FACTEXTENSlONptr;
end;
// Danh sách số các Terminal trong một sự kiện NUMTERMINALptr= ^NUMTERMINAL; NUMTERMINAL= record
Name:string;// Tên của sự kiện hỏi
NumTerminal: integer; //Số các Terminal cần hỏi với sự kiện đó ptr:NUMTERMINALptr;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
36 end;
Ngoài ra trong cấu trúc của RULENODE có sự thay đổi nhỏ, đó là có thêm phần chứa danh sách các máy cần hỏi về sự kiện đó.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
37
CHƢƠNG 2: XÂY DỰNG CƠ SƠ TRI THỨC GIẢI QUYẾT BÀI TOÁN