Trang này mô tả vòng đời của một kế hoạch tuyến đường bằng cách sử dụng Route Optimization API (API Tối ưu hoá tuyến đường), bắt đầu từ việc xác định nhu cầu về tuyến đường và kết thúc bằng một kế hoạch tuyến đường tích hợp trong hệ thống của bạn.
Khi làm theo các giai đoạn của kế hoạch tuyến đường, bạn có thể đạt được các mục tiêu sau:
- Lập bản đồ hoạt động của đội xe: Chuyển đổi đội xe thực tế, các hạn chế phức tạp và mục tiêu kinh doanh thành mã cho API.
- Tối ưu hoá kế hoạch tuyến đường cho doanh nghiệp: Tìm hiểu cách tinh chỉnh kế hoạch tuyến đường để có thể đáp ứng các mục tiêu và cải thiện hoạt động hằng ngày.
- Triển khai vào thực tế: Triển khai kế hoạch tuyến đường bằng cách đưa kế hoạch đó vào các hoạt động hằng ngày.
Sơ đồ sau đây cho thấy vòng đời của một kế hoạch tuyến đường.
Giai đoạn triển khai của một kế hoạch tuyến đường diễn ra khi bạn tích hợp API lần đầu tiên hoặc khi các yêu cầu kinh doanh của bạn thay đổi đáng kể. Giai đoạn này bao gồm các giai đoạn từ 1 đến 5.
Giai đoạn hoạt động hằng ngày nhẹ nhàng hơn và việc tinh chỉnh là không đáng kể. Giai đoạn này bao gồm các giai đoạn từ 2 đến 4.
Vòng đời của các giai đoạn tuyến đường như sau:
- Xác định phạm vi vấn đề: Xác định và sắp xếp các mục tiêu, tài nguyên, nhiệm vụ và hạn chế để có bức tranh hoàn chỉnh về hoạt động của bạn trước khi bắt đầu sử dụng API.
- Lập bản đồ dữ liệu: Chuyển đổi thực tế kinh doanh thành các tham số API để kế hoạch tuyến đường phản ánh cách bạn cần đội xe hoạt động.
- Tạo yêu cầu và nhận kế hoạch tuyến đường: Nhập dữ liệu vào API và nhận kế hoạch tuyến đường được tối ưu hoá.
- Tinh chỉnh kế hoạch tuyến đường: Kiểm thử kế hoạch tuyến đường và lặp lại kế hoạch đó bằng cách điều chỉnh các hạn chế và mục tiêu để đảm bảo kế hoạch đó đáp ứng mọi nhu cầu của bạn.
- Tích hợp kế hoạch tuyến đường: Kết nối kế hoạch tuyến đường với các hệ thống hiện có để cung cấp tính năng điều hướng có thể thực hiện.
Xác định phạm vi vấn đề
Trước khi sử dụng API, bạn cần sắp xếp thông tin chi tiết về các hoạt động hằng ngày thành các danh mục dữ liệu rõ ràng. Điều này cho phép bạn bắt đầu quy trình triển khai một cách rõ ràng về các tài nguyên và nhiệm vụ hiện tại, những yếu tố hạn chế các tài nguyên và nhiệm vụ đó, cũng như các mục tiêu mà bạn muốn đạt được với đội xe của mình.
Xác định tài nguyên và nhiệm vụ
Một bước quan trọng khi lập kế hoạch cho kế hoạch tuyến đường là xác định tài nguyên và nhiệm vụ, đó là xe và lô hàng của bạn.
| Xe | Lô hàng |
|---|---|
|
|
Xác định các hạn chế
Các hạn chế là giới hạn và quy định hạn chế về cách bạn có thể sử dụng xe và cách bạn cần xử lý lô hàng. Các hạn chế này chi phối hầu hết các hoạt động của bạn và rất quan trọng khi tạo kế hoạch tuyến đường được tối ưu hoá.
Các hạn chế thường thuộc hai danh mục:
| Hạn chế cứng | Hạn chế mềm |
|---|---|
| Đây là những giới hạn không thể phá vỡ. Ví dụ: một chiếc xe tải không thể chở quá trọng lượng tối đa và người lái xe không thể lấy hàng sau khi cửa hàng đã đóng cửa. | Đây là những lựa chọn ưu tiên có thể vi phạm nếu cần, thường là với chi phí phạt. Ví dụ: bạn có thể ưu tiên chỉ chất hàng lên xe tải đến 80% sức chứa hoặc giao hàng trước thời gian mục tiêu, nhưng bạn không ngại vượt quá các giới hạn này để có được tuyến đường tốt hơn. |
Các hạn chế thường gặp bao gồm:
- Giới hạn sức chứa: Trọng lượng, thể tích hoặc số lượng mặt hàng tối đa mà một chiếc xe có thể chở.
- Khoảng thời gian: Các khoảng thời gian cụ thể khi một địa điểm mở cửa để ghé thăm hoặc giờ làm việc cụ thể của người lái xe.
- Chi phí: Chi phí vận hành xe hoặc bỏ qua một lô hàng. Một trong những mục tiêu chính của API là tạo kế hoạch tuyến đường tiết kiệm chi phí.
- Thời gian nghỉ của người lái xe: Thời gian nghỉ của người lái xe thường được yêu cầu theo luật lao động sau một số giờ làm việc nhất định.
Thiết lập mục tiêu kinh doanh
Sau khi thiết lập tài nguyên và nhiệm vụ cũng như các giới hạn của chúng, bạn cần thiết lập những chỉ số quan trọng nhất đối với doanh nghiệp của mình. Các mục tiêu này đi đôi với các hạn chế và giúp bạn quyết định những yếu tố quan trọng nhất khi lập kế hoạch tuyến đường.
Dưới đây là một số ví dụ về mục tiêu kinh doanh:
| Quy mô đội phương tiện vận chuyển | Khoảng cách | Thời gian | Chi phí |
|---|---|---|---|
| Bạn muốn giảm thiểu số lượng xe được sử dụng hay sử dụng toàn bộ đội xe để kết thúc ngày làm việc sớm hơn? | Bạn muốn đi theo con đường ngắn nhất để tiết kiệm nhiên liệu hay bạn thích tuyến đường nhanh hơn nhưng có thể dài hơn do sử dụng đường cao tốc? | Bạn muốn giảm thiểu tổng số giờ làm việc hay ưu tiên đến vào những thời điểm cụ thể có thể kéo dài thời gian di chuyển trên tuyến đường? | Bạn muốn giảm thiểu chi phí vận hành như tiền lương và nhiên liệu hay chấp nhận chi phí cao hơn để đáp ứng thời hạn nghiêm ngặt? |
Lập bản đồ dữ liệu
Sau khi thu thập dữ liệu, hãy lập bản đồ dữ liệu đó để khớp với các thuộc tính của API. Điều này cung cấp cho trình tối ưu hoá tất cả thông tin để trả về một kế hoạch tuyến đường có tính đến thực tế kinh doanh của bạn.
Sử dụng các tham số trong các bảng tiếp theo để lập bản đồ tài nguyên, nhiệm vụ, hạn chế, và mục tiêu mà bạn đã lập bản đồ trong phần Xác định phạm vi vấn đề section.
Ánh xạ biến
| Khái niệm trong thế giới thực | Tham số API | Mô tả |
|---|---|---|
| Người lái xe hoặc xe | model.vehicles[] |
Đại diện cho một chiếc xe trong đội xe của bạn. |
| Vị trí kho |
vehicles[].startWaypointvehicles[].endWaypoint
|
Vị trí mà xe bắt đầu và kết thúc tuyến đường. |
| Giờ hoạt động của doanh nghiệp |
model.globalStartTimemodel.globalEndTime
|
Thời gian bắt đầu sớm nhất và thời gian kết thúc muộn nhất cho toàn bộ hoạt động của đội xe. |
| Nhiệm vụ hoặc gói hàng | model.shipments[] |
Đại diện cho một công việc. Có thể là pickup, delivery hoặc cả hai. |
| Vị trí nhiệm vụ |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Vị trí địa lý nơi công việc diễn ra. |
| Thời gian dịch vụ |
pickups[].durationdeliveries[].duration
|
Thời gian dành cho việc hoàn thành nhiệm vụ tại địa điểm (ví dụ: dỡ hàng), không bao gồm thời gian di chuyển. |
Ánh xạ hạn chế
| Hạn chế trong thế giới thực | Tham số API | Mô tả |
|---|---|---|
| Sức chứa của xe | vehicles[].loadLimits |
Đặt giới hạn cứng hoặc mềm cho sức chứa của xe. Nếu loadDemand của một lô hàng vượt quá giới hạn còn lại, thì lô hàng đó sẽ không được chỉ định. |
| Kích thước gói hàng | shipments[].loadDemands |
Lượng sức chứa của xe mà một lô hàng tiêu thụ. |
| Quy định hạn chế đối với xe | shipments[].allowedVehicleIndices |
Hạn chế một lô hàng để lô hàng đó chỉ có thể được lấy hoặc giao bởi các xe hoặc người lái xe cụ thể. |
| Giờ hoạt động | shipments[].pickups[].timeWindows hoặc shipments[].deliveries[].timeWindows |
Đặt giờ hoạt động để ghé thăm một địa điểm. Nếu xe không thể đến trong khoảng thời gian này, thì lô hàng sẽ bị bỏ qua. |
| Giới hạn độ dài ca làm việc | vehicles[].routeDurationLimit |
Đặt giới hạn cứng hoặc mềm về thời gian làm việc của một người lái xe cụ thể (ví dụ: tối đa 8 giờ), bất kể thời gian kết thúc toàn cầu. |
| Thời gian nghỉ của người lái xe | vehicles[].breakRule |
Thực thi các quy tắc nghỉ ngơi cụ thể, chẳng hạn như thời gian nghỉ bắt buộc sau một số giờ làm việc nhất định. |
| Quy định hạn chế đối với đường | vehicles[].travelMode |
Chỉ định phương thức di chuyển (ví dụ: DRIVE hoặc BICYCLE). Điều này hạn chế tuyến đường ở các con đường hợp pháp và xác định tốc độ được sử dụng để tính thời gian di chuyển. |
Ánh xạ mục tiêu
| Mục tiêu trong thế giới thực | Tham số API | Mô tả |
|---|---|---|
| Giảm thiểu quy mô đội xe | vehicles[].fixedCost |
Áp dụng chi phí một lần cho việc sử dụng xe. Chi phí cố định cao buộc tuyến đường ưu tiên sử dụng ít xe hơn so với việc tăng tổng khoảng cách hoặc thời gian làm việc. |
| Giảm thiểu khoảng cách | vehicles[].costPerKilometer |
Áp dụng chi phí cho mỗi ki-lô-mét đã di chuyển. Ưu tiên các tuyến đường ngắn hơn để tiết kiệm nhiên liệu và hao mòn. |
| Giảm thiểu tổng thời gian | vehicles[].costPerHour |
Áp dụng chi phí cho mỗi giờ xe hoạt động (bao gồm cả thời gian di chuyển và thời gian chờ). Ưu tiên hoàn thành nhanh hơn. |
| Giảm thiểu thời gian lái xe | vehicles[].costPerTraveledHour |
Áp dụng chi phí cụ thể cho thời gian di chuyển. Điều này phân biệt giữa việc ngồi trong tình trạng giao thông tắc nghẽn (tốn kém) và chờ tại điểm dừng(có thể rẻ hơn). |
| Ưu tiên một số nhiệm vụ | shipments[].penaltyCost |
Áp dụng chi phí nếu một lô hàng cụ thể bị bỏ qua. Việc đặt chi phí này ở mức cao sẽ đảm bảo các nhiệm vụ quan trọng được ưu tiên hơn các nhiệm vụ không bắt buộc. |
Tạo yêu cầu và nhận phản hồi
Việc sử dụng Route Optimization API (API Tối ưu hoá tuyến đường) để tạo kế hoạch tuyến đường bao gồm các bước sau:
- Định cấu hình môi trường: Thiết lập dự án trên đám mây của Google Cloud, bật API và định cấu hình quy trình xác thực. Để biết hướng dẫn, hãy xem bài viết Bắt đầu sử dụng. Bạn chỉ phải làm theo bước này một lần.
- Gửi yêu cầu: Tạo nội dung yêu cầu bằng cách sử dụng liên kết dữ liệu được xác định trong phần trước. Để biết thông tin về điểm cuối, tiêu đề và định dạng yêu cầu, hãy xem bài viết Tạo yêu cầu API request.
- Tìm hiểu phản hồi: Sau khi nhận được phản hồi từ API, hãy tìm hiểu kế hoạch tuyến đường và ý nghĩa của từng tham số. Xem bài viết Giải thích phản hồi.
Tinh chỉnh kế hoạch tuyến đường
Việc chuyển đổi hoạt động hậu cần trong thế giới thực thành chi phí và hạn chế của API là một nhiệm vụ phức tạp. Kế hoạch tuyến đường ban đầu có thể không khớp với mục tiêu kinh doanh hoặc kỳ vọng của người lái xe. Việc tinh chỉnh kế hoạch tuyến đường là quy trình lặp đi lặp lại để kiểm thử các tuyến đường được trả về và điều chỉnh các tham số cho đến khi bạn tìm thấy một thiết lập đạt được các mục tiêu của mình.
Điều chỉnh mục tiêu và hạn chế
Nếu kế hoạch tuyến đường được tạo không đáp ứng nhu cầu của bạn, bạn có thể sửa đổi một số tham số để đạt được các kết quả khác nhau. Việc thắt chặt hoặc nới lỏng các tham số sẽ thay đổi cách giải quyết các mục tiêu xung đột trong kế hoạch tuyến đường. Việc nới lỏng các tham số là một cách hiệu quả để khám phá các tham số gây ra lỗi trong kế hoạch tuyến đường của bạn.
Bảng sau đây liệt kê các vấn đề thường gặp về tuyến đường và các tham số mà bạn có thể điều chỉnh để giải quyết các vấn đề đó.
| Trường hợp | Tham số | Điều Chỉnh | Mô tả |
|---|---|---|---|
| Một lô hàng quan trọng bị bỏ qua | shipments[].penaltyCost |
Tăng giá trị của lô hàng đó hoặc thêm chi phí phạt cho các lô hàng khác | Nếu lô hàng là không bắt buộc, hãy tăng chi phí phạt để ưu tiên lô hàng đó. Nếu lô hàng là bắt buộc (không có chi phí phạt), hãy thêm chi phí phạt cho các lô hàng khác, ít quan trọng hơn. Điều này khiến các lô hàng đó trở thành không bắt buộc, giúp giải phóng thời gian và sức chứa của xe cho lô hàng quan trọng. |
| Lô hàng bị bỏ qua do thời gian | softStartTime / softEndTime |
Thêm khoảng thời gian mềm | Khoảng thời gian cứng sẽ loại bỏ các nhiệm vụ bị trễ dù chỉ một phút. Khoảng thời gian mềm cho phép người lái xe đến muộn hơn một chút so với lịch trình bằng cách trả "chi phí" thay vì không hoàn thành nhiệm vụ. |
| Lô hàng bị bỏ qua do trọng lượng | loadLimits[].softMaxLoad và costPerUnitAbove |
Thêm yêu cầu tải mềm | Cho phép xe vượt quá sức chứa lý tưởng một chút (với chi phí phạt) thay vì bỏ lại gói hàng. |
| Lô hàng bị bỏ qua do đội xe quá tải | model.vehicles[] hoặc shipments[].timeWindows |
Thêm xe hoặc nới lỏng khoảng thời gian | Nếu có quá nhiều lô hàng cho đội xe hiện tại, đặc biệt là trong giờ cao điểm, hãy thêm nhiều xe hơn hoặc mở rộng khoảng thời gian giao hàng để phân tán khối lượng công việc. |
| Các tuyến đường quá dài hoặc không hiệu quả | vehicles[].costPerKilometer / costPerHour |
Thêm chi phí hoặc tăng giá trị của chúng | Cho API biết rằng việc di chuyển tốn kém, khuyến khích API loại bỏ các điểm dừng xa xôi, riêng lẻ để tạo các tuyến đường chặt chẽ hơn cho đội xe. |
| Ca làm việc của người lái xe quá dài | vehicles[].routeDurationLimit hoặc model.vehicles[] |
Thêm giới hạn thời lượng hoặc thêm xe và giới hạn | Thực thi giới hạn cứng (ví dụ: 8 giờ) về tổng thời gian người lái xe di chuyển trên đường. Việc chỉ thêm xe sẽ không rút ngắn các tuyến đường trừ phi bạn cũng áp dụng giới hạn thời lượng để buộc trình giải quyết phân phối khối lượng công việc trên đội xe lớn hơn. |
Cập nhật kế hoạch tuyến đường
Bạn thường cần cập nhật kế hoạch tuyến đường trong khi vẫn giữ nguyên cơ sở, chẳng hạn như thêm điểm lấy hàng vào lịch trình của người lái xe đang hoạt động. Để làm việc này, hãy sử dụng các tham số chèn. Các tham số này cung cấp cho API điểm bắt đầu dựa trên giải pháp trước đó của bạn, cho phép API sửa đổi kế hoạch hiện có thay vì tính toán một kế hoạch mới từ đầu.
Dưới đây là các cách để bạn có thể cập nhật kế hoạch tuyến đường bằng các tham số chèn:
- Truyền các tuyến đường từ phản hồi trước đó vào trường
injectedFirstSolutionRoutescủa yêu cầu mới. Điều này giúp tăng tốc quá trình tìm kiếm tối ưu hoá và hữu ích cho việc lập kế hoạch lại trước khi bắt đầu các hoạt động hằng ngày, chẳng hạn như tích hợp các lô hàng vào phút cuối. - Kiểm soát mức độ thay đổi bằng cách sử dụng trường
injectedSolutionConstraint. Điều này hữu ích khi các hoạt động đã diễn ra, cho phép bạn giữ nguyên trình tự hiện tại của người lái xe hoặc sửa các phần của kế hoạch đã được thực thi. - Đảm bảo tuyến đường được cập nhật vẫn được chỉ định cho xe chính xác bằng cách đặt
interpretInjectedSolutionsUsingLabelsthànhtrue. Điều này hữu ích trong quá trình thử nghiệm khi thêm hoặc xoá lô hàng và xe, vì nó so khớp các tuyến đường bằng cách sử dụng nhãn thay vì chỉ mục. Điều này yêu cầu tất cả nhãn xe và lô hàng phải là duy nhất.
Tích hợp kế hoạch tuyến đường
Kế hoạch tuyến đường hoàn chỉnh là một đối tượng dữ liệu đại diện cho việc quản lý tối ưu hoá tài nguyên và nhiệm vụ của bạn, đồng thời tuân theo các hạn chế và mục tiêu của bạn. Sử dụng kế hoạch tuyến đường này trong các hoạt động hằng ngày bằng cách tích hợp kế hoạch đó vào hệ thống của bạn. Điều này thường liên quan đến việc trực quan hoá kế hoạch tuyến đường cho người quản lý đội xe và gửi hướng dẫn từng bước cho người lái xe.
Hình ảnh trực quan
Để cho phép người quản lý đội xe xác minh và theo dõi kế hoạch tuyến đường của bạn, bạn có thể trực quan hoá kế hoạch tuyến đường theo các cách sau:
Để cho phép người quản lý đội xe xác minh và theo dõi kế hoạch tuyến đường của bạn, bạn có thể hiển thị kế hoạch đó trên bản đồ trang tổng quan. Tuỳ thuộc vào giai đoạn phát triển hiện tại, bạn có thể trực quan hoá kế hoạch tuyến đường theo các cách sau:
- Khám phá mà không cần mã: Bạn có thể sử dụng ứng dụng Route Optimization (Tối ưu hoá tuyến đường) nguồn mở để xem cách API chuyển đổi dữ liệu của bạn thành các đường dẫn thực tế trên bản đồ. Ứng dụng web này đóng vai trò là một công cụ khám phá cho phép bạn xây dựng các trường hợp, điều chỉnh các tham số hạn chế và hiển thị trực quan các kế hoạch tuyến đường kết quả trước khi viết bất kỳ mã nào.
- Hiển thị thứ tự ghé thăm: Bạn có thể hiển thị trình tự ghé thăm dưới dạng các điểm được đánh số trên bản đồ để đánh giá các kế hoạch tối ưu hoá và điều phối trong hệ thống của riêng bạn. Để làm việc này, hãy tìm mảng
visitsbên trong mỗi tuyến đường của phản hồi API. Các mục trong mảng này được sắp xếp chính xác như cách người lái xe nên thực hiện. Bạn có thể lặp lại danh sách này, sử dụngshipmentIndexđể truy xuất toạ độ vị trí cho từng điểm dừng và sử dụng thư viện ánh xạ để hiển thị các điểm đánh dấu được đánh số trên bản đồ dựa trên thứ tự của chúng trong danh sách. - Vẽ tuyến đường thực tế: Bạn có thể trực quan hoá đường dẫn đã lên kế hoạch chính xác trên bản đồ để hiểu lý do trình tối ưu hoá chọn một trình tự cụ thể. Đường đa giác này đại diện cho đường dẫn dự kiến để lập kế hoạch và đánh giá, không phải tuyến đường theo thời gian thực mà người lái xe đi. Đặt
populatePolylines: truetrong yêu cầu của bạn để nhận trườngencodedPolylinecho mỗi tuyến đường và giải mã trường đó bằng phương thứcgoogle.maps.geometry.encoding.decodePath()từ Maps JavaScript API.
Điều phối cho người lái xe
Bạn có thể tích hợp hướng dẫn từng bước vào ứng dụng dành cho người lái xe bằng cách sử dụng Navigation SDK (SDK Điều hướng) hoặc cung cấp liên kết sâu đến ứng dụng Google Maps dành cho người tiêu dùng.
- Navigation SDK (SDK Điều hướng): Nếu có ứng dụng dành cho người lái xe tuỳ chỉnh, bạn có thể tích hợp
Navigation SDK (SDK Điều hướng) cho Android hoặc
iOS để được hướng dẫn từng bước trong ứng dụng.
Bạn có thể tích hợp thông tin nhiệm vụ từ phản hồi của API vào hệ thống của mình và sử dụng SDK để điều hướng. Để truyền các tuyến đường từ phản hồi của API sang SDK, hãy đặt
populateTransitionPolylines: truetrong yêu cầu của bạn. Điều này tạo rarouteTokencho mỗi quá trình chuyển đổi trong phản hồi. - Fleet Engine: Để quản lý đội xe nâng cao, bạn có thể nhập kế hoạch tuyến đường do API tạo vào Fleet Engine để theo dõi việc thực thi tuyến đường theo thời gian thực. Mặc dù API cung cấp một hình nhiều đường của đường dẫn dự kiến để đánh giá, nhưng Fleet Engine sẽ ghép nối trình tự ghé thăm đã lên kế hoạch với tính năng theo dõi xe trực tiếp.