Thuật toán giải bài toán suy diễn tiến
Trang 1Suy 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}
Trang 2- 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ỉ:
michealnest@hcmc.netnam.vn