Mục tiêu của API Tối ưu hoá tuyến đường là lên kế hoạch tuyến đường cho một đội xe để ghé thăm một tập hợp các địa điểm. Đối tượng OptimizeToursRequest mô tả các thuộc tính của những xe và địa điểm 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ơ bản của đối tượng OptimizeToursRequest như sau:
- Trường
modelchứa thông báoShipmentModelcó 2 trường chính: trường:
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 hiện có và các đối tượng khác mô tả mối quan hệ của chúng.Shipment: Mô tả các địa điểm 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 giao hàng. Mỗi xe tương ứng với một xe thực tế hoặc một người di chuyển 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 xe, đồng thời 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 gian bắt đầu và kết thúc của khung thời gian mà tất cả xe phải hoàn tất tất cả lô hàng. Mặc dù 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 ràng buộc về thời gian. |
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ụ giữ trẻ cho chó và bạn đang bắt đầu xây dựng yêu cầu của mình. Bạn sẽ xác định 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ờ.
Trong ví dụ này, các giá trị thuộc tính ShipmentModel trong yêu cầu của bạn là
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 của giờ hoạt động. |
Sau đây là mã mẫu của ShipmentModel thông báo kết hợp các
giá trị của trường hợp 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 mà
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ụ trong đời thực. - Tất cả
Shipmentthông báo đề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 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:
pickupsxác định địa điểm lấy lô hàng.deliveriesxác định địa điểm giao lô hàng.- Cả
pickupsvàdeliveriesđều chứa loại thông báoVisitRequestxác định địa điểm 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 |
Hệ thống giả định rằng bạn chỉ lấy lô hàng. |
Chỉ deliveries |
Hệ thống giả định rằng bạn đã tải sẵn lô hàng hoặc đang giao một 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 đó là giao hàng. Chỉ xe đã lấy hàng mới có thể 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 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 ràng buộc. |
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ụ giữ trẻ cho chó, nơi bạn đón chó từ nhà của chúng và giao chúng đến nơi giữ trẻ của bạn. Bạn muốn đặt địa điểm đón 2 chú chó và đặt địa điểm giao hàng là doanh nghiệp của bạn:
- Nhà của chú chó đầu tiên ở Tháp Coit, San Francisco. Toạ độ của địa điểm này là vĩ độ 37.8024 và kinh độ -122.4058.
- Nhà của chú chó thứ hai ở Công viên South Sunset Playground, San Francisco. Toạ độ của địa điểm này là vĩ độ 37.7359 và kinh độ -122.5011.
- Nơi giữ trẻ cho chó của bạn ở Công viên Mission Dolores, San Francisco. Toạ độ của địa điểm 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 2 loại thông báo Shipmentvới 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 trên một tuyến đường.
Như minh hoạ trong sơ đồ:
- Thông báo
Vehiclecó tất cả thông tin về một xe trong đời thực. - Tất cả
Vehiclethông báo đề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 liên quan của Vehicle.
| Thuộc tính | Mô tả |
|---|---|
startLocation và endLocation |
Địa điểm bắt đầu và kết thúc của xe, là một phần của tuyến đường tối ưu hoá cuối cùng. Nếu không được xác định, chúng sẽ mặc định là địa điểm lấy lô hàng đầu tiên và địa điểm giao lô hàng cuối cùng. |
costPerHour, costPerKilometer, costPerTraveledHour |
Tham số chi phí cụ thể 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 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à xe có thể hoạt động trên một tuyến đường. Các khoảng thời gian 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 đưa 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 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ụ giữ trẻ cho chó 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ì chú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. Các toạ độ này khớp với vị trí của nơi giữ trẻ cho chó của bạn ở 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. Các toạ độ này khớp với vị trí của nơi giữ trẻ cho chó 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 giữ trẻ cho chó của bạn. Bạn trả cho người lái xe 27 đô la mỗi giờ. |
Sau đây là mã mẫu của Vehicle thông báo kết hợp các
giá trị của trường hợp mẫu.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
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 đầy đủ
Mã mẫu sau đây cung cấp một ví dụ về yêu cầu đầy đủ, 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" } }