Áp dụng thuật tốn Prim
- Bƣớc 1.1. khởi tạo (giả sử bắt đầu từ đỉnh s)
Khởi tạo đỉnh s cĩ nhãn khoảng cách bằng 0 (d[s]=0) , các đỉnh khác cĩ nhãn khoảng cách +. Cây T ban đầu bằng rỗng.
- Bƣớc 1.2. Chọn đỉnh u chƣa kết nạp cĩ d[u] nhỏ nhất.
Nếu khơng chọn đƣợc u thì đồ thị khơng liên thơng kết thúc, ngƣợc lại nếu chọn đƣợc u thì đánh dấu u đã kết nạp. Tính lại các nhãn khoảng cách d[v] (v chƣa kết nạp). Lặp lại bƣớc 1.2.
Bƣớc 2: Tạo đồ thị con G‟=(V‟,E‟) của đồ thị G. Trong đĩ V‟ là đỉnh cĩ bậc lẻ trong T và E‟ là các cạnh của các đỉnh V‟. Sau đĩ, tìm cặp ghép đầy đủ M của các đỉnh trong V‟ của đồ thị G‟ với tổng trọng số nhỏ nhất.
- Bƣớc 2.1: Khởi tạo mảng cĩ cấu trúc Node chứa các đỉnh của đồ thị.
- Bƣớc 2.2: Tính bậc của các node trong cây T.
- Bƣớc 2.3: Tạo một mảng gồm các Node cĩ đỉnh bậc lẻ.
- Bƣớc 2.4: Tạo trận hai chiều cĩ cấu trúc Link của các đỉnh cĩ Node bậc lẻ, sắp xếp từng các Link theo thứ tự tăng dần theo trọng số.
- Bƣớc 2.5: Tại mỗi Node chọn link cĩ trọng số nhỏ nhất mà hai đầu chƣa đƣợc chọn đƣa vào M. Lặp lại bƣớc 2.5 cho đến khi duyệt hết các Node.
Bƣớc 3: Hợp các cạnh của M và T thành một đồ thị H.
- Bƣớc 3.1: Khởi tạo một mảng H cĩ cấu trúc GraphNode. - Bƣớc 3.2: Duyệt các cạnh của T cập nhập vào H.
- Bƣớc 3.3: Duyệt các cạnh M cập nhập vào H.
Bƣớc 4: Tìm một chu trình Euler trên H (H cĩ chu trình Euler do nĩ liên thơng và tất cả các đỉnh đều cĩ bậc chẵn).
Áp dụng thuật tốn fleury tìm chu trình Euler:
Xuất phát từ một đỉnh trên đồ thị H, chọn một cạnh liên thuộc với nĩ để đi tiếp theo hai nguyên tắc sau:
Xĩa bỏ cạnh đã đi qua.
Chỉ đi qua cầu khi khơng cịn cạnh nào khác để chọn.
- Bƣớc 4.1. bắt đầu từ một đỉnh u bất kỳ trên đồ thị H, đƣa đỉnh u vào chu trình.
- Bƣớc 4.2. kiểm tra nếu xĩa một cạnh nối (u,v) thì v cịn quay lại u hay khơng. Nếu quay lại đƣợc xĩa cạnh (u,v), đƣa đỉnh v vào chu trình và gắn đỉnh u bằng v, lặp lại bƣớc 4.2 với đỉnh u bây giờ là v. lặp đến khi khơng cịn đi đƣợc nữa.
Bƣớc 5: Biến đổi chu trình Euler trên thành một chu trình Hamilton bằng cách duyệt qua chu trình Euler từ đầu đến cuối và bỏ qua những đỉnh đã đƣợc chọn trong quá trình duyệt.
4.3.2 Đánh giá hiệu quả thuật tốn Christofides
Đánh giá việc cài đặt thuật tốn Christofides theo hai cách lƣu trữ đồ thị ma trận kề và danh sách liên kết. Bộ dữ liệu dùng để thử là EIL51, EIL76, EIL101 và số lần thử là 10 lần.
4.4 Tính năng chính của chƣơng trình 4.4.1 Màn hình chọn các địa điểm 4.4.1 Màn hình chọn các địa điểm
Khi ngƣời dùng chọn chức năng “chọn địa điểm” để tìm các địa điểm cần đến. Sau đĩ ngƣời dùng nhập vào Address (địa chỉ) và nhấn nút “chọn địa điểm”. Hệ thống gọi API google map V3 để lấy kinh độ và vĩ độ của địa điểm đƣợc chọn.
Khi ngƣời dùng nhấn nút “lƣu địa điểm” hệ thống sẽ lƣu thơng tin gồm:Adress, Lat, Lng, Direction vào cơ sở dữ liệu.
4.4.2 Màn hình tính khoảng cách
Khi ngƣời dùng chọn chức năng “Tính Khoảng Cách” hệ thống sẽ lấy tất cả các địa điểm trong bảng Node và gọi VietBanDo Map API tính khoảng cách giữa các địa điểm và lƣu vào cơ sở dữ liệu.
Khi chọn vào chức năng “Giải Pháp” hệ thống sẽ tạo đồ thị dựa các cung trong bảng Edge và gọi thuật tốn Christofides tìm chu trình giữa các địa điểm và lƣu thơng tin vào cơ sở dữ liệu.
4.4.4 Màn hình kết quả
Khi chọn vào chức năng “Kết quả” hệ thống sẽ truy vấn vào bảng solve trong cơ sở dữ liệu lấy các địa điểm và gọi VietBanDo Map API hiển thị kết quả lên màn hình.
4.4.5 Màn hình tìm đƣờng đi
Khi chọn vào chức năng “Tìm đƣờng đi” hệ thống sẽ truy vấn vào bảng node
trong cơ sở dữ liệu lấy các địa điểm đã đƣợc và đƣa dữ liệu vào 2 DropDownList : Địa điểm đi, địa điểm đến. Khi ngƣời dùng nhấn chọn nút „tìm đƣờng đi‟ hệ thống sẽ gọi VietBanDo Map API lấy thơng tin và hiển thị lên màn hình.
4.4.6 Chức năng chính của ứng dụng
a. Chức năng chọn các điểm ngẫu nhiên
Click chuột vào màn hình chọn các điểm
Chọn Solve, chọn “Read Project” hệ thống sẽ lấy các điểm trên màn hình tạo thành đồ thị và gọi giải thuật Christofides tìm chu trình đi qua các điểm và hiển thị lên màn hình. Chức năng chọn màu và kích cho đƣờng vẽ Chức năng chọn màu hình nền. Chức năng dùng chọn vẽ các điểm trên màn hình
b. Chức năng đọc các điểm trong thƣ viện TSPLib
Chọn Solve, chọn Read TSPLib
Cấu trúc của tập tin eil51.tsp cĩ tạo độ 51 điểm.
Ngồi ra hệ thống cịn cĩ các chức năng: tạo mới chƣơng trình, lƣu đồ thị vào file và mở lại file đã lƣu.
Chƣơng 5. KẾT LUẬN VÀ KIẾN NGHỊ VỀ NHỮNG NGHIÊN CỨU TIẾP THEO
Từ chƣơng 1 đến chƣơng 4 tác giả đã trình bày tồn bộ các tìm hiểu của tác giả về lý thuyết đồ thị. Nội dung trình bày bám sát mục tiêu đề ra ban đầu của luận văn “BÀI TỐN CÂY BAO TRÙM TRÊN ĐỒ THỊ VÀ ỨNG DỤNG“.
5.1 Kết quả đạt đƣợc
Trong thời gian nghiên cứu thuật tốn giải bài tốn ngƣời du lịch, luận văn đã đạt đƣợc các kết quả sau:
Kết quả lý thuyết:
- Nghiên cứu, tìm hiểu sâu về lý thuyết về lý thuyết đồ thị, đặc biệt về bài tốn ngƣời du lịch.
- Nghiên cứu phƣơng pháp giải bài tốn ngƣời du lịch bằng phƣơng pháp xấp xỉ dựa vào cây bao trùm nhỏ nhất.
Kết quả ứng dụng:
- Luận văn đã áp dụng và cải tiến thuật tốn Christofides để giải quyết bài tốn ngƣời du lịch.
- Thực hiện tìm chu trình đi qua các địa điểm đƣợc chọn trên bản đồ. - Minh họa thuật tốn Christofides trên giao diện đồ họa.
Tuy nhiên chƣơng trình vẫn cịn tồn tại một số hạn chế nhƣ thời gian tìm các cung cịn chậm và chỉ làm đƣợc trên đồ thị vơ hƣớng.
Từ kết quả nghiên cứu lý thuyết và thực tiễn, luận văn đề ra các vấn đề cần tiếp tục hồn thiện, phát triển và nghiên cứu nhƣ sau:
- Tiếp tục nghiên cứu thêm các thuật tốn khác áp dụng cây bao trùm nhỏ nhất và các thuật tốn áp dụng cho các bài tốn ngƣời du lịch.
- Nghiên cứu và cài đặt thuật tốn giải bài tốn ngƣời du lịch với đồ thị cĩ hƣớng.
- Cải tiến chƣơng trình để thời gian thực hiện chƣơng trình nhanh hơn. 5.2 Lời kết
Tồn bộ nội dung trình bày trong luận văn là kết quả quá trình nghiên cứu, tìm hiểu của tác giả. Các kết quả trình bày trong 5.1 là kết quả quá trình làm việc, tìm hiểu, học hỏi của tác giả. Phần hƣớng phát triển trình bày trong 5.2 là vấn đề tác giả ấp ủ và mong muốn thực hiện đƣợc trong thời gian tới nhằm giúp chƣơng trình hoạt động tốt hơn.
TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt:
[1] Nguyễn Đức Nghĩa – Nguyễn Tơ Thành. Tốn rời rạc. Nhà xuất bản Đại học Quốc gia Hà Nội, 2003.
[2] Lê Minh Hồng (1999). Giải thuật và lập trình. Nhà xuất bản Đại học Sƣ phạm Hà Nội.
[3] Đỗ Đức Giáo. Tốn rời rạc ứng dụng trong tin học. Nhà xuất bản giáo dục.
Tài liệu tiếng Anh:
[4] R.K. Ahuja. Magnanti and J.B.Orlin. Theory, Algorithms and Aplications.
Prentice Hall, Upper saddle River, New Jersey, 1993, 846 pp.
[5] S.Khuller, Y.J. Sussman and W.Gasarch. Advanced Algorithms. Lectures CMSC 858K, 1997, 94 pp.
[6] S. Khuller, B. Raghavachari. Graph and network algorithms in the computer science and engineering Handbook edited by B. Tucker Jr. CRC Press, Inc. 1997.
[7] B. Korter, J. Vygen, Combinatorial Optimization. Theory and Algorithms. Second Edition. Spinger, 2002. 530pp.
[8] B.Y Wu and K-M Chao. Spanning Trees and Optimization Problems. Chapman & Hall/ CRC Press company, 2004.184 pp.
[9]. C.C. Skiscim, S.W. Palocsay. Minumum Spanning Trees with Sums of Ration. Journal of Global Optimization. Vol 19,2001,pp. 103-120.
[10] Reinhard Diestel. Graph Theory. Spinger-Verlag NewYork, 2000. [11] Robin Wilson. Introduction to Graph Theory. Oliver & Boyd,1996.
Website
[13] Institute for Operations Reseach and the Management Sciences Site, http://www.informs.org/Conf/Montreal198/TALKS/MA36.html.
[14] Christofides algorith, http://en.wikipedia.org/wiki/Christofides_algorithm [15] Prüfer sequence, http://en.wikipedia.org/wiki/Pr%C3%BCfer_sequence [14] TSPLIB,
http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/ [15] Map API, http://www.vietbando.com/maps/api/Examples.aspx