Họ và tên sinh viên: Đß Xuân Toàn Ngành: Công nghệ Thông tin N ái dung h°ãng d¿n: - Tìm hiểu về bài toán - Thực hiện phân tích thiết kế hệ thống - Tìm hiểu hệ quản trị c¡ sở dữ liệu
TỔ NG QUAN V Ề ĐỀ TÀI
Hiện tr¿ng hệ thống tìm đ°ờng đi ngắn nhất
Trong thời đ¿i công nghệ ngày càng phát triển, các dịch vā tìm đ°ờng trực tuyến nh° Google Maps, Bing Maps và OpenStreetMap đã trở thành mát phần không thể thiếu trong cuác sống hàng ngày cÿa chúng ta Các dịch vā này mang l¿i nhiều °u điểm, bao gồm giao diện trực quan, tính năng tìm kiếm m¿nh mẽ và việc cập nhật dữ liệu nhanh chóng, từ đó giúp ng°ời dùng dễ dàng lập kế ho¿ch và thực hiện các chuyến đi cÿa mình
Tuy nhiên, không phải lúc nào các dịch vā này cũng đáp āng đ°ÿc mọi nhu cầu cÿa ng°ời dùng Mặc dù các trải nghiệm ng°ời dùng trên Google Maps
Ngoài trải nghiệm tuyệt vời, Google Maps, Bing Maps và OpenStreetMap vẫn còn một số hạn chế Một trong những thách thức thường gặp là người dùng phải thay đổi điểm bắt đầu hoặc điểm đến khi tìm kiếm đường đi Thay vì có thể chọn trực tiếp trên bản đồ, người dùng thường phải nhấp và di chuyển biểu tượng vị trí của điểm bắt đầu hoặc điểm đến đến vị trí mong muốn Điều này không chỉ có thể trở nên phức tạp và tốn thời gian, đặc biệt là trên thiết bị di động, mà còn gây khó khăn cho những người không quen thuộc với công nghệ hoặc có khả năng thao tác hạn chế.
Mạng lưới đường mòn này sẽ được xây dựng trên nền tảng tìm kiếm đường đi ngắn nhất, giúp người dùng dễ dàng tìm kiếm và điều chỉnh điểm khởi hành hoặc đích đến trực tiếp trên bản đồ Nhờ đó, người dùng có thể linh hoạt lựa chọn đường đi tối ưu, giải quyết những khó khăn thường gặp trong quá trình di chuyển hàng ngày.
Phát bi ể u bài toán
Trong thời đại công nghệ số, nhu cầu tìm kiếm tuyến đường tối ưu giữa hai điểm trên bản đồ trở nên phổ biến và cần thiết Sự phát triển của ứng dụng di động và trang web đã khiến yêu cầu về một giao diện đơn giản và hiệu quả để tìm đường trở nên cấp thiết hơn.
Bài toán đ°ÿc xây dựng nhằm māc đích cung cấp cho ng°ời dùng mát công cā thuận tiện và nhanh chóng để tìm đ°ờng đi từ mát điểm đến mát điểm khác Với āng dāng này, ng°ời dùng có thể dễ dàng xác định con đ°ờng tối °u dựa trên lo¿i ph°¡ng tiện di chuyển, điểm xuất phát và điểm đến
Do vậy bài toán cần đ¿t đ°ÿc các yêu cầu sau:
Ng°ời dùng tìm đ°ờng đi ngắn nhất giữa hai điểm trên bản đồ theo yêu cầu cā thể nh°: chọn ph°¡ng tiện đi l¿i (ô tô, xe máy, đi bá), chọn điểm bắt đầu, và điểm đến Ng°ời dùng có thể xem thông tin tuyến đ°ờng đi ngắn nhất giữa hai điểm trên bản đồ theo ph°¡ng tiện đã chọn.
Gi ả i pháp
Tích hÿp nhiều dịch vāđịa điểm: Phát triển hệ thống có khả năng tích hÿp nhiều dịch vā địa điểm khác nhau nh° quán cafe, nhà hàng, bệnh viện, tr¿m xăng, v.v để ng°ời dùng có thể dễ dàng tìm kiếm và lập kế ho¿ch cho các chuyến đi cÿa mình
Cung cấp tùy chọn đa d¿ng: T¿o ra giao diện ng°ời dùng linh ho¿t và dễ sử dāng, cho phép ng°ời dùng lựa chọn từ nhiều địa điểm và yêu cầu tìm kiếm địa điểm theo nhu cầu cā thể cÿa họ
Hiển thịđ°ờng đi chi tiết: T¿o ra các tùy chọn hiển thịđ°ờng đi chi tiết và tối °u cho ng°ời đi bá, xe máy hoặc ô tô.
Yêu cầu đ¿t đ°ÿc cÿa hệ thống
✓ Tích hÿp đa dịch vā: Hệ thống cần tích hÿp nhiều dịch vā địa điểm khác nhau để cung cấp cho ng°ời dùng mát trải nghiệm toàn diện khi tìm kiếm địa điểm
✓ Giao diện thân thiện: Giao diện ng°ời dùng cần đ°ÿc thiết kế dễ sử dāng và trực quan, phản ánh yêu cầu cÿa ng°ời dùng và cung cấp trải nghiệm tìm kiếm thuận tiện
❖ Yêu cÅu căa các chąc năng
✓ Tùy chọn ph°¡ng tiện đi: Cung cấp tùy chọn cho ng°ời dùng để lựa chọn lo¿i đ°ờng đi phù hÿp nh° đi bá, xe máy hoặc ô tô
✓ Chọn điểm bắt đầu, điểm đến: Cho phép ng°ời dùng chọn địa điểm bắt đầu và địa điểm đến trên bản đồ hoặc thông qua việc nhập liệu luan van tot nghiep khoa luan
✓ Tìm kiếm thông minh: Cung cấp gÿi ý tìm kiếm thông minh dựa trên các từ khóa mà ng°ời dùng nhập vào, giúp họ dễ dàng tìm kiếm địa điểm bắt đầu và địa điểm đến
Tính năng chọn điểm trên bản đồ cho phép người dùng chạm trực tiếp để chọn điểm bắt đầu hoặc điểm đến, mang lại sự tiện lợi và trực quan cho trải nghiệm của họ.
✓ Hiển thị thông tin địa bắt đầu và điểm đến: Cung cấp thông tin về tên cÿa địa điểm hiển thị, biểu t°ÿng đánh dấu địa chỉ các điểm đó trên bản đồ
✓ Hiển thị đ°ờng đi: T¿o và hiển thị đ°ờng đi ngắn nhất.
Gi ớ i thi ệ u các ph ầ n m ề m s ử d āng để cài đặt ch°¡ng trình
Miễn phí và mã nguồn mở: Visual Studio Code là mát trình so¿n thảo mã nguồn mở và miễn phí, có sẵn cho Windows, macOS và Linux
Giao diện ng°ời dùng thân thiện: Visual Studio Code có mát giao diện ng°ời dùng trực quan và dễ sử dāng, với các công cāvà tính năng đ°ÿc tổ chāc mát cách hÿp lý
Hò trÿ nhiều ngụn ngữ lập trỡnh: Visual Studio Code hò trÿ nhiều ngụn ngữ lập trình khác nhau bao gồm HTML, CSS, JavaScript, TypeScript, Python, Java, PHP, và nhiều ngôn ngữ khác
Mở ráng bằng Extensions: B¿n có thể mở ráng khả năng cÿa Visual Studio Code thông qua các extension, cho phép b¿n tùy chỉnh và thêm các tính năng mới nh° debug, linting, autocomplete, và nhiều chāc năng khác
IntelliSense: Visual Studio Code cung cấp IntelliSense, mát tính năng tự đáng hoàn thành mã và gÿi ý thông minh giúp tăng tốc quá trình viết mã
Debugging và linting: Visual Studio Code cung cấp tính năng debugging tớch hÿp và hò trÿlinting để giỳp b¿n xỏc định và sửa lòi mó mỏt cỏch dễ dàng
Live Server: Extension Live Server cho phép b¿n khởi ch¿y mát máy chÿ web cāc bá và tự đáng làm mới trang web cÿa b¿n khi b¿n l°u các tệp mã nguồn luan van tot nghiep khoa luan
Visual Studio Code tích hợp chặt chẽ với Git, mang tới khả năng quản lý phiên bản mã nguồn hoàn hảo Người dùng có thể dễ dàng thực hiện các thao tác Git trực tiếp từ giao diện, bao gồm commit, push và pull.
Hò trÿ nền tảng: Visual Studio Code ho¿t đỏng trờn nhiều nền tảng nh° Windows, macOS và Linux, cho phép b¿n làm việc trên bất kỳ máy tính nào mà không bị giới h¿n
Node.js là mát môi tr°ờng ch¿y mã JavaScript ở phía máy chÿ Nó cho phép b¿n xây dựng các āng dāng web và máy chÿ hiệu quả bằng cách sử dāng JavaScript, mát ngôn ngữ chÿđ¿o cÿa phía máy khách [9]
Tính năng và °u điểm: Bất đồng bá, không chặn I/O, khả năng xử lý hàng nghìn kết nối đồng thời, thích hÿp cho các āng dāng thời gian thực
Express.js là mát th° viện (framework) āng dāng web Node.js linh ho¿t
Nó giúp đ¡n giản hóa việc xây dựng āng dāng web và API Node.js [10]
Tính năng và °uđiểm: Đ¡n giản, linh ho¿t, middleware m¿nh mẽ, t¿o các định tuyến dễ dàng
Body-Parser là mát middleware cho Express.js giúp xử lý dữ liệu đến từ các yêu cầu HTTP (nh° POST và PUT requests).
Tính năng và °uđiểm: Giúp trích xuất dữ liệu từ phần chính cÿa yêu cầu, xử lý dữ liệu định d¿ng JSON và dữ liệu trên form
OpenStreetMap (OSM) là dự án bản đồ nguồn mở toàn cầu lớn nhất thế giới, do cộng đồng toàn cầu cập nhật và duy trì Dữ liệu của OSM bao gồm thông tin về đường phố, tuyến đường, địa điểm quan trọng, ranh giới hành chính, sông hồ, rừng, công viên và nhiều thông tin khác Điều này làm cho OSM trở thành nguồn tài nguyên giá trị cho nhiều ứng dụng và dự án liên quan đến bản đồ và địa lý.
Overpass Turbo: Overpass Turbo là mát công cā trực tuyến m¿nh mẽ đ°ÿc sử dāng để truy vấn và trích xuất dữ liệu từ OpenStreetMap (OSM) [11]
Truy vấn dữ liệu OSM: Overpass Turbo cho phép b¿n t¿o và thực thi các truy vấn OSM để tìm và trích xuất dữ liệu từ c¡ sở dữ liệu OSM rất lớn Tìm các đối t°ÿng nh° điểm quan trọng, đ°ờng phố, công viên, nhà hàng, bệnh viện, tr¿m xăng , và nhiều lo¿i đối t°ÿng khác trên bản đồ
Tính năng: Overpass Turbo cung cấp giao diện trực quan cho kết quả truy vấn, giúp b¿n dễ dàng nhận biết và hiểu thông tin
Lập trình: B¿n có thể sử dāng ngôn ngữ truy vấn Overpass QL (Overpass Query Language) để t¿o cỏc truy vấn phāc t¿p Hò trÿ lập trỡnh JavaScript cho việc tùy chỉnh và xử lý kết quả truy vấn
Xem tr°ớc kết quả: Overpass Turbo cho phép xem tr°ớc kết quả truy vấn trên bản đồ trực tuyến và trong bảng dữ liệu
Xuất dữ liệu: B¿n có thể xuất kết quả truy vấn d°ới d¿ng GeoJSON, JSON hoặc các định d¿ng khác nh° GPX, KML.
Sử dāng trực tiếp trên trình duyệt: Overpass Turbo ho¿t đáng trực tiếp trên trình duyệt web mà không cần cài đặt bất kỳ phần mềm nào Địa chỉ website: https://overpass-turbo.eu
Dễ sử dāng: Giao diện đ¡n giản và dễ sử dāng, thích hÿp cho cả ng°ời mới bắt đầu và ng°ời có kinh nghiệm
❖ File JSON (JavaScript Object Notation)
JSON là mát định d¿ng dữ liệu phổ biến đ°ÿc sử dāng để truyền tải và l°u trữ dữ liệu d°ới d¿ng văn bản JSON là mát phần cÿa JavaScript, nh°ng nó cũng có thể đ°ÿc sử dāng bởi nhiều ngôn ngữ lập trình khác
Cấu trúc c¡ bản: JSON sử dāng cấu trúc đối t°ÿng và mảng để tổ chāc dữ liệu [3]
Dễ đọc và hiểu: JSON sử dāng cú pháp đ¡n giản và gần gũi với con ng°ời, dễ đọc và hiểu
Dễ dàng tích hÿp với nhiều ngôn ngữ: JSON là định d¿ng dữ liệu đác lập với ngôn ngữ, nên có thể sử dāng với nhiều ngôn ngữ lập trình khác nhau luan van tot nghiep khoa luan
Kích th°ớc nhỏ gọn: JSON th°ờng có kích th°ớc nhỏ gọn so với các định d¿ng dữ liệu khác nh° XML, làm cho việc truyền tải dữ liệu trở nên hiệu quả h¡n.
L°u trữ dữ liệu: JSON th°ờng đ°ÿc sử dāng để l°u trữ cấu trúc dữ liệu nh° cài đặt āng dāng, cấu hình, hoặc dữ liệu từ máy chÿ [4]
Truyền tải dữ liệu: JSON đ°ÿc sử dāng làm định d¿ng dữ liệu phổ biến trong việc truyền tải dữ liệu giữa máy chÿ và trình duyệt thông qua AJAX hoặc các API
PHÂN TÍCH THIẾ T K Ế H Ệ TH Ố NG
Phân tích bài toán
Hệ thống website tìm đường đi ngắn nhất được phân tích chi tiết như sau: phân tích nội dung bài toán đã được phát biểu và các yêu cầu chức năng đã đề cập ở chương 1.
Tìm đ°ờng đi: Website cần cho phép ng°ời dùng chọn ph°¡ng tiện di chuyển, chọn hai điểm trên bản đồ và tìm ra đ°ờng đi ngắn nhất giữa chúng
Hiển thị bản đồ: Website cần hiển thị mát bản đồ để ng°ời dùng có thể chọn ph°¡ng tiện di chuyển, điểm xuất phát và điểm đích.
Dữ liệu bản đồ: Cần sử dāng dữ liệu bản đồ từ mát nguồn bản đồ nh° OpenStreetMap
Tính toán đ°ờng đi: Cần sử dāng thuật toán đ°ờng đi ngắn nhất để tính toán đ°ờng đi từđiểm xuất phát đến điểm đích trên bản đồ
Trang chÿ: Hiển thị bản đồ và giao diện để nhập ph°¡ng tiện di chuyển, điểm xuất phát và điểm đích
Kết quả: Hiển thịđ°ờng đi ngắn nhất từ điểm xuất phát đến điểm đích.
Frontend: Sử dāng HTML, CSS và JavaScript để xây dựng giao diện trang web và t°¡ng tác với ng°ời dùng [1][2]
Backend: Sử dāng ngôn ngữ lập trình nh° JavaScript (Node.js) để xử lý các yêu cầu từ frontend, tính toán đ°ờng đi và trả về kết quả cho ng°ời dùng
KiÃm thā và sāa lòi
Kiểm thử tính năng: Kiểm tra tính đúng đắn và hiệu suất cÿa tính năng tìm đ°ờng đi ngắn nhất luan van tot nghiep khoa luan
Kiểm thử giao diện: Đảm bảo giao diện ho¿t đáng mát cách m°ÿt mà và thân thiện với ng°ời dùng
Triển khai website: Đ°a website vào ho¿t đáng trên mát máy chÿ và công bố cho ng°ời dùng sử dāng
Tính tích hÿp: Website cần tích hÿp thuật toán đ°ờng đi ngắn nhất và hiển thị bản đồ mát cách m¿ch l¿c và hiệu quả
Tính t°¡ng tác: Giao diện cần t°¡ng tác tốt với ng°ời dùng, cho phép họ dễ dàng nhập điểm xuất phát và điểm đích và nhận kết quả mát cách nhanh chóng.
Ph°¡ng pháp l°u trữ d ữ li ệ u c ÿ a b ản đồ
Tải dữ liệu bản đồ
+B1: Truy cập trang web https://overpass-turbo.eu
+B2: Sử dāng ô văn bản để t¿o truy vấn OSM bằng ngôn ngữ truy vấn Overpass QL
Hình 2.1: Các câu truy vấn lấy dự liệu từ website http://overpass- turbo.edu +B3: Nhấn nút "Run" để thực thi truy vấn và xem kết quả trên bản đồ luan van tot nghiep khoa luan
Hình 2.2: Ph¿m vi dữ liệu đ°ÿc tải về
Có thểđiều chỉnh truy vấn và thực thi l¿i để tinh chỉnh kết quả
+B4: Khi kết quả phù hÿp, b¿n có thể xuất dữ liệu sang các định d¿ng khác nhau
Hình 2.3: Các tùy chọn định d¿ng dữ liệu tải về luan van tot nghiep khoa luan
Kết quả dữ liệu bản đồ tải về trong file data.json
Hình 2.4: Dữ liệu tải vềđ°ÿc l°u d°ới d¿ng file json
• Mô tả dữ liệu bản đồ
Thông tin dữ liệu bản đồ data: Dữ liệu bản đồ bao gồm 20,104 điểm (node) và 1,883 đ°ờng (ways) Dữ liệu l°u trữ d°ới d¿ng JSON với dung l°ÿng là 2.25MB
Ph¿m vi dữ liệu bản đồ: Dữ liệu bản đồ bao gồm các nodes và ways Các node đ¿i diện cho các điểm trên bản đồ với thông tin về vĩ đá (latitude) và kinh đá (longitude) Các ways là tập hÿp các node để t¿o thành các đo¿n đ°ờng hoặc các phần tử không gian khác trên bản đồ
Cấu trúc dữ liệu: Dữ liệu đ°ÿc l°u cấu trúc đối t°ÿng gồm key và value
- type: Lo¿i cÿa đối t°ÿng, trong tr°ờng hÿp này là "node" Đây là mát chuòi ký tự chỉ ra lo¿i cÿa đối t°ÿng (node, way)
- id: Mát số duy nhất đ¿i diện cho node trong hệ thống OSM luan van tot nghiep khoa luan
- lon: Tọa đá kinh đá cÿa node, cũng đ°ÿc biểu diễn d°ới d¿ng số thập phân
Hình 2.5: Dữ liệu mát điểm trong file data
- type: Lo¿i cÿa đối t°ÿng, trong tr°ờng hÿp này là "way"
- id: Mát số duy nhất đ¿i diện cho way trong hệ thống OSM
- nodes: Mát mảng các số duy nhất đ¿i diện cho các node mà way này đi qua
- tags: Mát tập hÿp các cặp key-value mô tả các thuác tính cÿa way, chẳng h¿n nh° thông tin về lo¿i đ°ờng, tốc đá tối đa, tên đ°ờng, v.v
Hình 2.6: Dữ liệu mát đo¿n đ°ờng trong file data Trong hình trên: Tuyến đ°ờng có id là 240515176 đi qua các node có id lần l°ÿt là 2482439165, 11747679934, 2482439159 và 11747679935.Các tags luan van tot nghiep khoa luan mô tả rằng đây là mát đ°ờng dân c° ("highway": "residential") tên đ°ờng là " Ngõ 398 Vũ Chí Thắng"
Mô tả dữ liệu đồ thị graph
Hình 2.7: Dữ liệu trong đồ thị graph
- Dữ liệu cÿa đồ thịgraph đ°ÿc t¿o bởi các thông tin từ file data.json sau khi tính toán về khoảng cách giữa các điểm (node) trên đo¿n đ°ờng, các đỉnh kề các thuác tính nh° oneway, motorcar, motorcycle, foot có kiểu dự liệu Boolean có giá trị là true hoặc false
Khoảng cách giữa hai địa điểm có thể được xác định bằng cách sử dụng tọa độ địa lý của chúng Để tính toán khoảng cách này, cần nắm được tọa độ tương ứng của hai điểm trong hệ tọa độ địa lý Những tọa độ này biểu thị vị trí không gian cụ thể của từng địa điểm, cho phép chúng ta xác định khoảng cách tuyến tính giữa chúng.
Hệ tọa độ địa lý thông thường sử dụng Kinh độ và Vĩ độ, trong đó Kinh độ là đường dài theo chiều đông-tây và Vĩ độ là đường cao theo chiều bắc-nam Công thức Haversine là một công thức phổ biến được dùng để ước tính khoảng cách giữa hai điểm trên bề mặt cầu Công thức này dựa trên hình học địa lý và sử dụng bán kính Trái Đất để tính toán khoảng cách.
- Công thāc Haversine đ°ÿc biểu diễn nh° sau:
Distance 2*r*arcsin(√haversin(�㗥�㕙�㕎�㕡) + cos(�㕙�㕎�㕡1) ∗ cos(lat2) ∗ haversin(Δlon))
Trong đó: �㗥�㕙�㕎�㕡 = lat2 – lat1,�㗥�㕙Āÿ = lon2 – lon1 haversin(�㗥�㕙�㕎�㕡) = sin 2 ( �㗥�㕙�㕎�㕡 2 ), haversin(Δlon) = sin 2 ( �㗥�㕙Āÿ 2 )
- r: Là bán kính trái đất
- lat1, lon1 : Là vĩ đávà kinh đáđiểm thā nhất
- lat2, lon2 : Là vĩ đá và kinh đá điểm thā hai
- Distance: Khoảng cách giữa hai điểm luan van tot nghiep khoa luan
- Thông tin dữ liệu đồ thị graph: Dữ liệu bản đồ bao gồm 9944 đỉnh (node) tệp dữ liệu l°u trữd°ới d¿ng JSON với dung l°ÿng là 2.25 MB
- Cấu trúc dữ liệu: Dữ liệu đồ thị đ°ÿc biểu diễn d°ới d¿ng mát mảng, trong đú mòi phần tử cÿa mảng đ¿i diện cho mỏt điểm (node) trờn đồ thị Mòi phần tử bao gồm mát id cÿa điểm và danh sách các đỉnh kề cÿa điểm đó.
- Ví dā hình 2.7: điểm có id là 8730486582 có các đỉnh kề là
10095784904 với khoảng cách tới điểm đó là 0.02187208157494988 kilomet, và đỉnh kề 8730486581 với khoảng cách tới điểm đó là 0.12142485989663387 kilomet.
Thu ật toán tìm đ°ờng đi ngắ n nh ấ t
Hiện nay, việc tìm đ°ờng đi ngắn nhất vẫn là mát lĩnh vực nghiên đ°ÿc nhiều sự quan tâm, với nhiều phát triển mới và sự tiến bá trong các thuật toán và ph°¡ng pháp Bảng d°ới đây tóm tắt về đặc điểm cÿa mát số thuật toán tìm đ°ờng đi ngắn nhất
Bảng 2.1: ¯u nh°ÿc điểm cÿa các thuật toán tìm đ°ờng đi ngắn nhất
ThuÁt toán ¯u điÃm Nh°ÿc điÃm
Dễ hiểu và triển khai
Ho¿t đáng tốt trên đồ thị vô h°ớng và có trọng sốd°¡ng, cho kết quả chính xác
Không xử lý đ°ÿc trọng số âm Đá phāc t¿p thời gian lớn (O((V+E)logV)) với V là số đỉnh và E là số c¿nh
Xửlý đ°ÿc trọng số âm và phát hiện chu trình âm
Ho¿t đáng tốt trên đồ thị có trọng số âm Đá phāc t¿p thời gian lớn (O(VE)) với V là sốđỉnh và E là số c¿nh
Nếu có nhiều c¿nh thuật toán trở lên chậm
Hiệu quảtrên các đồ thị lớn
Sử dāng heuristics để tối °u hóa tìm kiếm
Tính chính xác cao khi đ°ÿc áp dāng đúng cách. Đá phāc t¿p thời gian phā thuác nhiều vào chất l°ÿng cÿa hàm heuristics
Cần phải chọn heuristics phù hÿp
Thuật Toán Xửlý đ°ÿc cảđồ thị có trọng Đá phāc t¿p thời gian lớn luan van tot nghiep khoa luan
Kết quả so sánh hiệu suất mát số các thuật toán tìm đ°ờng ngắn nhất
Với ph¿m vi dữ liệu nhỏ
Hình 2.8: Dữ liệu trong đồ thị kiểm tra graphtest
Tìm đ°ờng đi ngắn nhất giữa tất cả các cặp đỉnh
Yêu cầu l°u trữ ma trận trọng số, tốn bá nhớ
Hiệu quảtrên các đồ thị lớn
Tối °u hóa thời gian tìm kiếm bằng cách sử dāng các đỉnh "chia" và "trán"
Yêu cầu tiền xử lý đồ thị phāc t¿p
Xửlý đ°ÿc cả trọng số âm
Tìm kiếm đ°ờng đi ngắn nhất giữa tất cả các cặp đỉnh Đá phāc t¿p thời gian cao (O(VE + �㕣 2 logV))
Tìm ra nhiều lựa chọn đ°ờng đi ngắn nhất giữa hai đỉnh
Phù hÿp cho việc tìm kiếm đa māc tiêu Đá phāc t¿p thời gian cao khi cần tìm nhiều lựa chọn (O(K(E + �㕣 2 logV)) với K là số lựa chọn
Xửlý đ°ÿc trọng số âm Đá phāc t¿p thời gian thấp trong mát sốtr°ờng hÿp
Dễ bị lặp vô h¿n trên các đồ thị có chu trình âm
Hiệu suất không ổn định trên các tr°ờng hÿp tồi nhất luan van tot nghiep khoa luan
Hình 2.9: Kết quả kiểm tra thuật toán Dijkstra, Bellman-Ford và Floyd-
Warshall với dữ liệu graphtest
Với ph¿m vi dữ liệu cÿa dự án
Hình 2.10: Ch¿y thử ch°¡ng trình với dữ liệu dự án
Hình 2.11: Kết quả kiểm tra thuật toán Dijkstra, Bellman-Ford và Floyd-
Warshall với dữ liệu dự án luan van tot nghiep khoa luan
So sánh: Kết quả thử nghiệm trên các bá dữ liệu nhỏ và lớn cho thấy sự khác biệt rõ rệt về thời gian thực thi giữa các thuật toán:
Dijkstra: 2.215 ms (dữ liệu nhỏ), 177.895 ms (dữ liệu lớn)
Bellman-Ford: 0.446 ms (dữ liệu nhỏ), 1:56.841 (m:ss.mmm) (dữ liệu lớn)
Floyd-Warshall: 0.615 ms (dữ liệu nhỏ), 1:46:26.186 (h:m:ss.mmm) (dữ liệu lớn)
Với dữ liệu lớn, thời gian ch¿y cÿa Dijkstra (xấp xỉ 177 mili giây) là ngắn h¡n rất nhiều so với Bellman-Ford (xấp xỉ 1 phút 56 giây) và đặc biệt là Floyd- Warshall ( xấp xỉ 1 giờ 46 phút 26 giây)
Tổng quãng đ°ờng tìm đ°ÿc và đ°ờng đi hoàn toàn khớp với kết quả cÿa Bellman-Ford và Floyd-Warshall, chāng minh tính chính xác cÿa Dijkstra
Vì vậy: Xây dựng mát āng dāng web tìm đ°ờng đi ngắn nhất trên bản đồ với dữ liệu từ OSM trong khu vực nhỏ cÿa mát thành phố việc sử dāng Dijkstra vẫn là mát lựa chọn tốt với các lý do sau:
- Đồ thị không có trọng số âm: Ho¿t đáng hiệu quả trên những đồ thị không có trọng số âm
- Hiệu quả trên đồ thị nhỏ và mật đá thấp: Ho¿t đáng tốt trên các đồ thị có số l°ÿng đỉnh nhỏ và mật đá c¿nh thấp, điều này phù hÿp với việc xây dựng mát āng dāng tìm đ°ờng trên mát khu vực nhỏ cÿa thành phố
- Dễ triển khai: Dễ triển khai và hiểu, đặc biệt là khi b¿n chỉ cần tính toán trên mát ph¿m vi nhỏ và không cần xử lý trọng số âm
- Tính chính xác: Đảm bảo tìm ra đ°ờng đi ngắn nhất giữa hai điểm trên đồ thị không có trọng số âm
Tính linh hoạt là khả năng điều chỉnh thuật toán để xử lý các biến thể của vấn đề, ví dụ như tìm đường đi cho nhiều loại phương tiện cá thể (ví dụ: đường chỉ dành cho người đi bộ, ô tô, xe máy, ).
Giãi thiáu thuÁt toán Dijkstra
- Thuật toán Dijkstra đ°ÿc phát triển bởi nhà toán học và nhà máy tính
Hà Lan Edsger W Dijkstra vào năm 1956 và đ°ÿc công bố lần đầu tiên trong bài báo khoa học "A Note on Two Problems in Connexion with Graphs" vào năm 1959 [5] luan van tot nghiep khoa luan
- Māc đích: Dijkstra phát triển thuật toán để tìm đ°ờng đi ngắn nhất giữa hai đỉnh trên mát đồ thị có trọng số không âm
- Phát triển và āng dāng: Thuật toán Dijkstra nhanh chóng trở thành mát trong những công cā c¡ bản và quan trọng trong lĩnh vực khoa học máy tính và các āng dāng thực tiễn Nó đã đ°ÿc sử dāng ráng rãi trong nhiều lĩnh vực nh° định tuyến m¿ng l°ới, hệ thống điều hành tàu, máy bay, giao thông, logistics, truyền thông, và nhiều lĩnh vực khác
- B°ớc 1: Từ đỉnh gốc, khởi t¿o khoảng cách tới chính nó là 0, khởi t¿o khoảng cách nhỏ nhất ban đầu tới các đỉnh khác là +∞ Ta đ°ÿc danh sách các khoảng cách tới các đỉnh
- B°ớc 2: Chọn đỉnh a có khoảng cách nhỏ nhất trong danh sách này và ghi nhận Các lần sau sẽ không xét tới đỉnh này nữa
- B°ớc 3: Lần l°ÿt xét các đỉnh kề b cÿa đỉnh a Nếu khoảng cách từ đỉnh gốc tới đỉnh b nhỏh¡n khoảng cách hiện t¿i đang đ°ÿc ghi nhận thì cập nhật giá trịvà đỉnh kề a vào khoảng cách hiện t¿i cÿa b
- B°ớc 4: Sau khi xét tất cả đỉnh kề b cÿa đỉnh a Lúc này ta đ°ÿc danh sách khoảng cách tới các điểm đã đ°ÿc cập nhật Quay l¿i B°ớc 2 với danh sách này Thuật toán kết thúc khi chọn đ°ÿc khoảng cách nhỏ nhất từ tất cảcác điểm
Hình 2.12: Đồ thị G Thuật toán Dijkstra sẽ tìm khoảng cách từ đỉnh gốc 0 tới tất cả các đỉnh còn l¿i trong đồ thị G Đầu tiên, khởi t¿o khoảng cách nhỏ nhất ban đầu tới các đỉnh khác là +∞ và khoảng cách tới đỉnh gốc là 0 Ta đ°ÿc danh sách các khoảng cách tới các đỉnh luan van tot nghiep khoa luan
Bảng 2.2: Khởi t¿o khoảng cách ban đầu cho các đỉnh
Chọn đỉnh 0 có giá trị nhỏ nhất, xét các đỉnh kề cÿa đỉnh 0: Xét đỉnh 1, khoảng cách từ gốc đến đỉnh 1 là 2.5 < +∞ nên ghi nhận giá trị mới là (2.5,0) (nghĩa là khoảng cách đến đỉnh gốc hiện t¿i ghi nhận là 2.5, đỉnh kề liền tr°ớc là đỉnh 0) Xét t°¡ng tựcho đỉnh 2 và 3, ta đ°ÿc dòng thā 2 trong bảng
Bảng 2.3: Xét từđỉnh gốc 0 đến đỉnh 3
Sau khi xét tất cả các đỉnh ta chọn đỉnh 2 có khoảng cách nhỏ nhất và ghi nhận để xét tiếp Tiếp tāc xét đỉnh kề cÿa 2 là đỉnh 4 và 5 với nguyên tắc nêu ở trên Xét đỉnh 4, khoảng cách từ đỉnh gốc đến đỉnh 4 sẽ bằng khoảng cách từ đỉnh gốc tới đỉnh 2 cáng khoảng cách từ 2 đến 4 Nghĩa là 2.0+0.6=2.6 nên ta ghi nhận khoảng cách t¿i đỉnh 4 là (2.6,2) Xét t°¡ng tự cho đỉnh 5
Bảng 2.4: Xét từđỉnh gốc 0 đến đỉnh 5
Chúng ta đã xác định được 3 đỉnh có khoảng cách nhỏ nhất Xét đỉnh kề của 3 đỉnh này là đỉnh 5 Khoảng cách từ gốc đến đỉnh 5 là 2,1 + 2,5 = 4,6 Khoảng cách này lớn hơn khoảng cách hiện tại được ghi nhận, do đó giá trị tại đỉnh 5 không thay đổi.
Bảng 2.5: Xét từđỉnh gốc 0 đến đỉnh 5
Bi ểu đồ Use Case
Bảng 2.11: Bảng đặc tả Use Case