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 nội dung yêu cầu của mọi điểm cuối.
Cấu trúc cơ sở của đối tượng OptimizeToursRequest
như sau:
- Trường
model
chứa thông báoShipmentModel
có 2 trường khoá:
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, xe có sẵn và các đối tượng khác mô tả mối quan hệ của chúng.Shipment
: Mô tả những vị trí mà xe sẽ ghé thăm. Chúng 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 nơi mà người lái 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 chân.
ShipmentModel
ShipmentModel
chứa các phần tử của vấn đề tối ưu hoá tuyến đường. Nó chứa một nhóm lô hàng có thể được thực hiện bởi một nhóm xe, đồng thời xem xét các ràng buộc và giảm thiểu tổng chi phí.
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 gian bắt đầu và kết thúc của khung thời gian mà tất cả các xe phải hoàn tất mọi chuyến vận chuyển. Mặc dù không bắt buộc, nhưng bạn nên thêm các 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 giới hạn 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ụ trông trẻ 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í hoạt động theo giờ của doanh nghiệp.
Trong ví dụ này, các giá trị thuộc tính ShipmentModel
trong yêu cầu của bạn là:
Thuộc tính | Giá trị | Mô tả |
---|---|---|
globalStartTime |
2024-02-13T00:00:00.000Z | Ngày và giờ bắt đầu giờ làm việc. |
globalEndTime |
2024-02-14T06:00:00.000Z | Ngày và giờ kết thúc giờ làm việc. |
Sau đây là một đoạn 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
Shipment
có tất cả thông tin của 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
shipments
chứa một hoặc nhiều thông báoShipment
.
Thông báo Shipment
cần í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:
pickups
xác định địa điểm đến lấy hàng của một lô hàng.deliveries
xác định vị trí giao hàng của một lô hàng.- Cả
pickups
vàdeliveries
đều chứa một loại thông báoVisitRequest
xá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 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 |
Chúng tôi giả định rằng 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 thành việc lấy hàng trước, sau đó mới giao hàng. Chỉ chiếc xe đã thực hiện việc đến lấy mới có thể thực hiện việc giao hàng. |
Nhiều pickups hoặc deliveries |
Nếu một lô hàng liệt kê 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 nhận 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 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ụ trông giữ thú cưng, trong đó bạn đến nhà của khách hàng để đón thú cưng và đưa chúng đến cơ sở trông giữ của bạn. Bạn muốn đặt vị trí đón của 2 chú cún và đặt vị trí giao hàng là doanh nghiệp của bạn:
- Ngôi nhà đầu tiên của chú chó là ở Tháp Coit, San Francisco. Toạ độ của vị trí này là vĩ độ 37.8024 và kinh độ -122.4058.
- Ngôi nhà thứ hai của chú chó nằm ở Công viên Sân chơi South Sunset, San Francisco. Toạ độ của vị trí này là vĩ độ 37.7359 và kinh độ -122.5011.
- Trường mầm non cho thú cưng 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ột đoạn mã mẫu của thông báo Shipment
, trong đó đối tượng shipments
chứa 2 loại thông báo Shipment
với cá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 chiếc xe có thể thực hiện chuyến vận chuyển trên một tuyến đường.
Như minh hoạ trong sơ đồ:
- Thông báo
Vehicle
chứa tất cả thông tin của một chiếc xe ngoài đời thực. - Tất cả thông báo
Vehicle
đều được chỉ định trong trườngvehicles
. - Trường
vehicles
chứa nhiều thông báoVehicle
.
Bảng sau đây mô tả một số thuộc tính 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 được tối ưu hoá cuối cùng. Nếu không được xác định, các giá trị này sẽ mặc định là vị trí lấy hàng của lô hàng đầu tiên và vị trí giao hàng của lô 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ề một tuyến đường được tối ưu hoá. Hãy xem khái niệm chính 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à xe có thể hoạt động trên một tuyến đường. Các khung giờ này phải nằm trong khung 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 giới hạn về thời gian. |
Vehicle
Ví dụ
Trong ví dụ này, bạn có dịch vụ trông giữ thú cưng 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ờ hoạt động của xe vì giờ hoạt động này trùng 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 là:
Thuộc tính | Giá trị | Mô tả |
---|---|---|
startLocation |
latitude : 37.759773, longitude : -122.427063 |
Toạ độ bắt đầu của tuyến đường cho xe của bạn. Những thông tin này khớp với vị trí của dịch vụ trông giữ thú cưng của bạn ở Công viên Mission Dolores, San Francisco. |
endLocation |
latitude : 37.759773, longitude : -122.427063 |
Toạ độ điểm cuối của tuyến đường cho xe của bạn. Những thông tin này khớp với vị trí của dịch vụ trông giữ thú cưng của bạn ở Công viên Mission Dolores, San Francisco. |
costPerHour |
27 | Số tiền bạn trả cho người lái xe để lái xe đưa đón chó. Bạn trả cho người lái xe 27 đô la mỗi giờ. |
Sau đây là một đoạn 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ụ đầy đủ về yêu cầu
Mẫu mã 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ụ về ShipmentModel
, Shipment
và Vehicle
được trình bày 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" } }