기간

시간대는 `ShipmentModel`, 픽업 및 배송 객체의 `Shipment`, `Vehicle`에 있습니다.

기간은 경로의 이벤트 타이밍을 지정합니다. 이러한 이벤트에는 운전자의 경로 시작 및 종료, 예약된 수령 및 배송 시간 또는 전체 경로의 기간이 포함될 수 있습니다.

기간은 다음과 같은 목표를 지원할 수 있습니다.

  • 지정된 기간 내에 수령 및 배송을 완료하는 것을 우선시 합니다.
  • 전반적인 영업시간 내에 운영되도록 경로를 계획 합니다.
  • 지정된 기간 내에 차량이 경로를 시작하고 종료 하도록 합니다.

구조

다이어그램에서 볼 수 있듯이 기간은 다음과 같이 구성됩니다.

기본사항 체크리스트

다음 체크리스트에서는 기간과 관련된 잠재적 실수를 방지하는 데 필요한 기본 지식을 설명합니다. 이 목록은 요청을 검증하고 응답 문제를 해결하는 데 도움이 될 수 있습니다.

.
`startTimeWindows``endTimeWindows`는 차량이 각각 경로를 시작하고 종료해야 하는 시간 간격을 정의합니다.VehiclestartTimeWindowsendTimeWindows

속성

다음 표에서는 전역 기간 속성을 설명합니다.

속성 형식 설명
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"
          }
        ]
      }
    ]
  }
}

소프트 기간

기간은 softStartTimesoftEndTimeTimeWindow 메시지 유형에서 정의하여 소프트 제약조건으로 사용할 수 있습니다. 이렇게 하면 최적화 도구가 지정된 비용으로 지정된 기간에서 벗어날 수 있으므로 유익한 경우 기간을 엄격하게 준수하는 것보다 전반적인 최적화를 우선시할 수 있습니다.

소프트 기간에는 다음과 같은 사용 제한사항이 있습니다.

속성

다음 표에서는 기간의 소프트 제약조건 속성을 설명합니다.

속성 이름 형식 속성 설명
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
    }