MỤC LỤC I. TỔNG QUAN VỀ ĐỀ TÀI 3 1. Lý do chọn đề tài: 3 2. Phạm vi kiến thức: 3 3. Quá trình thực hiện: 3 4. Mục tiêu của đề tài: 3 II. THU THẬP PHÂN LOẠI KIẾN THỨC VÀ YÊU CẦU CỦA NGƯỜI SỬ DỤNG 4 1. Tổng quan về giải tam giác 4 2. Xác định bài toán cần giải 5 III. PHÂN TÍCH DỮ LIỆU VÀ CÁC MỐI QUAN HỆ, BIỂU DIỄN TRI THỨC 6 IV. GIẢI QUYẾT BÀI TOÁN 9 1. Thuật giải suy diễn tiến 9 2. Thuật giải suy diễn lùi 11 3. Tính toán của chương trình 11 V. CHƯƠNG TRÌNH 12 VI. KẾT LUẬN 15 VII. TÀI LIỆU THAM KHẢO 15
ĐẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐH CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN ĐỀ TÀI: GIẢI BÀI TOÁN TAM GIÁC BẰNG MÔ HÌNH HỆ LUẬT DẪN GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Đỗ Nguyên Thạch Đặng Vũ Lâm TP Hồ Chí Minh, tháng 6 – 2015 1 MỤC LỤC I. TỔNG QUAN VỀ ĐỀ TÀI 1. Lý do chọn đề tài: Quá trình học toán hình hình học ở cấp cơ sở luôn là khó khăn cho khá nhiều học sinh, trong đó kiến thức để giải tam giác là một trong bài toán cơ sở nhưng cũng không dễ để có thể thực hiện. Hướng đến việc tạo một phần mềm có thể giải các bài toán tam giác để giúp các em học sinh đình hình được các bước giải bài toán cũng như hiểu rõ về việc bài toán giải tam giác tạo nền tảng cho các bài toán hình học phẳng phức tạp hơn và hình học không gian do đó nhóm em quyết định chon đề tài xây dựng phần mềm “Giải bài toán tam giác”. 2. Phạm vi kiến thức: Chương trình sẽ bao gồm các kiến thức cơ bản có thể dùng để tính các đối tượng trong tam giác từ bao gồm các công thức liên quan về các cạnh, gốc, đường cao, chu vi, diện tích của hình tam giác, các thông số trên sẽ được tính nhờ giả thuyết đã cho trên cơ sở của các công thức 3. Quá trình thực hiện: Để thực hiện chương trình trên cần trải qua các bước cơ bản sau: - Thu thập kiến thức - Thu thập các yêu cầu của người sữ dụng mà chương trình cần giải quyết 2 - Phân loại kiến thức, xem xét các quan hệ - Thiết kế lưu trữ kiến thức, hoàn chỉnh kiến thức - Viết Demo cho bài toán nêu trên 4. Mục tiêu của đề tài: - Đưa ra mô hình lưu trữ của bài toán giải tam giác. - Hoàn thành deno chương trình giải toán tam giác xử lý được một số dạng bài toán đơn giản dựa trên giả thuyết đã có - Đáp ứng yêu cầu giải toán từng bước có giải thích của người dùng II. THU THẬP PHÂN LOẠI KIẾN THỨC VÀ YÊU CẦU CỦA NGƯỜI SỬ DỤNG 1. Tổng quan về giải tam giác • Các đối tượng và sự kiện trong tam giác: 3 Ta có các đối tượng trong tam giác cần xét: – A: Số đo góc đối diện cạnh a – B: Số đo góc đối diện cạnh b – C: Số đo góc đối diện cạnh c – a: độ dài cạnh a – b: độ dài cạnh b – c: độ dài cạnh c – ha: độ dài đường cao tương ứng với cạnh a – hb: độ dài đường cao tương ứng với cạnh b – hc: độ dài đường cao tương ứng với cạnh c – S: diện tích của tam giác – p: nửa chu vi • Các công thức trong tam giác: 4 2. Xác định bài toán cần giải - Giả thuyết: một đối tượng, thông số mà đề bài cho trước. - Mục tiêu: xác định đối tượng cần tìm của đề bài, có thể qua một hay nhiều bước để có được kết quả cuối cùng, và các bước sẽ được chương trình thể hiện rõ ràng. - Người dùng cần xác định được các thông số giả thuyết và yêu cầu tính của đề bài để nhập vào chương trình xử lý. III. PHÂN TÍCH DỮ LIỆU VÀ CÁC MỐI QUAN HỆ, BIỂU DIỄN TRI THỨC - Tri thức gồm hai thành phần (F, R), tức là các khái niệm (phát biểu) và các luật dẫn. - Trong bài toán tam giác trên, phần tri thức theo luật dẫn (Facts, Rules) gồm: 5 Facts = {A, B, C, a, b, c, S, p, R, ha, hb, hc, …} Rules = { r1: {A, B} –> {C}; r2: {A, C} –> {B}; … } - Tổ chức tri thức lưu trên bộ nhớ phụ với 2 file : Facts.txt và Rules.txt Cấu trúc file Facts.txt : Begin <tên đối tượng 1> : <mô tả của đối tượng 1> <tên đối tượng 2> : <mô tả của đối tượng 2> … End. File Facts.txt của chương trình: Begin A : so do goc doi dien canh a B : so do goc doi dien canh b C : so do goc doi dien canh c a : do dai canh a b : do dai canh b c : do dai canh c ha : do dai duong cao tuong ung voi canh a hb : do dai duong cao tuong ung voi canh b hc : do dai duong cao tuong ung voi canh c S : dien tich tam giac p : nua chu vi End. Cấu trúc file Rules.txt : 6 <luật 1> : <công thức 1> <luật 2> : <công thức 2> … File Rules.txt của chương trình : a,b,c->p.( a + b + c ) / 2 a,b,c,p->S.sqrt ( p * ( p – a ) * ( p – b ) * ( p – c ) ) a,b,C->S.( a * b * sin C ) / 2 a,c,B->S.( a * c * sin B ) / 2 b,c,A->S.( b * c * sin A ) / 2 a,ha->S.a * ha / 2 b,hb->S.b * hb / 2 c,hc->S.c * hc / 2 a,b,A->B.arcsin ( b * sin A / a ) a,b,B->A.arcsin ( a * sin B / b ) a,c,A->C.arcsin ( c * sin A / a ) a,c,C->A.arcsin ( a * sin C / c ) b,c,B->C.arcsin ( c * sin B / b ) b,c,C->B.arcsin ( b * sin C / c ) A,B->C.180 – A – B A,C->B.180 – A – C B,C->A.180 – C – B a,C->hb.a * sin C a,B->hc.a * sin B c,A->hb.c * sin A c,B->ha.c * sin B b,A->hc.b * sin A b,C->ha.b * sin C a,A,B->b.a * sin B / sin A 7 a,A,C->c.a * sin C / sin A b,B,A->a.b * sin A / sin B b,B,C->c.b * sin C / sin B c,C,A->a.c * sin A / sin C c,C,B->b.c * sin B / sin C a,b,C->c.sqrt ( a * a + b * b – 2 * a * b * cos C ) a,c,B->b.sqrt ( a * a + c * c – 2 * a * c * cos B ) b,c,A->a.sqrt ( b * b + c * c – 2 * b * c * cos A ) Sau khi lưu luật dẫn dưới dạng luật như trên, ta xây dựng cấu trúc dữ liệu phù hợp để đọc luật vào. Ở đây, sau khi đọc các luật, tôi sẽ sử dụng lưu luật dưới dạng mảng: Khởi tạo mảng sẽ là một mảng 11 phần tử, mỗi phần tử mặc định là số -1. Mảng này dùng để đánh dấu các biến trong luật. Trong mảng này mình sẽ load các biến xuất hiện trong luật vào các dòng của bảng như trên. Mỗi luật được đưa vào sẽ được phân tích như sau: Mỗi sự kiện trong mệnh đề IF sẽ được đánh dấu là 0, trong mệnh đề THEN là 1. Ví dụ luật: A, B -> C Ta có các giá trị trong mảng lần lượt là: 0, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1. Hay a, b, c -> p -1, -1, -1, 0, 0, 0, -1, -1, -1, 1, -1. 8 IV. GIẢI QUYẾT BÀI TOÁN Để giải được bài toán ta cần phải xác định những luật nào sẽ dùng để đi được đến kết quả từ hững giả thiết đã cho. Ở đây ta có hai thuật giải thường dùng là thuật giải Suy diễn tiến và Suy diễn lùi. 1. Thuật giải suy diễn tiến • Sơ lược về suy diễn tiến: Tư tưởng của thuật giải Suy diễn tiến là từ những giả thiết đã biết (know) ta áp dụng các tập luật để sinh ra thêm giả thiết mới và bổ sung vào know. Quá trình này cứ tiếp tục cho đến khi kết luận cần tìm đã nằm trong know hoặc không thể áp dụng được luật nào để sinh thêm giả thiết mới nữa và chương trình kết thúc • Mô phỏng thuật giải: Bước 1: Khởi tạo một mảng đánh dấu các luật, để đánh dấu những luật nào đã được sử dụng để tránh trùng lặp các bước. Bước 2: Kiểm tra xem mục tiêu đã nằm trong tập giả thiết (know) chưa? Nếu đúng, goto Bước 6. Nếu sai, chuyển tới bước 3. Bước 3: Cho kiểm tra các luật, nếu luật nào chưa dùng (chưa được đánh dấu): Kiểm tra xem các luật trong đó có đủ điểu kiện để áp dụng sinh ra giả thiết mới hay không? Nếu đủ điều kiện: + Đánh dấu luật này lại + Bổ sung kết luận của luật vào trong know + Chuyển tới Bước 2 Nếu không đủ điều kiện: tiếp tục với luật tiếp theo. Bước 4: Nếu không còn luật nào có thể áp dụng được nữa, chuyển tới bước 6. Bước 5: Quay lại bước 2. Bước 6: Kết luận: + Nếu Bước 4 đúng: bài toán không thể giải được + Nếu Bước 2 đúng: dùng suy diễn lùi để loại bỏ các luật thừa, đưa ra kết luận. - Ví dụ minh họa cho thuật giải Suy diễn tiến: Giả thiết: góc A, góc B, cạnh c Kết luận: Tính hc 9 Bài giải (các luật): Chương trình sẽ lần lượt thử chạy các luật theo tuyến tính cho đến khi kết luận hc nằm trong Know. – Tính góc C: A, B -> C Known.Add(C). – Tính hb: c, A -> hb Known.Add(hb). – Tính ha: c,B->ha Known.Add(ha). – Tính a: c,C,A->a Known.Add(a). – Tính b: c,C,B->b Known.Add(b). – Tính p: a,b,c->p Known.Add(p). – Tính S: a,b,c,p->S Known.Add(S). – Tính hc: a,B->hc Known.Add(hc). Vì hc đã nằm trong Known nên dừng Suy diễn. Đó là các luật mà máy sẽ chạy để tính được hc, nhưng trong quá trình chạy suy diễn tiến, sẽ phát sinh ra các luật thừa, lúc này ta sẽ dùng suy diễn lùi để loại bỏ các luật thừa đó, tức là nếu kết luận của luật liền trước không có trong giả thiết của một luật thì loại luật đó ra. Kết quả ta được: B1: Tính góc C: A,B->C B2: Tính cạnh a: c,C,A->a B3: Tính hc: a,B->hc 2. Thuật giải suy diễn lùi • Sơ lược về suy diễn lùi: 10 [...]... thuật giải sy diễn tiến và lùi, hiểu được cách áp dụng trên bài toán giải tam giác o Xây dựng được phần mềm giải các bài toán tam giác đơn giản dựa trên các công thức sẵn có o Biết được quy trình cơ bản của việc xây dựng một hệ giải bài toán Hạn chế: o Chương trình chưa thật sự hữu ích, các bài toán giải được còn mang tình căn bản và đơn giản o Chưa phát triển được các kiến thức liên quan để giải bài... không thể giải được trong khi ta vẫn có thể giải được bài bằng Suy diễn tiến, do vậy ta phải đặt số lần quay lui của hàm đệ quy Trong bài này tôi đặt số lần quay lui của hàm đệ quy là 3 Sau 3 lần suy diễn lùi, nếu vẫn không thể đủ giả thiết để thực thi các luật, ta sẽ sử dụng suy diễn tiến để sinh ra thêm giả thiết để giải bài toán • Mô phỏng giải thuật: Ta sẽ dùng ví dụ bên trên để hiểu được giải thuật... được hc, ta cần đi tìm a Ta dùng luật: A, C, c –> a Bước 3: Để tính được a, ta cần tính được C Ta dùng luật: A, B –> C Tới đây đã đủ dữ kiện để sinh ra C, ta thay C ngược lại biểu thức trước, sau đó tiếp tục thay vào các công thức phía trước cho tới khi tìm được hc Vậy là ta đã xây dựng được thuật giải để tối ưu hóa những tập luật dùng để giải bài toán và đưa được ra lời giải cho bài toán Trong phần tiếp... bài toán là dựa vào tập luật và lời giải tìm được, ta sẽ tính toán và trình bài kết quả 3 Tính toán của chương trình Sau khi có được các luật sẽ dùng, ta sẽ tiến hành đọc các công thức và thay số vào để tính Các công thức toán học thông dụng chúng ta vẫn thường hay dùng được gọi là các công thức ở dạng trung tố (Infix), để chuyển về dạng ký pháp nghịch đảo Ba Lan tức là tính bằng các stack ta phải chuyển...Trong thuật giải Suy diễn lùi, ta dùng kỹ thuật đệ quy để thực hiện suy diễn lùi Để suy ra được kết luận, ta thực hiện tìm luật để suy ra được đích là kết luận, ta phải lùi về để tìm những thành phần còn thiếu trong luật, tiếp tục ta lại đệ quy với đích mới là thành phần còn thiếu đó Quá trình đệ quy cứ tiếp tục cho... hữu ích, các bài toán giải được còn mang tình căn bản và đơn giản o Chưa phát triển được các kiến thức liên quan để giải bài toán phức tạp hơn o Chưa giải một bài toán có nhiều yêu cầu TÀI LIỆU THAM KHẢO – Giáo trình Trí Tuệ Nhân Tạo – Đại học công nghệ thông tin – GS.TSKH Hoàng Kiếm, Ths Đinh Nguyễn Anh Dũng – Xuất bản năm 2007 – Model Driven Architecture and Ontology Development – Tác giả: Dragan... stack ra và cho vào output cho đến khi gặp dấu mở ngoặc “(“ (Dấu mở ngoặc cũng phải được đưa ra khỏi stack) – Nếu là toán tử: Chừng nào ở đỉnh stack là toán tử và toán tử đó có độ ưu tiên lớn hơn hoặc bằng toán tử hiện tại thì lấy toán tử đó ra khỏi stack và cho ra output Đưa toán tử hiện tại vào stack 11 Sau khi duyệt hết biểu thức infix, nếu trong stack còn phần tử thì lấy các token trong đó ra và... Gasevic, Dragan Djuric, Vladan Devedzic 15 – http://en.wikipedia.org/wiki/Semantic_network http://en.wikipedia.org/wiki/Spreading_activation https://thanhcuong.wordpress.com/2010/12/16/gi%E1%BA%A3i-bi-ton-tamgic-s%E1%BB%AD-d%E1%BB%A5ng-m%E1%BA%A1ng-ng%E1%BB%AF-nghiasolution-for-triangle-using-semantic-network/ 16