Khung thời gian chỉ định thời gian cho các sự kiện trên một tuyến đường. Các sự kiện này có thể bao gồm thời điểm bắt đầu và kết thúc tuyến đường của tài xế, thời gian giao và nhận hàng theo lịch hoặc thời lượng của toàn bộ tuyến đường.
Khung thời gian có thể hỗ trợ các mục tiêu như:
- Ưu tiên hoàn tất việc nhận và giao hàng trong khung thời gian đã chỉ định.
- Lập kế hoạch tuyến đường để hoạt động trong giờ hoạt động chung.
- Đảm bảo xe bắt đầu và kết thúc tuyến đường trong khung thời gian đã chỉ định.
Cấu trúc
Như minh hoạ trong sơ đồ, khung thời gian được cấu trúc như sau:
globalStartTimevàglobalEndTimelà các thuộc tính củaShipmentModeltimeWindowslà các thuộc tính của:pickupsbên trongShipment.deliveriesbên trongShipment.
startTimeWindowsvàendTimeWindowslà các thuộc tính củaVehicle.
Danh sách kiểm tra các yếu tố cần thiết
Danh sách kiểm tra sau đây mô tả những kiến thức cần thiết giúp ngăn ngừa các lỗi tiềm ẩn liên quan đến khung thời gian. Danh sách này có thể giúp bạn xác thực yêu cầu và khắc phục sự cố trong câu trả lời.
Thuộc tính
Bảng sau đây mô tả các thuộc tính khung thời gian chung.
| Thuộc tính | Định dạng | Mô tả |
|---|---|---|
globalStartTime |
Timestamp |
Thời gian sớm nhất cho mọi sự kiện. |
globalEndTime |
Timestamp |
Thời gian muộn nhất cho mọi sự kiện. |
Bảng sau đây mô tả các thuộc tính khung thời gian trong lô hàng và xe.
| Cha mẹ | Thuộc tính | Định dạng | Mô tả |
|---|---|---|---|
Shipment.pickups |
timeWindows |
Mảng các loại thông báo TimeWindow. |
Chỉ định khoảng thời gian nhận lô hàng. |
Shipment.deliveries |
timeWindows |
Chỉ định khoảng thời gian giao lô hàng. | |
Vehicle |
startTimeWindows |
Chỉ định thời gian bắt đầu cho lịch hoạt động của xe. | |
endTimeWindows |
Chỉ định thời gian kết thúc cho lịch hoạt động của xe. |
Bảng sau đây mô tả các thuộc tính của loại thông báo TimeWindowmessage
type.
| Thuộc tính | Định dạng | Mô tả |
|---|---|---|
startTime |
Chuỗi (định dạng RFC3339 UTC "Zulu") | Thời điểm bắt đầu của khung thời gian. |
endTime |
Chuỗi (định dạng RFC3339 UTC "Zulu") | Thời điểm kết thúc của khung thời gian. |
Ví dụ
Phần này trình bày 3 loại ví dụ:
- Mã mẫu minh hoạ cấu trúc của khung thời gian.
- Một tình huống ví dụ cho thấy một cách sử dụng khung thời gian để đạt được mục tiêu kinh doanh.
- Một ví dụ về yêu cầu bao gồm các giá trị được đặt trong tình huống ví dụ.
Mã mẫu
Các phần sau đây cho thấy mã mẫu của nhiều loại khung thời gian.
Khung thời gian chung
Mã mẫu sau đây cho thấy cấu trúc của khung thời gian chung:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Khung thời gian nhận và giao hàng
Mã mẫu sau đây cho thấy cấu trúc của khung thời gian trong việc nhận và giao hàng của một lô hàng:
{ "model": { "shipments": [ { "pickups": [ { "timeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ], "deliveries": [ { "timeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ] } ], "vehicles": [ ... ] } }
Khung thời gian của xe
Mã mẫu sau đây cho thấy cấu trúc của khung thời gian của một xe:
{ "model": { "shipments": [ ... ], "vehicles": [ { "startTimeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ], "endTimeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ] } }
Tình huống ví dụ
Phần này sử dụng tình huống kinh doanh dịch vụ giữ chó. Ví dụ này tối ưu hoá các tuyến đường để nhận và trả chó tại 2 nhà khác nhau, đồng thời chủ sở hữu có cùng khung thời gian nhận và trả chó. Trình tối ưu hoá phải tuân thủ giờ hoạt động của dịch vụ giữ chó, khung thời gian nhận và trả chó cụ thể cho khách hàng và giờ làm việc của tài xế.
Trong ví dụ này, các giá trị thuộc tính trong yêu cầu như sau:
| Cha mẹ | Thuộc tính | Giá trị | Trường hợp |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Đại diện cho giờ mở cửa của dịch vụ giữ chó. Không thể nhận hoặc giao hàng trước thời gian này. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Đại diện cho giờ đóng cửa của dịch vụ giữ chó. Tất cả việc nhận và giao hàng phải được hoàn tất trước thời gian này. |
Shipment.pickups |
timeWindows |
startTime:2023-01-13T07:30:00Z |
Xác định khung thời gian được phép nhận chó tại nhà khách hàng. Trong ví dụ này, bạn đã yêu cầu cả 2 khách hàng có mặt để nhận chó trong khoảng thời gian từ 7:30 đến 9:00. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
Xác định khung thời gian được phép trả chó tại nhà khách hàng. Trong ví dụ này, bạn đã thông báo cho cả 2 khách hàng rằng chó của họ sẽ được trả trong khoảng thời gian từ 17:00 đến 18:30. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
Xác định khung thời gian được phép để xe bắt đầu (7:00 đến 7:15) và kết thúc (17:00 đến 17:15). |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime:2023-01-13T19:00:00Z |
Sơ đồ sau đây minh hoạ các khung thời gian ảnh hưởng đến tuyến đường này.
Trong tình huống này, như minh hoạ trong sơ đồ, khung thời gian hoạt động như sau:
- Khung thời gian chung đại diện cho giờ hoạt động của dịch vụ giữ chó và tất cả các khung thời gian khác phải nằm trong khung thời gian này.
- Việc nhận và giao hàng có
timeWindowsriêng vào thời điểm bắt đầu và kết thúc ngày. startTimeWindowscủa xe cung cấp cho người điều khiển xe một khung thời gian mà họ phải bắt đầu làm việc vàendTimeWindowscung cấp một khung thời gian khác mà họ phải kết thúc ngày làm việc.- Thời gian bắt đầu của
startTimeWindowvà thời gian kết thúc của cuối cùngendTimeWindowxác định giờ hoạt động của xe, trong trường hợp này, giống với khung thời gian chung.
Ví dụ về yêu cầu
Ví dụ sau đây cho thấy cấu trúc của một optimizeTours yêu cầu
kết hợp các giá trị khung thời gian của tình huống ví dụ.
{ "model": { "globalStartTime": "2023-01-13T07:00:00Z", "globalEndTime": "2023-01-13T19:00:00Z", "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 }, "timeWindows": [ { "startTime": "2023-01-13T07:30:00Z", "endTime": "2023-01-13T09:00:00Z" } ] } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "timeWindows": [ { "startTime": "2023-01-13T17:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 }, "timeWindows": [ { "startTime": "2023-01-13T07:30:00Z", "endTime": "2023-01-13T09:00:00Z" } ] } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "timeWindows": [ { "startTime": "2023-01-13T17:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27, "startTimeWindows": [ { "startTime": "2023-01-13T07:00:00Z", "endTime": "2023-01-13T07:15:00Z" } ], "endTimeWindows": [ { "startTime": "2023-01-13T18:45:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ] } }
Khung thời gian linh hoạt
Bạn có thể sử dụng khung thời gian làm các ràng buộc linh hoạt bằng cách xác định softStartTime
và softEndTime trong loại thông báo TimeWindow. Điều này cho phép trình tối ưu hoá đi lệch khỏi khung thời gian đã chỉ định với một chi phí cụ thể, ưu tiên tối ưu hoá tổng thể hơn là tuân thủ nghiêm ngặt các khung thời gian khi có lợi.
Khung thời gian linh hoạt có các giới hạn sử dụng sau:
- Bạn không thể áp dụng các khung thời gian này cho
globalStartTimevàglobalEndTimevì các khung thời gian này không sử dụng loại thông báoTimeWindow. - Các khung thời gian này chỉ áp dụng khi có một
TimeWindowtrong danh sách.
Thuộc tính
Bảng sau đây mô tả các thuộc tính ràng buộc linh hoạt cho khung thời gian.
| Tên thuộc tính | Định dạng | Mô tả thuộc tính |
|---|---|---|
softStartTime |
Dấu thời gian | Chỉ định thời điểm bắt đầu của khung thời gian linh hoạt. Nếu một sự kiện xảy ra trước thời gian này, bạn sẽ phải chịu chi phí. |
softEndTime |
Dấu thời gian | Chỉ định thời điểm kết thúc của khung thời gian linh hoạt. Nếu một sự kiện xảy ra sau thời gian này, bạn sẽ phải chịu chi phí. |
costPerHourBeforeSoftStartTime |
số | Chi phí mỗi giờ phát sinh khi một sự kiện bắt đầu trước softStartTime. Bạn phải cung cấp thuộc tính này khi sử dụng softStartTime. Hãy xem khái niệm chính về Mô hình chi phí để tìm hiểu thêm về cách triển khai chi phí. |
costPerHourAfterSoftEndTime |
số | Chi phí mỗi giờ phát sinh khi một sự kiện kết thúc sau softEndTime. Bạn phải cung cấp thuộc tính này khi sử dụng softEndTime. Hãy xem khái niệm chính về Mô hình chi phí để tìm hiểu thêm về cách triển khai chi phí. |
Mã mẫu
Ví dụ sau đây cho thấy cấu trúc của các thuộc tính ràng buộc linh hoạt của loại thông báo
TimeWindow:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }