Временные окна

Time windows are present in `ShipmentModel`, in `Shipment` in the pickups and deliveries objects, and in `Vehicle`.

Временные окна определяют время событий на маршруте. Эти события могут включать начало и конец маршрута водителя, запланированное время забора и доставки, а также продолжительность всего маршрута.

Временные окна могут поддерживать такие цели, как:

  • Отдавайте приоритет выполнению заказов по забору и доставке в указанные сроки.
  • Планируйте маршруты так, чтобы они выполнялись в течение всего рабочего времени.
  • Обеспечить, чтобы транспортные средства начинали и заканчивали маршруты в указанные временные рамки.

Структура

Как показано на диаграмме, временные окна структурированы следующим образом:

  • globalStartTime и globalEndTime являются свойствами ShipmentModel
  • timeWindows — это свойства:
    • pickups внутри Shipment .
    • deliveries внутри Shipment .
  • startTimeWindows и endTimeWindows являются свойствами Vehicle .

Контрольный список основных вещей

Характеристики

В следующей таблице описаны глобальные свойства временного окна.

Свойство Формат Описание
globalStartTime Timestamp Самое раннее время для любого события.
globalEndTime Timestamp Самое позднее время для любого события.

В следующей таблице описываются свойства временного окна в поставках и транспортных средствах.

Родитель Свойство Формат Описание
Shipment.pickups timeWindows Массив типов сообщений TimeWindow . Указывает временные интервалы для забора груза.
Shipment.deliveries timeWindows Указывает временные интервалы для доставки груза.
Vehicle startTimeWindows Указывает время начала рабочего графика транспортного средства.
endTimeWindows Указывает время окончания рабочего графика транспортного средства.

В следующей таблице описаны свойства типа сообщения TimeWindow .

Свойство Формат Описание
startTime Строка (формат RFC3339 UTC «Зулу») Начало временного окна.
endTime Строка (формат RFC3339 UTC «Зулу») Конец временного окна.

Примеры

В этом разделе рассматриваются три типа примеров:

  • Примеры кода , иллюстрирующие структуру временных окон.
  • Пример сценария , демонстрирующий один из способов использования временных окон для достижения бизнес-цели.
  • Пример запроса , включающий значения, заданные в примере сценария.

Примеры кода

В следующих разделах показаны примеры кода различных типов временных окон.

Глобальные временные окна

Следующий пример кода показывает структуру глобальных временных окон:

{
  "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:00.
endTime :
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime :
2023-01-13T17:00:00Z
Определяет приемлемое время для приведения собаки к дому клиента. В этом примере вы сообщили обоим клиентам, что их собаки будут привезены с 17:00 до 18:30.
endTime :
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime :
2023-01-13T07:00:00Z
endTime :
2023-01-13T07:15:00Z
Определяет приемлемое окно для начала работы транспортного средства (с 7:00 до 7:15) и окончания работы (с 17:00 до 17:15).
endTimeWindows startTime :
2023-01-13T18:45:00Z
endTime :
2023-01-13T19:00:00Z

На следующей диаграмме показаны временные окна, влияющие на этот маршрут.

Several timelines represent the global time window, pickup and delivery time windows, vehicle start and end time windows, and vehicle working hours.

В этом сценарии, как показано на диаграмме, временные окна работают следующим образом:

  • Глобальное временное окно представляет собой часы работы собачьего детсада, и все остальные временные окна должны попадать в это временное окно.
  • Для самовывоза и доставки действуют свои 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 . Это позволяет оптимизатору отклоняться от заданного временного окна с заданной стоимостью, отдавая приоритет общей оптимизации над строгим соблюдением временных рамок, когда это целесообразно.

Мягкие временные окна имеют следующие ограничения по использованию:

  • Их нельзя применить к globalStartTime и globalEndTime поскольку они не используют тип сообщений TimeWindow .
  • Они применимы только в том случае, если в списке есть один TimeWindow .

Характеристики

В следующей таблице описываются свойства мягких ограничений для временных окон.

Имя объекта недвижимости Формат Описание недвижимости
softStartTime Метка времени Определяет начало «мягкого» временного окна. Если событие происходит до этого времени, взимается плата.
softEndTime Метка времени Указывает окончание «мягкого» временного окна. Если событие происходит после этого времени, взимается плата.
costPerHourBeforeSoftStartTime число Стоимость за час, возникающая при запуске события до softStartTime . Это свойство обязательно при использовании softStartTime . Подробнее о реализации затрат см. в разделе «Ключевое понятие модели затрат» .
costPerHourAfterSoftEndTime число Стоимость за час, возникающая при завершении события после softEndTime . Это свойство обязательно при использовании softEndTime . Подробнее о реализации затрат см. в разделе «Ключевое понятие модели Cost» .

Пример кода

В следующем примере показана структура свойств мягкого ограничения типа сообщения TimeWindow :

    {
      "softStartTime": "SOFT_START_TIME",
      "softEndTime": "SOFT_END_TIME",
      "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME,
      "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME
    }