기간은 경로의 이벤트 타이밍을 지정합니다. 이러한 이벤트에는 운전자의 경로 시작 및 종료, 예약된 수령 및 배송 시간 또는 전체 경로의 기간이 포함될 수 있습니다.
기간은 다음과 같은 목표를 지원할 수 있습니다.
- 지정된 기간 내에 수령 및 배송을 완료하는 것을 우선시 합니다.
- 전반적인 영업시간 내에 운영되도록 경로를 계획 합니다.
- 지정된 기간 내에 차량이 경로를 시작하고 종료 하도록 합니다.
구조
다이어그램에서 볼 수 있듯이 기간은 다음과 같이 구성됩니다.
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 }