시간대는 경로에서 이벤트가 발생하는 시점을 지정합니다. 이러한 이벤트에는 운전자 경로의 시작과 끝, 예정된 수령 및 배송 시간, 전체 경로의 기간이 포함될 수 있습니다.
시간대는 다음과 같은 목표를 지원할 수 있습니다.
- 지정된 기간 내에 수령 및 배송 완료를 우선시합니다.
- 전체 영업시간 내에 운영할 수 있도록 경로를 계획합니다.
- 지정된 기간 내에 차량이 경로를 시작하고 종료하도록 합니다.
구조
다이어그램에 표시된 것처럼 시간대 구조는 다음과 같습니다.
globalStartTime및globalEndTime는ShipmentModel의 속성입니다.timeWindows은 다음의 속성입니다.Shipment내의pickupsShipment내의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를 정의하여 시간대를 소프트 제약조건으로 사용할 수 있습니다. 이렇게 하면 최적화 도구가 지정된 비용으로 지정된 기간에서 벗어날 수 있으므로, 이점이 있는 경우 기간을 엄격하게 준수하는 것보다 전반적인 최적화를 우선시할 수 있습니다.
소프트 시간대에는 다음과 같은 사용량 한도가 있습니다.
globalStartTime및globalEndTime는TimeWindow메시지 유형을 사용하지 않으므로 적용할 수 없습니다.- 목록에
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 }