Mục tiêu của Route Optimization API là lập kế hoạch tuyến đường cho một đội xe để ghé thăm một nhóm địa điểm. Đối tượng OptimizeToursRequest mô tả các thuộc tính của những phương tiện và vị trí này, đồng thời là cấu trúc chính của phần nội dung yêu cầu của mọi điểm cuối.
Cấu trúc cơ bản của đối tượng OptimizeToursRequest như sau:
- Trường
modelchứa thông báoShipmentModelcó hai trường chính:
Tài liệu này mô tả các loại thông báo sau:
ShipmentModel: Chứa danh sách các lô hàng, phương tiện hiện có và các đối tượng khác mô tả mối quan hệ giữa chúng.Shipment: Mô tả các vị trí mà một xe sẽ ghé thăm. Các điểm này có thể đại diện cho các gói hàng thực tế cần lấy và giao, hoặc những địa điểm mà tài xế xe thực hiện dịch vụ.Vehicle: Mô tả phương tiện vận chuyển giữa các địa điểm vận chuyển. Mỗi phương tiện tương ứng với một phương tiện thực tế hoặc một người đang di chuyển bằng cách đi bộ.
ShipmentModel
ShipmentModel chứa các phần tử của bài toán tối ưu hoá tuyến đường. Nó
chứa một tập hợp các lô hàng có thể được thực hiện bởi một tập hợp các phương tiện, trong khi
xem xét các ràng buộc và giảm thiểu chi phí tổng thể.
Bảng dưới đây mô tả một số thuộc tính liên quan của ShipmentModel:
| Thuộc tính | Mô tả |
|---|---|
shipments và vehicles |
Các đối tượng bắt buộc chứa thông tin chi tiết về một hoặc nhiều lô hàng và xe. |
globalStartTime và globalEndTime |
Cho biết thời điểm bắt đầu và kết thúc của khoảng thời gian mà tất cả các xe phải hoàn tất mọi chuyến hàng. Mặc dù các thuộc tính này không bắt buộc, nhưng bạn nên đưa các thuộc tính này vào vì trình tối ưu hoá hoạt động hiệu quả nhất khi tuân thủ các quy tắc ràng buộc về thời gian. |
Hãy xem tài liệu tham khảo để biết danh sách đầy đủ các thuộc tính trong ShipmentModel.
ShipmentModel Ví dụ
Trong ví dụ này, bạn có một dịch vụ chăm sóc chó ban ngày và bạn đang bắt đầu tạo yêu cầu. Bạn sẽ xác định các lô hàng và xe sau, nhưng bạn muốn bắt đầu bằng cách đặt giờ hoạt động và chi phí vận hành hằng giờ.
Trong ví dụ này, các giá trị thuộc tính ShipmentModel trong yêu cầu của bạn như sau:
| Thuộc tính | Giá trị | Mô tả |
|---|---|---|
globalStartTime |
2024-02-13T00:00:00.000Z | Ngày và giờ bắt đầu của giờ hoạt động. |
globalEndTime |
2024-02-14T06:00:00.000Z | Ngày và giờ kết thúc giờ hoạt động. |
Sau đây là mã mẫu của thông báo ShipmentModel kết hợp các giá trị của tình huống ví dụ.
{ "model": { "shipments": [ ... ], "vehicles": [ ... ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }
Shipment
Loại thông báo Shipment xác định cấu trúc thuộc tính của một lô hàng có thể được giao hoặc dịch vụ có thể được thực hiện trên một tuyến đường.
Như minh hoạ trong sơ đồ:
- Thông báo
Shipmentcó tất cả thông tin về một lô hàng hoặc dịch vụ thực tế. - Tất cả thông báo
Shipmentđều được chỉ định trong trườngshipments. - Trường
shipmentschứa một hoặc nhiều thông báoShipment.
Thông báo Shipment cần có ít nhất một đối tượng pickups hoặc deliveries.
Định nghĩa của các đối tượng này như sau:
pickupsxác định địa điểm lấy hàng của một lô hàng.deliveriesxác định vị trí giao hàng của một lô hàng.- Cả
pickupsvàdeliveriesđều chứa loại thông báoVisitRequestxác định vị trí và các thông tin chi tiết khác.
Bảng sau đây mô tả các trường hợp khác nhau dựa trên cấu hình của pickups và deliveries trong thông báo Shipment.
| Trường hợp | Mô tả |
|---|---|
Chỉ pickups |
Giả sử bạn chỉ thu thập lô hàng. |
Chỉ deliveries |
Giả sử bạn đã tải trước lô hàng hoặc đang cung cấp dịch vụ. |
Cả pickups và deliveries |
Xe được chỉ định phải hoàn tất việc lấy hàng trước, sau đó mới đến việc giao hàng. Chỉ xe đã đến lấy hàng mới có thể giao hàng. |
Nhiều pickups hoặc deliveries |
Nếu một lô hàng có nhiều khả năng cho pickups hoặc deliveries, thì trình tối ưu hoá sẽ chọn một lựa chọn lấy hàng và một lựa chọn giao hàng để sử dụng, dựa trên việc giảm thiểu chi phí và đáp ứng các quy tắc ràng buộc. |
Hãy xem tài liệu tham khảo để biết danh sách đầy đủ các thuộc tính trong Shipment.
Shipment Ví dụ
Trong ví dụ này, bạn có một dịch vụ chăm sóc chó ban ngày, trong đó bạn đón chó từ nhà của chúng và đưa chúng đến cơ sở chăm sóc ban ngày của bạn. Bạn muốn đặt địa điểm đón hai chú chó và đặt địa điểm giao hai chú chó đó đến doanh nghiệp của bạn:
- Nhà của chú chó đầu tiên nằm ở Tháp Coit, San Francisco. Toạ độ của vị trí này là vĩ độ 37,8024 và kinh độ -122,4058.
- Ngôi nhà của chú chó thứ hai nằm ở Công viên South Sunset Playground, San Francisco. Toạ độ của vị trí này là vĩ độ 37,7359 và kinh độ -122,5011.
- Dịch vụ chăm sóc chó của bạn nằm ở Công viên Mission Dolores, San Francisco. Toạ độ của vị trí này là vĩ độ 37,759773 và kinh độ -122,427063.
Sau đây là mã mẫu của thông báo Shipment, trong đó đối tượng shipments chứa hai loại thông báo Shipment có toạ độ mẫu.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ ... ] } }
Vehicle
Loại thông báo Vehicle xác định cấu trúc thuộc tính của một phương tiện có thể thực hiện lô hàng trong một tuyến đường.
Như minh hoạ trong sơ đồ:
- Thông báo
Vehiclecó tất cả thông tin về một chiếc xe trong thực tế. - Tất cả thông báo
Vehicleđều được chỉ định trong trườngvehicles. - Trường
vehicleschứa nhiều thông báoVehicle.
Bảng sau đây mô tả một số thuộc tính có liên quan của Vehicle.
| Thuộc tính | Mô tả |
|---|---|
startLocation và endLocation |
Vị trí bắt đầu và kết thúc của các xe, là một phần của tuyến đường tối ưu cuối cùng. Nếu không được xác định, các vị trí này sẽ mặc định là vị trí lấy hàng đầu tiên và vị trí giao hàng cuối cùng. |
costPerHour, costPerKilometer, costPerTraveledHour |
Tham số chi phí dành riêng cho xe. Bạn nên có ít nhất một tham số chi phí trong yêu cầu để API trả về tuyến đường tối ưu. Hãy xem khái niệm chính về Mô hình chi phí để tìm hiểu thêm về chi phí. |
startTimeWindows và endTimeWindows |
Xác định khoảng thời gian mà một xe có thể hoạt động trên một tuyến đường. Các giá trị này phải nằm trong khoảng thời gian globalStartTime và globalEndTime được đặt trong ShipmentModel. Mặc dù không bắt buộc, nhưng bạn nên thêm thuộc tính này vì trình tối ưu hoá hoạt động hiệu quả nhất khi tuân thủ các quy tắc ràng buộc về thời gian. |
Vehicle Ví dụ
Trong ví dụ này, bạn có một dịch vụ chăm sóc chó ban ngày và bạn muốn xác định vị trí của xe vào đầu và cuối ngày cũng như lượng xăng mà xe tiêu thụ. Bạn không cần chỉ định giờ làm việc của xe vì giờ làm việc này khớp với giờ bạn đã xác định trong các thuộc tính globalStartTime và globalEndTime trong đối tượng ShipmentModel.
Trong ví dụ này, các giá trị thuộc tính Vehicle trong yêu cầu của bạn như sau:
| Thuộc tính | Giá trị | Mô tả |
|---|---|---|
startLocation |
latitude: 37.759773, longitude: -122.427063 |
Toạ độ xuất phát của tuyến đường cho xe của bạn. Những từ khoá này khớp với vị trí của dịch vụ chăm sóc chó ban ngày của bạn, nằm ở Công viên Mission Dolores, San Francisco. |
endLocation |
latitude: 37.759773, longitude: -122.427063 |
Toạ độ điểm kết thúc của tuyến đường cho xe của bạn. Những từ khoá này khớp với vị trí của dịch vụ chăm sóc chó ban ngày của bạn, nằm ở Công viên Mission Dolores, San Francisco. |
costPerHour |
27 | Số tiền bạn trả cho tài xế lái xe đưa đón thú cưng. Bạn trả cho tài xế 27 đô la mỗi giờ. |
Sau đây là mã mẫu của thông báo Vehicle kết hợp các giá trị của tình huống ví dụ.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
Hãy xem tài liệu tham khảo để biết danh sách đầy đủ các thuộc tính trong Vehicle.
Ví dụ về yêu cầu hoàn chỉnh
Mã mẫu sau đây cung cấp một ví dụ hoàn chỉnh về yêu cầu, kết hợp các ví dụ ShipmentModel, Shipment và Vehicle trong tài liệu này.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }