Suy diễn tiến - Một giải thuật thú vị
Lê Nhật Quang
Đã bao giờ bạn muốn xây dựng một chương trình giải toán tự động, chỉ cần nhập một đề
toán, sau đó, chương trình trình sẽ đưa ra phương pháp giải, hoặc hơn nữa, chương trình
sẽ tự động tính toán luôn kết quả cho bạn. Nếu câu trả lời là ″có″ thì thuật giải này sẽ là
công cụ tuyệt vời để hỗ trợ cho bạn đấy! Bây giờ, chúng ta cùng tìm hiểu về thuật giải
này:
I/ Giới thiệu thuật giải:
1/ Hệ luật dẫn: là luật phát biểu dưới dạng:
If p1,p2,…,pn then q1,q2,…,qm
Trong đó, các ký hiệu pi,qj là các sự kiện nào đó.
VD : - If a>b, b>c then a>c
- If a=b then b=a
…
2/ Mô hình hệ luật dẫn: Gồm 2 thành phần cơ bản (F,R)
F là tập sự kiện , R là tập luật dẫn, mỗi luật có dạng: A---->B (A là giả thiết, B là kết luận
của luật)
VD: Các liên hệ suy dẫn trên các yếu tố của một tam giác theo hệ luật dẫn:
(1) Tập sự kiện:
F={a,b,c,A,B,C,R,S,p,ha,hb,hc,…}
Trong đó: sự kiện a tương đương với ″biết cạnh a″
sự kiện b tương đương với ″biết cạnh b″
…
(2) Tập luật dẫn:
R={ r1 : A,B-> C,
r2: a,b,c->S,
…
}
3/ Vấn đề suy diễn:
Giả sử có hệ luật dẫn (F,R). Cho trước một tập sự kiện giả thiết GT và một tập sự kiện mục
tiêu G.
Hỏi có thể suy ra các sự kiện mục tiêu G từ GT hay không?
4/ Suy diễn tiến:
Là quá trình suy ra các sự kiện mới từ những sự kiện đang có dự trên sự áp dụng của các
luật dẫn, tập sự kiện xuất phát là các sự kiện trong giả thiết.
Quá trình suy diễn kết thúc khi đạt được các sự kiện mục tiêu hoặc khi không suy diễn
thêm được sự kiện gì mớidựa trên các luật dẫn.
VD: GT={a,b,A} G={S}
Quá trình suy diễn:
- a,b,A -> B (luật a,b,A -> B dựa trên định lý hàm số Sin)
GT1={a,b,A,B}
- A,B-> C (luật A,B->C dựa trên định lý tổng các góc trong tam giác )
- C,a,b->S (luật C,a,b->S dựa theo công thức S=1/2abSinC)
-> từ a,b,A ta suy được S.
II/ Thuật giải suy diễn tiến:
Bước 1: Ghi nhận tập sự kiện ban đầu A=giả thiết và mục tiêu là B.
Bước 2: Tìm luật dẫn r: GT->KL sao cho GT thuộc A
Bươc 3: if (tìm được luật r) then
3.1 : Ghi nhớ luật r
3.2: Bổ sung luật r (KL của luật r) vào A.
3.3 if (B thuộc A) then Kết thúc
end
else Kết thúc: bị bế tắc.
Bươc 4: Trở lại bước 2.
Sau khi đọc xong thuật giải suy diễn tiến, bạn có thể tự xây dựng một chương trình giải
toán đơn giản, ví dụ như giải toán hình học trong hệ luật dẫn tam giác.
VD:
Nhập giả thiết: a b c - mục tiêu: hc
Chương trình cho ra kết quả:
âb^c -> S (S=a*b*c/4*R)
S^c -> hc (hc=2*S/c)
Bạn nên tổ chức 1 file dữ liệu chứa tập sự kiện F và tập luật dẫn R. Chương trình sẽ dựa
trên file dữ liệu này để giải một số bài toán. Đây là cấu trúc file dữ liệu đề nghị:
- Dòng 1: Chứa tập sự kiện của tam giác
a b c A B C ha hb hc p r R S
- K dòng tiếp theo chứa các luật dẫn và các chú thích :
ÂB -> C (C=180-B-A)
C,a,b->S (S=1/2abSinC)
…
Đây là một thuật giải đơn giản và hay,với một chút khéo léo trong việc xử lý, tôi nghĩ bạn
sẽ dễ dàng xây dựng được chương trình này. Một điều lưu ý nữa là thuật giải này có thể sẽ
làm một số bước dư thừa, bạn có thể dùng phương pháp quay lui hay tìm kiễm theo chiều
rộng để tìm ra kết quả một cách tối ưu và công việc này xin nhường lại cho bạn! Nếu có
thắc mắc hay cân chưưong trình ví dụ thì xin lien lạc vối tôi tại địa chỉ: