기간은 경로의 이벤트 타이밍을 지정합니다. 이러한 이벤트에는 운전자의 경로 시작 및 종료, 예약된 수령 및 배송 시간 또는 전체 경로의 기간이 포함될 수 있습니다.
기간은 다음과 같은 목표를 지원할 수 있습니다.
- 지정된 기간 내에 수령 및 배송을 완료하는 것을 우선시 합니다.
- 전반적인 영업시간 내에 운영되도록 경로를 계획 합니다.
- 지정된 기간 내에 차량이 경로를 시작하고 종료 하도록 합니다.
구조
다이어그램에 표시된 것처럼 기간은 다음과 같이 구성됩니다.
globalStartTime및globalEndTime은ShipmentModel의 속성입니다.timeWindows는 다음의 속성입니다.Shipment내의pickupsShipment내의deliveries
startTimeWindows및endTimeWindows는Vehicle의 속성입니다.
기본사항 체크리스트
다음 체크리스트에서는 기간과 관련된 잠재적 오류를 방지하는 데 필요한 기본 지식을 설명합니다. 이 목록은 요청을 검증하고 응답 문제를 해결하는 데 도움이 될 수 있습니다.
속성
다음 표에서는 전역 기간 속성을 설명합니다.
| 속성 | 형식 | 설명 |
|---|---|---|
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" } ] } ] } }
소프트 기간
기간은 softStartTime
및 softEndTime을 TimeWindow 메시지 유형에서 정의하여 소프트 제약조건으로 사용할 수 있습니다. 이렇게 하면 최적화 도구가 지정된 비용으로 지정된 기간에서 벗어날 수 있으므로 유익한 경우 기간을 엄격하게 준수하는 것보다 전반적인 최적화를 우선시할 수 있습니다.
소프트 기간에는 다음과 같은 사용 제한사항이 있습니다.
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 }