Ngoài ra trong thực tế, các đồ thịđược sử dụng trong các bài toán có thể liên tục thay đổi theo thờigian, ví dụ như các đỉnh hay các cạnh của nó có thể được thêm vàohay xóa đi đồ thị độn
Trang 1MỞ ĐẦU
1 Tính cấp thiết của đề tài
Cuộc sống con người ngày càng được cải thiện cùng với sựtriển đó thì lượng rác thải hàng ngày mà chúng ta thải ra môi trườngcũng ngày càng nhiều hơn Một trong các cách để thu gom rác hiệuquả là sử dụng xe chở rác Tuy nhiên với mạng lưới giao thông phứctạp và chằng chéo nhau trên địa bàn Thành phố Đồng Hới thì việc dichuyển qua lại quá nhiều sẽ ảnh hưởng đến giao thông cũng như cáclợi ích kinh tế Vấn đề đặt ra là tìm hành trình tối ưu sao cho đường
đi của xe rác là ngắn nhất
Các bài toán đặt ra trong các ứng dụng như vậy thường có cơ
sở dữ liệu lớn nên việc rút ngắn thời gian tính toán để trả lời một câutruy vấn có ý nghĩa thực tiễn cao Ngoài ra trong thực tế, các đồ thịđược sử dụng trong các bài toán có thể liên tục thay đổi theo thờigian, ví dụ như các đỉnh hay các cạnh của nó có thể được thêm vàohay xóa đi (đồ thị động), hoặc thay đổi độ dài, lượng thông qua Mỗi lần có một thay đổi như vậy cấu trúc dữ liệu của bài toán,thông tin về các đỉnh cũng như các cạnh cũng bị thay đổi theo Trongkhi đó yêu cầu đặt ra là phải liên tục trả lời các câu hỏi về thông tintrong đồ thị như tính liên thông của đồ thị, rừng bao trùm tối thiểu, 2đỉnh bất kỳ có nằm trên cùng một cây bao trùm tối thiểu hay không,đường đi ngắn nhất Một cách tiếp cận để giải quyết các bài toántrên đồ thị động là sử dụng các cấu trúc dữ liệu và thuật toán truyềnthống trong đồ thị tĩnh và chạy lại chúng mỗi khi có sự thay đổitrong đồ thị
Tuy nhiên cách tiếp cận như vậy không tận dụng được thôngtin của đồ thị trước khi thay đổi dẫn đến độ phức tạp để trả lời mộtcâu truy vấn về đồ thị sau mỗi bước thay đổi là lớn
Trang 2Xuất phát từ lý do trên, tôi đã thực hiện đề tàì “BÀI TOÁN NGƯỜI ĐƯA THƯ VÀ ỨNG DỤNG Ở CÔNG TY MÔI TRƯỜNG ĐÔ THỊ QUẢNG BÌNH” Trong đề tài này tôi đã trình
bày các nghiên cứu, khảo sát thực nghiệm và ứng dụng một số cấutrúc dữ liệu được đưa ra gần đây để giúp quản lý các đồ thị động mộtcách mềm dẻo
2 Mục tiêu nghiên cứu
oNghiên cứu lý thuyết đồ thị và ứng dụng
oNghiên cứu cụ thể về các thuật toán tìm đường đi trên đồ thị,đặc biệt là thuật toán giải bài toán người đưa thư
oPhân tích và cài đặt thuật toán người đưa thư
oViết chương trình tìm đường đi cho xe thu gom rác, và thểhiện kết quả
oCài đặt ứng dụng cho công ty môi trường đô thị Quảng Bình
3 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu
oTìm hiểu công tác có những bất cập, thiếu sót để đề ra giảipháp theo yêu cầu nhằm đem lại hiệu quả cao hơn
oNghiên cứu các vấn đề về đồ thị và bài toán người đưa thư.oTriển khai xây dựng phần mềm ứng dụng
oĐánh giá khả năng ứng dụng của phần mềm
Phạm vi nghiên cứu
oCác vấn đề về đồ thị
oỨng dụng tìm hành trình tối ưu nhất cho xe gom rác ở công
ty môi trường đô thị Quảng Bình
4 Phương pháp nghiên cứu
Đề tài này sẽ kết hợp hai phương pháp nghiên cứu, đó là:
Trang 3 Phương pháp nghiên cứu lý thuyết
oNghiên cứu lý thuyết và một số thuật toán trên đồ thị.oNghiên cứu bài toán người đưa thư
Phương pháp nghiên cứu thực nghiệm
oSử dụng phương pháp nghiên cứu lý thuyết kết hợp vớinghiên cứu thực nghiệm:
oBiểu diễn bài toán thực tế trên đồ thị
oTriển khai xây dựng các giải pháp và ứng dụng bài toánngười đưa thư vào thực tế
oChạy thử nghiệm và lưu trữ các kết quả đạt được, sau đóđánh giá lại kết quả
5 Bố cục của đề tài
Sau phần mở đầu, luận văn gồm có 3 chương và phần kết luận.Các chương của luận văn bao gồm:
CHƯƠNG 1 BÀI TOÁN NGƯỜI ĐƯA THƯ
CHƯƠNG 2 ỨNG DỤNG Ở CÔNG TY MÔI TRƯỜNG ĐÔTHỊ QUẢNG BÌNH
CHƯƠNG 3 THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNHPhần kết luận, tổng hợp các kết quả nghiên cứu của luận văn.Các kết quả đạt được, hạn chế của luận văn, đề xuất hướng phát triểntiếp theo cho đề tài
Trang 4CHƯƠNG 1 BÀI TOÁN NGƯỜI ĐƯA THƯ 1.1. ĐẠI CƯƠNG VỀ ĐỒ THỊ.
1.1.1 Đồ thị, đỉnh, cạnh, cung.
1.1.2 Bậc, nửa bậc vào, nửa bậc ra
1.1.3 Đường đi, chu trình , tính liên thông
1.2 CHU TRÌNH EULER
1.2.1 Định nghĩa
Cho đồ thị G=(V,E), V là tập hợp các đỉnh, E là tập hợp cáccạnh
Chu trình Euler là chu trình qua mọi cạnh và mọi đỉnh đồ thị,
mỗi cạnh không đi quá 1 lần
Đường đi Euler là đường đi qua mọi cạnh và mọi đỉnh đồ thị,
mỗi cạnh không đi quá 1 lần
Cho đồ thị có hướng G=(V,E)
Chu trình có hướng Euler là chu trình có hướng qua mọi cung
và mọi đỉnh đồ thị, mỗi cung không đi quá 1 lần
Đường đi có hướng Euler là đường đi có hướng qua mọi cung
và mọi đỉnh đồ thị, mỗi cung không đi quá 1 lần
Đồ thị chứa chu trình Euler gọi là Đồ thị Euler.
Trang 5(i) Đồ thị có hướng G có chu trình có hướng Euler khi và chỉkhi G liên thông yếu và mọi đỉnh có nửa bậc vào bằng nửa bậc ra,tức S = và T =
(ii) Nếu S , thì số đường đi có hướng tối thiểu phủ G là
k Các đường đi này nối các đỉnh của T đến các đỉnh của tập S
1.2.3 Các thuật toán tìm chu trình Euler
Thuật toán 1
+ Đầu vào Đồ thị G , không có đỉnh cô lập.
+ Đầu ra Chu trình Euler C của G, hoặc kết luận G
không có chu trình Euler
Nếu H = , thì kết luận C là chu trình Euler, kết thúc
Ngược lại sang bước (5)
Nếu H và C không có đỉnh chung, thì kết luận không có chu
trình Euler, kết thúc.
Nếu H và C có đỉnh chung Chọn v là đỉnh chung của H và
C Đặt k := k+1 Quay lại bước (2)
Thuật toán 2 (Fleury)
Trang 6+ Đầu vào Đồ thị G , không có đỉnh cô lập.
+ Đầu ra Chu trình Euler C của G, hoặc kết luận G
không có chu trình Euler
+ Phương pháp.
(1) Chọn đỉnh xuất phát bất kỳ v0 Đặt v1 := v0 , C := (v0)
H := G
(2) Nếu H = , thì kết luận C là chu trình Euler, kết thúc
Ngược lại sang bước (3)
(3) Chọn cạnh đi tiếp:
- Trường hợp đỉnh v1 là đỉnh treo: Tồn tại duy nhất đỉnh v2
kề v1
Chọn cạnh (v1 , v2 ) Sang bước (4)
- Trường hợp đỉnh v1 không là đỉnh treo:
Nếu mọi cạnh liên thuộc v1 là cầu, thì không có chu trình
Euler, kết thúc.
Ngược lại, chọn cạnh (v1 , v2 ) bất kỳ không phải là cầu trong
H Thêm vào đường đi C đỉnh v2 Sang bước (4)
Loại khỏi H cạnh (v1 , v2 ) Nếu H có đỉnh cô lập, thì loạichúng khỏi H
Đặt v1 := v2 Sang bước (2)
1.3 BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
1.3.1 Phát biểu bài toán
Cho đồ thị có trọng số G=(V,E) Kí hiệu w(i,j) là trọng số củacác cạnh (i,j) Độ dài đường đi
Trang 7Cho hai đỉnh a, z của đồ thị Bài toán đặt ra là tìm đường đingắn nhất từ a đến z.
1.3.2 Thuật toán Dijkstra
Thật toán tìm đường đi ngắn nhất từ đỉnh a đến đỉnh z trong đó
đồ thị liên thông có trọng số trọng số cạnh (i,j) là w(i,j)>0 và đỉnh x
sẽ mang nhãn L(x) Khi kết thúc thuật giải L(z) chính là chiều dàingắn nhất từ a đến z
Đầu vào: đồ thị liên thông G=(V,E) có trọng số w(i,j)>0
với mọi cạnh (i,j), đỉnh a và z
Đầu ra :L(z) chiều dài đường đi ngắn nhất từ a đến z và
Trang 8 Định lí : Giả sử G là đồ thị liên thông có trọng số và có nđỉnh Gọi f(n) là số lần thuật toán Dijkstra khảo sát mộtcạnh của G trong trường hợp xấu nhất Khi đó ta có f(n) = O(n2)
1.3.3 Thuật toán Floyd
Thuật giải tìm độ dài đường đi ngắn nhất giữa mọi cặp đỉnhtrong đồ thị có hướng liên thông có trọng số (không bắt buộc 0)
+ Đầu vào Đồ thị liên thông G=(V,E), V= {1, 2, , n}, có trọng số
w(i,j) với mọi cung (i,j)
+ Đầu ra Ma trận D=[d(i,j)], trong đó d(i,j) là chiều dài đường đi
ngắn nhất từ i đến j với mọi cặp (i,j)
Gán k:=0
(2) Kiểm tra kết thúc: Nếu k = n, kết thúc D = Dn là ma trận
độ dài đường đi ngắn nhất Ngược lại tăng k lên 1 đơn vị(k:=k+1) và sang (3)
(3) Tính ma trận Dk theo Dk-1 :
Với mọi cặp (i,j), i=1 n, j=1 n thực hiện:
Nếu dk-1(i,j) > dk-1(i,k) + dk-1(k,j) thì đặt
Trang 91.3.4 Thuật toán Floyd –Warshall
1.4 BÀI TOÁN NGƯỜI ĐƯA THƯ
1.4.1 Phát biểu bài toán
Một nhân viên đi từ Bưu Điện, qua một số đường phố để phátthư, rồi quay về Bưu Điện Người ấy phải đi qua các đường theotrình tự nào để đường đi là ngắn nhất?
Bài toán được nhà toán học Trung Hoa Guan nêu lên đầu tiên(1962), vì vậy thường được gọi là “Bài toán người phát thư TrungHoa” Ta xét bài toán ở một dạng đơn giản như sau
Cho đồ thị liên thông G Một chu trình qua mọi cạnh của G gọi
là một hành trình trong G Trong các hành trình đó, hãy tìm hànhtrình ngắn nhất, tức là qua ít cạnh nhất
Rõ ràng rằng nếu G là đồ thị Euler (mọi đỉnh đều có bậc chẵn)thì chu trình Euler trong G (qua mỗi cạnh của G đúng một lần) làhành trình ngắn nhất cần tìm
Chỉ còn phải xét trường hợp G có một số đỉnh bậc lẻ (số đỉnhbậc lẻ là một số chẵn) Khi đó, mọi hành trình trong G phải đi qua ítnhất hai lần một số cạnh nào đó
Dễ thấy rằng một hành trình qua một cạnh (u,v) nào đó quá hailần thì không phải là hành trình ngắn nhất trong G Vì vậy, ta chỉ cầnxét những hành trình T đi qua hai lần một số cạnh nào đó của G
Ta quy ước xem mỗi hành trình T trong G là một hành trìnhtrong đồ thị Euler GT, có được từ G bằng cách vẽ thêm một cạnhsong song đối với những cạnh mà T đi qua hai lần Bài toán đặt rađược đưa về bài toán sau:
Trong các đồ thị Euler GT, tìm đồ thị có số cạnh ít nhất (khi
đó chu trình Euler trong đồ thị này là hành trình ngắn nhất)
1.4.2 Thuật toán tìm lộ trình đưa thư ngắn nhất
Trang 10Bước 1 Khởi tạo Tìm tập đỉnh bậc lẻ U, U = 2k Tính khoảng
cách d(u,v) từng cặp phần tử (u,v) của U (sử dụng thuật toán
Floyd-Warshall hoặc Dijkstra) Đặt min =
Bước 2 Tìm phân hoạch smin có tổng khoảng cách nhỏ nhất
Với mỗi phân hoạch s gồm k cặp phần tử của U thực hiện
{Tính tổng T(s) =
s v u
v u d
) , (
),(
Nếu T(s) < min, thì đặt min = T(s) và smin := s;}
Bước 3 Lập đồ thị G’ = (V, E’), trong đó E’ = Esmin Bậc các đỉnhtrong G’ có bậc chẵn, suy ra đồ thị G’ có chu trình Euler Tìm chutrình Euler C’ của G’
Bước 4 Thay mỗi cạnh (u,v) smin bằng đường đi ngắn nhất trong G, ta nhận được lộ trình đưa thư ngắn nhất.
1.5 TỔNG KẾT CHƯƠNG 1
Trong chương này, tôi đã nêu tổng quan về lý thuyết đồ thị,
phát biểu lại bài toán người đưa thư, phân tích các giải thuật tìm
đường đi, chu trình Euler và thuật toán giải bài toán người đưa thư.
Trang 11CHƯƠNG 2 ỨNG DỤNG Ở CÔNG TY MÔI TRƯỜNG ĐÔ THỊ
QUẢNG BÌNH 2.1 MÔ TẢ BÀI TOÁN THỰC TẾ
Ở công ty môi trường đô thị Quảng Bình có một số lượngnhân viên lái xe thu gom rác, nhiệm vụ của các nhân viên này là lái
xe thu gom đến các tuyến đường, khu vực (nhà, cơ quan, xínghiệp ) Các tuyến đường này có thể thay đổi tuỳ vào các ngàytrong tuần (phần này do người quản lý phân công cho các nhân viêncho từng người, trong một khoản thời gian cố định) Vấn đề đặt ra làtìm đường đi ngắn nhất (ít tốn kém về kinh tế, ít tốn thời gian) để cóthể đi thu gom rác đúng nơi được phân công một cách nhanh nhất.Trên cơ sở đó giúp cho người quản lý có thể đánh giá được mức độhoàn thành nhiệm vụ của các nhân viên, tạo nên sự công bằng trongphân công đảm bảo đồng đều giữa các nhân viên, đặc biệt là trả côngđúng với hiệu quả công việc của mỗi nhân viên Ngoài ra hệ thống
có thể in ra bản báo cáo bao gồm các thông tin liên quan đến nhiệm
vụ của mỗi nhân viên (các tuyến phải thu gom; tuyến đường đi ngắnnhất, thời gian thực hiện, khoảng cách phải đi )
2.2 MAPINFO VÀ CÔNG CỤ LẬP TRÌNH MAPXTREME 2.2.1 Tìm hiểu về Mapinfo
Trang 12tượng bản đồ trong ứng dụng và cho phép tạo bản đồ dựa theo bảnđồ.
Phần mềm MapInfo do công ty MapInfo Corporation của Mỹ xâydựng , công ty ra đời từ năm 1986 và được biết đến chính thức từnăm 1994 Phần mềm MapInfo có giao diện khá thân thiện, dễ sửdụng nên tương đối phổ biến trên thế giới cũng như ở Việt Nam(theo kết quả một khảo sát thống kê cho biết có 80% sử dụng phầnmềm này trong nghiên cứu và ứng dụng)
b) Tổ chức thông tin trong tập tin
2.2.2 Mapxtreme
a) Sơ lược về MapXtreme 2005
MapXtreme 2005 là bộ công cụ phát triển phần mềm Windowhàng đầu của tập đoàn MapInfo Nó cho phép người phát triển đã cónhiều kinh nghiệm về NET tạo các ứng dụng Destop, cũng nhưClient/ Server mạnh mẽ, đặc biệt là về vấn đề định vị
Để hỗ trợ NET Framework trên Window, MapXtreme 2005 đưa
ra một mô hình đối tượng đơn nhằm phát triển và mở rộng các ứngdụng bản đồ trên Destop, môi trường Client/ Server cổ điển và Web.MapXtreme 2005 là một công cụ phát triển ứng dụng vô cùng cầnthiết với các tổ chức, cơ quan mà các các dữ liệu trông thấy được và
có thể vẽ bản đồ được có thể giúp họ có những quyết định thươngmại tốt hơn, quản lý tài nguyên và các hoạt động một cách hiệu quảhơn nhiều MapXtreme có thể được sử dụng như một bộ công cụphân tích mạnh mẽ để đưa ra những quyết định thương mại hiệu quảnhất, chẳng hạn như :
Vị trí tốt nhất của cửa hàng buôn bán?
Làm thế nào để vận chuyển các sản phẩm hiệu quả nhất?
Làm thế nào để quản lý và bảo vệ tài nguyên?
Trang 13Người phát triển có thể sử dụng MapXtreme 2005 để rút ngắnthời gian hoàn thiện sản phẩm cũng như cải thiện hiệu suất, độ tincậy và tính bảo mật Từ bộ phát triển phần mềm (SDK _ SoftwareDevelopment Kit) đơn này, bạn có thể phát triển các ứng dụng sửdụng ngôn ngữ lập trình NET của riêng bạn ( như VB.NET, C#
… ), chia sẻ và sử dụng lại code giữa các triển khai của ứng dụngDestop và Web, truy xuất dữ liệu từ nhiều nguồn rộng rãi khác nhaunhờ sử dụng các giao thức chuẩn…
b) Khái Niệm Về Mapping (Bản Đồ)
c) Kiến Trúc MapXtreme 2005
d) Danh Sách Các Namespace Trong MapXtreme 2005
Trang 142.3 SƠ ĐỒ MẠNG LƯỚI GIAO THÔNG THÀNH PHỐ ĐỒNG HỚI
2.3.1 Bản đồ
Hình 2.10 Bản đồ giao thông thành phố Đồng Hới
Trang 152.3.2 Sơ đồ mạng lưới giao thông
Hình 2.11 Sơ đồ giao thông sử dụng Mapinfo
Trang 16TỔNG KẾT CHƯƠNG 2
Trong chương này, tôi đã giới thiệu tổng quan về phần mềmMapinfo và công cụ lập trình Mapxtreme Tôi cũng đã tiến hànhkhảo sát các tuyến đường và số hóa thành bản đồ trong Mapinfo đểứng dụng cho thuật toán tìm lộ trình đi trên bản đồ
Trang 17CHƯƠNG 3 THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNH
3.1 THIẾT KẾ CHƯƠNG TRÌNH
3.1.1 Yêu cầu của chương trình
Với yêu cầu xây dựng hệ thống hỗ trợ tìm đường đi cho ngườiđưa thư bảo đảm tiêu tốn ít thời gian, công sức, đặc biệt mang lạihiệu quả kinh tế cao, hệ thống phải đảm bảo các yêu cầu sau:
- Thiết kế giao diện rõ ràng, dễ hiểu, dễ sử dụng và tối ưu cácthao tác
- Xây dựng các công cụ hỗ trợ thêm, sửa, xoá các đối tượng,nhằm phục vụ cho bài toán động(thay đổi lộ trình của người đưathư)
- Xây dựng các tiện ích cho người sử dụng như: xem cácthuộc tính của bất kỳ một đối tượng này, thay đổi các thông số củađối tượng, phóng to, thu nhỏ tuy theo nhu cầu người sử dụng
- Thực hiện tìm kiếm theo thông số cố định một cách nhanhchóng và dễ dàng
- Tăng hiệu quả sử dụng của hệ thống bằng tính tiện ích của
nó, cùng lúc có thể thực hiện lập lộ trình cho nhiều người đưa thư
3.1.2 Thiết kế cơ sở dữ liệu
Dựa vào các yêu cầu hệ thống, xây dựng cơ sở dữ liệu baogồm các bảng sau:
Trang 18a) Bảng nút (Đỉnh) giao thông (tblDinhGT)
b) Bảng tuyến giao thông (tblTuyenGT):
Bảng 3.2 Bảng tuyến giao thông
đi của từng nhân viên trên bản đồ
Trang 19Ta xem các tuyến đường là các cạnh của đồ thị, các giao giữacác tuyến đường hoặc các khúc cua là các đỉnh của đồ thị
Trang 20Int duongdi(int s, int d) ; // tìm đường đi ngắn nhất giữa đỉnh s và t
Bước 4 : Từ đồ thị Euler ta đi tìm chu trình Euler
void Euler(dothi G) ; // tìm chu trình Euler chính là đường
đi của xe
3.3 THỬ NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ
Phần mềm ứng dụng bài toán người đưa thư có ý nghĩa to lớntrong thực tế để tìm lộ trình di chuyển của bất kỳ đối tượng di độngnào đó như: người, xe máy, ô tô…Với hệ thống này mang lại nhiềutiện ích và hiệu quả cho người sử dụng, đặc biệt là hiệu quả về kinh
tế, tiết kiệm thời gian, công sức…trong việc lựa chọn đường đi chohợp lý Bên cạnh đó với màn hình mô phỏng trực tiếp trên bản đồgiúp cho người sử dụng dễ quan sát, dễ sử dụng, mang tính chất thực
tế cao Mô hình này có thể triển khai cho nhiều ứng dụng thực tế:
- Hệ thống tìm đường đi tối ưu cho người lái xe thu gom rác ởcác tuyến phố
- Hệ thống tìm đường đi tối ưu cho người đưa thư, người giaobáo…
- Hệ thống tìm đường đi tối ưu cho các dịch vụ đưa đón họcsinh, sinh viên…
- Hệ thống xác định lộ trình cho các tour du lịch