시간 창은 경로의 이벤트 시간을 지정합니다. 이러한 이벤트에는 운전자의 경로 시작 및 종료, 예약된 픽업 및 배송 시간 또는 전체 경로의 기간이 포함될 수 있습니다.
기간은 다음과 같은 목표를 지원할 수 있습니다.
- 지정된 기간 내에 수령 및 배송을 완료하는 데 우선순위를 둡니다.
- 전체 영업시간 내에 운영할 수 있도록 경로를 계획합니다.
- 차량이 지정된 기간 내에 경로를 시작하고 종료하도록 합니다.
구조
다이어그램에 표시된 것처럼 시간대는 다음과 같이 구성됩니다.
globalStartTime
및globalEndTime
은ShipmentModel
의 속성입니다.timeWindows
는 다음의 속성입니다.Shipment
내의pickups
Shipment
내의deliveries
startTimeWindows
및endTimeWindows
은Vehicle
의 속성입니다.
Essentials 체크리스트
속성
다음 표에서는 전역 시간 창 속성을 설명합니다.
속성 | 형식 | 설명 |
---|---|---|
globalStartTime |
Timestamp |
이벤트의 가장 빠른 시간입니다. |
globalEndTime |
Timestamp |
모든 이벤트의 최신 시간입니다. |
다음 표에서는 배송 및 차량의 시간대 속성을 설명합니다.
자녀 있음 | 속성 | 형식 | 설명 |
---|---|---|---|
Shipment.pickups |
timeWindows |
TimeWindow 메시지 유형의 배열입니다. |
배송 상품 수령 시간 간격을 지정합니다. |
Shipment.deliveries |
timeWindows |
배송의 시간 간격을 지정합니다. | |
Vehicle |
startTimeWindows |
차량의 운행 일정 시작 시간을 지정합니다. | |
endTimeWindows |
차량의 운행 일정의 종료 시간을 지정합니다. |
다음 표에서는 TimeWindow
메시지 유형의 속성을 설명합니다.
속성 | 형식 | 설명 |
---|---|---|
startTime |
문자열 (RFC3339 UTC 'Zulu' 형식) | 기간의 시작입니다. |
endTime |
문자열 (RFC3339 UTC 'Zulu' 형식) | 기간의 종료 시간입니다. |
예
이 섹션에서는 세 가지 유형의 예시를 다룹니다.
코드 샘플
다음 섹션에서는 다양한 유형의 시간 창의 코드 샘플을 보여줍니다.
전역 기간
다음 코드 샘플은 전역 시간 창의 구조를 보여줍니다.
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
수령 및 배송 시간대
다음 코드 샘플은 배송의 수령 및 배송에 있는 시간대의 구조를 보여줍니다.
{ "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": [ ... ] } }
차량 기간
다음 코드 샘플은 차량의 시간대의 구조를 보여줍니다.
{ "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" } ] } ] } }
예시 시나리오
이 섹션에서는 반려견 데이케어 비즈니스 시나리오를 사용합니다. 이 예에서는 서로 다른 두 집에서 개를 픽업하고 내려주는 경로를 최적화하며, 두 집의 주인은 픽업 및 드롭오프 시간대가 동일합니다. 최적화 프로그램은 어린이집의 운영 시간, 고객의 특정 픽업 및 하차 시간, 운전기사의 근무 시간을 준수해야 합니다.
이 예시에서 요청의 속성 값은 다음과 같습니다.
자녀 있음 | 속성 | 값 | 시나리오 |
---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
반려견 데이케어의 영업시간을 나타냅니다. 이 시간 전에는 픽업이나 배송이 불가능합니다. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
반려견 데이케어의 영업 종료 시간을 나타냅니다. 모든 수거 및 배송은 이 시간까지 완료되어야 합니다. |
Shipment.pickups |
timeWindows |
startTime :2023-01-13T07:30:00Z |
고객의 집에서 반려견을 픽업할 수 있는 허용되는 기간을 정의합니다. 이 예에서는 두 고객 모두 오전 7시 30분에서 오전 9시 사이에 수령할 수 있다고 말했습니다. |
endTime :2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime :2023-01-13T17:00:00Z |
고객의 집에 반려견을 데려다 줄 수 있는 허용되는 시간을 정의합니다. 이 예시에서는 두 고객 모두에게 오후 5시에서 6시 30분 사이에 반려견을 데려다준다고 말했습니다. |
endTime :2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime :2023-01-13T07:00:00Z endTime :2023-01-13T07:15:00Z |
차량이 시작 (오전 7시~오전 7시 15분) 및 종료 (오후 5시~오후 5시 15분)할 수 있는 허용 범위를 정의합니다. |
endTimeWindows |
startTime :2023-01-13T18:45:00Z endTime :2023-01-13T19:00:00Z |
다음 다이어그램은 이 경로에 영향을 미치는 시간대를 보여줍니다.
이 시나리오에서 다이어그램에 표시된 대로 시간 범위는 다음과 같이 작동합니다.
- 전체 기간은 애견 유치원의 영업시간을 나타내며 다른 모든 기간은 이 기간 내에 있어야 합니다.
- 픽업과 배송은 각각 하루의 시작과 끝에
timeWindows
가 있습니다. - 차량의
startTimeWindows
는 차량 운전자가 작업을 시작해야 하는 기간을 제공하고endTimeWindows
는 하루를 마쳐야 하는 또 다른 기간을 제공합니다. - 첫 번째
startTimeWindow
의 시작 시간과 마지막endTimeWindow
의 종료 시간은 차량의 운영 시간을 정의하며, 이 경우 전역 시간 창과 동일합니다.
요청 예
다음 예에서는 예시 시나리오 시간 창 값을 통합한 optimizeTours
요청의 구조를 보여줍니다.
{ "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" } ] } ] } }
소프트 기간
시간 창은 TimeWindow
메시지 유형에서 softStartTime
및 softEndTime
를 정의하여 소프트 제약 조건으로 사용할 수 있습니다. 이를 통해 최적화 프로그램은 지정된 비용으로 지정된 시간대에서 벗어나 전체 최적화를 우선시할 수 있습니다.
소프트 시간 창에는 다음과 같은 사용 제한이 있습니다.
TimeWindow
메시지 유형을 사용하지 않으므로globalStartTime
및globalEndTime
에는 적용할 수 없습니다.- 목록에
TimeWindow
이 하나만 있는 경우에만 적용됩니다.
속성
다음 표에서는 시간 창의 소프트 제약 조건 속성을 설명합니다.
속성 이름 | 형식 | 속성 설명 |
---|---|---|
softStartTime |
타임스탬프 | 소프트 기간의 시작을 지정합니다. 이 시간 전에 이벤트가 발생하면 비용이 발생합니다. |
softEndTime |
타임스탬프 | 소프트 기간의 종료를 지정합니다. 이 시간 이후에 이벤트가 발생하면 비용이 발생합니다. |
costPerHourBeforeSoftStartTime |
숫자 | softStartTime 전에 이벤트가 시작될 때 발생하는 시간당 비용입니다. 이 속성은 softStartTime 를 사용할 때 필요합니다. 비용을 구현하는 방법을 자세히 알아보려면 비용 모델 주요 개념을 참고하세요. |
costPerHourAfterSoftEndTime |
숫자 | softEndTime 이후에 이벤트가 종료될 때 발생하는 시간당 비용입니다. 이 속성은 softEndTime 를 사용할 때 필요합니다. 비용을 구현하는 방법을 자세히 알아보려면 비용 모델 주요 개념을 참고하세요. |
코드 샘플
다음 예는 TimeWindow
메시지 유형의 소프트 제약 조건 속성 구조를 보여줍니다.
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }