Đại Học Quốc Gia TP.HCM Trường Đại Học Công Nghệ Thông Tin TIỂU LUẬN MÔN HỌC LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: Ứng dụng Maple cài đặt thuật toán tìm đường đi ngắn nhất Dijkstra GVHD: TS. Đỗ Văn Nhơn Người thực hiện: Phạm Vĩnh Thành Mã số: CH1101035 Lớp: Cao học khóa 6 đợt 2 TP.HCM – 2013 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo MỤC LỤC SV: Phạm Vĩnh Thành Trang: 2 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo Chúng em xin chân thành cảm ơn Thầy Đỗ Văn Nhơn đã truyền đạt những kiến thức quý báu từ những kinh nghiệm sống đến những vấn đề khoa học mới nhất trong bộ môn Biểu diễn tri thức và ứng dụng. Trong bài tiểu luận này, em xin trình bày cách cài đặt thuật toán tìm đường đi ngắn nhất Dijkstra bằng cách sử dụng các công cụ giải toán mạnh mẽ của Maple 16. Tuy đã có nhiều cố gắng nhưng do hạn chế về kiến thức, thời gian và nguồn tài liệu tham khảo nên các vấn đề nghiên cứu trong tiểu luận chắc chắn còn nhiều thiếu sót. Chân thành cám ơn! Phạm Vĩnh Thành SV: Phạm Vĩnh Thành Trang: 3 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo Phần 1: MAPLE I. Giới thiệu Maple là một gói phần mềm toán học thương mại phục vụ cho nhiều mục đích. Nó phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán Hình thức tại Đại học Waterloo ở Waterloo, Ontario, Canada. Từ năm 1988, nó đã được phát triển và thương mại hóa bởi Waterloo Maple Inc. (còn được biết đến với tên gọi Maplesoft), một công ty Canada cũng có trụ sở tại Waterloo, Ontario. Phiên bản hiện tại là Maple 16 được phát hành vào năm 2012. Đối thủ cạnh tranh chính của nó là Mathematica. Maple sẽ giúp bạn phân tích, khám phá, hình dung, và giải quyết các vấn đề toán học. Với trên 5000 chức năng, Maple cung cấp độ rộng, chiều sâu, và hiệu suất xử lý tất cả các loại của toán học. Giao diện trực quan của Maple hỗ trợ nhiều phong cách tương tác, từ các công cụ Clickable Math tới một ngôn ngữ lập trình tinh vi. Sử dụng môi trường tài liệu thông minh được cung cấp bởi Maple, bạn tự động có thể nắm bắt tất cả các kiến thức kỹ thuật của bạn trong một hình thức điện tử kết hợp tính toán, văn bản giải thích và toán học, đồ họa, hình ảnh, âm thanh, và sơ đồ. II. Chức năng - Thực hiện các tính toán với khối lượng lớn, với thời gian nhanh và độ chính xác cao. - Sử dụng các gói chuyên dụng của Maple để giải quyết các bài toán cụ thể như: vẽ đồ thị (gói plots), hình học giải tích (gói geometry), đại số tuyến tính (gói linalg), Giải tích (gói student), phương trình vi phân(gói DEtools), lý thuyết số (gói numtheory), Dữ liệu rời rạc(gói DiscreteTransforms), - Thiết kế các đối tượng 3 chiều. SV: Phạm Vĩnh Thành Trang: 4 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo - Minh họa hình học thuận tiện gồm: vẽ đồ thị tĩnh và động của các đường và mặt được cho bởi các hàm tùy ý trong nhiều hệ tọa độ khác nhau; - Tính toán trên các biểu thức đại số; - Có thể thực hiệc được hầu hết các phép toán cơ bản trong chương trình toán đại học và sau đại học; - Ngôn ngữ lập trình đơn giản và mạnh mẽ, có khả năng tương tác với các ngôn ngữ lập trình khác; - Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học tương tác trực tiếp; - Một công cụ hữu ích cho học sinh và sinh viên trong việc tự học; - Tăng thêm 270 chức năng so với phiên bản trước đó - … III.Kiến trúc Phần lớn chức năng toán học của Maple được viết bằng ngôn ngữ Maple, và được thông dịch bởi nhân Maple. Nhân Maple được viết bằng C. Maple chạy trên tất cả các hệ điều hành chính. Ngôn ngữ lập trình Maple là một ngôn ngữ kiểu động. Cũng giống như các hệ thống đại số máy tính, các biểu thức hình thức được lưu trữ trong bộ nhớ theo đồ thị không chu trình có hướng (DAG). Ngôn ngữ cho phép các biến có phạm vi nhất định (lexical scoping). Ngôn ngữ có hình thức lập trình hàm, nhưng cũng có hỗ trợ đầy đủ cho lập trình truyền thống, theo kiểu mệnh lệnh. Một điều lạ đối với chương trình thương mại, đa số mã nguồn đều có thể xem tự do. SV: Phạm Vĩnh Thành Trang: 5 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo Phần 2: Cài đặt giải thuật Dijkstra I. Phân tích yêu cầu - Đầu vào: Đồ thị: o Tập hợp các đỉnh o Tập hợp các cạnh o Trọng số của các cạnh Điều kiện: Đồ thị đơn giản, hữu hạn, vô hướng, có trọng số dương. - Đầu ra: Kết quả trả về đường đi ngắn nhất giữa 2 đỉnh bằng thuật toán Dijkstra II. Cấu trúc dữ liệu - G: đồ thị nhập vào - x: điểm bắt đầu - weight: là thủ tục để lấy trọng số của cạnh nối hai đỉnh u, v hoặc trả về vô cực nếu giữa u, v không có cạnh nối giữa chúng - P: tập hợp các đỉnh gần nhất với đỉnh x - Q: tập hợp các đỉnh chưa được chọn - u, v là biến tạm cho các đỉnh được xét - L(v): là table chứa các khoảng cách tạm ngắn nhất từ x tới v - K(v): là table chứa các đỉnh xét trước của v trong đường đi ngắn nhất được tìm thấy từ u đến v. III. Thuật toán - Cài đặt thuật toán Dijkstra - Lấy đường đi ngắn nhất giữa 2 đỉnh u, v IV. Dữ liệu thử nghiệm - Dữ liệu mẫu ngẫu nhiên 1 SV: Phạm Vĩnh Thành Trang: 6 ### Tìm đường đi ngắn nhất giữa x và các đỉnh còn lại dijkstra:=proc(G::graph, x) local weight,L,K,P,Q,v,u: weight:=proc(G::graph, u, v) if edges({u,v},G)={} then listpath := proc (lk, u, v) local p; if lk[1][v] = infinity then error "Khong co duong giua 2 dinh %1 to %2.", u, v end if; if u = v then Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo > result1 := dijkstra(graph1, 2): > listpath(result1, 2, 5); [2, 3, 5] SV: Phạm Vĩnh Thành Trang: 7 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo - Dữ liệu mẫu ngẫu nhiên 2 > result2 := dijkstra(graph2, 1): > listpath(result2, 1, 5); [1, 3, 5] SV: Phạm Vĩnh Thành Trang: 8 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo KẾT LUẬN Báo cáo này đã làm nổi bật vai trò của Maple trong việc hỗ trợ người dùng lập trình các thuật toán phức tạp như Dijkstra đơn giản hơn bằng các kiểu cấu trúc dữ liệu được định nghĩa sẵn cho đồ thị. Với công cụ mô phỏng vẽ đồ thị, người dùng được cái nhìn trực quan hơn về bài toán. Điểm hạn chế trong việc vẽ đồ thị là chưa hiển thị đồ thị có trọng số được. Một lần nữa, em xin cám ơn Thầy Đỗ Văn Nhơn đã giảng dạy cho chúng em kiến thức nền tảng, những bài giảng bổ ích của Thầy đã giúp em hoàn thành được bài tiểu luận này. SV: Phạm Vĩnh Thành Trang: 9 Tiểu luận: Lập trình Symbolic và trí tuệ nhân tạo TÀI LIỆU THAM KHẢO [1] Bài giảng của Thầy Đỗ Văn Nhơn. [2] http://maplesoft.com [3] Maple: http://vi.wikipedia.org/wiki/Maple [4] Dijkstra's algorithm in Maple: http://www-rohan.sdsu.edu/~ituba/math3134s05/dijkstra/dijkstra.html SV: Phạm Vĩnh Thành Trang: 10 . table chứa các đỉnh xét trước của v trong đường đi ngắn nhất được tìm thấy từ u đến v. III. Thuật toán - Cài đặt thuật toán Dijkstra - Lấy đường đi ngắn nhất giữa 2 đỉnh u, v IV. Dữ liệu thử nghiệm -. mới nhất trong bộ môn Biểu diễn tri thức và ứng dụng. Trong bài tiểu luận này, em xin trình bày cách cài đặt thuật toán tìm đường đi ngắn nhất Dijkstra bằng cách sử dụng các công cụ giải toán. Tin TIỂU LUẬN MÔN HỌC LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: Ứng dụng Maple cài đặt thuật toán tìm đường đi ngắn nhất Dijkstra GVHD: TS. Đỗ Văn Nhơn Người thực hiện: Phạm Vĩnh Thành Mã