Mục tiêu của API Tối ưu hoá tuyến đường là lập kế hoạch tuyến đường cho một đội xe để đến một nhóm vị trí. Đối tượng OptimizeToursRequest
mô tả các thuộc tính của các vị trí và xe 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ơ sở của đối tượng OptimizeToursRequest
như sau:
- Trường
model
chứa một thông báoShipmentModel
có 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, 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ả các vị trí mà xe sẽ ghé thăm. Các điểm này có thể đại diện cho các gói thực tế cần lấy và giao hoặc các địa điểm 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 vị trí gửi hàng. 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 di chuyển bằng cách đi bộ.
ShipmentModel
ShipmentModel
chứa các phần tử của vấn đề tối ưu hoá tuyến đường. Lịch trình này chứa một nhóm các chuyến hàng có thể do một nhóm xe thực hiện, đồng thời xem xét các quy tắ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ượt vận chuyển 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ả xe phải hoàn tất tất cả các chuyến hàng. 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 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
.
Ví dụ về ShipmentModel
Trong ví dụ này, bạn có một dịch vụ trông giữ thú cưng và bạn đang bắt đầu tạo yêu cầu. Bạn sẽ xác định các chuyến hàng và xe sau, nhưng bạn nên bắt đầu bằng cách đặt giờ hoạt động và chi phí hoạt động theo giờ.
Đối với ví dụ này, các giá trị thuộc tính ShipmentModel
trong yêu cầu của bạn sẽ 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ã mẫu của thông báo ShipmentModel
kết hợp các giá trị tình huống mẫu.
{ "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.
Như minh hoạ trong sơ đồ:
- Thông báo
Shipment
có 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
shipments
chứa một hoặc nhiều thông báoShipment
.
Thông báo Shipment
yêu cầu í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 vị trí 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 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ỉ đến lấy 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 yêu cầu đến lấy hàng trước, sau đó mới đến giao hàng. Chỉ xe đã thực hiện việc lấy hàng 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 phương thức lấy hàng và một phương thức 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
.
Ví dụ về Shipment
Trong ví dụ này, bạn có một dịch vụ trông giữ chó, trong đó bạn sẽ đến nhà của chủ sở hữu chó để đón chó và đưa chó đến nơi trông giữ. Bạn muốn đặt vị trí đến lấy hàng của hai chú chó và đặt vị trí giao hàng là doanh nghiệp của bạn:
- Ngôi nhà đầu tiên dành cho chó nằm trong 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 trong Công viên South Sunset Playground, San Francisco. Toạ độ của vị trí này là vĩ độ 37,7359 và kinh độ -122,5011.
- Trường giữ trẻ cho chó của bạn nằm trong 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 xe có thể thực hiện một lô hàng trong một tuyến đường.
Như minh hoạ trong sơ đồ:
- Thông báo
Vehicle
có tất cả thông tin về một chiếc xe thực tế. - 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 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 vị 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 |
Thông 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 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. |
Ví dụ về Vehicle
Trong ví dụ này, bạn có một dịch vụ trông giữ thú cưng và 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 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 khớp với giờ bạn đã xác định trong thuộc tính globalStartTime
và globalEndTime
trong đối tượng ShipmentModel
.
Đối với ví dụ này, các giá trị thuộc tính Vehicle
trong yêu cầu của bạn sẽ 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 tại Công viên Mission Dolores, San Francisco. |
endLocation |
latitude : 37.759773, longitude : -122.427063 |
Toạ độ kết thúc 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 tại 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ó đến trường mẫu giáo. 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ị tình huống mẫu.
{ "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ụ về yêu cầu hoàn chỉnh, kết hợp các ví dụ về 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" } }