Trang này mô tả vòng đời của một kế hoạch tuyến đường sử dụng Route Optimization API, bắt đầu từ việc xác định nhu cầu định tuyến 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 lộ trình, 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 quy tắc ràng buộc phức tạp và mục tiêu kinh doanh thành mã cho API.
- Tối ưu hoá kế hoạch lộ trình cho doanh nghiệp: Tìm hiểu cách tinh chỉnh kế hoạch lộ trình để đạt được mục tiêu và cải thiện hoạt động hằng ngày.
- Triển khai vào hoạt động sản xuất: Triển khai kế hoạch tuyến đường bằng cách đưa kế hoạch đó vào 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 kế hoạch định tuyến diễn ra khi bạn tích hợp API lần đầu tiên hoặc khi yêu cầu kinh doanh của bạn thay đổi đáng kể. Nó bao gồm giai đoạn 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à tối thiểu. Chương trình này bao gồm các giai đoạn từ 2 đến 4.
Vòng đời của một tuyến đường bao gồm các giai đoạn 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à quy tắc ràng buộc để có được bức tranh toàn cảnh về hoạt động của bạn trước khi bắt đầu sử dụng API.
- Ánh xạ dữ liệu: Chuyển đổi thực tế kinh doanh của bạn thành các tham số API để kế hoạch lộ trình phản ánh cách bạn cần đội xe của mình hoạt động.
- Tạo yêu cầu và nhận kế hoạch tuyến đường: Nhập dữ liệu của bạn 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: Thử nghiệm kế hoạch tuyến đường và lặp lại kế hoạch đó bằng cách điều chỉnh các quy tắc ràng buộc 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 thông tin chỉ đường hữu ích.
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ề hoạt động hằng ngày của mình thành các danh mục dữ liệu rõ ràng. Nhờ đó, bạn có thể bắt đầu quá trình triển khai với thông tin 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ư những mục tiêu 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 lộ trình là xác định tài nguyên và nhiệm vụ, tức là phương tiện và lô hàng của bạn.
| Xe | Lô hàng |
|---|---|
|
|
Xác định các quy tắc ràng buộc
Các quy tắc ràng buộc là giới hạn và quy định hạn chế về cách bạn có thể sử dụng phương tiện và cách bạn cần xử lý lô hàng. Chúng quyết định 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 tối ưu.
Các quy tắc ràng buộc thường thuộc hai loại:
| Quy tắc ràng buộc nghiêm ngặt | Quy tắc ràng buộc mềm |
|---|---|
| Đây là những giới hạn không thể vượt qua. Ví dụ: xe tải không thể chở trọng lượng lớn hơn tải trọng tối đa và tài xế không thể đến 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ể bị vi phạm nếu cần, thường là với chi phí phạt. Ví dụ: bạn có thể chỉ muốn 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 có thể vượt quá các giới hạn này để có tuyến đường tốt hơn. |
Sau đây là một số quy tắc ràng buộc thường gặp:
- Giới hạn về 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 phương tiện có thể chở.
- Khung giờ: Khung giờ cụ thể mà một địa điểm mở cửa để ghé thăm hoặc ca làm việc cụ thể của tài xế.
- Chi phí: Chi phí vận hành một phương tiện hoặc bỏ qua một lô hàng. Một trong những mục tiêu chính của API này là tạo ra một kế hoạch tuyến đường tiết kiệm chi phí.
- Thời gian nghỉ của tài xế: Thời gian nghỉ ngơi của tài xế thường được quy định trong 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 xác định tài nguyên, nhiệm vụ và các giới hạn, bạn cần xác định những chỉ số quan trọng nhất đối với doanh nghiệp của mình. Những mục tiêu này đi đôi với các quy tắc ràng buộc và giúp bạn quyết định điều gì quan trọng nhất khi lập kế hoạch cho một tuyến đường.
Sau đâ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 để hoàn thành công việc trong ngày sớm hơn? | Bạn muốn đi đường ngắn nhất để tiết kiệm nhiên liệu hay muốn đi đường nhanh hơn nhưng có thể dài hơn vì đi qua đườ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 nơi 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? |
Liên kết dữ liệu
Sau khi thu thập dữ liệu, hãy liên kết dữ liệu đó 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 tài khoản thực tế của doanh nghiệp bạn.
Sử dụng các tham số trong bảng tiếp theo để liên kết tài nguyên, nhiệm vụ, quy tắc ràng buộc và mục tiêu mà bạn đã liên kết trong phần Xác định phạm vi vấn đề.
Ánh xạ biến
| Khái niệm thực tế | Tham số API | Mô tả |
|---|---|---|
| Tài xế hoặc xe | model.vehicles[] |
Đại diện cho một xe trong đội xe của bạn. |
| Vị trí của kho hàng |
vehicles[].startWaypointvehicles[].endWaypoint
|
Vị trí bắt đầu và kết thúc tuyến đường của xe. |
| Giờ hoạt động của bạn |
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 hoạt động của toàn bộ đội xe. |
| Nhiệm vụ hoặc gói | model.shipments[] |
Đại diện cho một công việc. Có thể là pickup, delivery hoặc cả hai. |
| Vị trí của việc cần làm |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Vị trí địa lý nơi công việc diễn ra. |
| Thời gian phục 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ạ quy tắc ràng buộc
| Giới hạn trong thực tế | 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á hạn mức còn lại, thì lô hàng đó sẽ không được chỉ định. |
| Kích thước gói hàng | shipments[].loadDemands |
Sức chứa của xe mà một lô hàng chiếm dụng. |
| Quy định hạn chế về phương tiện | shipments[].allowedVehicleIndices |
Hạn chế một lô hàng để chỉ những xe hoặc tài xế cụ thể mới có thể đến lấy hoặc giao lô hàng đó. |
| Giờ hoạt động | shipments[].pickups[].timeWindows hoặc shipments[].deliveries[].timeWindows |
Đặt giờ mở cửa của một địa điểm. Nếu một 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 một tài xế cụ thể có thể làm việc (ví dụ: tối đa 8 giờ), bất kể thời gian kết thúc chung. |
| Thời gian nghỉ của tài xế | vehicles[].breakRule |
Thực thi các quy tắc nghỉ ngơi cụ thể, chẳng hạn như nghỉ giải lao 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). Thao tác này sẽ giới hạn tuyến đường ở những đường hợp pháp và xác định tốc độ dùng để tính thời gian di chuyển. |
Liên kết 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 phải ưu tiên sử dụng ít xe hơn thay vì tăng tổng quãng đường 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 km đã đi. Ưu tiên các tuyến đường ngắn hơn để tiết kiệm nhiên liệu và giảm 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 giúp phân biệt giữa việc ngồi trong xe khi tắc đường (tốn kém) và chờ tại điểm dừng(có thể rẻ hơn). |
| Ưu tiên một số việc cần làm | shipments[].penaltyCost |
Áp dụng chi phí nếu bỏ qua một lô hàng cụ thể. Việc đặt mức độ ưu tiên cao cho các tác vụ quan trọng sẽ đảm bảo các tác vụ này được ưu tiên hơn các tác vụ không bắt buộc. |
Tạo yêu cầu và nhận phản hồi
Để sử dụng Route Optimization API nhằm tạo kế hoạch định tuyến, bạn cần thực hiện 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 Google Cloud, bật API và định cấu hình quy trình xác thực. Để xem hướng dẫn, hãy tham khảo bài viết Bắt đầu. Bạn chỉ cần thực hiện 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 mối 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 phần Tạo yêu cầu API.
- Hiểu rõ 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 phần Diễn giải phản hồi.
Tinh chỉnh kế hoạch lộ trình
Việc chuyển đổi hoạt động hậu cần trong thực tế thành chi phí và các quy tắc ràng buộc của API là một nhiệm vụ phức tạp. Kế hoạch lộ trình ban đầu có thể không phù hợp với mục tiêu kinh doanh hoặc kỳ vọng của tài xế. Tinh chỉnh kế hoạch tuyến đường là quy trình lặp lại của việc thử nghiệm 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 chế độ thiết lập giúp đạt được mục tiêu.
Điều chỉnh mục tiêu và quy tắc ràng buộc
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ố nhất định để đạt được kết quả khác. 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, và 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ố đang 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ề định tuyến 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ả |
|---|---|---|---|
| Bỏ qua một lô hàng quan trọng | 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 vào các lô hàng khác, ít quan trọng hơn. Điều này khiến các lô hàng này 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. |
| Đã bỏ qua dịch vụ giao hàng do thời gian | softStartTime/softEndTime |
Thêm khung thời gian linh hoạt | Khung thời gian cứng sẽ loại bỏ những nhiệm vụ bị trễ dù chỉ một phút. Khung thời gian linh hoạt cho phép tài xế đến muộn một chút so với lịch trình bằng cách trả một khoản "phí" thay vì không hoàn thành nhiệm vụ. |
| Đã bỏ qua dịch vụ giao hàng do trọng lượng | loadLimits[].softMaxLoad và costPerUnitAbove |
Thêm nhu cầu tải mềm | Cho phép xe vượt quá một chút so với sức chứa lý tưởng (để chịu phạt) thay vì bỏ lại một gói hàng. |
| Đã bỏ qua lô hàng do đội xe quá tải | model.vehicles[] hoặc shipments[].timeWindows |
Thêm xe hoặc nới lỏng khung 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 khung giờ giao hàng để phân bổ khối lượng công việ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 chi phí | Cho API biết rằng việc di chuyển rất tốn kém, khuyến khích API bỏ qua các điểm dừng xa, tách biệt để tạo tuyến đường chặt chẽ hơn cho đội xe. |
| Ca làm việc của tài xế quá dài | vehicles[].routeDurationLimit hoặc model.vehicles[] |
Thêm giới hạn thời lượng hoặc thêm phương tiện và giới hạn | Áp dụng giới hạn nghiêm ngặt (ví dụ: 8 giờ) đối với tổng thời gian tài xế lái xe trên đường. Chỉ thêm xe sẽ không rút ngắn 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 phân phối khối lượng công việc cho độ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 một điểm đến đón vào lịch trình của tài xế đ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 một đ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.
Sau đây là những cách khác nhau để 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 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 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 chót. - Kiểm soát mức độ thay đổi bằng trường
injectedSolutionConstraint. Điều này rất hữu ích khi các hoạt động đã được tiến hành, cho phép bạn duy trì trình tự hiện tại của tài xế hoặc sửa các phần của kế hoạch đã được thực thi. - Đảm bảo tuyến đường đã cập nhật vẫn được chỉ định cho đúng xe bằng cách đặt
interpretInjectedSolutionsUsingLabelsthànhtrue. Điều này rất hữu ích trong thử nghiệm khi thêm hoặc xoá lô hàng và xe, vì nó khớp các tuyến đường bằng nhãn thay vì chỉ mục. Điều này yêu cầu tất cả nhãn xe và nhãn vận chuyển 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ụ, đồng thời tuân thủ các quy tắc ràng buộc và mục tiêu của bạn. Sử dụng kế hoạch tuyến đường này trong 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. Việc này thường bao gồm 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 chặng cho tài xế.
Hình ảnh trực quan
Để cho phép người quản lý đội xe xác minh và giám sát kế hoạch tuyến đường, bạn có thể trực quan hoá kế hoạch tuyến đường theo những cách sau:
Để cho phép người quản lý đội xe xác minh và giám sát kế hoạch tuyến đường, 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ể hình dung kế hoạch tuyến đường theo những cách sau:
- Khám phá mà không cần mã: Bạn có thể sử dụng ứng dụng Tối ưu hoá tuyến đường nguồn mở để xem cách API chuyển dữ liệu của bạn thành các tuyến đường 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 tình huống, điều chỉnh tham số ràng buộc và kết xuất trực quan các kế hoạch tuyến đường thu được trước khi viết mã.
- 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á 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 của API. Các mục trong mảng này được sắp xếp chính xác theo 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 bản đồ để hiển thị điểm đánh dấu được đánh số trên bản đồ dựa trên thứ tự của các điểm dừng trong danh sách. - Vẽ tuyến đường thực tế: Bạn có thể hình dung chính xác tuyến đường đã lên kế hoạch trên bản đồ để hiểu lý do trình tối ưu hoá chọn một trình tự cụ thể. Hình nhiều đường này thể hiện tuyến đường dự kiến để lập kế hoạch và đánh giá, chứ không phải tuyến đường mà tài xế đi theo thời gian thực. Đặ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 tài xế
Bạn có thể tích hợp tính năng chỉ đường từng chặng vào ứng dụng dành cho tài xế bằng cách sử dụng SDK Điều hướng hoặc cung cấp đường liên kết sâu đến ứng dụng Google Maps dành cho người dùng.
- Navigation SDK: Nếu có ứng dụng tuỳ chỉnh cho tài xế, bạn có thể tích hợp Navigation SDK cho Android hoặc iOS để được hướng dẫn từng chặng trong ứng dụng.
Bạn có thể tích hợp thông tin về 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 để chỉ đường. Để chuyển các tuyến từ phản hồi của API đến SDK, hãy đặt
populateTransitionPolylines: truetrong yêu cầu của bạn. Thao tác này sẽ tạo mộtrouteTokencho mỗi lượt 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 quá trình thực hiện 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 tuyến đường dự kiến để đánh giá, nhưng Fleet Engine sẽ kết hợp trình tự ghé thăm theo kế hoạch của bạn với tính năng theo dõi xe theo thời gian thực.