기간

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

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

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

  • 지정된 기간 내에 수령 및 배송을 완료하는 데 우선순위를 둡니다.
  • 전체 영업시간 내에 운영할 수 있도록 경로를 계획합니다.
  • 차량이 지정된 기간 내에 경로를 시작하고 종료하도록 합니다.

구조

다이어그램에 표시된 것처럼 시간대는 다음과 같이 구성됩니다.

  • globalStartTimeglobalEndTimeShipmentModel의 속성입니다.
  • timeWindows는 다음의 속성입니다.
    • Shipment 내의 pickups
    • Shipment 내의 deliveries
  • startTimeWindowsendTimeWindowsVehicle의 속성입니다.

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: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"
          }
        ]
      }
    ]
  }
}

소프트 기간

시간 창은 TimeWindow 메시지 유형에서 softStartTimesoftEndTime를 정의하여 소프트 제약 조건으로 사용할 수 있습니다. 이를 통해 최적화 프로그램은 지정된 비용으로 지정된 시간대에서 벗어나 전체 최적화를 우선시할 수 있습니다.

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

  • TimeWindow 메시지 유형을 사용하지 않으므로 globalStartTimeglobalEndTime에는 적용할 수 없습니다.
  • 목록에 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
    }