Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
466,13 KB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÀI THU HOẠCH MÔN LẬP TRÌNH SYMBOLIC Đề tài: LẬP TRÌNH SYMBOLIC VÀ ỨNG DỤNG GIẢI BÀI TOÁN VỀ TAM GIÁC Giảng viên hướng dẫn: PGS. TSKH. Đỗ Văn Nhơn Học viên thực hiện: Vưu Văn Tòng (CH1101146) Thành phố Hồ Chí Minh - Tháng 01 Năm 2013 Lập trình symbolic và ứng dụng trong việc giải tam giác LỜI MỞ ĐẦU Trí tuệ nhân tạo ngày càng trở thành một lĩnh vực nghiên cứu và có ứng dụng thực tế nhất trong thời đại công nghệ ngày nay. Từ những phần mềm thông minh, có khả năng mô phỏng hành vi của con người, đến các phần mềm trợ giúp cho con người giải những bài toán mà nếu tính toán bằng sức người thì rất mất thời gian. Trên cơ sở đó, các ngôn ngữ lập trình và các phương pháp lập trình cũng phát triển theo để xây dựng nên các chương trình trí tuệ nhân tạo. Trong đó, đáng kể nhất là Prolog, LISP và Maple. Các ngôn ngữ trên được gọi là ngôn ngữ lập trình symbolic. Trong bài báo cáo này, em xin trình bày đề tài “lập trình symbolic và ứng dụng giải bài toán về tam giác”. Trong đó bao gồm các phần: sơ lược về lập trình symbolic, sử dụng Maple để lập trình symbolic và phần ứng dụng về lập trình giải tam giác bằng Maple. Em xin chân thành cảm ơn thầy Đỗ Văn Nhơn đã tận tình hướng dẫn chúng em từ những bước cơ bản, giải đáp những thắc mắc một cách rõ rang và tạo cho chúng em một nền tảng để có thể dễ dàng tiếp cận vào lĩnh vực lập trình symbolic cho trí tuệ nhân tạo. Em cũng xin cảm ơn phòng đào tạo sau đại học đã đưa môn học thú vị này vào chương trình. Mặc dù đã cố gắng để hoàn thành bài thu hoạch, nhưng do hạn chế về thời gian và kiến thức nên chắc chắn không thể tránh khỏi những thiếu sót. Rất mong nhận được những ý kiến đóng góp của thầy. Lập trình symbolic Trang 2 Lập trình symbolic và ứng dụng trong việc giải tam giác NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Lập trình symbolic Trang 3 Lập trình symbolic và ứng dụng trong việc giải tam giác NỘI DUNG Lập trình symbolic Trang 4 Lập trình symbolic và ứng dụng trong việc giải tam giác 1. MAPLE VÀ LẬP TRÌNH SYMBOLIC 1.1. Lập trình symbolic là gì? Một trong những bước tiến hóa quan trọng của chương trình trên máy tính trong những năm gần đây là những chương trình có khả năng thực hiện việc tính toán đại số và các vấn đề toán học dựa trên ký hiệu (symbol) chứ không phải dựa trên số, chuỗi hay các giá trị khác. LISP và Prolog là những ví dụ của ngôn ngữ lập trình symbolic. Ví dụ, chúng ta hoàn toàn có thể tính toán rằng: (a+b) * (c+d) = ac + ad +bc +bd mà không cần biết đến giá trị của a,b,c,d. Symbol là thành phần cốt lõi của ngôn ngữ cũng như của lập trình symbolic. Tóm lại, lập trình symbolic là sử dụng ngôn ngữ symbolic để thiết kế và giải các bài toán. Những ngôn ngữ này thao tác trên các ký hiệu chứ không đơn thuần dựa trên số, chuỗi như các ngôn ngữ khác (C,C++, ) 1.2. Maple – công cụ lập trình symbolic Maple là một hệ thống tính toán trên các biểu thức đại số và minh họa mạnh mẽ. Maple có cách cài đặt rất đơn giản và hỗ trợ nhiều hệ điều hành khác nhau như Window, Unix, Mac OS và thậm chí cả Maple.NET chạy trên mạng hỗ trợ tính toán phân tán. Maple là một ngôn ngữ lập trình hướng thủ tục – một dãy các lệnh Maple được sắp xếp tuần tự để thực hiện một tác vụ nào đấy. Khi thực thi, các lệnh đó sẽ được thực thi tuần tự và trả kết quả sau cùng. Maple có các chức năng cơ bản: - Tính toán trên các biểu thức đại số - Có khả năng tính chính xác hoặc gần đúng - Có một hệ thống minh họa hình học thuận tiện và mạnh mẽ như vẽ đồ thị động/tĩnh của các đường, mặt phẳng trong các hệ tọa độ khác nhau. - Cho phép một số ngôn ngữ lập trình khác (Java, C#, C) tương tác thông qua hệ thống APIs hoặc REST server. - Hệ thống help khá hữu ích, dễ dàng tra cứu và sử dụng Lập trình symbolic Trang 5 Lập trình symbolic và ứng dụng trong việc giải tam giác 2. ỨNG DỤNG LẬP TRÌNH SYMBOLIC ĐỂ GIẢI QUYẾT VẤN ĐỀ TAM GIÁC 2.1. Mô tả bài toán Giả sử ta có một tam giác như sau: Với: - A,B,C: là các đỉnh của như các góc của tam giác - a,b,c: là các cạnh tương ứng với các góc (a là ký hiệu cho cạnh BC, b là ký hiệu cho cạnh AC và c là ký hiệu cho cạnh AB) - m a , m b , m c: là các đường trung tuyến từ các đỉnh A,B,C - p: chu vi của tam giác - S: diện tích của tam giác Bài toán: giả sử ta biết được giá trị của một số thành phần trong tam giác (như trên). Ta cần tính giá trị của một thành phần khác. Ký hiệu bài toán: H G Với H là phần giả thuyết còn G là phần kết luận của bài toán. Ví dụ bài toán được ký hiệu: H = {a=5,b=10,C=90}, G={S} Thì ta hiểu là: cho trước giá trị của cạnh a, cạnh b và góc C. Hãy tính diện tích của tam giác. 2.2. Phân tích bài toán 2.2.1. Quy ước Với bài toán được mô tả như trên, ta sẽ sử dụng Maple để giải quyết. Tuy nhiên, có một số quy ước cần được tuân thủ: Lập trình symbolic Trang 6 A c b m b m c m a a C B Lập trình symbolic và ứng dụng trong việc giải tam giác H là tập giả thuyết của bài toán, mỗi phần tử trong tập hợp là một cấu trúc gồm: <tên biến> = <giá trị>. Ví dụ: H := {a=5,b=10} G là tập kết luận của bài toán (biến mong muốn tìm được giá trị, hiện nay chỉ hỗ trợ tìm một biến mỗi lần). Ví dụ: G := {S} hoặc G := {a} Một tập các công thức (Formula) được áp dụng trên tam giác (truyền như biến toàn cục) với cấu trúc mỗi phần tử là một đa thức. Ví dụ: Formular := {A+B+C=180, p=(a+b+c)/2} Nếu bài toán giải được ta cần: o Đưa ra giá trị của thành phần cần tìm o Đưa ra các bước giải (áp dụng công thức nào trong Formula và được gì từ công thức đó) 2.3. Thuật giải Để giải quyết bài toán trên, ta sẽ áp dụng thuật giải trên đối tượng tính toán (trong trường hợp này đối tượng đó là tam giác). Có 2 thuật giải được áp dụng trong chương trình: thuật giải tìm đáp số và các bước giải và thuật giải nhằm rút gọn (loại bỏ các bước dư thừa). 2.3.1. Thuật giải tìm đáp số Input: o Tập các biến cùng với giá trị (phần giả thuyết). Ký hiệu: GT o Tập gồm một biến cần tìm (phần kết luận). Ký hiệu: KL o Tập Formular cho trước. Ký hiệu: Formula Output: o Khẳng định có thể tìm được đáp án không o Nếu có, thì đáp án là gì và áp dụng công thức nào (thứ tự) để có đáp án Thuật giải: Bước 1: - Khởi tạo Solution := [] (đây là danh sách các công thức được áp dụng để giải) - Khởi tạo varsFoundSet := GT (đây là tập hợp các đẳng thức với vế trái là một biến và vế phải là giá trị đã tìm được) - Khởi tạo formulaFound := false (cờ hiệu để biết ta có tìm thấy một công thức có thể áp dụng dựa trên tập giá trị đã có hay không) Lập trình symbolic Trang 7 Lập trình symbolic và ứng dụng trong việc giải tam giác - Khởi tạo solutionFound := true (cờ để xác nhận có tìm thấy lời giải hay không) - Khởi tạo SolutionValue := [] (danh sách các đẳng thức đã tính được nhờ các công thức trong Solution – dùng cho việc rút gọn lời giải và khác với varsFoundSet, SolutionValue coi trọng thứ tự ) Bước 2: - While KL not subsets varsFoundSet (tức là chưa tìm thấy) o formulaFound := false (reset mỗi lần tìm một công thức mới) o Tìm một công thức f từ Formular có thể áp dụng được (một công thức được gọi là áp dụng được khi số lượng biến chưa biết giá trị trong một công thức là 1. Ví dụ: A + B + C = pi thì ta phải biết được ít nhất 2 giá trị: (A,B) hoặc (A,C) hoặc (B,C)) If apdungduoc(f) = true then (tìm được công thức thỏa yêu cầu) • Thế các biến đã có vào công thức, giải bằng hàm solve để tìm ra biến còn lại. Đặt là: newvars • Solution := [op(Solution),f] (thêm f vào Solution) • varsFoundSet := varsFoundSet union newvars (thêm biến tìm được vào tập các biến tìm được) • SolutionValue := [op(SolutionValue),newvars] • Đặt formulaFound := true để tiếp tục vòng lặp o If formulaFound = false then: solutionFound := false (không tìm được công thức nào có thể sử dụng nữa và cũng chưa tìm được kết quả. Goto bước 3; Bước 3: - If solutionFound = false then o Printf(“Không tìm được kết quả”); - Else o Printf(“Tìm được kết quả”) o Gọi hàm rút gọn để loại bỏ các bước dư thừa. Được newSol o Lặp và in các công thức trong newSol để thể hiện các bước giải 2.3.2. Thuật giả rút gọn lời giải Lập trình symbolic Trang 8 Lập trình symbolic và ứng dụng trong việc giải tam giác Một điểm cần lưu ý là sau khi chạy thuật giải đi tìm lời giải ở trên, thì biến Solution[nops(Solution)] chính là công thức cuối giúp tìm ra kết quả bài toán và SolutionValue[nops(SolutionValue)] chính là lời giải. Do đó, công thức này là cần thiết và là cơ sở cho việc rút gọn lời giải. Input: o Danh sách các Solution (các công thức đã áp dụng) o Danh sách các SolutionValue ( các đẳng thức tìm được sau khi áp dụng các công thức trong Solution) Output: o Trả về biến newSolution sẽ lưu trữ lại các công thức và giá trị thật sự có ý nghĩa trong việc tìm lời giải Thuật giải: Bước 1: - Khởi tạo newSolution là một danh sách 2 chiều (như ma trận) - Khởi tạo needvarset := indets(Solution[nops(Solution)],name) (lưu trữ các biến cần phải biết để tìm ra lời giải) Bước 2: - newSolution[1] := Solution[ops(Solution)] (lưu lại công thức đã áp dụng cuối nhất và quan trọng nhất) - newSolution[2] := SolutionValue[nops(SolutionValue)] (lưu lại kết quả bài toán) Bước 3: - For i from nops(SolutionValue) – 1 by -1 to 1 do (Lặp ngược qua danh sách các công thức trong Solution trừ công thức cuối cùng) o x := lhs(SolutionValue[i]) (tìm ra biến mà một công thức nào đó tính được) o If x subset needvarset then (x là biến quan trọng cần xác định mới có thể tìm lời giải) newSolution[1] := [op(newSolution[1]),Solution[i]]; newSolution[2] := [op(newSolution[2]),SolutionValue[i])] Bổ sung biến mới vào needvarset. Lập trình symbolic Trang 9 Lập trình symbolic và ứng dụng trong việc giải tam giác Bước 4: - Return newSolution; 2.4. Kiểm tra với dữ liệu giả Trước khi chạy chương trình để kiểm tra, ta cần đảm bảo rằng tất cả các hàm và biến phải được load (bằng cách vào hàm hoặc biến nhấn ENTER để Maple server tự động load các hàm và biến đó). Giả sử ta có các công thức tính toán như sau: Bài toán 1: Cho biết các giá trị như sau: BAI TOAN DA DUOC GIAI QUYET Ket qua : {S = 2*(-(cos(1/2*pi)^2- 1)*(32*cos(1/2*pi)^2+8*cos(1/2*pi)*(16*cos(1/2*pi)^2+9)^(1/2)+9))^(1/2)} Cac buoc giai: Ap dung cong thuc: a^2 = b^2+c^2-2*b*c*cos(A) ta co: c = 4*cos(1/2*pi) +(16*cos(1/2*pi)^2+9)^(1/2) Ap dung cong thuc: c^2 = a^2+b^2-2*a*b*cos(C) ta co: C = Pi- arccos(4/5*cos(1/2*pi)^2+1/5*cos(1/2*pi)*(16*cos(1/2*pi)^2+9)^(1/2)-4/5) Ap dung cong thuc: S = 1/2*a*b*sin(C) ta co: S = 2*(-(cos(1/2*pi)^2- 1)*(32*cos(1/2*pi)^2+8*cos(1/2*pi)*(16*cos(1/2*pi)^2+9)^(1/2)+9))^(1/2) Ta thấy, điều đầu tiên giải thuật đã khẳng định là có đáp án. Tiếp theo, giải thuật in ra đáp án của bài toán Lập trình symbolic Trang 10 [...]... như: “để giải bài toán này thì ta cần biết thêm giá Lập trình symbolic Trang 12 Lập trình symbolic và ứng dụng trong việc giải tam giác trị của một biến/tập biến nào đó” hoặc “biến a nên được thay đổi như - thế này để có lời giải … Mở rộng chương trình từ một đối tượng tính toán thành mạng các đối tượng tính toán để có thể giải quyết nhiều bài toán hơn, hoặc các bài - toán phức tạp hơn Thiết lập giao... phức tạp hơn Thiết lập giao diện trực quan bằng Maplet hoặc bằng cách kết hợp các ngôn ngữ lập trình khác với Maple Lập trình symbolic Trang 13 Lập trình symbolic và ứng dụng trong việc giải tam giác 4 TÀI LIỆU THAM KHẢO Danh sách giáo trình và sách điện tử [1] Đỗ Văn Nhơn Các bài giảng về Maple, lập trình Symbolic Đại học Công nghệ Thông tin [2] Đỗ Văn Nhơn Model for Knowledge Bases of Computational... Heuristic vào chương trình, chỉ tìm công thức theo dạng vòng lặp Tuy nhiên, chương trình cũng có số ưu điểm: - Dễ dàng cài đặt (chỉ cần mở bằng Maple là xong) Có thể bổ sung thêm các công thức mới, thành phần mới dễ dàng (thêm - vào biến toàn cục Formula) Có khả năng rút gọn lời giải để tạo ra một lời giải TỐT Lập trình symbolic Trang 11 Lập trình symbolic và ứng dụng trong việc giải tam giác 3 KẾT LUẬN... giải tam giác 3 KẾT LUẬN Học được một cái mới, cách lập trình Symbolic bằng công cụ mạnh như Maple là một điều tuyệt với ở môn học này Qua quá trình học tập và làm tiểu luận, em đã có cơ hội để hiểu rõ hơn, cũng cố và trao dồi thêm nhiều kiến thức về các phương pháp lập trình (đặc biệt là lập trình symbolic) và cách mà con người tạo ra những chương trình mang tính trí tuệ cao Trong giới hạn của đề tài,... Ưu và khuyết điểm của chương trình Do hạn chế về thời gian và kiến thức nên chương trình có một số lỗi/hạn chế nhất định Dưới đây là danh sách các hạn chế: - Chưa xây dựng được giao diện chương trình Công thức về tam giác chưa đủ Cần bổ sung thêm các công thức khác Số lượng thành phần trong tam giác còn thiếu Ví dụ như đường cao, - bán kính đường tròn nội tiếp… Chưa áp dụng thuật giải Heuristic vào.. .Lập trình symbolic và ứng dụng trong việc giải tam giác Cuối cùng, giải thuật in ra các công thức và giá trị các biến tìm được theo công thức (đã rút gọn) Giờ, chúng ta sẽ thử trong trường hợp KL đã có sẵn trong phần GT xem Bài toán 2: kết luận đã được thêm trong phần giả thuyết BAI TOAN DA DUOC GIAI QUYET Ket qua da nam trong gia thuyet Ta thấy, chương trình đã đưa ra gợi ý rằng... phương pháp lập trình và biểu diễn tri thức, góp phần khuyến khích sự tìm tòi và học hỏi mở rộng trên các bài toán trí tuệ nhân tạo khác nhau Theo em, hướng phát triển tiếp theo của bài thu hoạch này nên đi theo: - Áp dụng Heuristic vào chương trình với thông tin thêm là độ phức tạp - của công thức Công thức nào đơn giản nhất thì nên được chọn Trong trường hợp không tìm ra được lời giải thì chương trình. .. Ho Chi Minh City, Vietnam Danh sách website [1] http://vi.wikipedia.org/wiki /Tam_ gi%C3%A1c (một số khái niệm về tam giác) [2] http://www.maplesoft.com/support/help/ (hướng dẫn sử dụng các APIs của Maple) [3] http://baigiang.violet.vn/present/show?entry_id=3227016 (các công thức được áp dụng trong giải tam giác) Lập trình symbolic Trang 14 . trình symbolic và ứng dụng giải bài toán về tam giác . Trong đó bao gồm các phần: sơ lược về lập trình symbolic, sử dụng Maple để lập trình symbolic và phần ứng dụng về lập trình giải tam giác. 3 Lập trình symbolic và ứng dụng trong việc giải tam giác NỘI DUNG Lập trình symbolic Trang 4 Lập trình symbolic và ứng dụng trong việc giải tam giác 1. MAPLE VÀ LẬP TRÌNH SYMBOLIC 1.1. Lập trình. tiên giải thuật đã khẳng định là có đáp án. Tiếp theo, giải thuật in ra đáp án của bài toán Lập trình symbolic Trang 10 Lập trình symbolic và ứng dụng trong việc giải tam giác Cuối cùng, giải