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

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

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

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

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

Структура

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

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

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

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

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

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

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

Родитель Свойство Формат Описание
Shipment . pickups timeWindows Массив типов сообщений TimeWindow . Указывает временные интервалы для забора груза.
Shipment . deliveries timeWindows Указывает временные интервалы для доставки груза.
Vehicle startTimeWindows Указывает время начала работы транспортного средства в соответствии с графиком его эксплуатации.
endTimeWindows 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: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 . Подробнее о реализации стоимости см. в разделе «Ключевая концепция модели стоимости» .

Пример кода

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

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