Định dạng gói tin kết quả 2

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu phát triển trên hệ thống dịch vụ dựa trên vị trí địa lý và thử nghiệm (Trang 77 - 81)

TieuDe: đƣợc trình bày trên một dòng (ngăn cách bằng ký tự xuống

dòng), giá trị của tiêu đề là một xâu văn bản theo quy ƣớc:

Là “Ket qua:” nếu vị trí cung cấp hợp lệ và đã thực hiện việc tìm đƣờng. Là “Vi tri xuat phat:” nếu yêu cầu ngƣời dùng phải xác định lại vị trí xuất phát. Trong trƣờng hợp này, phần “NoiDung” sẽ liệt kê danh sách các “tên” để gửi ý ngƣời dùng lựa chọn, mỗi “tên” trên một dòng.

Là “Vi tri den:” nếu yêu cầu ngƣời dùng phải xác định lại vị trí đến và cũng có danh sách gợi ý giống nhƣ trƣờng hợp yêu cầu xác định vị trí xuất phát.

Là “Phuong tien:” nếu yêu cầu ngƣời dùng xác định lại phƣơng tiện sử dụng do không thể nhận dạng đƣợc phƣơng tiện mà ngƣời dùng đã yêu cầu trƣớc đó. Phần “NoiDung” sẽ thể hiện danh sách phƣơng tiện hợp lệ.

NoiDung: đƣợc sử dụng để trình bày kết quả tìm kiếm hoặc danh sách gợi

ý cho ngƣời dùng.

Nếu là kết quả tìm kiếm: trong trƣờng hợp không tìm thấy, đây sẽ là xâu văn bản “khong ton tai duong di can tim”. Trƣờng hợp tìm đƣợc, dòng đầu tiên sẽ là xâu “di theo lo trinh”, các dòng tiếp theo là các cung đƣờng phải đi qua. Mỗi cung đƣờng thể hiện bằng tên và độ dài tƣơng ứng (ngăn cách bởi dấu phẩy).

Nếu là danh sách gợi ý, mỗi dòng tƣơng ứng với một “tên” gợi ý cho khách hàng.

4.4. Xử lý tìm đƣờng tại máy chủ

Việc xác định đƣờng đi giữa hai điểm theo yêu cầu của ngƣời dùng đƣợc thực hiện tại máy chủ. Sau khi nhận đƣợc tin nhắn yêu cầu dịch vụ từ phía máy khách, máy chủ tiến hành phân tích tin nhắn để xác định số điện thoại của máy khách, các số liệu liên quan đến vị trí hiện thời của máy khách, điểm xuất phát, điểm cần đến, phƣơng tiện giao thông, tình trạng giao thông tại vị trí hiện thời

4.4.1. Thuật toán tìm đƣờng

Thuật toán tìm đƣờng tại máy chủ đƣợc cài đặt dựa trên thuật toán Dijkstra với một số cải tiến nhằm tăng tốc độ xử lý và tiết kiệm bộ nhớ.

Dữ liệu đồ thị (biểu diễn hệ thống giao thông) đƣợc lƣu trữ bằng danh sách kề kèm theo trọng số. Trọng số trong đồ thị không chỉ đơn giản là một giá trị biểu diễn độ dài đƣờng đi mà bao gồm nhiều giá trị khác nhau (độ dài đƣờng đi, độ rộng, tình trạng tắc đƣờng,...).

Với thuật toán Dijkstra gốc, thậm chí ngay cả khi đã sử dụng danh sách kề kèm trọng số để biểu diễn đồ thị thì tốc độ vẫn khá chậm. Trong trƣờng hợp xấu nhất, thuật toán có thể cần đến n lần có định nhãn (trong đó n là số đỉnh) và mỗi lần tìm đỉnh để cố định nhãn sẽ mất một đoạn chƣơng trình với độ phức tạp O(n).

Để tăng tốc độ xử lý, thuật toán đƣợc cài đặt có sự điều chỉnh. Thực ra xét về bản chất, tƣ tƣởng thuật toán không thay đổi. Thay đổi ở đây chủ yếu là kỹ thuật biểu diễn và xử lý dữ liệu. Thông thƣờng thì bƣớc tìm đỉnh tự do có “giá trị” nhỏ nhất phải quét toàn bộ các đỉnh nên mất nhiều thời gian (quét cả đỉnh đã cố định). Để không phải quét lại đỉnh đã cố định, thủ tục tìm kiếm sử dụng danh sách dạng liên kết để lƣu danh sách đỉnh. Mỗi khi cố định một đỉnh thì đồng thời loại bỏ đỉnh đó khỏi danh sách để không phải duyệt lại.

Để tiết kiệm bộ nhớ, phần cài đặt sử dụng danh sách liên kết (con trỏ đối tƣợng) để hạn chế việc lƣu lặp lại dữ liệu.

Thuật toán có thể đƣợc mô tả ngắn gọn thông qua qua 3 bƣớc chính sau: Bƣớc 1: Khởi tạo

- Khởi tạo danh sách kề từ dữ liệu đồ thị

- “Giá trị” tất cả các đỉnh ban đầu bằng “số vô cùng lớn”

- Riêng đỉnh xuất phát có giá trị bằng chi phí tình từ điểm xuất phát tới đó.

- Tất cả các nút đều tự do Bƣớc 2: Lặp

Lặp chừng nào danh sách kề còn khác rỗng:

- Tìm đỉnh tự do có “giá trị” nhỏ nhất. Nếu tất cả các đỉnh đều đã cố định hoặc đỉnh tìm đƣợc là đỉnh kết thúc thì sang bƣớc 3 - Cố định đỉnh tìm đƣợc

- Duyệt các đỉnh kề với đỉnh tìm đƣợc, tối ƣu “giá trị” của các đỉnh này theo giá trị của đỉnh tìm đƣợc (nếu đỉnh chƣa cố định), lƣu vết.

Bƣớc 3: Lấy kết quả

- Tìm đỉnh cuối (giá trị của đỉnh này là chi phí đƣờng đi)

- Nếu giá trị đỉnh cuối là “số vô cùng lớn” thì kết luận không tìm đƣợc đƣờng, kết thúc.

- Nếu không, duyệt và đƣa ra danh sách các cung (hay đỉnh) phải đi qua dựa theo vết đã lƣu cho đến khi về đỉnh xuất phát (thứ tự ngƣợc).

4.4.2. Xử lý phần dữ liệu “mờ” trong đồ thị

Thông tin về các cung đƣờng, nút giao thông (nhƣ độ dài, bề rộng) nhìn chung là ít thay đổi, nhƣng tình trạng tắc đƣờng thì thƣờng xuyên thay đổi và đƣợc cập nhật thông qua ngƣời dùng và các hệ thống thu thập thông tin khác. Do vậy trong quá trình tìm đƣờng, tham số về mức độ tắc đƣờng đƣợc sử dụng để ra quyết định có đi theo nhánh nào đó hay không.

Tình trạng tắc đƣờng có thể đã xảy ra ở thời điểm hiện tại nhƣng vào thời điểm ngƣời dùng đi đến (sau một khoảng thời gian) có thể không còn tắc. Cũng có thể hiện tại đƣờng chƣa tắc nhƣng sau khoảng thời gian nữa sẽ bị tắc. Nhƣ vậy để hạn chế các “tƣ vấn” khiến ngƣời dùng bị kẹt đƣờng vì sau đó đƣờng mới bị tắc hay bỏ qua mất đƣờng đi “tốt hơn” chỉ vì hiện tại bị tắc nhƣng sau đó lại thông, hệ thống sẽ lƣu lại lịch sử tắc đƣờng của từng giao lộ, từng cung đƣờng để sử dụng lại. Tại thời điểm nào đó, mỗi khi xác định tình trạng tắc đƣờng, ngoài số liệu hiện tại, hệ thống còn căn cứ vào thời điểm và tần suất xảy ra tắc đƣờng đƣợc lƣu trong lịch sử tắc đƣờng để đƣa ra lựa chọn phù hợp.

Tóm lại, việc quyết định rẽ vào cung đƣờng nào đó ngoài chi phí về độ dài còn tính đến tình trạng giao thông lúc bấy giờ và “dự đoán” trong tƣơng lai.

4.4.3. Xử lý kết quả trả lại máy khách

Kết thúc quá trình tìm kiếm, máy chủ gửi lại cho máy khách thông báo kết quả tìm kiếm. Nếu tồn tại đƣờng đi, máy chủ sẽ gửi về danh sách các cung đƣờng phải đi qua bằng tin nhắn SMS. Nội dung đƣợc gửi là danh sách ID của các cạnh phải đi qua kèm theo quãng đƣờng tính từ điểm xuất phát tới đỉnh đầu (tƣơng ứng với cung đƣờng đầu tiên) và quãng đƣờng từ đỉnh cuối (cung đƣờng cuối) đến điểm kết thúc.

dựa vào danh sách các cung đƣờng phải đi qua sẽ vẽ lên bản đồ lộ trình tìm đƣợc, kèm theo đó là màn hình thông báo lộ trình dƣới dạng văn bản.

4.5. Giao diện của hệ thống

Nội dung tiếp theo trình bày về giao diện cho phần mềm cung cấp dịch vụ phía máy chủ và phần mềm khai thác dịch vụ phía máy khách.

4.5.1. Giao diện phía máy chủ

Giao diện này phục vụ cho ngƣời làm công tác quản lý dịch vụ để giám sát, điều hành hoạt động của hệ thống. Giao diện này thể hiện đƣợc dữ liệu bản đồ số một cách trực quan thuận tiện cho theo dõi trạng thái hiện hành của toàn hệ thống. Ngoài ra, thông qua giao diện, ngƣời quản lý có thể cập nhật các thông tin về trạng thái giao thông hiện tại (tình trạng tắc đƣờng) với thông tin thu thập đƣợc từ các nguồn khác nhau. Thông qua giao diện, ngƣời quản lý cũng thấy đƣợc mức độ, tình trạng các yêu cầu dịch vụ của khách hàng để điều tiết.

Không chỉ cung cấp giao diện điều khiển, phần mềm phía máy chủ còn thực hiện các hoạt động giao tiếp với máy khách (nhận, gửi tin nhắn theo yêu cầu dịch vụ), thực hiện xử lý các yêu cầu của khách hàng (tìm đƣờng đi).

Để nâng cao hiệu quả, tốc độ xử lý, phần mềm phía máy chủ đƣợc lập trình theo kiểu xử lý đa luồng (Multithreads). Mỗi yêu cầu của một khách hàng sẽ đƣợc xử lý theo một luồng riêng.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu phát triển trên hệ thống dịch vụ dựa trên vị trí địa lý và thử nghiệm (Trang 77 - 81)