Đề tài Tìm hiểu về Hệ chuyên gia

Đề tài Tìm hiểu về Hệ chuyên gia

Hệ chuyên gia, một nhánh của trí tuệ nhân tạo, là một trong những hướng khai thác tri thức của một ngành thuần lý thuyết, xuất hiện vào thập niên 60 và phần nào chứng minh khả năng áp dụng trí tuệ nhân tạo, khắc phục được các bế tắc gặp phải thời bấy giờ.

Hệ chuyên gia được tiếp cận thảo chương theo một quan niệm mới (phi thủ tục) so với cách tiếp cận thảo chương cổ điển (thủ tục). Với cách tiếp cận này hệ chuyên gia dần dần được đặt vào đúng vị trí vốn có của nó. Ngày nay trong sự phát triển chung của công nghệ thông tin toàn cầu, hệ chuyên gia tiếp tục được phát triển nhằm cung cấp các công cụ hữu hiệu cho những áp dụng tin học vào nhiều ngành nghề khác nhau trong xã hội.

 

doc 18 trang Người đăng HoangHaoMinh Lượt xem 6040Lượt tải 1 Download
Bạn đang xem tài liệu "Đề tài Tìm hiểu về Hệ chuyên gia", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI GIỚI THIỆU
---oOo---
Hệ chuyên gia, một nhánh của trí tuệ nhân tạo, là một trong những hướng khai thác tri thức của một ngành thuần lý thuyết, xuất hiện vào thập niên 60 và phần nào chứng minh khả năng áp dụng trí tuệ nhân tạo, khắc phục được các bế tắc gặp phải thời bấy giờ.
Hệ chuyên gia được tiếp cận thảo chương theo một quan niệm mới (phi thủ tục) so với cách tiếp cận thảo chương cổ điển (thủ tục). Với cách tiếp cận này hệ chuyên gia dần dần được đặt vào đúng vị trí vốn có của nó. Ngày nay trong sự phát triển chung của công nghệ thông tin toàn cầu, hệ chuyên gia tiếp tục được phát triển nhằm cung cấp các công cụ hữu hiệu cho những áp dụng tin học vào nhiều ngành nghề khác nhau trong xã hội.
Trong bước đường khai phá tìm tòi học hỏi những tri thức mới lạ trong lĩnh vực cơ sở tri thức. Và cũng với giới hạn thời gian không cho phép, cho nên nhóm chúng tôi chỉ tập trung vào việc nghiên cứu lý thuyết, chưa đi sâu vào chi tiết cài đặt, triển khai một ứng dụng cụ thể chuyên sâu.
Hệ chuyên gia
Định nghĩa
Hệ chuyên gia: là một ứng dụng máy tính dùng để giải quyết một loại vấn đề nào đó. Ví dụ chẳng hạn nó dùng trong các ứng dụng chẩn đoán cho người và hệ thống. Ngoài ra, chúng còn có thể chơi cờ, tạo những dự án tài chính, quản lý hệ thống thời gian thực và những kiến thức có thể liên quan đến các lĩnh vực chuyên môn.
Hiện nay, có nhiều hệ chuyên gia được xây dựng với thành phẩm được gọi là ES Shell, Shell là một phần trong sản phẩm phần mềm trong đó có chứa phần giao tiếp với người sử dụng, một định dạng cho những tri thức đã được khai báo trong các hệ Cơ sở tri thức và động cơ suy diễn. Các kỹ sư sẽ sử dụng shell đó để xây dựng hệ thống cho lĩnh vực chuyên môn của mình. Các kỹ sư hệ thống xây dựng bộ giao tiếp, thiết kế các khai báo định dạng cho tri thức và mã hóa chúng, thực hiện chúng trong động cơ suy diễn.
Tùy theo kích thước của dự án, các kỹ sư chuyên môn và kỹ sư hệ thống có thể là một. Chẳng hạn, như xây dựng một hệ thống bình thường thì chúng phải phải trải qua nhiều công đọan cần thiết như là thiết kế định dạng cho tri thức, mã hóa tri thức chuyên môn và tất cả chúng hầu như là liên quan đến nhau như là một thể thống nhất.
Một trong những vấn đề mấu chốt khi xây dựng một hệ chuyên gia là quá trình khai thác thông tin. Mã hóa các tri thức chuyên môn vào phần khai báo định dạng luật – đây chính là quá trình khó khăn và là công việc mang tính nhàm chán nhất. Mục tiêu chính của chúng ta là cung cấp những kỹ thuật cần thiết cho kỹ sư chuyên môn và kỹ sư hệ thống, để có thể thiết kế những hệ thống mềm dẻo.

Đặc điểm khác biệt giữa động cơ duy diễn và hệ cơ sở tri thức lúc thiết kế và làm như thế nào để xây dựng và sử dụng chúng.
Đi ngược dòng lịch sử.
Đi ngược dòng lịch sử sự phát triển của các hệ chuyên gia cũng gần như gắn liền với sự phát triển vượt bậc của các kỹ thuật công nghệ ngày nay. Có thể cho đến nay, cái nhìn của nhiều người về ngành trí tuệ nhân tạo đã khác đi rất nhiều, bởi vì chúng không chỉ còn là những dự án trên bàn giấy mà hiện nay chúng lần lượt từng bước đưa vào tiến hành cài đặt và thử nghiệm – tương lai ngành công nghệ thông tin của chúng ta có phát triển đột phá hay không là nhờ vào mũi nhọn này.
Sau đây là bảng tóm lược khái quát về lịch sử phát triển của các hệ chuyên gia.
2000
Intelligence agents – Web, E-Commerce, Search Engines
1998
More than 12500 Expert System (USA Only)
1996
GUESS-Generically Used Expert Scheduling System
1994
Commercial Artificial Neural Intelligence.
1993
Lumiere Project (Microsoft) Artificial neural systems 
1990
Artificial Neural System
1985
CLIPS expert system tool (NASA).
1983
KEE expert system tool (IntelliCorp)
Japan – Fith Generation Project (intelligent computers)
Hopfield Neural Net
1982
SMP math expert system
1980
LMI and symbolics founded for manufacturing LISP machines
Inference Corp formed
A.I. goes commercial
1979
RETE Algorithm for fast pattern matching (Forgy)
Meta-DENDRAL- Metarules and rule induction (Buchanant)
1978
XCON/R1 (DEC computer system configuration) started (McDerMott, DEC).
1977
OPS expert system shell for XCON/R1 (Forgy)
Theory of Reasoning under Uncertaintly (Dempater-Shafer)
PROSPECTOR expert system started (Duds, Hart, )
1976
Artificial Mathmatician (AM) discovery of math concepts (Lenal).
1975
Frames and knowledge representation (Minsky).
HEARSAY II – cooperating experts blackboard model
EMYCIN – expert system shell (Vam Mele, Shortlife, Buchanan).
TEIRESIAS – explanation facility concept (Davis)
GUIDON (intelligence tutoring) (Clancey)
1973
MYCIN expert system for medical diagnosis (Short Life )
Human Problem Solving (Newell, Simon)
1971
HEARSAY I (speech recognization)
1970
PROLOG work started (Colmeraurer, Rousell )
Perceptrons (Minsky and Paperl).
1969
MACSYMA math expert system (Martin, Moses)
1968
Semantic nets associative memory model (Quillian)
Dendral started (Feigenbaum, Buchanan )
Fuzzy Logic (Zadeh)
1965
Automatic Theorem Proving via Resolution Method (Robinson)
1962
Principles of Neurodynamics on perseptions (Rcenblatt).
1958
LISP AI language invented (Mc Cathy).
1957
Perceptron invented General Problem Solver started (Newell, Shaw, Simon).
1956
AI term used Logistic Theorist Heuristic Search.
1954
Makov Algorithm (control rule execution)
1953
Post production rules. The neuron model (McCulloch, Pitts)
Trong lập trình trí tuệ nhân tạo thì hai ngôn ngữ dùng chủ yếu là ngôn ngữ lập trình hàm List và ngôn ngữ lập trình Logic Prolog.
Trong lịch sử phát triển hệ chuyên gia cũng trải qua nhiều thăng trầm, nhưng ta có thể đánh dấu mốc phát triển bằng kỹ thuật phân loại với 2 thế hệ chuyên gia được phát triển.
Thế hệ thứ 1:
Đây là thế hệ đầu tiên, còn rất thô sơ cho nên có liên quan chủ yếu đến 
Thu thập tri thức 
Suy luận không chắc chắn.
Nguyên lý giải quyết vấn đề theo nguyên lý cổ chai – các kiến thức tri thức, miền tri thức sẽ bị giới hạn lại. Điều này khi giải quyết vấn đề cho hệ thống sẽ khó vì đôi lúc chúng ta giải quyết những vấn đề mà giữa chúng cần phải kết hợp nhiều tri thức lĩnh vực khác nhau.
Giải Thích
Suy Diễn
Thu thập tri thức từ Chuyên gia 
CSTT
Hệ Thống Giao Tiếp
User
Expert
Thế hệ thứ 2:
Vấn đề thứ 2 là ta tiếp nhận các tri thức như thế nào? Khi nguồn tri thức ta có từ 2 hay nhiều các chuyên gia khác nhau và tri thức đó không hoàn toàn hoàn chỉnh, không chính xác và chỉ có tính tương đối.
Hệ chuyên gia ở thế hệ thứ 2 được phát triển dựa trên nền tảng tri thức được thêm tự động bằng các công cụ, vẫn theo nguyên lý cổ chai và một số tính năng kỹ thuật cho phép hệ thống biểu diễn những luật mang tính tương đối.
Ở thế hệ này, hệ chuyên gia có thể kết hợp với các công cụ và kỹ thuật khác như:
Thu gom tri thức từ giải thích của chuyên gia
Tự động thu gom, góp nhặt tri thức bằng máy học
Kiểm tra thẩm duyệt tri thức cơ sở
Các kỹ thuật suy diễn truyền thống (suy diễn tiến, suy diễn lùi)
Trình bày, biểu diễn các tri thức có tính tương đối.
Mở rộng cơ chế suy diễn (tích hợp kỹ thuật mờ vào trong suy diễn).
Tự động tinh chỉnh, bảo trì sửa chữa các tri thức cơ sở
Hệ thống giải thích các câu trả lời.
CSTT
(Rules + Facts + Biểu diễn tương đối)
Giao tiếp giữa người dùng và hệ thống
Trí thức sẵn có từ:
Tri thức chuyên môn
Tri thức lĩnh vực
Kết quả thu được từ thực nghiệm
Máy học
Giải thích tri thức
Tri thức & Hệ chuyên gia
META KNOWLEDGE
KNOWLEDGE
INFORMATION
DATA
NOISE
Thế giới bên ngoài đang ẩn chứa trong đó vô vàn những thông tin đầy bí ẩn, dưới con mắt của con người các thông tin ấy dần được khai phá & sử dụng.
Chẳng hạn, trong biểu đồ ở trên chúng ta thấy rằng, từ các thông tin tạp ở thế giới bên ngoài (NOISE) sẽ được khai thác đưa vào sử dụng trong máy tính như là dữ liệu lưu trữ (DATA). Từ những dữ liệu này sẽ được con người khai thác sử dụng ở một mức độ cao hơn gọi là thông tin (Information). Ở mức độ trên thông tin một tí, tức nhiều thông tin sẽ được mô hình hóa ra thành tri thức (Knowledge). Và ở mức độ cao hơn tri thức (knowledge) là siêu tri thức (dùng để giao tiếp điều khiển giữa các hệ tri thức khác nhau), đó là điều mà con người mơ cũng không thể đạt đến ngay được (ít nhất là trong thời gian hiện tại), bởi vì như chúng ta đã biết chúng ta đang đi đến ngưỡng luôn lúc nào cũng dư thừa dữ liệu (Data) hoặc thông tin (Information).
Giả như chúng ta có trong tay một đội ngũ các chuyên gia, nhưng để thống nhất được các ý kiến của các chuyên gia lại với nhau thì cả là một vấn đề nan giải. Tại sao chúng ta không đặt vấn đề là với khi chúng ta có thể qui tụ những kiến thức ấy lại với nhau phân tích tổng hợp chúng lại thành một thể thống nhất, được máy tính khai thác để phục vụ lại cho con người. 
Một số vấn đề đặt ra ?
Tại sao phải là hệ chuyên gia ?:
Nếu như vấn đề đặt ra có thể được giải quyết bằng lập trình truyền thống thông thường thì hệ chuyên gia không là cách chọn lựa tốt nhất
Nhưng trong trường hợp có những tình huống mà giải pháp thông thường không giải quyết được bằng thuật toán (phi cấu trúc – không định được một cấu trúc rõ ràng trong sáng để giải quyết vấn đề) thì hệ chuyên gia là sự chọn lựa tốt nhất.
Khi làm việc các vấn đề có tính phi cấu trúc, có khả năng hệ thống phải đưa ra giải pháp cho toàn bộ vấn đề đó. Điều này có thể xảy ra nếu kỹ sư chuyên môn cung cấp độ thứ tự ưu tiên cho quá nhiều luật. Do đó, hệ thống sẽ không thể phân biệt được là phải làm sao cho thỏa đáng.
Tổng hợp lại tri thức từ nhiều hệ chuyên gia khác nhau. Hệ chuyên gia phải giới hạn một cách phạm vi ứng dụng rõ ràng. Vì khi thêm vào những tri thức thuộc lĩnh vực khác hệ chuyên gia sẽ ngày càng phức tạp hơn.
Việc kết hợp trên sẽ đưa ra cho kỹ sư hệ thống nhiều nhiệm vụ nặng nề hơn là làm như thế nào để có thể dung hợp được giữa 2 hay nhiều ý niệm lại với nhau.
Hiện tại, vấn đề kết hợp các tri thức từ nhiều lĩnh vực đang được triển khai và nghiên cứu, không thấy xuất hiện những phiên bản mang tính thương mại trên thị trường.
Có được hoan nghênh hay không ?. Phải xuất phát từ những yêu cầu có được một hệ chuyên gia. Dù cho không được hoan nghênh khi thiết kế một hệ chuyên gia cũng mang một ý nghĩa - 1 cuộc cách mạng trong CNTT. Hoặc giả là nó bị từ chối một cách thẳng thừng thì tại sao chúng ta không chấp nhận nó dưới khía cạnh là một công cụ trợ giúp.
Ta cần nhớ các chuyên gia cũng là con người, đã là con người thì có lúc phải mất đi nhưng làm sao những tri thức lượm lặt cả đời của họ, mấy ai có thể lưu lại được, tại sao ta không thể tận dụng ngay trong lúc có thể.
Các chuyên gia cần phải có sự kết hợp với nhau nhiêu hơn nữa. Đơn cử 1 số ít thôi mà hệ thống đã có 1 đống luật mâu thuẫn với nhau. Thường xảy ra, vì ý kiến của mỗi người thường khác nhau.
Người vận hành hệ thống phải có am hiểu nhất định về hệ thống. Kỹ sư chuyên môn (đang vận hành hệ thống) phải thật rõ ... g sẽ tổng hợp những gì mà người dùng cung cấp để cuối cùng cho ra được các vấn đề mà chúng nghi ngờ. Khi đề nghị ra giải pháp cho người sử dụng hệ thống hiển thị thông tin về mức độ tin cậy của mệnh. Như trong ví dụ dưới đây, độ nghi ngờ về tình trạng hết gas là đến 90% trong khi đó hiện tượng gas bị gò rỉ là lên đến 80%.
Giao tiếp người dùng
Hỏi người dùng
Để hỏi người dùng về các thông tin về đặc điểm cá nhân của đối tượng.
Giả sử ta có các thuộc tính, hành động của một động vật là eat (ăn), feet (chân), wings(đuôi), neck(cổ), color (màu).
Ta có các vị từ sau:
eats(X)	:-ask(eats, X).
feet(X)	:-ask(feet, X).
wings(X)	:-ask(wings, X).
neck(X)	:-ask(neck, X).
color(X)	:-ask(color, X).
Vị từ ask được thiết kế với mục đích là hỏi đối tượng ấy có thuộc tính A, V, và chờ người dùng nhập vào câu trả lời.
ask(A, V]:-
	write(A:V),
	write('? '),
	read(yes).
Ghi nhận trả lời người dùng
Những thông tin mà người dùng cung cấp sẽ được hệ thống ghi nhận lại vào cơ sở dữ liệu (với sự xác nhận của người dùng khi trả lời câu hỏi: yes) bằng vị từ assert với mẫu do kỹ sư chuyên môn cung cấp, 
ask(A, V):-
	known(yes, A, V), !. 
ask(A, V):-
	known(_, A, V), !,
	fail.
ask(A, V):-
	write(A:V),
	write('? : '),
	read(Y),
	asserta(known(Y, A, V)),
	Y == yes.
Câu trả lời có nhiều giá trị
Với trường hợp câu trả lời có nhiều giá trị thì theo thuật toán cải tiến cho vị từ ask là chúng ta thêm mẫu multivalued để ghi nhận thuộc tính nào đó của đối tượng mang nhiều giá trị. 
multivalued(voice).
multivalued(feed).
ask(A, V):-
	not multivalued(A),
	known(yes, A, V2),
	V \== V2,
	!, fail.
Hệ thống thực đơn người dùng
Khi người dùng sẽ được hệ thống giao tiếp thông qua hệ thống thực đơn đã được thiết kế.
Vị từ menuask được thiết kế để người dùng qua đó giao tiếp với hệ thống
Đầu tiên với thuộc tính – giá trị, khi muốn hỏi một giá trị cho thuộc tính nào đó thì các câu trả lời sẽ tùy thuộc vào danh sách các câu trả lời mà hệ thống đã cung cấp sẵn thông qua tham số MenuList, khi muốn truy vấn người dùng một thuộc tính của đối tượng nào đó. Khi người trả lời câu hỏi hệ thống sẽ kiểm tra xem câu trả lời của người dùng có nắm trong danh sách thực đơn hay không ? (điều này sẽ được kiểm tra thông qua vị từ check-val ). Khi đã xác thực là câu trả lời hợp lệ thì vị từ assert sẽ ghi nhận câu trả lời vào cơ sở dữ liệu.
Ví dụ dưới đây, sẽ truy vấn người dùng 2 thuộc tính kích thước (size) và tầm bay (flight).
size(X):-
	menuask(size, X, [large, plump, medium, small]).
flight(X):-
	menuask(flight, X, [ponderous, agile, flap_glide]).
menuask(A, V, MenuList) :-
	write('What is the value for'), write(A), write('?'), nl,
	write(MenuList), nl,
	read(X),
	check_val(X, A, V, MenuList),
	asserta( known(yes, A, X) ),
	X == V.
check_val(X, A, V, MenuList) :-
	member(X, MenuList),
	!.
check_val(X, A, V, MenuList) :-
	write(X), write(' is not a legal value, try again.'), nl,
	menuask(A, V, MenuList).
Tạo Shell 
Cùng giống như một phần mềm bình thường, để giao tiếp với người dùng hệ thống phải cần đền shell, shell chẳng qua là một cầu nối giao tiếp trung gian giữa người dùng và hệ thống, thông qua đó người dùng và hệ thống có thể trao đổi thông tin, liên lạc với nhau.
Trong qui trình làm việc của hệ thống với người dùng là như sau:
Khởi động shell
Nạp cơ sở tri thức vào hệ thống
Tương tác giữa người dùng và Shell
Hệ thống dựa cơ sở trên thông tin người dùng cung cấp để giải quyết vấn đề.
top_goal(X) :- bird(X).
solve :-
	abolish(known, 3),
	define(known, 3),
	top_goal(X),
	write('The answer is '), write(X), nl.
solve :-
	write('No answer found.'), nl.
?- consult(native).
yes
?- consult('birds.kb').
yes
?- solve.
nostrils : external_tubular?
go :-
	greeting,
	repeat,
	write('> '),
	read(X),
	do(X),
	X == quit.
greeting :-
	write('This is the Native Prolog shell.'), nl,
	write('Enter load, consult, or quit at the prompt.'), nl.
do(load) :-
	load_kb,
	!.
do(consult) :-
	solve,
	!.
do(quit).
do(X) :-
	write(X),
	write('is not a legal command.'), nl,
	fail.
Cơ chế giải thích
Giải thích cho người dùng
Xe khởi động được ? Sai.
Động cơ không chạy? Đúng.
Bạn nghe mùi xăng? Đúng.
Lời đề nghị - Chờ khoảng 5 phút sau hãy khởi động lại..
Tại sao?
Hệ thống sử dụng luật:
Nếu 
Xe không khởi động và
Động cơ không chạy và
Có mùi nhiên liệu.
Thì
	Đề nghị 5 phút sau hãy khởi động xe lại.
Trong ngữ cảnh cuộc hội thoại giữa người và hệ thống trợ giúp ở trên, sau khi đựa ra lời đề nghị là chờ thêm 5 phút thì nếu người dùng có nhu cầu muốn xem là “tại sao lại như vậy” thì hệ thống sẽ cung ứng những lý do tại sao chúng ta phải chờ.
Đối với người dùng việc chúng ta giải thích lý do tại sao chúng ta giải thích sẽ làm người dùng rõ vấn đề hơn.
Giải thích cho kỹ sư 
Đối với kỹ sư thiết kế hệ thống và kỹ sư chuyên môn, giải thích đối với họ là một việc hết sức quan trọng trong quá trình thiết kế và xây dựng hệ, họ có thể căn cứ vào đó để lần ra được những bug trong chương trình, có thể căn cứ vào đó để kiểm tra tính đúng đắn của hệ, dễ dàng phát hiện được những chỗ hỏng về mặt chuyên môn, cũng như các lỗi về kỹ thuật khi hệ thống đã được vận hành.
Những giải thích này có thể xóa hỏi hệ thống khi hệ thống đã hoàn tất, nhưng đôi khi như thế sẽ làm công tác bảo trì sẽ gặp nhiều khó khăn. Cho nên 
Các loại giải thích
Có 4 loại giải thích thường được sử dụng trong hệ chuyên gia. 
Lần vết theo suy luận của luật (rất hợp đối với người thiết kế hệ thống).
Giải thích How là làm như thế nào để có đựơc suy luận.
Giải thích Why là lời giải thích tại sao hệ thống hỏi vấn đề đó.
Giải thích Why not là kết luận được cung cấp.
Mới nghe thoạt đầu chúng ta cảm thấy hệ thống có thể có được các đáp ứng như trên thì quả là một vấn đề cực kì khó khăn. Nhưng trên thực tế, sử dụng Prolog làm ngôn ngữ chính để thiết kế động cơ suy diễn thì vấn đề sẽ trở nên nhẹ nhàng hơn. Nếu mọi người không tin thì có thể thử xem !!!.
Như đã khảo sát, quá trình suy diễn lùi cũng là quá trình đối thoại giữa người dùng và Hệ chuyên gia. Đó là khi Hệ chuyên gia cần nhập dữ liệu cho các sự kiện yêu cầu ( Là các nút tận cùng – Loại nút số 3). Ở đây người ta có thể có quyền đặt ra những câu hỏi nghi vấn như Tại sao? WHY phải cung cấp số liệu này? Hoặc khi đã tìm ra kết luận và xuất kết luận cho người dùng, họ cũng có thể đặt nghi vấn như làm Thế nào? HOW mà có kết qủa như vậy?
Trong cả hai trường hợp trên, để khẳng định niềm tin, Hệ chuyên gia phải trả lời được cho người dùng các câu hỏi Why, How. Đó chính là Cơ chế giải thích của Hệ chuyên gia. Rỏ ràng là cơ chế giải thích phải được cài đặt song song với cơ chế suy diễn lùi.
Giải thích How
Câu hỏi how là câu hỏi được hỏi bởi người dùng khi hệ thống cung cấp một số suy luận. Những bằng chứng cho suy luận này có thể được lấy từ nhiều nguồn khác nhau từ nguồn lần vết, từ trong môi trường làm việc, những suy luận có được tổng hợp từ các nguồn vừa kể trên. 
Cùng với câu hỏi Why, hệ chuyên gia đồng thời cũng phải trả lời câu hỏi How. Thời điểm để Hệ chuyên gia có thể trả lời câu hỏi How là lúc Hệ chuyên gia tìm được kết luận và trả lời cho người dùng. Câu hỏi How là một phương tiện giúp cho Hệ chuyên gia khẳng định niềm tin đối với người dùng. Đó là làm cách nào mà Hệ chuyên gia có thể đi đến một kết luận như vậy. Sau khi trả lời câu hỏi How kết thúc cũng là lúc qúa trình suy diễn lùi chấm dứt.
fact(AV, CF, RuleList)
update(Goal, NewCF, CF, RuleN) :-
	fact(Goal, OldCF, _),
	combine(NewCF, OldCF, CF),
	retract( fact(Goal, OldCF, OldRules) ),
	asserta( fact(Goal, CF, [RuleN | OldRules]) ),
	!.
update(Goal, CF, CF, RuleN) :-
	asserta( fact(Goal, CF, [RuleN]) ).
fg(Goal, CurCF) :-
	rule(N, lhs(IfList), rhs(Goal, CF)),
	...
	update(Goal, NewCF, CurCF, N),
	...
how(Goal) :-
	fact(Goal, CF, Rules),
	CF > 20,
	pretty(Goal, PG),
	write_line([PG, was, derived, from, 'rules: '|Rules]),nl,
	list_rules(Rules),
	fail.
how( _ ).
how(not Goal) :-
	fact(Goal, CF, Rules),
	CF < -20,
	pretty(not Goal, PG),
	write_line([PG, was, derived, from, 'rules: '|Rules]), nl,
	list_rules(Rules),
	fail.
pretty(av(A, yes), [A]) :- !.
pretty(not av(A, yes), [not, A]) :- !.
pretty(av(A, no), [not, A]) :- !.
	pretty(not av(A, V), [not, A, is, V]).
	pretty(av(A, V), [A, is, V]).
list_rules([]).
list_rules([R|X]) :-
	list_rule(R),
	list_rules(X).
list_rule(N) :-
	rule(N, lhs(Iflist), rhs(Goal, CF)),
	write_line(['rule ', N]),
	write_line(['If']),
	write_ifs(Iflist),
	write_line(['Then']),
	pretty(Goal, PG),
	write_line([' ', PG, CF]), nl.
write_ifs([]).
write_ifs([H|T]) :-
	pretty(H, HP),
	tab(5), write_line(HP),
	write_ifs(T).
how :-
write('Goal? '), read_line(X), nl,
	pretty(Goal, X),
	how(Goal).
how có thể được kích hoạt khi người dùng có nhu cầu.
do(how) :-
how, !.
Vị từ how được thiết kế ở trên hiển thị những luật có liên quan trực tiếp đến sự kiện. Những luật có liên quan gián tiếp đến sự kiện sẽ không được tính. Có 2 cách để trình bày các thông tin này:
Cho phép người dùng hỏi how với những sự kiện ở bên trái (giả thiết) có thể cấp sâu ở bên trong cây biện chứng.
How tự động hiển thị toàn bộ cây biện chứng.
list_rules([]).
list_rules([R|X]) :-
	list_rule(R),
	how_lhs(R),
	list_rules(X).
how_lhs(N) :-
	rule(N, lhs(Iflist), _), !,
	how_ifs(Iflist).
	how_ifs([]).
how_ifs([Goal|X]) :-
	how(Goal),
	how_ifs(X).
Có 3 sự lựa chọn cho người dùng sử dụng how (chỉ là số tập luật, tập luật trực tiếp, danh sách đầy đủ cây biện chứng).
Giải thích Why
Như đã trình bày, thời điểm để Hệ chuyên gia trả lời câu hỏi Why? là lúc Hệ chuyên gia yêu cầu cung cấp dữ liệu cho các sự kiện là các nút tận cùng. 
Câu hỏi how được hỏi ở cấp độ đầu tiên của quá trình suy diễn, sau khi hoàn tất. Câu hỏi why sẽ được hỏi ở phần cuối của danh sách các luật – Khi không có nhiều luật và thời gian để truy vấn người dùng.
Người dùng muốn biết câu hỏi why sẽ được hỏi như thế nào.
findgoal(Goal, CurCF, Hist) :-
	fg(Goal, CurCF, Hist).
fg(Goal, CurCF, Hist) :-
	...
	prove(N, IfList, Tally, Hist),
	...
prove(N, IfList, Tally, Hist) :-
	prov(IfList, 100, Tally, [N|Hist]),
	!.
prove(N, _, _) :-
	bugdisp(['fail rule', N]),fail.
prov([], Tally, Tally, Hist).
prov([H|T], CurTal, Tally, Hist) :-
	findgoal(H, CF, Hist),
	min(CurTal, CF, Tal),
	Tal >= 20,
	prov(T, Tal, Tally, Hist).
get_user(X, Hist) :-
	repeat,
	write(': '),
	read_line(X),
	process_ans(X, Hist).
process_ans([why], Hist) :-
	nl, write_hist(Hist),
	!,fail.
process_ans([trace, X], _) :-
	set_trace(X),!,
	fail.
process_ans([help], _) :-
	help, !,
	fail.
process_ans(X, _). % just return user's answer
write_hist([]) :-nl.
write_hist([goal(X)|T]) :-
	write_line([goal, X]),
	!,
	write_hist(T).
write_hist([N|T]) :-
	list_rule(N),
	!,
	write_hist(T).

Tài liệu đính kèm:

  • docDe tai.doc