Vòng đời của kế hoạch lộ trình

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, bắt đầu từ việc xác định nhu cầu định tuyến của bạ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 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 ràng buộc phức tạp và mục tiêu kinh doanh của bạn 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 cho 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 của bạn.

Sơ đồ sau đây cho thấy vòng đời của một kế hoạch tuyến đường.

Sơ đồ quy trình về vòng đời của một kế hoạch tuyến đường được giải thích trong văn bản bên dưới

Giai đoạn triển khai của kế hoạch tuyến đường diễn ra khi bạn tích hợp API lần đầu hoặc khi yêu cầu kinh doanh của bạn thay đổi đáng kể. Nội dung này bao gồm các giai đoạn từ 1 đến 5.

Giai đoạn vận hành hằng ngày có quy trình tinh gọn hơn và ít cần tinh chỉnh. Giai đoạn này bao gồm giai đoạn 2 đến 4.

Sau đây là các giai đoạn trong vòng đời của một tuyến đường:

  1. 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ó được bức tranh toàn diện về hoạt động của bạn trước khi bắt đầu sử dụng API.
  2. Lập bản đồ dữ liệu: Chuyển đổi thực tế kinh doanh của bạn thành các thông số API để kế hoạch tuyến đường phản ánh cách bạn cần đội xe hoạt động.
  3. 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á.
  4. Tinh chỉnh kế hoạch tuyến đường: Kiểm thử kế hoạch tuyến đường và lặp lại quy trình này bằng cách điều chỉnh cá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.
  5. 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ề các hoạt động hằng ngày của mình thành các danh mục dữ liệu rõ ràng. Điều này giúp bạn bắt đầu quy trình triển khai một cách rõ ràng về những tài nguyên và nhiệm vụ hiện tại, những yếu tố hạn chế và 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à công việc của bạn

Một bước quan trọng khi lập kế hoạch cho kế hoạch tuyến đường là xác định các tài nguyên và nhiệm vụ, tức là các phương tiện và lô hàng của bạn.

Các phương tiện Các lô hàng
  • Số lượng: Bạn có bao nhiêu xe?
  • Vị trí: Phương tiện bắt đầu và kết thúc ở đâu?
  • Thời gian: Giờ làm việc của người lái xe là bao nhiêu?
  • Sức chứa: Xe của bạn có giới hạn nào?
  • Chi phí: Chi phí vận hành đội xe của bạn là bao nhiêu?
  • Vị trí: Điểm đến lấy hàng và giao hàng ở đâu?
  • Yêu cầu: Trọng lượng hoặc kích thước của các gói hàng là bao nhiêu?
  • Ràng buộc: Có khung thời gian cụ thể để giao hàng không?
  • Thời gian phục vụ: Người lái xe cần đỗ xe và dỡ hàng trong bao lâu?
  • Yêu cầu: Chuyến hàng có yêu cầu loại xe hoặc người lái xe cụ thể không?

Xác định các hạn chế

Các ràng buộc là những 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ý các lô hàng. Chúng quyết định hầu hết các hoạt động của bạn và đóng vai trò quan trọng khi tạo kế hoạch tuyến đường tối ưu.

Các ràng buộc thường thuộc hai danh mục:

Hạn chế bắt buộc Hạn chế không bắt buộc
Đây là những giới hạn không thể phá vỡ. Ví dụ: xe tải không thể chở quá trọng lượng tối đa và người lái xe 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à phải trả một khoản tiền phạt. Ví dụ: bạn có thể chỉ muốn chất hàng lên xe tải đến 80% công suất 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.

Sau đây là một số hạn chế 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 chiếc xe có thể chở.
  • Khung giờ: Khoảng thời gian cụ thể mà một địa điểm mở cửa cho khách đến tham quan hoặc giờ làm việc cụ thể của một tài xế.
  • 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 ra một 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 là thời gian bắt buộc 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 xác định các tài nguyên và nhiệm vụ cũng như những hạn chế của chúng, 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 kèm với các hạn chế 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 sớm hơn? Bạn muốn đi theo đường ngắn nhất để tiết kiệm nhiên liệu hay bạn muốn đi theo 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 nơi vào những thời điểm cụ thể (có thể kéo dài thời gian di chuyển)? 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 liên kết 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.

Hãy sử dụng các tham số trong bảng tiếp theo để liên kết các tài nguyên, nhiệm vụ, 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 trong thực tế Tham số API Mô tả
Người lái xe hoặc phương tiện model.vehicles[] Đại diện cho một chiếc xe duy nhất trong đội xe của bạn.
Vị trí của kho hàng vehicles[].startWaypoint
vehicles[].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.globalStartTime
model.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[].arrivalWaypoint
deliveries[].arrivalWaypoint
Vị trí địa lý nơi diễn ra công việc.
Thời gian dịch vụ pickups[].duration
deliveries[].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.

Liên kết quy tắc ràng buộc

Giới hạn 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 giới hạn 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 shipments[].loadDemands Số 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 để chỉ có thể được nhận hoặc giao bởi các phương tiện hoặc người lái xe cụ thể.
Giờ hoạt động shipments[].pickups[].timeWindows hoặc shipments[].deliveries[].timeWindows Đặt giờ mở cửa để khách có thể đến 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 giới hạn mềm về thời gian làm việc của một tài xế cụ thể (ví dụ: tối đa 8 giờ), bất kể thời gian kết thúc chung.
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 chế độ di chuyển (ví dụ: DRIVE hoặc BICYCLE). Chế độ này giới hạn tuyến đường ở những con đườ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 khi sử dụng xe. Chi phí cố định cao buộc một 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 một 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ờ đợi tại một đ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 một chi phí nếu một lô hàng cụ thể bị bỏ qua. Việc đặt mức này ở mức cao sẽ đảm bảo các công việc quan trọng được ưu tiên hơn các công việc 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 để tạo kế hoạch tuyến đường bao gồm các bước sau:

  1. Đị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. Bạn chỉ cần thực hiện bước này một lần.
  2. 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ề các điểm cuối, tiêu đề và định dạng yêu cầu, hãy xem phần Đưa ra yêu cầu API.
  3. 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 phần Diễn giải 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à các 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 phù hợp với mục tiêu kinh doanh hoặc kỳ vọng của người lái xe. 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 đã 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 đạt được mục tiêu của mình.

Điều chỉnh mục tiêu và cá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ố để đạt được kết quả khác. Việc thắt chặt hoặc nới lỏng các thông số sẽ làm thay đổi cách giải quyết các mục tiêu xung đột trong kế hoạch tuyến đường, đồng thời nới lỏng các thông số là một cách hiệu quả để khám phá những thông 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ề định tuyến và các thông 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 phí phạt vào các lô hàng khác Nếu bạn không bắt buộc phải vận chuyển, hãy tăng chi phí phạt để ưu tiên việc vận chuyển. Nếu lô hàng là bắt buộc (không có phí phạt), hãy thêm phí phạt vào các lô hàng ít quan trọng khác. Điều này khiến chúng trở thành mặt hàng 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 lô hàng do thời gian softStartTime/softEndTime Thêm khoảng thời gian linh hoạt Khung giờ cố định sẽ loại bỏ những tác vụ bị trễ dù chỉ một phút. Khoảng thời gian linh hoạt 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ả một "khoản phí" thay vì không hoàn thành nhiệm vụ.
Đã bỏ qua gói hàng do trọng lượng loadLimits[].softMaxLoadcostPerUnitAbove Thêm các yêu cầu tải mềm Cho phép xe chở quá tải một chút (chịu phạt) thay vì bỏ lại gói hàng.
Đã bỏ qua dịch vụ giao hàng do đội xe quá tải model.vehicles[] hoặc shipments[].timeWindows Thêm phương tiện 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 thời gian giao hàng để phân tán 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 tốn kém, khuyến khích API loại bỏ các điểm dừng ở xa và biệt lập để tạo ra các tuyến đường ngắn 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 về thời lượng hoặc thêm phương tiện và giới hạn Áp dụng giới hạn tối đa (ví dụ: 8 giờ) cho tổng thời gian lái xe. Việc 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 trên đội xe lớn hơn.

Cập nhật kế hoạch lộ trình

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 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 thông số chèn. Các thông 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 đây 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à 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 injectedFirstSolutionRoutes củ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 chót.
  • Kiểm soát mức độ thay đổi bằ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 hiện.
  • Đảm bảo tuyến đường mới cập nhật vẫn được chỉ định cho xe phù hợp bằng cách đặt interpretInjectedSolutionsUsingLabels thành true. Điều này rất hữu ích trong quá trình 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 đòi hỏi tất cả nhãn xe và nhãn lô hàng đều phải riêng biệ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 thể hiện việc quản lý tối ưu các tài nguyên và nhiệm vụ của bạn, đồng thời tuân thủ các ràng buộc và mục tiêu của bạn. Hãy 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 này vào hệ thống của bạn. Việc 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 chỉ dẫn từng chặng 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à giám sát 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 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 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 những cách sau:

  • Khám phá mà không cần mã: Bạn có thể dùng ứng dụng 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 tạo các tình huống, điều chỉnh các tham số ràng buộc và hiển thị trực quan các kế hoạch tuyến đường thu được trước khi viết bất kỳ mã nào.
  • Hiển thị thứ tự ghé thăm: Bạn có thể cho thấy 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 xác định vị trí mảng visits bên trong mỗi tuyến 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 mà 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ụng shipmentIndex để truy xuất toạ độ vị trí cho từng điểm dừng và sử dụng thư viện lập bản đồ để 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ể 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ể. Đường nhiều đoạn này thể hiện đường đi dự kiến để lập kế hoạch và đánh giá, chứ không phải tuyến đường theo thời gian thực mà người lái xe đã đi. Đặt populatePolylines: true trong yêu cầu của bạn để nhận trường encodedPolyline cho từng tuyến đường và giải mã trường đó bằng phương thức google.maps.geometry.encoding.decodePath() trong Maps JavaScript API.

Gử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 người lái xe bằng Navigation SDK 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 dành cho người lái xe, bạn có thể tích hợp Navigation SDK cho Android hoặc iOS để nhận chỉ 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 và sử dụng SDK để điều hướng. Để truyền các tuyến đường từ phản hồi API đến SDK, hãy đặt populateTransitionPolylines: true trong yêu cầu của bạn. Thao tác này sẽ tạo ra một routeToken cho mỗi chuyển cảnh 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 hiện tuyến đường theo thời gian thực. Mặc dù API cung cấp một đường nhiều đoạn của đường dẫn dự kiến để đánh giá, nhưng Fleet Engine sẽ ghép nối trình tự dự kiến của các lượt ghé thăm với tính năng theo dõi xe trực tiếp.