hãy quan sát phiên bản kế tiếp của chương trình
3.2 Thuật toán – một phương pháp biểu diễn tri thức bool DK(int L )
bool DK(int L ) { switch (L) { case 1 : DK = (x = = Vx); case 2 : DK = (y = = 0); case 3 : DK = (y>0); } } void ThiHanh(int L) { switch (L){case 1 : x = 0; case 2: y = Vy; case 3 : k = min(Vx-x,y); x = x+k; y = y-k; } } #define SO_LUAT 3; { while ((x !=z) && (y !=z))
{ for (i = 1; i <= SO_LUAT; i++) if (DK(i)) ThiHanh(i);
}} }
3.2 Thuật toán – một phương pháp biểu diễn tri thức
Bây giờ giả sử rằng ta đã có các hàm đặc biệt sau:
bool GiaTriBool(String DK);
void ThucHien(String ThaoTac);
Hàm GiaTriBool nhận vào một chuỗi điều kiện, nó sẽ phân tích chuỗi, tính toán rồi trả ra giá trị bool của biểu thức này.
Ví dụ : GiaTriBoolean(‘6<7’) sẽ trả về true.
Hàm ThucHien cũng nhận vào một chuỗi, nó cũng sẽ
phân tích chuỗi rồi tiến hành thực hiện những hành động được miêu tả trong chuỗi này.
3.2 Thuật toán – một phương pháp biểu diễn tri thức
#define SO_LUAT 3;
struct Luat{ String DK;
String ThaoTac; }; CacLuat DSLuat[SO_LUAT]; void KhoiDong() { CacLuat[1].DK = ‘x = = Vx’; CacLuat[2].DK = ‘y = = 0’; CacLuat[3].DK = ‘y>0’; CacLuat[1].ThaoTac = ‘x = 0’; CacLuat[2].ThaoTac = ‘y = Vy’;
CacLuat[3].ThaoTac= ‘k = min(Vx-x,y), x = x + k, y = y-k’; }
{ while ((x != z) && (y != z))
{ for (i = 1; i<= SO_LUAT; i++) if GiaTriBoolean(CacLuat[i].DK) ThucHien(CacLuat[i].ThaoTac); }
3.2 Thuật toán – một phương pháp biểu diễn tri thức
Khi muốn sửa đổi "tri thức", bạn chỉ cần thay đổi giá trị mảng Luật là xong.
Người dùng vẫn gặp khó khăn khi muốn bổ sung hoặc hiệu chỉnh tri thức.
Họ cần phải nhập các chuỗi đại loại như ‘x = 0’ hoặc ‘k = min(Vx-x,y)’ ...
Chúng ta cần giảm bớt "khoảng cách" này lại bằng cách đưa ra những chuỗi điều kiện hoặc thao tác có ý nghĩa trực tiếp đối với người dùng.
Chương trình sẽ có sự chuyển đổi các điều kiện và thao tác này sang dạng phù hợp với chương trình.
3.2 Thuật toán – một phương pháp biểu diễn tri thức
Một số trạng thái và thao tác cơ bản.
Trạng thái cơ bản: Bình X đầy, Bình X rỗng, Bình X không rỗng, Bình X có n lít nước Thao tác: Đổ hết nước trong bình, Đổ đầy nước trong bình,
Đổ nước từ bình A sang bình B cho đến khi B đầy hoặc A rỗng.
3.2 Thuật toán – một phương pháp biểu diễn tri thức
Lưu ý: không thể có thao tác "Đổ n lít nước từ A sang B"
"Múc đầy X"
"Đổ z lít nước từ X sang Y"
Vì đây là một bài toán đơn giản nên bạn có thể dễ nhận thấy rằng, các trạng thái cơ bản và thao tác chẳng có gì khác so với các điều kiện mà chúng ta đã đưa ra.
3.2 Thuật toán – một phương pháp biểu diễn tri thức
Chương trình truyền thống được cấu tạo từ hai "chất liệu" cơ bản là: "chất liệu" cơ bản là:
dữ liệu và
thuật toán