Tải bản đầy đủ (.docx) (10 trang)

Ứng dụng Maple cài đặt thuật toán tìm đường đi ngắn nhất Dijkstra

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (240.33 KB, 10 trang )

Đạ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]
[3] Maple:
[4] Dijkstra's algorithm in Maple:
/>SV: Phạm Vĩnh Thành Trang: 10

×