시간 창은 경로의 이벤트 시간을 지정합니다. 이러한 이벤트에는 운전자의 경로 시작 및 종료, 예약된 픽업 및 배송 시간 또는 전체 경로의 기간이 포함될 수 있습니다.
기간은 다음과 같은 목표를 지원할 수 있습니다.
- 지정된 기간 내에 수령 및 배송을 완료하는 데 우선순위를 둡니다.
- 전체 영업시간 내에 운영할 수 있도록 경로를 계획합니다.
- 지정된 기간 내에 차량이 경로를 시작하고 종료하도록 합니다.
구조
다이어그램에 표시된 것처럼 시간대는 다음과 같이 구성됩니다.
- 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:00ZendTime:2023-01-13T07:15:00Z | 차량이 시작 (오전 7시~오전 7시 15분) 및 종료 (오후 5시~오후 5시 15분)할 수 있는 허용 범위를 정의합니다. | 
| endTimeWindows | startTime:2023-01-13T18:45:00ZendTime: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 }