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 đến lấy hàng và thời gian giao hàng theo lịch trình 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 lấy hàng và giao hàng trong khung thời gian đã chỉ định.
- Lên kế hoạch cho các 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ư trong biểu đồ, các khoảng 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 về các yếu tố thiết yếu
Danh sách kiểm tra sau đây mô tả kiến thức cần thiết để ngăn ngừa các lỗi tiềm ẩn liên quan đến khoảng 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ố về phản hồi.
Thuộc tính
Bảng sau đây mô tả các thuộc tính của khoảng 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 của khung thời gian trong lô hàng và phương tiện.
| 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 để lấy hàng. |
Shipment.deliveries |
timeWindows |
Chỉ định khoảng thời gian giao hàng. | |
Vehicle |
startTimeWindows |
Chỉ định thời gian bắt đầu cho lịch trình 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 TimeWindow.
| 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 một khoảng thời gian. |
endTime |
Chuỗi (định dạng RFC3339 UTC "Zulu") | Thời điểm kết thúc của khoảng 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.
- Ví dụ về yêu cầu bao gồm các giá trị được đặt trong trường hợp ví dụ.
Mã mẫu
Các phần sau đây trình bày mã mẫu của nhiều loại khoảng 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 đến lấy hàng và giao hàng
Mã mẫu sau đây cho thấy cấu trúc của các khung thời gian trong hoạt động đến lấy hàng 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 một tình huống kinh doanh dịch vụ chăm sóc chó. Ví dụ này tối ưu hoá tuyến đường đón và trả chó từ hai ngôi nhà khác nhau, đồng thời chủ sở hữu có cùng khung giờ đón và trả chó. Trình tối ưu hoá phải tuân thủ giờ hoạt động của nhà trẻ, khung giờ đón và trả khách cụ thể cho khách hàng, cũng như 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 |
Cho biết giờ mở cửa của dịch vụ chăm sóc chó ban ngày. Không thể đến lấy hoặc giao hàng trước thời gian này. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Giờ đóng cửa của dịch vụ chăm sóc chó ban ngày. Tất cả các đơn hàng lấy 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 chấp nhận được để đón chó từ nhà của khách hàng. Trong ví dụ này, bạn đã thông báo cho cả hai khách hàng rằng họ có thể đến lấy hàng trong khoảng thời gian từ 7:30 sáng đến 9:00 sáng. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
Xác định khoảng thời gian có thể chấp nhận để trả chó tại nhà của khách hàng. Trong ví dụ này, bạn đã thông báo cho cả hai khách hàng rằng chó của họ sẽ được trả về trong khoảng thời gian từ 5 giờ chiều đến 6 giờ 30 phút chiều. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
Xác định khoảng thời gian chấp nhận được để xe bắt đầu (7:00 sáng đến 7:15 sáng) và kết thúc (5:00 chiều đến 5:15 chiều). |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime:2023-01-13T19:00:00Z |
Sơ đồ sau đây minh hoạ các khoảng thời gian ảnh hưởng đến tuyến đường này.
Trong trường hợp này, như minh hoạ trong biểu đồ, các khoảng thời gian hoạt động như sau:
- Khung thời gian chung thể hiện giờ hoạt động của dịch vụ chăm sóc chó ban ngày và tất cả các khung thời gian khác phải nằm trong khung thời gian này.
- Các hoạt động lấy hàng và giao hàng có
timeWindowsriêng, tương ứng vào đầu và cuối ngày. startTimeWindowscủa xe cho người điều khiển xe biết khung thời gian mà họ phải bắt đầu làm việc, cònendTimeWindowscung cấp một khung thời gian khác mà họ phải hoàn thành công việc trong ngày.- Thời gian bắt đầu của
startTimeWindowđầu tiên và thời gian kết thúc củaendTimeWindowcuối cùng xác định giờ hoạt động của xe, trong trường hợp này, giờ hoạt động 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 yêu cầu optimizeTours kết hợp các giá trị khung thời gian của tình huống trong 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 khoảng thời gian làm các quy tắc ràng buộc mềm 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á lệch khỏi khoảng 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 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:
- Không thể áp dụng các quy tắc này cho
globalStartTimevàglobalEndTimevì các quy tắc này không sử dụng loại thông báoTimeWindow. - Các thuộc tính này chỉ áp dụng khi có một
TimeWindowduy nhất trong danh sách.
Thuộc tính
Bảng sau đây mô tả các thuộc tính ràng buộc mềm cho khung thời gian.
| Tên tài sản | Định dạng | Nội dung mô tả về cơ sở lưu trú |
|---|---|---|
softStartTime |
Dấu thời gian | Chỉ định thời điểm bắt đầu của khoảng thời gian linh hoạt. Nếu một sự kiện xảy ra trước thời điểm này, thì chi phí sẽ phát sinh. |
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 điểm này, thì chi phí sẽ phát sinh. |
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 mềm 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 }