ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

HÀ ĐỨC VĂN

Phát triển thuật toán tìm đường cho Nền tảng cung cấp dịch vụ địa chỉ

Việt Nam

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Giảng viên hướng dẫn: TS. Bùi Quang Hưng

Hà Nội, 09/2020

LỜI CẢM ƠN

Trước hết tôi xin bày tỏ lòng cảm ơn chân thành đến TS Bùi Quang Hưng đã tận

tình hướng dẫn tôi trong thời gian làm luận văn thạc sĩ này.

Tôi xin cảm ơn các thầy, cô ở Trung tâm Công nghệ tích hợp liên ngành Giám sát

hiện trường (FIMO), khoa Công nghệ thông tin, trường Đại học Công nghệ - ĐHQGHN

đã tạo điều kiện giúp đỡ tôi hoàn thành luận văn.

Cuối cùng, tôi muốn gửi lời cảm ơn sâu sắc nhất đến bố mẹ và những người thân

trong gia đình, những người luôn ủng hộ con đường tôi đã lựa chọn, giúp đỡ và động

viên tôi vượt qua những khó khăn trong cuộc sống.

Tuy đã có những cố gắng nhất định nhưng do kiến thức và thời gian có hạn nên

chắc chắn luận văn này còn nhiều thiếu sót và hạn chế nhất định. Kính mong nhận được

sự góp ý của thầy cô.

Khóa luận này được hỗ trợ bởi đề tài nghiên cứu ứng dụng và phát triển công nghệ

cấp quốc gia: "Nghiên cứu xây dựng Nền tảng cung cấp dịch vụ dữ liệu địa chỉ Việt Nam

phục vụ phát triển các ứng dụng dân sinh”, Mã số: ĐTCT-KC-4.0-03/19/25.

Hà Nội, ngày tháng năm 2020

Học viên

Hà Đức Văn

1

TÓM TẮT

Tóm tắt:

Trong thời đại chứng kiến những sự phát triển vượt bậc của các hệ thống công nghệ thông tin, các hệ thống bản đồ số cũng có những bước tiến lớn, đóng góp một vai trò quan trọng trong

cuộc sống hiện đại. Nắm bắt thực trạng và nhu cầu sử dụng bản đồ số ở Việt Nam cho mục đích tìm kiếm thông tin địa chỉ, tìm đường,.. Nền tảng bản đồ số VMap ra đời với vai trò tiên phong

trong lĩnh vực bản đồ sô tại Việt Nam. Một trong những thách thức trong việc phát triển chức năng chỉ đường của VMap đó chính là ước tính tốc độ di chuyển thực tế. Thực trạng về việc sử

dụng phương tiện cá nhân và vấn đề đô thị hóa đã dẫn đến tình trạng giao thông tại các thành phố lớn trở nên vô cùng phức tạp khi thường xuyên xảy ra ùn tắc, mật độ phương tiện cao. Điều

này dẫn đến tốc độ di chuyển trên từng đoạn đường vào những thời điểm khác nhau có sự khác biệt rõ rệt. Tuy chức năng chỉ đường của VMap đã đưa ra tốc độ di chuyển bằng những tính chất

không đổi của đoạn đường như loại đường, các biển báo hạn chế tốc độ nhưng như thế là chưa đủ để đảm bảo độ chính xác.

Luận văn này thực hiện nghiên cứu, phát triển công cụ ước tính tốc độ di chuyển trong thực tế dựa trên dữ liệu giao thông cho VMap. Luận văn bao gồm các thành phần chính là: (1)

tìm hiểu những công nghệ, nghiên cứu về tính toán tốc độ di chuyển trên thực tế, (2) Đề xuất quy trình xây dựng thuật toán sử dụng Google Traffic Tiles để ước lượng thời gian di chuyển

thực tế,(3) Xây dựng bộ dữ liệu thử nghiệm và đánh giá thử nghiệm các mô hình, (4) Triển khai và đánh giá hiệu quả của thuật toán.

Từ khóa: VMap, tốc độ di chuyển, tìm đường

2

LỜI CAM ĐOAN

Tôi xin cam đoan luận văn “PHÁT TRIỂN THUẬT TOÁN TÌM ĐƯỜNG CHO

NỀN TẢNG CUNG CẤP DỊCH VỤ ĐỊA CHỈ VIỆT NAM” là công trình nghiên cứu

của bản thân dưới sự hướng dẫn của TS. Bùi Quang Hưng.

Tất cả những tham khảo từ nghiên cứu liên quan đều được trích dẫn một cách rõ

ràng trong danh mục tài liệu tham khảo. Không có việc sao chép tài liệu, công trình

nghiên cứu của người khác mà không chỉ rõ về tài liệu tham khảo.

Hà Nội, ngày tháng năm 2020

Học viên

Hà Đức Văn

3

MỤC LỤC

TÓM TẮT ............................................................................................................. 2

DANH MỤC BẢNG BIỂU .................................................................................. 6

DANH MỤC HÌNH ẢNH ................................................................................... 7

DANH MỤC TỪ VIẾT TẮT .............................................................................. 8

MỞ ĐẦU ............................................................................................................... 9

CHƯƠNG 1. GIỚI THIỆU CHUNG ............................................................. 11

1.1 Giới thiệu chung về VMap và chức năng chỉ đường của VMap. ........ 11

1.1.1 Giới thiệu VMap ............................................................................... 11

1.1.2 Chức năng chỉ đường của VMap .................................................... 12

1.2 Vấn đề gặp phải với chức năng chỉ đường của VMap ......................... 12

1.2.1 Vấn đề gặp phải do thiếu dữ liệu tín hiệu giao thông .................... 13

1.2.2 Vấn đề gặp phải do thiếu dữ liệu lưu lượng giao thông ................ 15

CHƯƠNG 2. CÁC NGHIÊN CỨU, CÔNG NGHỆ LIÊN QUAN .............. 18

2.1 Một số phương pháp tính toán tốc độ di chuyển thực tế. .................... 18

2.1.1 Thu thập thông tin chia sẻ từ người dùng ...................................... 18

2.1.2 Tính toán dựa trên công nghệ đo trực tiếp .................................... 18

2.1.3 Tính toán từ dữ liệu vị trí của phương tiện .................................... 20

2.2. Giới thiệu tổ chức Open Geospatial Consortium (OGC) và chuẩn

Web Map Tile Service (WMTS) .............................................................................. 21

2.2.1 Giới thiệu tổ chức Open Geospatial Consortium (OGC).............. 21

2.2.2 Giới thiệu chuẩn Web Map Tile Service (WMTS) ........................ 21

2.3. Giới thiệu về Google Map ................................................................. 22

2.4. Giới thiệu về Graphhopper ............................................................... 23

2.5. Giới thiệu về Javascript và NodeJS ................................................. 24

2.5.1. Giới thiệu, lịch sử phát triển Javascript ........................................ 24

2.5.2 Giới thiệu về NodeJS ........................................................................ 25

4

2.6. Giới thiệu về Python và các thư viện, bộ thư viện sử dụng ........... 26

2.6.1. Giới thiệu về Python ........................................................................ 26

2.6.2 Bộ thư viện Scikit-Learn (sklearn) .................................................. 27

2.6.3 Flask ................................................................................................... 28

2.7. Giới thiệu RNN .................................................................................. 29

CHƯƠNG 3. ĐỀ XUẤT PHƯƠNG PHÁP .................................................... 31

3.1 Thu thập dữ liệu Google Traffic Tiles ................................................... 31

3.2 Xây dựng thuật toán tìm đường đi nhanh nhất theo thời gian ........... 34

3.2.1 Đề xuất phương pháp tìm đường .................................................... 34

3.2.2 Đề xuất Thuật toán tìm đường đi nhanh nhất ............................... 38

CHƯƠNG 4. TRIỂN KHAI, THỰC NGHIỆM VÀ ĐÁNH GIÁ ................ 43

4.1 Xây dựng mô hình ước lượng thời gian di chuyển theo tình trạng giao

thông ........................................................................................................................... 43

4.1.1 Xây dựng bộ dữ liệu thử nghiệm ..................................................... 43

4.1.2 Thử nghiệm và tìm mô hình hiệu quả nhất .................................... 43

4.2 Triển khai công cụ thu thập bộ dữ liệu Google Traffic Tiles .............. 46

4.3 Triển khai thuật toán cho Nền tảng cung cấp dịch vụ địa chỉ Việt Nam

VMap .......................................................................................................................... 46

CHƯƠNG 5. KẾT LUẬN VÀ ĐỊNH HƯỚNG .............................................. 51

Kết quả đạt được ........................................................................................... 51

Định hướng phát triển tương lai .................................................................. 51

Tài liệu tham khảo ............................................................................................. 52

5

DANH MỤC BẢNG BIỂU

Bảng 3.1. Thông số chi tiết Google Traffic Tiles ................................................ 31

Bảng 3.3. Thông tin thử nghiệm tải về dữ liệu .................................................... 33

Bảng 3.4. Các thông số truy vấn có thể gửi lên ................................................... 36

Bảng 3.5. Các thông số truy vấn có thể gửi lên ................................................... 37

Bảng 4.1. Kết quả thử nghiệm ............................................................................. 45

Bảng 4.2. Kết quả thử nghiệm thực tế ................................................................. 48

6

DANH MỤC HÌNH ẢNH

Hình 1.1. Ví dụ chức năng chỉ đường của VMap ................................................ 12

Hình 1.2. Ví dụ về việc quản lý, chỉnh sửa biển báo hiệu giao thông trên VMap

............................................................................................................................. 14

Hình 1.3. Vấn đề gặp phải với chức năng tìm đường của VMap ........................ 14

Hình 1.4. Tối ưu đồ thị định tuyến của chức năng chỉ đường VMap [6] ............ 16

Hình 2.1. WMTS chia bản đồ ra làm các mảnh .................................................. 22

Hình 2.2. Giao diện trình diễn của GraphHoper ................................................ 24

Hình 2.3. Ví dụ ứng dụng Hello World trên bộ thư viện Flask ........................... 28

Hình 2.4. Ví dụ ứng dụng Hello World trên bộ thư viện Flask ........................... 29

Hình 2.5. Ví dụ về một mạng nơ-ron RNN .......................................................... 30

Hình 3.1. Dữ liệu giao thông của Google hiển thị trên nền tảng dữ liệu VMap . 32

Hình 3.2. Dữ liệu ranh giới hành chính .............................................................. 33

Hình 3.3. Một phần dữ liệu thu thập được .......................................................... 34

Hình 3.4. Kiến trúc hệ thống tìm đường mới ....................................................... 35

Hình 3.5. Ví dụ một kết quả tìm đường được trả về bằng API mới ..................... 38

Hình 3.6. Hệ thống đường của VMap và Google không hoàn toàn trùng khớp . 40

Hình 3.7. Ví dụ trích xuất thông tin từ một Tile .................................................. 40

Hình 3.8. Các mức độ giao thông của Google Traffic ........................................ 41

Hình 3.9. Quy trình của Thuật toán tìm đường đi nhanh nhất ............................ 42

Hình 4.1. Quy trình xây dựng bộ dữ liệu thử nghiệm .......................................... 43

Hình 4.2. Quy trình xây dựng bộ dữ liệu thử nghiệm .......................................... 45

Hình 4.3. Tiến trình thu thập bộ dữ liệu Google Traffic Tiles được khởi tạo ..... 46

Hình 4.4. PM2 được khai báo khởi động cùng hệ thống ..................................... 46

Hình 4.5. Thử nghiệm dịch vụ tìm đường mới trên ứng dụng nền tảng web VMap

tại VMap.vn .......................................................................................................... 47

Hình 4.6. Thử nghiệm tìm đường tương tự trên nền tảng Google Map .............. 48

Hình 4.7. Thử nghiệm dịch vụ tìm đường mới trên ứng dụng nền tảng di động

Android ................................................................................................................ 49

7

DANH MỤC TỪ VIẾT TẮT

Ký hiệu

Ý nghĩa

Application

Programming

API

Interface – giao diện lập trình

ứng dụng

Cơ sở dữ liệu

CSDL

Đại học Quốc gia Hà Nội

ĐHQGHN

OGC

Tổ chức địa không gian Open

Geospatial Consortium

OpenStreetMap

OSM

Chuẩn Web Map Tile Service

WMTS

8

MỞ ĐẦU

Hệ tri thức Việt số hóa [1] là đề án của Chính phủ Việt Nam với mục tiêu xây

dựng một hệ tri thức tổng hợp trong mọi lĩnh vực, góp phần thúc đẩy, tạo điều kiện để

mọi người dân học tập suốt đời, làm chủ tri thức, tăng cường nghiên cứu sáng tạo, ứng

dụng tiến bộ khoa học công nghệ, thúc đẩy phát triển đất nước. Đề án được xây dựng và

cập nhật theo hình thức xã hội hóa, thu hút và khuyến khích mọi người dân và doanh

nghiệp tham gia, với vai trò vừa khai thác vừa đóng góp để làm giàu các tài nguyên tri

thức số hóa của Việt Nam. Góp phần khơi dậy, lan toả niềm đam mê khoa học và công

nghệ, khát vọng sáng tạo, cống hiến của mọi người trong việc tạo lập và phổ biến tri thức.

Đề án hướng tới phổ cập thông tin khoa học và công nghệ cho mọi tầng lớp người dân

trong xã hội, nhất là các vùng nông thôn, vùng sâu, vùng xa; học sinh, sinh viên, người

lao động.

Một trong những nội dung quan trọng của Đề án là Xây dựng nền tảng Bản đồ số

Việt Nam do Đại học Quốc gia Hà Nội chủ trì. Bản đồ số Việt Nam sẽ là nền tảng cơ bản

để trên đó các nhà phát triển xây dựng các ứng dụng dân sinh phục vụ các nhu cầu khác

nhau của cộng đồng như tìm kiếm vị trí, địa điểm, địa chỉ, du lịch, văn hóa, giáo dục, y

tế,… Một trong những dịch vụ được sử dụng nhiều nhất và cũng là quan trọng nhất của

VMap là dịch vụ tìm đường. Người dùng thường muốn tìm đường đi có khoảng thời gian

di chuyển ngắn nhất thay vì tìm đường đi ngắn nhất. Đây là xu thế chung của tất cả các

dịch vụ chỉ đường hiện có trên thị trường như Google Map, Bing Map, Here Map,

TomTom,… Việc ước lượng thời gian di chuyển của người dùng của VMap đang rất

không chính xác nên chưa thế áp dụng để tìm đường đi ngắn nhất theo thời gian. Tuy

nhiên, do thiếu dữ liệu tín hiệu giao thông và chưa có dữ liệu lưu lượng giao thông thực

tế để xây dựng thuật toán, kết quả đầu ra của dịch vụ tìm đường đang cho ra ước lượng

thời gian di chuyển rất không chính xác.

Luận văn này tập trung vào việc Phát triển thuật toán tìm đường đi nhanh nhất theo

thời gian cho Nền tảng cung cấp dịch vụ địa chỉ Việt Nam VMap bằng cách sử dụng dữ

liệu lưu lượng giao thông từ ảnh Google Traffic Tiles với các mục tiêu cụ thể sau:

- Xây dựng công cụ thu thập bộ dữ liệu Google Traffic Tiles

- Xây dựng thuật toán tìm đường đi nhanh nhất theo thời gian cho Nền tảng

cung cấp dịch vụ địa chỉ Việt Nam VMap

9

- Triển khai thuật toán cho Nền tảng cung cấp dịch vụ địa chỉ Việt Nam VMap

và đánh giá hiệu quả sử dụng

Nội dung trình bày của luận văn gồm các phần sau:

- Chương 1: Giới thiệu chung. Giới thiệu khái quát về Nền tảng dữ liệu Bản đồ số Việt Nam, cũng như các vấn đề còn tồn đọng trong hệ thống chỉ đường,

dẫn của VMap.

- Chương 2: Các nghiên cứu và công nghệ liên quan. Giới thiệu về các kiến

thức, công cụ liên quan đến khóa luận.

- Chương 3: Đề xuất phương pháp. Nghiên cứu, phát triển quy trình tìm

đường đi ngắn nhất theo thời gian.

- Chương 4: Triển khai thực nghiệm và đánh giá. Tiến hành triển khai quy

trình và đánh giá kết quả thu được.

- Chương 5: Kết luận và định hướng. Tổng kết lại các nội dung đã trình bày trong chương trước, kết quả đã được và định hướng phát triển tiếp theo.

10

CHƯƠNG 1. GIỚI THIỆU CHUNG

1.1 Giới thiệu chung về VMap và chức năng chỉ đường của VMap.

1.1.1 Giới thiệu VMap

VMap[2] - Nền tảng dữ liệu Bản đồ số Việt Nam được ra mắt vào ngày 01/10/2019.

Hiện VMap có hơn 23,4 triệu dữ liệu địa chỉ trên cả nước. Bên cạnh các tính năng cơ bản

như: tìm kiếm địa chỉ, tìm đường, VMap sẽ đi theo một hướng đi khác biệt, đó là hiển thị

lớp bản đồ riêng của các lĩnh vực trong cuộc sống và hiển thị địa chỉ chi tiết tới từng số

nhà, dù ở thành thị hay miền núi, vùng sâu, vùng xa. Để thu thập dữ liệu bản đồ, trong

hơn 3 tháng, hơn 120.000 nhân viên Bưu điện và đoàn viên, thanh niên trên cả nước đã

tích cực tới từng khu phố, thôn bản để thu thập thông tin. Các dữ liệu gồm địa chỉ chi tiết

của địa điểm (số nhà, đường phố, hẻm, xóm…) và ghi chú về loại đối tượng (nhà hàng,

nhà dân, ngân hàng, chợ,…) đều được ghi lại[1]. Ngoài ra còn có một lượng dữ liệu rất

lớn được đóng góp bởi người dùng thông qua nền tảng OpenStressMap và ứng dụng

VMap Contributor. Sau khi xác nhận thông tin chuẩn, dữ liệu sẽ được tích hợp và đưa

lên bản đồ số VMap.

Một trong những lớp dữ liệu quan trọng của nền tảng bản đồ số VMap là lớp dữ

liệu đường. Dữ liệu đường của VMap được lưu trữ theo phương pháp tổ chức dữ liệu của

OpenStreetMap [3] gồm 4 thành phần chính là tag, node, way, relation cụ thể như sau:

Tag: Tag có cấu trúc gồm khóa (key) và giá trị (value) thể hiện đặc điểm của các

đôi tượng. Không có giới hạn về hình dạng của tag, vì vậy chúng có thể được sử dụng để

đại diện cho bất kỳ thông tin gì. Việc sử dụng thành phần này là hoàn toàn dễ dàng khi

không có bất kỳ quy định nào cho khóa và giá trị [4].

Node: Một node là thể hiện của một vị trí trong thế giới thực đến bản đồ số. Nó được xác định bởi một vĩ độ và một kinh độ kèm một định danh duy nhất. Các nút là các thực thể duy nhất có nghĩa là lưu trữ các vị trí địa lý, do đó nó được sử dụng để xây dựng nên các yếu tố khác như way hay relation. Đặc điểm của các node có thể được thể hiện bằng các tag của nó. Như là biển báo, đèn tín hiệu, các địa điểm công cộng như trạm xăng, nhà hàng,... [4]

Way: Một way kết nối giữa các node gần nhau để biểu diễn một cấu trúc đơn giản.

Một way có thể có cấu trúc mở hoặc khép kín . Một way khép kín là way có node đầu

11

tiên cũng là node cuối cùng trên way đó. Một way khép kín có thể là một khu vực được

xác định phần lãnh thổ là phần bên trong của way khép kín. Một way mở là một way

được mô tả tuyến tính không chia sẻ node đầu tiên và node cuối cùng thường để biểu thị những con đường bộ, sông suối hoặc đường sắt. [4]

Relation: Một relation được sử dụng để xác định mối quan hệ giữa các node, way

và các relation khác. Một thành viên của một mối quan hệ có thể tùy ý có một vai trò mô

tả phần mà một tính năng cụ thể đóng trong một mối quan hệ. [4]

1.1.2 Chức năng chỉ đường của VMap

Một trong những tính năng quan trọng nhất của VMap đó là chức năng chỉ đường.

Đầu vào của hệ thống là tọa độ điểm đầu, điểm đích và phương tiện di chuyển. Hệ thống

sẽ đưa ra kết quả là tuyến đường tối ưu theo tiêu chí khoảng cách di chuyển ngắn nhất

hoặc thời gian di chuyển nhanh nhất. Ví dụ về giao diện của chức năng tìm kiếm trên

VMap được thể hiện trong Hình 1.1.

Hình 1.1. Ví dụ chức năng chỉ đường của VMap

1.2 Vấn đề gặp phải với chức năng chỉ đường của VMap

Hiện tại thì chức năng chỉ đường của VMap sử dụng phương pháp tìm đường đi

theo khoảng cách ngắn nhất [5]. Ngoài ra, việc ước lượng thời gian di chuyển của người

dùng trên quãng đường đó gặp hai vấn đề chính là thiết dữ liệu tín hiệu giao thông và

thiếu dữ liệu lưu lượng giao thông. Đây là những yếu tố quan trọng quyết định tới thời

gian di chuyển của người dùng. Người dùng thường muốn tìm đường đi có khoảng thời

gian di chuyển ngắn nhất thay vì tìm đường đi ngắn nhất. Đây là xu thế chung của tất cả

các dịch vụ chỉ đường hiện có trên thị trường như Google Map, Bing Map, Here Map,

12

TomTom,… Việc ước lượng thời gian di chuyển của người dùng của VMap đang rất

không chính xác nên chưa thế áp dụng để tìm đường đi ngắn nhất theo thời gian.

1.2.1 Vấn đề gặp phải do thiếu dữ liệu tín hiệu giao thông

Cùng với người điều khiển giao thông (Cảnh sát giao thông) thì tín hiệu giao thông

đường bộ Việt Nam đứng vị trí rất quan trọng, không quá khi ta nói rằng chúng là cần

nhất, không thể thiếu để duy trì trật tự, an toàn giao thông, giúp xe và phương tiện, người tham giao thông được lưu hành.

Tín hiệu giao thông bao gồm:

• Đèn tín hiệu điều khiển giao thông đặt ở các ngã ba, ngã tư đường phố đông đúc, phức tạp là dùng để báo hiệu, điều khiển sự đi lại của các loại xe cộ người đi đường, nhằm đảm bảo trật tự giao thông, ngăn ngừa tai nạn, làm

cho sự giao lưu trong thành thị được dễ dàng, thuận lợi [6].

• Còn về biển báo hiệu đường bộ được chia thành 5 nhóm cơ bản sau đây: biển báo cấm; biển hiệu lệnh; biển báo nguy hiểm và cảnh báo; biển chỉ

dẫn; biển phụ, biển viết bằng chữ [6]. Biển báo hiệu giao thông cung cấp

chính xác quy định về giao thông đường bộ cho người tham gia giao thông.

Dữ liệu tín hiệu giao thông khu vực Dịch Vọng Hậu, Cầu Giấy, Hà Nội:

● Dữ liệu của VMap: ~ 95 bản ghi

● Dữ liệu thực tế: ~ 200 bản ghi

Với một lượng dữ liệu lớn và địa chỉ chi tiết tới từng ngõ, ngách như vậy thì VMap

cũng phải có một hệ thống dẫn đường, chỉ đường đúng, nhanh và phù hợp với giao thông

tại Việt Nam. Cùng với phản hồi từ người dùng cho thấy chức năng tìm đường của VMap

vẫn chưa có độ chính xác cao. Đặc biệt là thiếu chính xác trong việc tìm đường dựa trên

thông tin giao thông.

Hiện tại, cách thi hành hiệu lực của biển báo lên mạng lưới đường của VMap vẫn đang thực hiện hoàn toàn thủ công. Do vậy, cần nhiều nhân lực, công sức để thi hành hiệu lực của biển báo. Với loại dữ liệu phức tạp đó, việc thu thập không hề dễ dàng vì các địa điểm về thông tin tín hiệu giao thông dễ dàng bị thay đổi, số lượng lại rất lớn.

13

Hình 1.2. Ví dụ về việc quản lý, chỉnh sửa biển báo hiệu giao thông trên VMap

Cùng với đó có thể thấy dữ liệu về tín hiệu giao thông trên VMap còn thiếu nên

chức năng tìm đường tối ưu thời gian theo tín hiệu giao thông hoạt động chưa có độ chính

xác cao. Hình 1.3 có thể thấy rằng quãng đường đi qua khá nhiều đèn tín hiệu giao thông

gây chậm trễ, tốn thời gian di chuyển của người dùng.

Hình 1.3. Vấn đề gặp phải với chức năng tìm đường của VMap

(Vùng khoanh đỏ là địa điểm thiếu hoặc không có dữ liệu về đèn tín hiệu giao

thông)

14

Vấn đề này đã được đề xuất giải quyết trong khóa luận Nghiên cứu, phát triển

phương pháp tìm đường đi giữa 2 địa điểm tối ưu theo thời gian dựa trên tín hiệu giao

thông cho VMap, sinh viên Bùi Quang Huy, K61 – trường Đại học Công nghệ, ĐHQGHN giải quyết.

1.2.2 Vấn đề gặp phải do thiếu dữ liệu lưu lượng giao thông

Phương thức hoạt động của hệ thống chỉ đường VMap [7]: Dữ liệu đường của

VMap được chuyển đổi thành đồ thị có đỉnh là các node giao nhau giữa các way, các tag

như loại đường, giới hạn tốc độ. được sử dụng để tính tốc độ di chuyển. Mỗi một loại

phương tiện sẽ có một đồ thị riêng với mục đích thể hiện đặc trưng của từng phương tiện

về thời gian di chuyển. Một khi đồ thị được thiết lập với tất cả dữ liệu, việc tìm kiếm

tuyến đường giữa 2 điểm chủ yếu là vấn đề chọn 2 đỉnh trên đồ thị, sau đó chạy thuật

toán Dijkstra để tìm tuyến đường có thời gian ngắn nhất.

Đỉnh của đồ thị: Các đỉnh của đồ thị biểu thị một hướng cụ thể của way. Mỗi node

là giao điểm của các way có thể có trọng số tính theo giây cho thời gian di chuyển qua

way đó.

Cạnh của đồ thị: Cạnh của đồ thị kết nối các đỉnh của đồ thị, tốc độ di chuyển trên

cạnh được tính theo các thẻ thông tin (tag) như loại đường, giới hạn tốc độ di chuyển,..

Trọng số thời gian di chuyển trên cạnh theo giây sẽ được tính bằng tốc độ di chuyển và

độ dài cạnh. Trong quá trình định tuyến, một số cạnh đơn giản (nối 2 đỉnh không phải

giao điểm) được lược bỏ để tăng tốc độ xử lý. Hình 1.4 cho thấy các bước đưa dữ liệu

đường VMap trở thành đồ thị định tuyến:

15

Hình 1.4. Tối ưu đồ thị định tuyến của chức năng chỉ đường VMap [6]

Vấn đề đặt ra: chức năng chỉ đường của VMap đưa ra kết quả dựa trên tốc độ di

chuyển được đặt mặc định theo loại đường, giới hạn tốc độ,.. dẫn đến kết quả tuyến đường

tối ưu theo thời gian giữa 2 địa điểm cố định là như nhau trong mọi khoảng thời gian.

Điều này chưa chính xác so với thực tế khi tốc độ di chuyển ảnh bị ảnh hưởng bởi rất

nhiều yếu tố như thời tiết, mật độ giao thông,.. và thay đổi liên tục. Như vậy, chức năng

chỉ đường của VMap chưa có một phương pháp ước tính thời gian di chuyển phù hợp so

với thực tế.

Vấn đề này đã được đề xuất giải quyết trong khóa luận Nghiên cứu, phát triển công cụ ước tính tốc độ di chuyển trong thực tế dựa trên dữ liệu giao thông cho VMap,

16

sinh viên Phùng Quang Minh, K61 – trường Đại học Công nghệ, ĐHQGHN giải quyết.

Trong khóa luận này, Phùng Quang Minh đã đề xuất xây dựng một hệ thống thu thập dữ

liệu giao thông của người dùng để cải thiện thuật toán tìm đường cho Nền tảng VMap.

Tuy nhiên, để có dữ liệu thực tế có thể sử dụng được, chúng ta cần rất nhiều người

dùng. Mà muốn có thêm người sử dụng, chúng ta cần có dịch vụ tìm đường cung cấp kết

quả chính xác hơn. Vì vậy, để giải quyết vấn đề này, trong luận văn này, em sẽ trình bày

phương pháp xây dựng thuật toán ước lượng thời gian di chuyển thực tế sử dụng Google Traffic Tiles, từ đó đưa kết quả tìm đường cho người dùng theo thời gian ngắn nhất.

.

17

CHƯƠNG 2. CÁC NGHIÊN CỨU, CÔNG NGHỆ LIÊN QUAN

2.1 Một số phương pháp tính toán tốc độ di chuyển thực tế.

2.1.1 Thu thập thông tin chia sẻ từ người dùng

Phương pháp này dựa trên việc thu thập dữ liệu từ trải nghiệm thực tế của người

dùng. Nó thường yêu cầu người dùng điền vào một mẫu với những thông tin cố định như

vị trí, thời gian, phương tiện di chuyển, tốc độ hiện tại,...Dữ liệu sau khi tổng hợp sẽ được

chia sẻ lại cho người dùng.

Ưu điểm: chi phí triển khai thấp, không bị ảnh hưởng bởi các yếu tố bên ngoài như

thời tiết, mật độ giao thông,..

Nhược điểm: Lượng dữ liệu thu thập được có độ bao phủ kém, không được kiểm

soát do người dùng là nguồn cung cấp dữ liệu duy nhất.

Phương pháp này thường được sử dụng như một kênh phụ để bổ sung thông tin

trong trường hợp thiếu sót, sai lệch của những phương pháp khác.

2.1.2 Tính toán dựa trên công nghệ đo trực tiếp

Một cách tổng quan, công nghệ đo trực tiếp [8] đề cập đến dữ liệu giao thông được

đo bằng các thiết bị được đặt trực tiếp dọc các tuyến đường. Công nghệ đo trực tiếp được

chia thành hai loại: đo xâm nhập và đo không xâm nhập:

Phương pháp đo xâm nhập. Các phương pháp đo xâm nhập về cơ bản bao gồm

một máy ghi dữ liệu và một cảm biến đặt trên lề hoặc mặt đường. Phương pháp này đã

được sử dụng và kiểm chứng về độ chính xác trong nhiều năm. Những công nghệ cốt lõi

của phương pháp được mô tả ngắn gọn sau đây:

• Cảm biến khí nén: ống cao su được đặt trên các làn đường để phát hiện

phương tiện từ thay đổi áp suất được tạo ra khi lốp xe đi qua ống. Xung của

không khí được tạo ra được ghi lại và xử lý bởi một bộ đếm nằm ở bên

đường. Hạn chế chính của công nghệ này là nó có phạm vi bao phủ dữ liệu

hạn chế và hiệu quả của nó phụ thuộc vào điều kiện thời tiết, nhiệt độ và tình

trạng giao thông. Hệ thống này cũng có thể không hiệu quả trong tình trạng

phương tiện di chuyển với tốc độ thấp.

18

• Cảm biến áp điện: các cảm biến được đặt trong một rãnh dọc theo bề mặt

đường của các làn đường. Nguyên tắc là chuyển đổi năng lượng cơ học thành

năng lượng điện. Thật vậy, biến dạng cơ học của vật liệu áp điện làm thay

đổi mật độ điện tích bề mặt của vật liệu để và sự khác biệt sẽ xuất hiện giữa

các điện cực. Biên độ và tần số của tín hiệu tỷ lệ thuận với mức độ biến dạng.

Hệ thống này có thể được sử dụng để đo trọng lượng và tốc độ.

• Vòng từ: Đây là công nghệ thông thường nhất được sử dụng để thu thập dữ

liệu giao thông. Các vòng được đặt trong các con đường theo hình vuông tạo

ra từ trường. Thông tin sau đó được truyền đến một thiết bị đếm được đặt

bên đường. Vòng đời sử dụng của thiết bị này thường ngắn vì nó có thể bị

hư hại bởi xe hạng nặng, nhưng không bị ảnh hưởng bởi điều kiện thời tiết

xấu. Công nghệ này đã được triển khai rộng rãi ở châu Âu (và các nơi khác)

trong một vài thập kỷ qua. Tuy nhiên, chi phí thực hiện và bảo trì của phương

pháp này tương đối lớn.

Phương pháp đo không xâm nhập: Các kỹ thuật không xâm nhập được dựa trên

các quan sát từ xa. Ngay cả khi đếm thủ công là phương pháp được sử dụng nhiều nhất,

các công nghệ mới đã xuất hiện gần đây có vẻ rất hứa hẹn:

• Đếm thủ công: đây là phương pháp truyền thống nhất. Trong trường hợp

này, các các thiết bị đo được vận hành một cách thủ công bởi con người và

không thể có được một cách hiệu quả bởi kết quả đạt được của phương pháp

chỉ là một con số, ví dụ: mật độ giao thông, phân loại xe. Các thiết bị phổ

biến nhất được sử dụng là hệ thống bảng đếm cơ học và hệ thống bảng đếm

điện tử.

• Năng lượng hồng ngoại: sự hiện diện, tốc độ và loại phương tiện được phát

hiện dựa trên năng lượng hồng ngoại tỏa ra từ khu vực phát hiện. Hạn chế

chính là hiệu suất trong thời tiết xấu và phạm vi bao phủ dữ liệu.

• Từ tính thụ động: cảm biến từ được cố định dưới hoặc trên mặt đường. Nó

đếm số lượng xe, loại và tốc độ. Tuy nhiên, trong điều kiện vận hành, các

cảm biến gặp khó khăn trong việc phân biệt giữa các phương tiện có khoảng

cách gần nhau.

19

• Radar vi sóng: công nghệ này có thể phát hiện các phương tiện di chuyển

và tốc độ. Nó ghi lại dữ liệu đếm, tốc độ và phân loại xe đơn giản và không

bị ảnh hưởng bởi điều kiện thời tiết.

• Siêu âm: các thiết bị này phát ra sóng âm thanh để phát hiện các phương tiện

bằng cách đo thời gian để tín hiệu quay trở lại thiết bị. Các cảm biến siêu âm

được đặt trên làn đường và có thể bị ảnh hưởng bởi nhiệt độ hoặc thời tiết

xấu. Các thiết bị âm thanh thụ động được đặt dọc theo đường và có thể thu

thập số lượng xe, tốc độ và dữ liệu phân loại. Chúng cũng có thể bị ảnh

hưởng bởi các điều kiện thời tiết xấu (ví dụ: nhiệt độ thấp, tuyết).

• Phát hiện hình ảnh video: máy quay video ghi lại số xe, loại và tốc độ bằng

các kỹ thuật xử lý video khác nhau. Hệ thống có thể nhạy cảm với điều kiện

khí tượng.

2.1.3 Tính toán từ dữ liệu vị trí của phương tiện

Nguyên tắc của phương pháp tính toán từ dữ liệu vị trí của phương tiện là thu thập

dữ liệu giao thông bằng cách định vị phương tiện qua điện thoại di động hoặc GPS trên

toàn bộ mạng lưới đường bộ. Điều này về cơ bản có nghĩa là mọi chiếc xe đều được trang

bị điện thoại di động hoặc GPS hoạt động như một bộ cảm biến cho mạng lưới đường

bộ. Dữ liệu như vị trí xe, tốc độ và hướng di chuyển được gửi ẩn danh đến một trung tâm

xử lý trung tâm. Sau khi được thu thập và trích xuất, thông tin hữu ích (ví dụ: trạng thái

giao thông,tốc độ di chuyển, tuyến đường thay thế) có thể được phân phối lại cho các tài

xế trên đường.

Độ tin cậy của dữ liệu thu thập được từ phương pháp này thường gây ra nhiều nghi

vấn đối với số lượng mẫu nhỏ nhưng được tăng lên đáng kể đối với lượng mẫu lớn thu

thập được. Cách thức tính toán dựa trên dữ liệu vị trí cũng tương đối đơn giản khi thời

gian và đoạn đường di chuyển của từng phương tiện được thể hiện một cách rõ ràng.

Kết luận: Mục 2.1 đã giới thiệu và chỉ ra những ưu, nhược điểm của các phương

pháp đang được sử dụng phổ biến để tính toán tốc độ di chuyển trong thực thế. Trong khi

phương pháp thu thập thông tin chia sẻ từ người dung thường đem lại lượng dữ liệu tương

đối hạn chế, chưa đáp ứng được yêu cầu của VMap; các phương pháp đo trực tiếp yêu

cầu chi phí quá lớn về thiết bị, bảo trì, nhân sự và độ bao phủ của dữ liệu cũng gói gọn

trong một khu vực, để triển khai phương pháp này cho toàn bộ lãnh thổ Việt Nam cần

20

một lượng tài nguyên vô cùng lớn; trong khi đó, phương pháp tính toán từ dữ liệu vị trí

của phương tiện lại tỏ ra có những ưu điểm vượt trội như chi phí triển khai thấp (trong

trường hợp cụ thể là áp dụng cho VMap, dữ liệu vị trí có thể thu thập được trên chức

năng chỉ đường sẵn có), độ bao phủ dữ liệu tốt. Tuy độ tin cậy của dữ liệu thu thập được

từ phương pháp tính toán từ dữ liệu vị trí của phương tiện không được đảm bảo với lượng

dữ liệu thu được từ chức năng chỉ đường của VMap hiên tại nhưng điều này hoàn toàn

có thể cải thiện trong tương lai khi lượng người dung của VMap tăng lên.

2.2. Giới thiệu tổ chức Open Geospatial Consortium (OGC) và chuẩn Web Map Tile Service (WMTS)

2.2.1 Giới thiệu tổ chức Open Geospatial Consortium (OGC)

Tổ chức địa không gian (OGC) là tổ chức quốc tế chuyên đề ra các chuẩn trong lĩnh

vực hệ thống thông tin địa lý, với sự tham gia của trên 521 công ty, tổ chức chính phủ,

trường đại học và các viện nghiên cứu trên thế giới. Các thành viên sẽ tham gia vào quá

trình thống nhất các chuẩn mở toàn cầu cho các thông tin liên quan đến không gian địa

lý và các dịch vụ liên quan. Các chuẩn của OGC hỗ trợ các giải pháp về việc tương thích

các dịch vụ Web, không dây dựa trên vị trí và công nghệ thông tin chủ đạo. Các chuẩn

cho phép các nhà phát triển công nghệ tạo ra các thông tin và dịch vụ không gian phức

tạp có thể truy cập và hữu ích với tất cả các loại ứng dụng [9].

2.2.2 Giới thiệu chuẩn Web Map Tile Service (WMTS)

OGC đã tham gia vào việc phát triển các tiêu chuẩn cho lập bản đồ số sau khi một

bài báo được xuất bản năm 1997 bởi Allan Doyle, phác thảo một "WWW Mapping Bộ

thư viện" [10]. Tiêu chuẩn lâu đời nhất và phổ biến nhất để lập bản đồ số là WMS. Chuẩn

WMS hướng tới sự linh hoạt khi cho phép người dùng tùy biến chính xác ảnh bản đồ như

họ mong muốn. Tuy nhiên, WMS không phù hợp với các hệ thống đòi hỏi phản hồi nhanh

và nhiều. Đối với hầu hết các dịch vụ WMS, một yêu cầu sẽ cần vài giây để máy chủ có

thể tạo ra phản hồi. Đối với các hệ thống lớn, yêu cầu sự phản hồi nhanh thì đây là khó

khăn. Để khắc phục sự cố kết xuất trực tiếp đòi hỏi nhiều tài nguyên tính toán, các nhà

phát triển ứng dụng đã bắt đầu sử dụng các ô bản đồ được kết xuất trước. WMTS chia

bản đồ ra làm các mảnh (tile) tùy thuộc vào độ thu phóng theo chuẩn OGC Two

Dimensional Tile Matrix Set. Các mảnh bản đồ này sẽ được kết xuất trước để có thể ngay

lập tức gửi lại phản hồi khi có yêu cầu. Hiện nay, các dịch vụ bản đồ lớn đều sử dụng

chuẩn này [11].

21

Hình 2.1. WMTS chia bản đồ ra làm các mảnh

2.3. Giới thiệu về Google Map

Google Map là một dịch vụ bản đồ web được phát triển bởi Google [12]. Nó cung

cấp hình ảnh vệ tinh, chụp ảnh trên không, bản đồ đường phố, chế độ xem toàn cảnh

tương tác 360 ° của đường phố (Chế độ xem phố), điều kiện giao thông thời gian thực và

lập kế hoạch tuyến đường để đi bộ, xe hơi, xe đạp và máy bay (trong phiên bản beta)

hoặc giao thông công cộng. Vào năm 2020, Google Map đã được hơn 1 tỷ người sử dụng

mỗi tháng.

Google Map bắt đầu như một chương trình máy tính để bàn C++ tại Where 2

Technologies [13]. Vào tháng 10 năm 2004, công ty đã được Google mua lại, công ty đã

chuyển đổi nó thành một ứng dụng web. Sau khi mua thêm một công ty trực quan hóa

dữ liệu không gian địa lý và phân tích lưu lượng thời gian thực, Google Map đã được ra

mắt vào tháng 2 năm 2005. Giao diện người dùng của dịch vụ sử dụng JavaScript, XML

và Ajax. Google Map cung cấp API cho phép các bản đồ được nhúng trên các trang web

của bên thứ ba và cung cấp công cụ định vị cho các doanh nghiệp và các tổ chức khác ở

nhiều quốc gia trên thế giới. Google Map Maker cho phép người dùng cộng tác mở rộng

và cập nhật bản đồ của dịch vụ trên toàn thế giới nhưng đã bị ngừng từ tháng 3 năm 2017.

22

Tuy nhiên, các đóng góp của cộng đồng cho Google Map không bị ngừng vì công ty đã

thông báo các tính năng này sẽ được chuyển sang chương trình Google Local Guide.

Google Map, một dịch vụ bản đồ đáng tin cậy cung cấp thông tin vị trí thông qua

hình ảnh vệ tinh. Hiệu quả do công cụ trực tuyến này mang lại không thể phủ nhận vì nó

có khả năng kiểm tra các tuyến đường và cột mốc có thể để có thời gian di chuyển nhanh

hơn.

Google Map phát triển với mục đích thay thế các loại bản đồ giấy. Và nó đã trở

thành một trong những ứng dụng mạnh mẽ và phổ biến nhất hiện nay. Với nhiều tính

năng tiện ích, nên Google Map đã được nhiều người lựa chọn sử dụng để tìm hướng dẫn

chỉ đường. Nắm bắt xu thế đó, nên nhiều doanh nghiệp đã ứng dụng Google Map vào

trong kinh doanh trực tuyến. Phổ biến nhất là tích hợp Google Map vào trong trang mạng

để khách hàng dễ dàng tìm đến địa chỉ mua hàng. Ngoài ra người ta còn ứng dụng vào

việc tối ưu hóa địa điểm doanh nghiệp, nhờ đó làm tăng lượng truy cập đổ về trang mạng

của mình.

2.4. Giới thiệu về Graphhopper

GraphHopper là một thư viện và máy chủ định tuyến mã nguồn mở nhanh phát

triển bằng Java [14]. GraphHopper sử dụng các thuật toán khác nhau như Dijkstra, A *

và Contraction Hierarchies để tìm đường đi ngắn nhất dựa trên dữ liệu của

OpenStreetMap. Do Giấy phép Apache, nó là một giải pháp thay thế thân thiện với doanh

nghiệp cho các công cụ định tuyến hiện có và phần mềm điều hướng. GraphHopper được

phát triển bởi công ty GraphHopper GmbH, Đức, lần đầu được công bố mã nguồn mở

vào tháng 3 năm 2015. Phiên bản mới của GraphHopper là 2.0 được phát hành vào ngày

17/07/2020.

GraphHopper phát triển trên ngôn ngữ Java, sử dụng dữ liệu đường đầu vào là dữ

liệu OSM dưới định dạng .pbf ("Protocolbuffer Binary Format"). Từ dữ liệu đầu vào là

các way của OSM, GraphHopper tiến hành xây dựng một đồ thị và đánh trọng số cho

các cạnh phụ thuộc vào các đầu vào của dữ liệu như khoảng cách, số ngã rẽ, biển báo

giao thông,… GraphHopper cũng đồng thời hỗ trợ dữ liệu độ cao số (DEM - Digital

elevation model) để có thể tính chính xác khoảng cách giữa các vị trí trên bản đồ.

Các API mà GraphHopper cung cấp bao gồm:

23

- Tìm đường đi giữa 2 hoặc nhiều điểm (Routing API)

- Tìm đường đi giữa các ma trận điểm (Matrix API)

- Tìm địa điểm dựa trên tọa độ (Geocoding API)

- Tìm kiếm đường đi dựa trên dữ liệu GPX (Map Matching API)

Hình 2.2. Giao diện trình diễn của GraphHoper

2.5. Giới thiệu về Javascript và NodeJS

2.5.1. Giới thiệu, lịch sử phát triển Javascript

Cùng thời điểm Netscape bắt đầu sử dụng công nghệ Java trên trình duyệt Netscape,

LiveScript đã được đổi tên thành JavaScript để được chú ý hơn bởi ngôn ngữ lập trình

Java lúc đó đang được coi là một hiện tượng [15]. JavaScript được bổ sung vào trình

duyệt Netscape bắt đầu từ phiên bản 2.0b3 của trình duyệt này vào tháng 12 năm 1995.

Trên thực tế, hai ngôn ngữ lập trình Java và JavaScript không có liên quan gì đến nhau,

ngoại trừ việc cú pháp của cả hai ngôn ngữ cùng được phát triển dựa trên cú pháp của C.

JavaScript gồm 2 mảng là client-server thực hiện lệnh trên máy của end-user và web-

server.

Sau thành công của JavaScript, Microsoft bắt đầu phát triển JScript, một ngôn ngữ

có cùng ứng dụng và tương thích với JavaScript. JScript được bổ sung vào trình duyệt

Internet Explorer bắt đầu từ Internet Explorer phiên bản 3.0 được phát hành tháng 8 năm

24

1996. JavaScript là một ngôn ngữ lập trình website, được tích hợp và nhúng trong HTML

giúp website sống động. JavaScript cho phép kiểm soát các hành vi của trang web tốt

hơn so với khi chỉ sử dụng HTML. JavaScript là ngôn ngữ lập trình được hỗ trợ hầu như

trên tất cả các trình duyệt như Firefox, Chrome... thậm trí các trình duyệt trên thiết bị di

động.

2.5.2 Giới thiệu về NodeJS

NodeJS là một nền tảng mã nguồn mở được xây dựng trên nền tảng Javascript V8

Engine của Chrome, được sử dụng để phát triển các ứng dụng Web. NodeJS sử dụng cơ

chế hướng sự kiện , mô hình vào/ra không khóa, điều này làm cho NodeJS gọn nhẹ và

hiệu quả. Các ứng dụng NodeJS được viết bằng Javascript và có thể chạy trên nhiều nền

tảng khác nhau như OS X, Microsoft Windows và Linux. NodeJS cung cấp các thư viện

phong phú ở dạng các mô-đun khác nhau giúp đơn giản hóa việc lập trình và giảm thời

gian ở mức thấp nhất [16].

NodeJS được tạo bởi Ryan Dahl từ năm 2009, và phát triển dưới sự bảo trợ của

Joyent . NodeJS được tạo lần đầu cho hệ điều hành Linux sử dụng. Nó được phát triển

và bảo trì vởi Ryan Dahl và được tài trợ bởi Joyent Trong năm 2011, một bộ phần package

manager đã giới tiệu bộ thư viện cho NodeJS gọi là npm. Tháng 6 năm 2011, Microsoft

hợp tác với Joyent để tạo ra bản cho Windows. Tháng 12, Do xung đột nội bộ nên NodeJS

bị chia rẽ, IO.js được hình thành [16].

Những lý do để sử dụng NodeJS:

• Bất đồng bộ và hướng sự kiện: Tất cả API của các thư viện NodeJS đều bất

đồng bộ. Về cơ bản, nó có nghĩa là một máy chủ NodeJS không bao giờ chờ

một API trả về dữ liệu. Máy chủ sẽ chuyển sang API tiếp theo sau khi gọi

một API và cơ chế thông báo sự kiện của NodeJS giúp máy chủ nhận được

phản hồi từ cuộc gọi API trước đó.

• Rất nhanh: Được xây dựng trên V8 Javascript Engine của Google Chrome,

thư viện NodeJS chạy rất nhanh trong các quá trình thực hiện mã.

• Đơn luồng nhưng khả năng mở rộng cao: NodeJS sử dụng một mô hình

luồng duy nhất với vòng lặp sự kiện. Cơ chế sự kiện giúp máy chủ đáp ứng

một cách bất đồng bộ và làm cho máy chủ có khả năng mở rộng cao so với

các máy chủ kiểu truyền thống tạo các luồng hạn chế để xử lý các yêu cầu.

25

NodeJS sử dụng một chương trình luồng duy nhất và cùng một chương trình

có thể cung cấp dịch vụ cho một số lượng yêu cầu lớn hơn so với các máy

chủ kiểu truyền thống như Apache HTTP Server.

• Không đệm: Các ứng dụng NodeJS không bao giờ đệm dữ liệu.

• Thời gian thực: ở đây chính là xử lý giao tiếp từ máy khách tới máy chủ theo

thời gian thực.

2.6. Giới thiệu về Python và các thư viện, bộ thư viện sử dụng

2.6.1. Giới thiệu về Python

Python là ngôn ngữ lập trình bậc cao, dùng để phát triển website và nhiều ứng

dụng khác nhau. Python được ra bởi Guido van Rossum và được phát triển trong dự án

mã nguồn mở [17]. Python đã được hình thành vào cuối những năm 1980, và việc thực

hiện nó vào tháng 12 năm 1989 bởi Guido van Rossum tại Centrum Wiskunde &

Informatica (CWI) ở Hà Lan như là một kế thừa cho ngôn ngữ ABC (tự lấy cảm hứng từ

SETL) có khả năng xử lý ngoại lệ và giao tiếp với Hệ điều hành Amoeba. Van Rossum

là tác giả chính của Python, và vai trò trung tâm của ông trong việc quyết định hướng

phát triển của Python [17].

Python 2.0 đã được phát hành vào ngày 16 tháng 10 năm 2000 và có nhiều tính

năng mới, bao gồm bộ thu gom rác theo chu kỳ và hỗ trợ Unicode. Với việc phát hành

này quá trình phát triển đã được thay đổi và trở nên minh bạch hơn và cộng đồng hậu

thuẫn. Python 3.0 được phát hành năm 2008, sau một thời gian dài thử nghiệm. Cho tới

năm 2017, Python đang có phiên bản 3.7.

Đặc điểm nổi bật

• Ngữ pháp đơn giản, dễ đọc.

• Vừa hướng thủ tục, vừa hướng đối tượng.

• Hỗ trợ module và hỗ trợ gói (package).

• Xử lý lỗi bằng ngoại lệ (Exception).

• Kiểu dữ liệu động ở mức cao.

• Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập

trình.

26

• Có khả năng tương tác với các module khác viết trên C/C++ (Hoặc Java cho

Jython, hoặc .Net cho IronPython).

2.6.2 Bộ thư viện Scikit-Learn (sklearn)

Dự án này đã được bắt đầu vào năm 2007 như là một dự án Google Summer of

Code của David Cournapeau. Cuối năm đó, Matthieu Brucher bắt đầu thực hiện dự án

này như một phần của luận án của mình.

Năm 2010, Fabian Pedregosa, Gael Varoquaux, Alexandre Gramfort và Vincent

Michel của INRIA đã lãnh đạo dự án và phát hành công khai lần đầu tiên vào ngày 1

tháng 2 năm 2010. Kể từ đó, một số bản phát hành đã xuất hiện sau chu kỳ ~ 3 tháng và

phát triển mạnh cộng đồng quốc tế đã và đang dẫn đầu sự phát triển [18].

Scikit-learn (viết tắt là sklearn) là một thư viện mã nguồn mở trong ngành học máy,

rất mạnh mẽ và thông dụng với cộng đồng Python, được thiết kế trên nền NumPy và

SciPy. Scikit-learn chứa hầu hết các thuật toán học máy hiện đại nhất, đi kèm với tài liệu

chi tiết. Điểm mạnh của thư viện này là nó được sử dụng phổ biến trong học thuật và

công nghiệp, do đó nó luôn được cập nhật và có một cộng đồng người dùng sử dụng lớn

[19].

Hiện nay có nhiều thư viện mã nguồn mở phục vụ cho nghiên cứu học máy. Bên

cạnh Scikit-learn, có 2 thư viện nổi bật khác là:

• LibSVM: Được viết trên C bởi Chih-Chung Chang và Chih-Jen Lin. Như tên gọi

của nó, thư viện này chứa các thuật toán SVM (Support Vector Machine), nhóm

thuật toán mạnh mẽ hỗ trợ cả regression và classification tasks [20].

• TensorFlows: Do các nhà khoa học của viện nghiên cứu Google Brain phát triển.

TensorFlows được viết trên Python và là thư viện mở [21].

Trong khi TensorFlows ở mức độ cấp thấp thì Scikit-learn cho phép ta sử dụng ngay

các thuật toán quan trọng một cách đơn giản và hiệu quả. Nói vậy không có nghĩa Scikit-

learn là một thư viện “nông cạn”, Scikit-learn là nền tảng để xây dựng các thuật toán học

máy khác (Nilearn, Pylearn2…). Scikit-learn còn là một trong những lựa chọn hàng đầu

của các nhà nghiên cứu và các nhà phát triển. Đứng sau Scikit-learn là các viện nghiên

cứu hàng đầu thế giới, gồm có Inria, Télécom Paristech, Paris-Saclay (Pháp), NYU

Moore-Sloan Data Science Environment và Columbia University.

27

2.6.3 Flask

Trong phát triển ứng dụng web, Python có nhiều bộ thư viện hỗ trợ lập trình viên

như Django, Tornado, Pyramid,… Trong đó, Flask là một bộ thư viện nhỏ gọn được viết

bằng Python. “Nhỏ gọn” không có nghĩa là thiếu chức năng mà “nhỏ gọn” theo triết lý

thiết kế là cung cấp một lõi chức năng cần thiết nhất cho ứng dụng web nhưng người

dùng có thể mở rộng bất cứ lúc nào. Flask luôn hỗ trợ các thành phần tiện ích mở rộng

cho ứng dụng như tích hợp cơ sở dữ liệu, xác thực biểu mẫu, xử lý tải lên, các công nghệ

xác thực, mẫu, email, RESTful..., chỉ khác là khi nào bạn muốn thì bạn mới đưa vào thôi

[22]. Người dùng có thể tập trung xây dựng ứng dụng web ngay từ đầu trong một khoảng

thời gian rất ngắn và có thể phát triển quy mô của ứng dụng tùy theo yêu cầu.

Sau khi cài đặt Python, để cài đặt Flask chỉ cần bạn gõ lệnh: pip install Flask Bây

giờ chúng ta thử tạo ứng dụng web với câu chào Hello World!. Thật đơn giản bạn sẽ tạo

một thư mục với tên thư mục là tên ứng dụng, sau đó, tạo một tập tin .py và viết mã. Ví

dụ như: hello.py như Hình 2.3.

Hình 2.3. Ví dụ ứng dụng Hello World trên bộ thư viện Flask

Sau đó chỉ cần run là trang web này sẽ hiển thị trên http://127.0.0.1:5000/

Kết quả như ở Hình 2.4. Như bạn thấy, Flask tập trung vào sự tối giản, cho phép

chúng ta ứng dụng Flask thật sự phù hợp cho việc xây dựng các ứng dụng web có quy

mô vừa và nhỏ, các API và dịch vụ web:

• Xây dựng ứng dụng web rất giống với việc viết các mô-đun Python chuẩn,

cấu trúc gọn gàng và rõ ràng.

28

• Thay vì cung cấp hết tất cả mọi thứ, Flask cung cấp cho người dùng các

thành phần cốt lõi thường được sử dụng nhất của khung ứng dụng web như

định tuyến trang, yêu cầu và phản hồi, các mẫu,...

• Với Flask, việc chọn các thành phần nào cho ứng dụng là việc của chúng ta.

Điều này thật tuyệt, vì mỗi ứng dụng web có những đặc điểm và tính năng

riêng, nó không phần phải chứa các thành phần mà nó không dùng.

• Flask có kiến trúc nhỏ gọn nên bạn hoàn toàn không bị bó buộc bởi bộ khung

cồng kềnh, không gặp bất cứ khó khăn nào khi cấu hình hay tổ chức ứng

dụng. Không những thế, Flask còn có các ưu điểm nổi bật như: cực kỳ linh

hoạt, tối giản, dễ tìm hiểu và sử dụng, định tuyến dễ dàng, rất dễ mở rộng.

Vì vậy, công việc chính của bạn là chỉ cần xác định ý tưởng, mục tiêu, tập

trung vào việc xây dựng ứng dụng web mà thôi.

• Flask cung cấp rất nhiều tài liệu từ cài đặt đến thực hiện và triển khai, từ

hướng dẫn nhanh đến hướng dẫn chi tiết. Bạn có thể dễ dàng tìm kiếm, tham

khảo, học tập về lập trình ứng dụng web với Flask bộ thư viện miễn phí trên

Internet.

• Cộng đồng Flask khá lớn. Bạn có thể dễ dàng, nhanh chóng tìm được giải

pháp từ cộng đồng người sử dụng Flask mỗi khi gặp vấn đề cần giúp đỡ ví

dụ như gặp lỗi, cách cài đặt thư viện, cách triển khai ứng dụng...

Hình 2.4. Ví dụ ứng dụng Hello World trên bộ thư viện Flask

2.7. Giới thiệu RNN

RNN (Recurrent Neural Network – Mạng nơ-ron hồi quy) là một trong những mô

hình học sâu trong công nghệ trí tuệ nhân tạo.Ý tưởng chính của RNN là sử dụng chuỗi

các thông tin. Trong các mạng nơ-ron truyền thống tất cả các đầu vào và cả đầu ra là độc

lập với nhau. Tức là chúng không liên kết thành chuỗi với nhau. Nhưng các mô hình này

không phù hợp trong rất nhiều bài toán. Ví dụ, nếu muốn đoán từ tiếp theo có thể xuất

hiện trong một câu thì ta cũng cần biết các từ trước đó xuất hiện lần lượt thế nào chứ nhỉ?

RNN được gọi là hồi quy bởi lẽ chúng thực hiện cùng một tác vụ cho tất cả các phần tử

29

của một chuỗi với đầu ra phụ thuộc vào cả các phép tính trước đó. Nói cách khác, RNN

có khả năng nhớ các thông tin được tính toán trước đó. Trên lý thuyết, RNN có thể sử

dụng được thông tin của một văn bản rất dài, tuy nhiên thực tế thì nó chỉ có thể nhớ được

một vài bước trước đó mà thôi. Trong lĩnh vực xử lý ngôn ngữ tự nhiên đã ghi nhận được

nhiều thành công của RNN cho nhiều vấn đề khác nhau.

Hình 2.5. Ví dụ về một mạng nơ-ron RNN

30

CHƯƠNG 3. ĐỀ XUẤT PHƯƠNG PHÁP

3.1 Thu thập dữ liệu Google Traffic Tiles

Hiện nay, dữ liệu giao thông được cung cấp bởi một số bên như: INRIX, Here,

TomTom, Waze, Uber,… Tuy nhiên, các dịch vụ này đều phải trả phí với phí dịch vụ

cao, không có khả năng sử dụng trên diện rộng

Google có thu thập dữ liệu của người dùng bằng nhiều phương pháp khác nhau.

Từ đó, Google đã công khai một bộ dữ liệu Google Traffic Tiles là dịch vụ theo chuẩn

WMTS của OGC thể hiện dữ liệu giao thông trực tiếp trên đường. Đường dẫn của Google

Traffic Tiles: https://mt1.google.com/vt/lyrs=transit,traffic&x={x}&y={y}&z={z}.

Chi tiết thông số về Google Traffic Tiles được trình bày ở Bảng 3.1.

Bảng 3.1. Thông số chi tiết Google Traffic Tiles

Tên Google Traffic Tiles

Địa chỉ Server mt1.google.com

/vt/lyrs=transit,traffic&x={x}&y={y}&z={z} Đường dẫn

Kích thước 256

Độ zoom lớn nhất 1

Độ zoom nhỏ nhất 18

Kích thước ảnh 256x256

31

Hình 3.1. Dữ liệu giao thông của Google hiển thị trên nền tảng dữ liệu VMap

Do dữ liệu giao thông thay đổi liên tục, Google Traffic thay đổi sau mỗi năm phút,

để tăng tốc thuật toán, chúng ta cần tải về bộ dữ liệu Google Traffic Tiles. Do số lượng

ảnh cả Việt Nam và Hà Nội là rất lớn, trong luận văn này tôi tiến hành thử nghiệm tại

12 quận bao gồm:

Ba Đình, Cầu Giấy, Đống Đa, Hà Đông, Hai Bà Trưng, Hoàn Kiếm, Hoàng Mai, Long

Biên, Bắc Từ Liêm, Nam Từ Liêm, Tây Hồ, Thanh Xuân.

Xây dựng một công cụ để tải về Google Traffic Tiles:

- Ngôn ngữ sử dụng: NodeJS

- Thư viện: request, polygon-lookup

- Thu thập tại 12 quận tại Hà Nội

- Độ zoom: 18 (Đây là độ zoom lớn nhất của bộ dữ liệu Google Traffic Tiles mà

Google cung cấp)

Từ khung nhìn chọn trước được miêu tả trong Bảng 3.2, công cụ sẽ tính toán ra

các thông số Xmax, Ymax, Xmin, Ymin (là tọa độ lớn nhất và nhỏ nhất của các mảnh bản đồ

cần tải về) tại độ Zoom 18 để tính toán tất cả các tile ảnh cần tải về. Sử dụng vòng lặp và

hàm PolygonLookup cửa thư viện polygon-lookup để lần lượt kiểm tra xem tọa độ các

Tile có thuộc 1 trong 12 quận thử nghiệm hay không, nếu có sẽ tải về tương ứng dữ liệu

32

ảnh đó bằng cách sử dụng thư viện request và lưu trữ dưới dạng cây thư mục {Độ

Zoom}/{X}/{Y}.png. Dữ liệu ranh giới hành chính được sử dụng ở đây là dữ liệu hành

chính 1:50.000 của Bộ Tài nguyên và Môi trường dưới định dạng GeoJSON.

Hình 3.2. Dữ liệu ranh giới hành chính

Bảng 3.2. Thông tin thử nghiệm tải về dữ liệu

Góc Bắc (vĩ độ) Góc Tây (kinh độ) Góc Nam (vĩ độ) Góc Đông (kinh độ)

21.379 105.281 20.554 106.027

Công thức tính X từ kinh độ:

𝑌 = 𝑙𝑜𝑛 + 180 360 ∗ 2𝑧𝑜𝑜𝑚

Công thức tính Y từ vĩ độ:

1 1 − log(tan ( ) + ) 𝑙𝑎𝑡 ∗ 𝜋 180 cos( )

𝑙𝑎𝑡 ∗ 𝜋 180 𝜋 𝑋 = 2 ∗ 2𝑧𝑜𝑜𝑚

Công thức tính kinh độ từ X:

𝑙𝑜𝑛 = 𝑥 2𝑧𝑜𝑜𝑚 ∗ 360 − 180

33

Công thức tính vĩ độ từ Y:

𝑙𝑎𝑡 = 180 𝜋 ∗ arctan(0.5 ∗ (exp(𝑛) − exp (−𝑛)))

- Trong đó n được tính theo công thức sau:

𝑛 = 𝜋 − 2 ∗ 𝜋 ∗ 𝑌 ∗ 𝑧𝑜𝑜𝑚 2𝑧𝑜𝑜𝑚

Kết quả chạy thử nghiệm:

- Tổng số tile: 15.128 tile

- Thời gian trung bình tải về: 133,46 giây

Hình 3.3. Một phần dữ liệu thu thập được

3.2 Xây dựng thuật toán tìm đường đi nhanh nhất theo thời gian

3.2.1 Đề xuất phương pháp tìm đường

Phương pháp mới được thể hiện trong Hình 3.4. Khi người dùng gửi yêu cầu đến

dịch vụ tìm đường mới, thông tin tọa độ của điểm đi và điểm đến sẽ được truyền đền

34

Thuật toán tìm đường đi nhanh nhất sẽ được trình bày ở phần sau của luận văn. Thuật

toán sẽ sử dụng dịch vụ tìm đường hiện tại của VMap (ở đây là GraphHopper) và bổ

sung thuật toán tìm đường đi nhanh nhất để đưa ra kết quả là đường đi nhanh nhất kèm

thời gian ước lượng thực tế cho người dùng.

Hình 3.4. Kiến trúc hệ thống tìm đường mới

Xây dựng API dẫn đường mới cho VMap:

- Ngôn ngữ sử dụng: python

- Thư viện: flask, json, requests, polyline, pickle, sklearn

API dẫn đường mới sẽ có đường dẫn và cấu trúc truy vấn tương tự với dịch vụ

hiện có của VMap. Các trường cụ thể được thể hiện ở Bảng 3.3. API khi có yêu cầu gửi

lên sẽ sử dụng thư viện request để lấy kết quả chỉ đường từ dịch vụ chỉ đường hiện có

của VMap. Dữ liệu đường đi của kết quả chỉ đường này sẽ được truyền vào mô hình sẽ

được trình bày bên dưới, đã được lưu lại bằng cách sử dụng thư viện pickle, để tính toán

lại ước lượng thời gian di chuyển. Để thay đổi giá trị ước lượng thời gian di chuyển của

kết quả trả về, ta cần quan tâm tới 2 thông số là points_encoded và instructions. Nếu

người dùng sử dụng thông số points_encoded=”true”, API sẽ sử dụng thư viện polyline

để giải mã dữ liệu đường đi đã được mã hóa, truyền dữ liệu đường đi vào mô hình. Nếu

người dùng sử dụng thông số instructions=”true”, thì thay vì ước lượng thời gian di

chuyển bằng cách truyền cả đường đi vào mô hình, ta sẽ phải ước lượng thời gian di

chuyển của từng bước trong chỉ dẫn. Sau đó thời gian di chuyển trên cả tuyến đường sẽ

bằng tổng thời gian di chuyển của các bước này. Cuối cùng ta sẽ trả lại kết quả là kết quả

35

tìm đường của dịch vụ chỉ đường VMap và thêm một thông số time_in_traffic tương ứng

với mỗi thông số time của kết quả.

Kết quả trả về dưới dạng JSON, có cấu trúc như ở Bảng 3.4.

Bảng 3.3. Các thông số truy vấn có thể gửi lên

Thông số Miêu tả

point (bắt buộc) Điểm đầu và điểm cuối mà người dung muốn tìm

đường. Định dạng [vĩ độ, kinh độ]

Phương tiện muốn tìm đường. Bao gồm: “car” (oto), vehicle

“motobike” (xe máy), “bike” (xe đạp) và “foot” (đi bộ)

Mặc định: “vn” locale

Ngôn ngữ hướng dẫn trong kết quả trả về. Ví dụ: “en”

ho tiếng Anh hoặc “de” cho tiếng Đức

elevation Mặc định: “false”

Nếu là “true”, thuật toán sẽ ước tính chiều dài của

quãng đường bằng cách sử dụng thêm mô hình độ cao

số.

details Tham số tùy chọn để truy xuất chi tiết đường dẫn. Bạn

có thể yêu cầu chi tiết bổ sung cho tuyến đường:

“street_name”, “time”, “distance”, “max_speed”,

“toll”, “road_class”, “road_class_link”, “road_access”,

“road_environment”, “lanes”, và “surface”

instructions Mặc định: “true”

Trả về các hướng dẫn đi trên tuyến đường

points_encoded Mặc định: “true”

Cho phép thay đổi mã hóa dữ liệu vị trí trong phản hồi.

Mặc định là mã hóa polyline, nhỏ gọn nhưng yêu cầu

mã máy khách đặc biệt để giải nén. Đặt tham số này

thành “false” để chuyển mã hóa sang các cặp tọa độ đơn

giản như [kinh độ, vĩ độ] hoặc [kinh độ, vĩ độ, độ cao].

36

ch.disable Mặc định: “false”

Sử dụng tham số này kết hợp với một hoặc nhiều tham

số từ bên dưới.

algorithm Mặc định: “round_trip”

Thay đổi thành “alternative_route” khi bạn muốn trả về

nhiều hơn 1 đường đi

alternative_route.max_paths Mặc định: “2”

Nếu algorithm = “alternative_route”, tham số này đặt

số lượng đường dẫn tối đa sẽ được tính toán. Tăng có

thể dẫn đến các lựa chọn thay thế kém hơn.

Bảng 3.4. Các thông số truy vấn có thể gửi lên

Thông tin

paths info Miêu tả Mảng đối tượng (RouteResponsePath) Thông tin bổ sung cho yêu cầu của bạn

37

Hình 3.5. Ví dụ một kết quả tìm đường được trả về bằng API mới

3.2.2 Đề xuất Thuật toán tìm đường đi nhanh nhất

Thuật toán tìm đường đi nhanh nhất có đầu vào là đường đi của người dùng dưới

dạng Polyline. Đường đi này là đầu ra của dịch vụ chỉ đường của VMap. Sau đó thuật

toán sẽ thực hiện các bước sau:

38

- Bước 1: Kết quả trả về của dịch vụ chỉ đường của VMap hiện tại bao gồm các

hướng dẫn di chuyển cũng như Polyline là tọa độ của các bước di chuyển đó. Mỗi

cách di chuyển này ta gọi là 1 Path.

- Bước 2: Từ các Path, ta có được thông tin Polyline bao gồm nhiều Point khác

nhau, mỗi 2 Point là một bước đi thẳng theo chỉ dẫn. Ta tách nhỏ Polyline trong

Path thành các Polyline lần lượt bao gồm 2 Point liền nhau, ta gọi là Line.

- Bước 3: Từ các Line, ta lần lượt cắt thành các mảnh nhỏ hơn, mỗi đoạn dài ~5.96m

(tương ứng 10 pixel trên 1 tile), ta được các Piece. Ta cần sử dụng thư viện shapely

để thực hiện việc này.

- Bước 4: Với mỗi Piece, ta tính toán tâm (Mid-point) và góc so với trục tọa độ.

Mục tiêu là ta cần tính toán cửa sổ cần lấy các điểm ảnh trên đó, từ đó xem được

đoạn đường đó đang có tình trạng giao thông như thế nào. Để tính toán được Mid-

point, em đã sử dụng hàm nội suy interpolate của thư viện shapely để nội suy ra

điểm trung tâm. Tuy nhiên, để sử dụng hảm này, ta cần chuyển hệ quy chiếu của

2 điểm của Piece sang hệ quy chiếu UTM. Em đã sử dụng hàm from_latlon và

to_latlon của thư viện utm, với Zone_number=”48” và Zone_letter=”Q”.

- Bước 5: Sử dụng thư viện OpenCV dựng cửa số trên Tile tương ứng với Mid-

Point để lấy tất cả các pixel ảnh thuộc của sổ đó, từ đo tính toán được tình trạng

giao thông tại Piece đó. Do hệ thống đường của VMap và Google là không trùng

khớp hoàn toàn, vì thế ta cần mở rộng của sổ theo chiều dọc để tăng khả năng có

dữ liệu. Sau khi thử nghiệm, em thấy độ chiều dọc của cửa sổ có giá trị 30 là hợp

lý.

39

Hình 3.6. Hệ thống đường của VMap và Google không hoàn toàn trùng khớp

Hình 3.7. Ví dụ trích xuất thông tin từ một Tile

- Bước 6: Chuẩn hóa dữ liệu thu được tại điểm đó bằng cách gán điểm trung bình

cho các điểm ảnh trong đó. Nếu điểm ảnh đó màu xanh hoặc không có giá trị, gán

giá trị bằng 1, nếu màu cam, gán giá trị bằng 2, lần lượt gán 3, 4 với các điểm ảnh

màu đỏ và nâu. Ta lấy trung bình và làm tròn để có giá trị của cửa sổ đó. Một vấn

40

đề gặp phải ở đây là ảnh Google Traffic Tile được kết xuất theo đường với màu

chủ đạo là Xanh, Cam, Đỏ và Nâu và được làm nhạt dần ở viền. Để có thể biết

chính xác một điểm ảnh là Xanh, Cam, Đỏ hay Nâu ở bảng mã màu RGB là rất

khó. Để giải quyết vấn đề này, em đã chuyển đổi ảnh sang bảng mã màu HSV

bằng cách sử dụng hàm cvtColor của thư viện OpenCV. Sau khi chuyển sáng mã

màu HSV, các pixel màu xanh sẽ có giá trị H (Hue) trong khoảng [57, 90], các

pixel màu cam có giá trị H trong khoảng [18, 40], pixel màu đỏ có giá trị H trong

khoảng [2, 10], pixel màu nấu có giá trị H trong khoảng [0, 1].

Hình 3.8. Các mức độ giao thông của Google Traffic

- Bước 7: Ta gom tất cả các giá trị của sổ sau khi chuẩn hóa để có đầu vào cho mô

hình học máy.

- Bước 8: Chạy mô hình để ước lượng thời gian di chuyển tương ứng với từng Path.

Từ đó, ta sắp xếp các Path theo thời gian di chuyển ngắn nhất thay vì đưa ra Path

có quãng đường ngắn nhất.

41

Hình 3.9. Quy trình của Thuật toán tìm đường đi nhanh nhất

42

CHƯƠNG 4. TRIỂN KHAI, THỰC NGHIỆM VÀ ĐÁNH GIÁ

4.1 Xây dựng mô hình ước lượng thời gian di chuyển theo tình trạng giao thông

4.1.1 Xây dựng bộ dữ liệu thử nghiệm

Xây dựng bộ dữ liệu thử nghiệm bằng cách chọn ngẫu nhiên 1200 điểm đầu và

1200 điểm cuối trong khu vực nội thành Hà Nội. Sử dụng thư viện request của NodeJS

để lấy hướng dẫn di chuyển của Dịch vụ tìm đường Google (Google Direction API) và

Dịch vụ tìm đường của VMap. Với kết quả trả về của dịch vụ tìm đường VMap, ta sẽ

trích xuất đặc trưng theo phương pháp trình bày ở phần trước làm đầu vào của thuật toán

học máy. Với kết quả của Dịch vụ tìm đường Google ta sẽ có được thời gian ước lượng

di chuyển trong tình trạng giao thông tương ứng với kết quả đầu ra của thuật toán. Kết

hợp hai thông tin này ta sẽ có được dữ liệu thử nghiệm. Bộ dữ liệu thử nghiệm được lưu

trữ trong cơ sở dữ liệu MongoDB và xuất ra dưới dạng file csv.

- Tổng số dữ liệu: 3401

- Dữ liệu tập train: 3000 dữ liệu

- Dữ liệu tập test: 401 dữ liệu

Hình 4.1. Quy trình xây dựng bộ dữ liệu thử nghiệm

4.1.2 Thử nghiệm và tìm mô hình hiệu quả nhất

Tiến hành thử nghiệm các thuật toán khác nhau để xây dựng mô hình tối ưu nhất

từ bộ dữ liệu thử nghiệm. Ở đây, em đã thử nghiệm với 2 thuật toán là Hồi quy tuyến

tính và RNN. Em sử dụng lần lượt 2 đối tượng LinearRegression và MLPRegressor của

thư viện sklearn để thực hiện với các thông số để mặc định. Cách thức thực hiện và so

sánh kết quả được thể hiện ở Hình 4.2 và Bảng 4.1.

43

Để đánh giá chất lượng dữ liệu, hệ số xác định R2 và sai số RMSE được sử dụng

để phân tích ước lượng thời gian di chuyển. Phân tích hồi qui là nghiên cứu sự phụ thuộc

của 1 biến (biến phụ thuộc) vào 1 hay nhiều biến khác (biến độc lập), nhằm mục đích

ước lượng (hay dự đoán) giá trị trung bình của biến phụ thuộc trên cơ sở các giá trị biết

trước của các biến độc lập.

Mô hình hồi qui tuyến tính k biến: Y = 1+ 2X2 + …+ kXk + U (1)

- Y: biến phụ thuộc X2 ,…,Xk : các biến độc lập

- U: sai số ngẫu nhiên

- 1 là hệ số tự do

- j là các hệ số hồi quy riêng, cho biết khi Xj tăng 1 đơn vị thì trung bình của Y sẽ

thay đổi j đơn vị trong trường hợp các yếu tố khác không đổi (j=2,…,k).

Hệ số xác định 0≤ R2 ≤1 Có thể nói R2 phản ánh tỷ lệ mô hình lý thuyết phản ánh

thực tế.

RMSE tính theo công thức sau:

44

Hình 4.2. Quy trình xây dựng bộ dữ liệu thử nghiệm

Kết quả thử nghiệm cho thấy với mô hình RNN có kết quả tốt hơn với chỉ số R2

không quá khác biệt (chênh lệch 0.0017), tuy nhiên RMSE thấp hơn 27%. Sau khi đã xây

dựng được mô hình, em sử dụng thư viện pickle để lưu mô hình xuống ổ cứng.

Bảng 4.1. Kết quả thử nghiệm

Thuật toán R2 RMSE MSE

Hồi quy tuyến tính 0.9175 87.80 7708.51

RNN 0.9192 64.361 4142.39

45

4.2 Triển khai công cụ thu thập bộ dữ liệu Google Traffic Tiles

Yêu cầu: NodeJS, NPM, PM2.

PM2 là một trình quản lý các tiến trình dành cho các ứng dụng NodeJS. Nó được

viết bằng chính NodeJS và Shell. PM2 cũng được tích hợp bộ cân bằng tải (load

balancer). Sử dụng lệnh npm i -g pm2 để cài đặt pm2 cho hệ thống.

Thực hiện sao chép tệp tin downloadImgGGTraffic.js vào thư mục /deployment.

Chạy lệnh npm i polygon-lookup request để cài đặt thư viện. Chạy lệnh pm2 start

downloadImgGGTraffic.js để chạy công cụ thu thập bộ dữ liệu Google Traffic Tiles. Để

tiến trình luôn chạy dù hệ thống có thể bị khởi động lại, ta sử dụng lệnh pm2 save để lưu

danh sách các tiến trình và pm2 startup để khai báo khởi động pm2 cùng hệ thống.

Hình 4.3. Tiến trình thu thập bộ dữ liệu Google Traffic Tiles được khởi tạo

Hình 4.4. PM2 được khai báo khởi động cùng hệ thống

4.3 Triển khai thuật toán cho Nền tảng cung cấp dịch vụ địa chỉ Việt Nam VMap

Yêu cầu: Python, PIP, Flask, Waitress

Tương tự PM2, Waitress là một trình quản lý các tiến trình dành cho các ứng dụng

WSGI của Python. Sử dụng lệnh pip install waitress để cài đặt Waitress cho hệ thống.

Thực hiện sao chép tệp tin app.py vào thư mục /deployment. Chạy lệnh pip install flask

để cài đặt Flask. Tương tự với các thư viện cần thiết. Chạy lệnh waitress-serve –call

‘flaskr:VMap_direction’ để chạy ứng dụng web dưới dạng tiến trình. Lúc này, tiến trình

đã chạy ở cổng 8000.

Để có thể thay thế trực tiếp Dịch vụ tìm đường cũ của VMap, ta cần cấu hình

nginx (công cụ proxy hệ thống VMap đang sử dụng) đến cổng 8000. Vào thư mục

46

/etc/nginx/conf.d/ và tiến hành chỉnh sửa file VMap.conf. Thêm đoạn mã sau vào phần

proxy_pass http://10.101.3.215:8000;

proxy_cache VMap_cache; proxy_cache_revalidate on; proxy_cache_min_uses 3; proxy_cache_use_stale error timeout updating http_500

proxy_cache_lock on;

proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true;

# Enables WS support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off;

location /route { http_502 http_503 http_504; }

cấu hình tên miền VMap.vn để cập nhật dịch vụ tìm đường của VMap.

Sau khi triển khai thành công Dịch vụ tìm đường mới, chúng ta tiến hành thử

nghiệm trên ứng dụng nền tảng web và nền tảng di động của VMap. Kết quả di chuyển

thực tế được trình bày ở Bảng 4.2.

Hình 4.5. Thử nghiệm dịch vụ tìm đường mới trên ứng dụng nền tảng web VMap tại VMap.vn

47

Hình 4.6. Thử nghiệm tìm đường tương tự trên nền tảng Google Map

Bảng 4.2. Kết quả thử nghiệm thực tế

Google Map VMap cũ Vmap mới Thực tế

144 Xuân Thủy → 716 Láng 17 phút 10 phút 17 phút 17 phút

302 Láng → 275 Nguyễn 6 phút 7 phút 6 phút 6 phút

Trãi

144 Xuân Thủy → 10 Thụy 18 phút 15 phút 17 phút 18 phút

Khuê

48

Hình 4.7. Thử nghiệm dịch vụ tìm đường mới trên ứng dụng nền tảng di động Android

49

Sau khi tiến hành thử nghiệm em nhận thấy thời gian phản hồi của dịch vụ còn

chậm. Cụ thể là khoảng 3 giây với yêu cầu tìm đường cho 1 tuyến đường và 8 giây cho

một yêu cầu. Chậm hơn rất nhiều so với chỉ khoảng 1 giây cho cả 2 yêu cầu trên khi sử

dụng dịch vụ cũ. Lý do của việc này là do quá trình tách đặc trưng từ ảnh Google Traffic

Tile tốn rất nhiều thời gian để xử lý. Ngoài ra, thời gian xử lý này còn phụ thuộc của

tuyến đường tìm được. Đây là một vấn đề cần giải quyết trong tương lai.

50

CHƯƠNG 5. KẾT LUẬN VÀ ĐỊNH HƯỚNG

Kết quả đạt được

Như vậy, trong luận văn này, em đã lần lượt trình bày các nghiên cứu của bản

thân để thực hiện các công việc: (i) Xây dựng công cụ thu thập bộ dữ liệu Google Traffic

Tiles, (ii) Xây dựng thuật toán tìm đường đi nhanh nhất theo thời gian cho Nền tảng cung

cấp dịch vụ địa chỉ Việt Nam Vmap và (iii) Triển khai thuật toán cho Nền tảng cung cấp

dịch vụ địa chỉ Việt Nam VMap và đánh giá hiệu quả sử dụng. Việc xây dựng công cụ

thu thập bộ dữ liệu Google Traffic Tiles đang ở mức thử nghiệm trong nội thành Hà Nội

với 15.128 tile, tự động cập nhật sau mỗi 5 phút. Tiếp theo đó, em đã lần lượt trình bày

cách tách các đặc trưng từ bộ dữ liệu này phụ thuộc tuyến đường tìm được bằng cách xử

dụng các kỹ thuật xử lý ảnh. Từ đó, em đã tiến hành xây dựng bộ dữ liệu thử nghiệm với

3401 dữ liệu bằng cách sử dụng Dịch vụ tìm đường của VMap và Dịch vụ tìm đường của

Google Map. Sau đó, em tiến hành xây dựng mô hình bằng cách thử nghiệm bằng cách

sử dụng Hồi quy tuyến tính và mạng nơ-ron RNN. Từ đó cho thấy RNN khá hiệu quả

trong việc ước lượng thời gian di chuyển với RMSE=64,361. Cuối cùng, em đã tiến hành

triển khai các công cụ, thuật toán này lên hệ thống của VMap đồng thời em cũng tiến

hành thử nghiệm trực tiếp trên ứng dụng nền tảng web và ứng dụng nền tảng di động của

VMap. Kết quả ban đầu cho thấy kết quả khá tương đồng so với kết quả thu được từ

Google Map.

Định hướng phát triển tương lai

Tuy đã triển khai dịch vụ vào thực tế, nhưng dịch vụ còn một số vấn đề còn tồn

tại và nổi bật nhất là thời gian xử lý quá chậm trong quá trình xử lý ảnh bóc tách feature.

Trong tương lai, em sẽ tìm cách giảm thời gian của quá trình này đến xuống mức có thể

chấp nhận được với người dùng. Ngoài ra các kỹ thuật bộ nhớ đệm để tăng tốc dịch vụ

cho toàn hệ thống. Ngoài ra, em cũng sẽ tiến hành tối ưu mô hình để đạt được hiệu quả

tốt hơn. Việc mở rộng phạm vi Google Traffic Tile sẽ được tính toán vì những dữ liệu

giao thông của Google hiện tại chỉ phủ tại các thành phố lớn trên cả nước. Vì vậy với

việc áp dụng một số kỹ thuật như chỉ tải về các hình ảnh có thay đổi thì việc cập nhật

hình ảnh trong khoảng thời gian 5 phút là khả thi.

51

TÀI LIỆU THAM KHẢO

“Đề án ‘Phát triển Hệ tri thức Việt số hóa.’” .

[1]

“VMap - Bản đồ Việt Nam.” https://vmap.vn/.

[2]

“OpenStreetMap.” https://www.openstreetmap.org/.

[3]

[4]

“OpenStreetMap Wiki.” https://wiki.openstreetmap.org/wiki/Main_Page.

[5] Nhóm phát triển VMap, “Tài liệu nội bộ,” 2020.

[6] Bộ Giao thông vận tải, “Quy chuẩn kỹ thuật quốc gia về Báo hiệu đường bộ.” 2019.

[7] R. Fairhurst, “Project-GraphHopper,” 2019.

[8] G. Leduc, “Road Traffic Data : Collection Methods and Applications,” EUR Number

Tech, pp. 2–10, 2008.

[9]

“About OGC | OGC.” https://www.ogc.org/about.

[10] A. Doyce, “WWW Mapping Bộ thư viện,” Open GIS Consort., 1997.

[11] “OpenGIS Web Map Tile Service

Implementation Standard

| OGC.”

https://www.ogc.org/standards/wmts.

[12] “Geo-location APIs

| Google Maps

Platform

| Google Cloud.”

https://cloud.google.com/maps-platform/.

[13] “Google Map.” https://sites.google.com/site/bestmapgogle/.

[14] “About us - GraphHopper Directions API.” https://www.graphhopper.com/about-us/.

[15] “JavaScript,” J. Inf. Process. Manag., 2001, doi: 10.1241/johokanri.44.584.

[16] R. Prediger, R. Winzinger, R. Prediger, and R. Winzinger, “Node.js,” in Node.js, 2015.

[17] T. E. Oliphant, “Python for scientific computing,” Comput. Sci. Eng., 2007, doi:

10.1109/MCSE.2007.58.

[18] F. Pedregosa et al., “Scikit-learn: Học máy in Python,” J. Mach. Learn. Res., 2011.

[19] A. C. Muller and S. Guido, Introduction to học máy with scikit-learn. 2017.

[20] C.-C. Chang and C.-J. Lin, “LIBSVM,” ACM Trans. Intell. Syst. Technol., 2011, doi:

10.1145/1961189.1961199.

[21] “TensorFlow.” https://www.tensorflow.org/.

[22] M. Grinberg, “Flask Web Developement,” O’Reilly, 2014, doi: 10.1007/s13398-014-

0173-7.2.

52