1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

10 1,2K 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 145,45 KB

Nội dung

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.. Giao diện trực quan của M

Trang 1

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

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

Trang 2

MỤC LỤC



MỤC LỤC 1

Phần 1: MAPLE 3

I Giới thiệu 3

II Chức năng 3

III Kiến trúc 4

Phần 2: Cài đặt giải thuật Dijkstra 5

I Phân tích yêu cầu 5

II Cấu trúc dữ liệu 5

III Thuật toán 6

IV Dữ liệu thử nghiệm 7

KẾT LUẬN 9

TÀI LIỆU THAM KHẢO 10

Trang 3

LỜI MỞ ĐẦU



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

Trang 4

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),

Trang 5

- 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

Trang 6

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

weight:=proc(G::graph, u, v)

if edges({u,v},G)={} then

return infinity:

else

return eweight(edges({u,v},G)[1],G):

end if:

end proc:

# Khởi tạo các giá trị ban đầu

P:={}:

Q:=vertices(G):

L:=table():

K:=table():

for v in vertices(G) do

L[v]:=infinity:

end do:

L[x]:=0:

u:=x:

while L[u]<infinity do

P:=P union {u}:

Q:=Q minus {u}:

if Q={} then

break:

end if:

for v in Q do

if L[u]+weight(G,u,v) < L[v] then

L[v]:=L[u]+weight(G,u,v):

K[v]:=u:

end if:

end do: #End for

u:=Q[1]:

for v in Q do

if L[v]<L[u] then

u:=v:

end if:

end do: #End for

end do: #End while

return [L,K]:

end proc:

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

return [u]

else

Trang 7

IV.Dữ liệu thử nghiệm

- Dữ liệu mẫu ngẫu nhiên 1

> result1 := dijkstra(graph1, 2):

> listpath(result1, 2, 5);

[2, 3, 5]

Trang 8

- Dữ liệu mẫu ngẫu nhiên 2

> result2 := dijkstra(graph2, 1):

> listpath(result2, 1, 5);

[1, 3, 5]

Trang 9

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

Trang 10

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

Ngày đăng: 10/04/2015, 00:50

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w