- JSON-представление
- Отправка
- Запрос на посещение
- LatLng
- Путевая точка
- Расположение
- Временное окно
- Транспортное средство
- TravelMode
- Модификаторы маршрута
- Политика разгрузки
- LoadLimit
- Интервал
- LoadCost
- DurationLimit
- Ограничение по расстоянию
- BreakRule
- BreakRequest
- Ограничение частоты
- Цель
- Тип
- Матрица длительности и расстояния
- Ряд
- Атрибуты перехода
- ShipmentTypeIncompatibility
- Режим несовместимости
- Требование к типу отгрузки
- Режим требований
- Правило приоритета
Модель отгрузки включает в себя набор операций по отгрузке, которые должны быть выполнены определенным набором транспортных средств при минимизации общих затрат, представляющих собой сумму:
- Стоимость маршрутизации транспортных средств (сумма затрат за общее время, затрат за время в пути и фиксированных затрат по всем транспортным средствам).
- штрафы за невыполненные отгрузки.
- стоимость глобальной продолжительности перевозок
| JSON-представление |
|---|
{ "shipments": [ { object ( |
| Поля | |
|---|---|
shipments[] | Набор операций по отгрузкам, которые должны быть выполнены в модели. |
vehicles[] | Комплект транспортных средств, которые можно использовать для проведения экскурсий. |
objectives[] | Набор целей для этой модели, которые мы преобразуем в затраты. Если он не пуст, входная модель должна быть без затрат. Чтобы получить измененный запрос, используйте Экспериментальная функция: подробности см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request . |
globalStartTime | Глобальное время начала и окончания работы модели: никакие значения, выходящие за пределы этого диапазона, не могут считаться допустимыми. Временной интервал модели должен быть меньше года, то есть значения При использовании полей Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
globalEndTime | Если значение не задано, по умолчанию используется 00:00:00 UTC, 1 января 1971 г. (т.е. секунды: 31536000, наносекунды: 0). Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
globalDurationCostPerHour | «Общая продолжительность» всего плана — это разница между самым ранним эффективным временем начала и самым поздним эффективным временем окончания для всех транспортных средств. Пользователи могут назначить этому количеству стоимость в час, чтобы, например, оптимизировать время завершения задания как можно раньше. Эта стоимость должна быть в той же единице измерения, что и |
durationDistanceMatrices[] | Указывает матрицы длительности и расстояния, используемые в модели. Если это поле пустое, будут использоваться расстояния Google Maps или геодезические расстояния в зависимости от значения поля Примеры использования:
|
durationDistanceMatrixSrcTags[] | Теги, определяющие источники матриц длительности и расстояния; Теги соответствуют полям |
durationDistanceMatrixDstTags[] | Теги, определяющие пункты назначения матриц продолжительности и расстояния; Теги соответствуют полям |
transitionAttributes[] | В модель добавлены атрибуты перехода. |
shipmentTypeIncompatibilities[] | Наборы несовместимых типов отправлений (см. |
shipmentTypeRequirements[] | Наборы требований |
precedenceRules[] | Набор правил приоритета, которые должны соблюдаться в модели. ВАЖНО : Использование правил приоритета ограничивает размер задачи, которую можно оптимизировать. Запросы, использующие правила приоритета и включающие множество отгрузок, могут быть отклонены. |
maxActiveVehicles | Ограничивает максимальное количество активных транспортных средств. Транспортное средство считается активным, если на его маршруте выполняется хотя бы одна перевозка. Это можно использовать для ограничения количества маршрутов в случае, когда водителей меньше, чем транспортных средств, и когда автопарк неоднороден. Затем оптимизация выберет наилучшее подмножество транспортных средств для использования. Должно быть строго положительным. |
Отправка
Отправка одного товара из одного пункта погрузки в один из пунктов доставки. Для того чтобы отправка считалась выполненной, транспортное средство должно посетить один из пунктов погрузки (и соответственно уменьшить свою резервную вместимость), а затем посетить один из пунктов доставки (и, следовательно, соответственно увеличить свою резервную вместимость).
| JSON-представление |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Поля | |
|---|---|
displayName | Заданное пользователем отображаемое имя отправления. Оно может содержать до 63 символов и использовать символы UTF-8. |
pickups[] | Набор вариантов получения груза, связанных с данной доставкой. Если не указано иное, транспортное средство должно просто подъехать к месту доставки. |
deliveries[] | Набор вариантов доставки, связанных с отправлением. Если не указано иное, транспортное средство должно лишь подъехать к месту, соответствующему месту забора груза. |
loadDemands | Требования к загрузке груза (например, вес, объем, количество паллет и т. д.). Ключи в карте должны быть идентификаторами, описывающими тип соответствующего груза, в идеале также включающими единицы измерения. Например: "вес_кг", "объем_галлоны", "количество_паллетов" и т. д. Если данный ключ отсутствует в карте, соответствующий груз считается пустым. |
allowedVehicleIndices[] | Список транспортных средств, которые могут выполнить эту перевозку. Если список пуст, то все транспортные средства могут её выполнить. Транспортные средства указываются по их индексу в списке |
costsPerVehicle[] | Указывает стоимость, которая возникает при доставке груза каждым транспортным средством. Если указано, то должно быть ЛИБО:
Эти затраты должны быть выражены в той же единице измерения, что и |
costsPerVehicleIndices[] | Индексы транспортных средств, к которым применяется |
pickupToDeliveryAbsoluteDetourLimit | Указывает максимальное абсолютное время объезда по сравнению с кратчайшим путем от места погрузки до места доставки. Если указано, значение должно быть неотрицательным, а груз должен включать как минимум место погрузки и место доставки. Например, пусть t — кратчайшее время, необходимое для перемещения от выбранного пункта самовывоза непосредственно к выбранному пункту доставки. Тогда установка параметра Если для одной и той же партии груза указаны как относительные, так и абсолютные ограничения, то для каждой возможной пары "забор/доставка" используется более жесткое ограничение. Начиная с 2017/10 года, объезды поддерживаются только в том случае, если продолжительность поездки не зависит от транспортных средств. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
pickupToDeliveryTimeLimit | Указывает максимальную продолжительность от начала погрузки до начала доставки груза. Если указано, значение должно быть неотрицательным, и груз должен включать как минимум погрузку и разгрузку. Это не зависит от выбранных вариантов погрузки и разгрузки, а также от скорости транспортного средства. Это значение может быть указано вместе с ограничениями на максимальный объезд: решение будет учитывать оба параметра. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
shipmentType | Непустая строка, указывающая «тип» для данной отгрузки. Эта функция может использоваться для определения несовместимостей или требований между Отличается от |
label | Указывает метку для данной отправки. Эта метка отображается в ответе в поле |
ignore | Если это так, пропустите эту доставку, но не применяйте Игнорирование отправления приводит к ошибке проверки, если в модели присутствуют какие-либо Допускается игнорирование отправлений, выполняемых в |
penaltyCost | Если отгрузка не завершена, этот штраф добавляется к общей стоимости маршрутов. Отгрузка считается завершенной, если посещен один из вариантов забора и доставки груза. Стоимость может быть выражена в той же единице измерения, что и для всех остальных полей модели, связанных со стоимостью, и должна быть положительной. ВАЖНО : Если этот штраф не указан, он считается бесконечным, то есть отгрузка должна быть завершена. |
pickupToDeliveryRelativeDetourLimit | Указывает максимальное относительное время объезда по сравнению с кратчайшим путем от места погрузки до места доставки. Если указано, значение должно быть неотрицательным, а груз должен включать как минимум место погрузки и место доставки. Например, пусть t — кратчайшее время, необходимое для перемещения от выбранного пункта самовывоза непосредственно к выбранному пункту доставки. Тогда установка Если для одной и той же партии груза указаны как относительные, так и абсолютные ограничения, то для каждой возможной пары "забор/доставка" используется более жесткое ограничение. Начиная с 2017/10 года, объезды поддерживаются только в том случае, если продолжительность поездки не зависит от транспортных средств. |
Запрос на посещение
Запрос на посещение, которое может быть осуществлено на транспортном средстве: он содержит геолокацию (или две, см. ниже), время открытия и закрытия, представленное временными интервалами, и время выполнения услуги (время, проведенное транспортным средством после прибытия для получения или доставки товаров).
| JSON-представление |
|---|
{ "arrivalLocation": { object ( |
| Поля | |
|---|---|
arrivalLocation | Географическое местоположение, куда прибывает транспортное средство при выполнении данного |
arrivalWaypoint | Точка приземления, куда прибывает транспортное средство при выполнении данного |
departureLocation | Географическое местоположение, откуда транспортное средство отправляется после завершения этого |
departureWaypoint | Точка отправления, с которой транспортное средство отправляется после завершения данного |
tags[] | Указывает теги, прикрепленные к запросу на посещение. Пустые или повторяющиеся строки не допускаются. |
timeWindows[] | Временные интервалы, ограничивающие время прибытия. Обратите внимание, что транспортное средство может выехать за пределы временного интервала прибытия, то есть время прибытия + продолжительность не обязательно должны укладываться в временной интервал. Это может привести к ожиданию, если транспортное средство прибудет раньше, чем Отсутствие параметра Временные интервалы должны быть непересекающимися, то есть ни один временной интервал не должен перекрываться с другим или примыкать к нему, и они должны располагаться в порядке возрастания. |
duration | Продолжительность визита, т.е. время, проведенное транспортным средством между прибытием и отправлением (добавляется к возможному времени ожидания; см. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
cost | Стоимость обслуживания данного запроса на выезд по маршруту транспортного средства. Эта сумма может использоваться для оплаты различных расходов за каждый альтернативный способ забора или доставки груза. Эта стоимость должна быть выражена в той же единице измерения, что и |
loadDemands | Загрузить требования этого запроса на посещение. Это аналогично полю |
visitTypes[] | Указывает типы посещений. Это может использоваться для выделения дополнительного времени, необходимого транспортному средству для завершения данного посещения (см. Тип может встречаться только один раз. |
label | Указывает метку для данного |
avoidUTurns | Указывает, следует ли избегать разворотов на данном участке дороги. Избегание разворотов осуществляется по мере возможности, но полное избегание не гарантируется. Это экспериментальная функция, и ее поведение может измениться. Экспериментальная функция: подробности см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request . |
LatLng
Объект, представляющий пару координат широты и долготы. Он выражается в виде пары чисел с плавающей запятой (double), обозначающих градусы широты и долготы. Если не указано иное, этот объект должен соответствовать стандарту WGS84 . Значения должны находиться в пределах нормализованных диапазонов.
| JSON-представление |
|---|
{ "latitude": number, "longitude": number } |
| Поля | |
|---|---|
latitude | Широта в градусах. Она должна находиться в диапазоне [-90,0, +90,0]. |
longitude | Долгота в градусах. Она должна находиться в диапазоне [-180,0, +180,0]. |
Путевая точка
Обозначает путевую точку. Путевые точки отмечают места прибытия и отправления запросов на посещение, а также места начала и окончания движения транспортных средств.
| JSON-представление |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| Поля | |
|---|---|
sideOfRoad | Необязательный параметр. Указывает, что местоположение этой путевой точки предполагает предпочтительное расположение транспортного средства для остановки на определенной стороне дороги. При установке этого значения маршрут будет проходить через указанное местоположение, чтобы транспортное средство могло остановиться на той стороне дороги, к которой это местоположение имеет приоритет относительно центра дороги. Этот параметр не работает для режима передвижения «ПЕШКОМ». |
vehicleStopover | Указывает, что точка маршрута предназначена для остановки транспортных средств, где предполагается либо посадка, либо высадка пассажиров. Эта опция работает только для режима движения «DRIVING» и когда параметр «locationType» имеет значение «location». Экспериментальный: Поведение или существование данной области может измениться в будущем. |
Поле объединения location_type . Различные способы представления местоположения. location_type может принимать только одно из следующих значений: | |
location | Точка, заданная с использованием географических координат, включая необязательный заголовок. |
placeId | Идентификатор точки интереса (POI), связанной с путевой точкой. При использовании идентификатора места для указания места прибытия или отправления в запросе VisitRequest используйте идентификатор места, достаточно точный для определения координат широты и долготы для навигации к этому месту. Например, подойдет идентификатор места, представляющий здание, но идентификатор места, представляющий дорогу, не рекомендуется. |
Расположение
Указывает местоположение (географическую точку и необязательный заголовок).
| JSON-представление |
|---|
{
"latLng": {
object ( |
| Поля | |
|---|---|
latLng | Географические координаты контрольной точки. |
heading | Направление по компасу, связанное с направлением движения транспорта. Это значение используется для указания стороны дороги, используемой для посадки и высадки пассажиров. Значения направления могут быть от 0 до 360, где 0 означает направление строго на север, 90 — направление строго на восток и т. д. |
Временное окно
Временные рамки ограничивают продолжительность события, например, время прибытия на место визита или время начала и окончания движения транспортного средства.
Жесткие временные рамки, startTime и endTime , определяют самое раннее и самое позднее время события, так что startTime <= event_time <= endTime . Нижняя граница мягкого временного окна, softStartTime , выражает предпочтение тому, чтобы событие произошло в или после softStartTime , взимая плату, пропорциональную тому, сколько времени прошло до softStartTime. Верхняя граница мягкого временного окна, softEndTime , выражает предпочтение тому, чтобы событие произошло в или до softEndTime , взимая плату, пропорциональную тому, сколько времени прошло после softEndTime . startTime , endTime , softStartTime и softEndTime должны находиться в пределах глобальных временных ограничений (см. ShipmentModel.global_start_time и ShipmentModel.global_end_time ) и должны учитывать:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| JSON-представление |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| Поля | |
|---|---|
startTime | Время начала жесткого временного окна. Если не указано, будет установлено значение Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
endTime | Время окончания жестко заданного временного окна. Если не указано, будет установлено значение Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
softStartTime | Время плавного начала временного окна. Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
softEndTime | Время мягкого окончания временного окна. Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
costPerHourBeforeSoftStartTime | Если событие происходит до softStartTime, к другим затратам в модели добавляется почасовая плата, которая вычисляется следующим образом: Эта стоимость должна быть положительной, и поле может быть установлено только в том случае, если задан параметр softStartTime. |
costPerHourAfterSoftEndTime | Если событие происходит после Эта стоимость должна быть положительной, и поле может быть установлено только в том случае, если задан параметр |
Транспортное средство
Модель транспортного средства в задаче отгрузки. Решение задачи отгрузки предполагает построение маршрута для данного транспортного средства, начинающегося в точке startLocation и заканчивающегося в точке endLocation . Маршрут представляет собой последовательность посещений (см. ShipmentRoute ).
| JSON-представление |
|---|
{ "displayName": string, "travelMode": enum ( |
| Поля | |
|---|---|
displayName | Заданное пользователем отображаемое имя транспортного средства. Оно может содержать до 63 символов и использовать символы UTF-8. |
travelMode | Режим движения, влияющий на проходимые для транспортного средства дороги и его скорость. См. также |
routeModifiers | Набор условий, которые должны быть выполнены и которые влияют на способ расчета маршрута для данного транспортного средства. |
startLocation | Географическое местоположение, с которого транспортное средство начинает движение до погрузки/разгрузки. Если не указано, транспортное средство начинает движение с места первой погрузки/разгрузки. Если модель перевозки содержит матрицы продолжительности и расстояния, |
startWaypoint | Путевая точка, представляющая географическое местоположение, откуда транспортное средство начинает движение до погрузки каких-либо грузов. Если ни |
endLocation | Географическое местоположение, где транспортное средство завершает свой последний |
endWaypoint | Путевая точка (Waypoint) представляет собой географическое местоположение, где транспортное средство завершает свой последний |
startTags[] | Указывает на бирки, прикрепленные к началу маршрута транспортного средства. Пустые или повторяющиеся строки не допускаются. |
endTags[] | Указывает на бирки, прикрепленные к концу маршрута транспортного средства. Пустые или повторяющиеся строки не допускаются. |
startTimeWindows[] | Временные интервалы, в течение которых транспортное средство может покинуть место отправления. Они должны укладываться в глобальные временные рамки (см. поля Временные интервалы, относящиеся к одному и тому же повторяющемуся полю, должны быть непересекающимися, то есть ни один временной интервал не может перекрываться с другим или быть смежным с ним, и они должны располагаться в хронологическом порядке. |
endTimeWindows[] | Временные интервалы, в течение которых транспортное средство может прибыть в конечный пункт назначения. Они должны укладываться в глобальные временные рамки (см. поля Временные интервалы, относящиеся к одному и тому же повторяющемуся полю, должны быть непересекающимися, то есть ни один временной интервал не может перекрываться с другим или быть смежным с ним, и они должны располагаться в хронологическом порядке. |
unloadingPolicy | В отношении транспортного средства действуют правила разгрузки. |
loadLimits | Вместимость транспортного средства (например, вес, объем, количество поддонов). Ключи в карте представляют собой идентификаторы типа груза, соответствующие ключам поля |
costPerHour | Расходы на транспортные средства: все расходы суммируются и должны быть в той же единице измерения, что и Стоимость за час движения транспортного средства по маршруту. Эта стоимость применяется к общему времени, затраченному на маршрут, и включает время в пути, время ожидания и время посещения. Использование |
costPerTraveledHour | Стоимость за час пути по маршруту транспортного средства. Эта стоимость применяется только ко времени в пути по маршруту (т. е. ко времени, указанному в |
costPerKilometer | Стоимость за километр маршрута транспортного средства. Эта стоимость применяется к расстоянию, указанному в |
fixedCost | Фиксированная стоимость применяется, если данное транспортное средство используется для перевозки груза. |
usedIfRouteIsEmpty | Это поле применяется только к транспортным средствам, маршрут которых не включает перевозки. Оно указывает, следует ли считать транспортное средство бывшим в употреблении или нет в данном случае. Если это так, то транспортное средство перемещается из начальной точки в конечную, даже если оно не перевозит никаких грузов, и при этом учитываются затраты времени и расстояния, связанные с его перемещением из начальной точки в конечную. В противном случае, транспортное средство не перемещается от начальной до конечной точки, и для него не запланированы никакие |
routeDurationLimit | Ограничение применяется к общей продолжительности маршрута транспортного средства. В заданном объекте |
travelDurationLimit | Ограничение применяется к продолжительности поездки по маршруту транспортного средства. В заданном объекте |
routeDistanceLimit | Ограничение применяется к общей протяженности маршрута транспортного средства. В заданном объекте |
extraVisitDurationForVisitType | Задает сопоставление строковых значений visitTypes с длительностью. Длительность — это время, добавляемое к Если запрос на посещение содержит несколько типов, к продолжительности каждого типа на карте будет добавлена соответствующая величина. |
breakRule | Описывает график перерывов, который будет соблюдаться в данном транспортном средстве. Если транспортное средство пустое, перерывы в нем не предусмотрены. |
label | Указывает метку для данного транспортного средства. Эта метка отображается в ответе как |
ignore | Если значение равно true, Если перевозка осуществляется транспортным средством, игнорируемым в Если отгрузка осуществляется транспортным средством, игнорируемым в |
travelDurationMultiple | Указывает множитель, который можно использовать для увеличения или уменьшения времени в пути этого транспортного средства. Например, установка значения 2,0 означает, что это транспортное средство будет медленнее и время в пути будет вдвое больше, чем у стандартных транспортных средств. Этот множитель не влияет на продолжительность посещения. Он влияет на стоимость, если указаны ВНИМАНИЕ: После применения этого множителя время в пути будет округлено до ближайшей секунды, но до выполнения каких-либо числовых операций. Таким образом, небольшое увеличение множителя может привести к потере точности. См. также |
TravelMode
Виды передвижения, которые могут использоваться транспортными средствами.
Это должны быть подмножества режимов передвижения, доступных через API маршрутов платформы Google Maps, см.: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Примечание: WALKING маршруты находятся в стадии бета-тестирования и иногда могут не иметь четко обозначенных тротуаров или пешеходных дорожек. Вы должны показывать это предупреждение пользователю для всех пешеходных маршрутов, отображаемых в вашем приложении.
| Перечисления | |
|---|---|
TRAVEL_MODE_UNSPECIFIED | Неуказанный способ передвижения, эквивалентный DRIVING . |
DRIVING | Режим движения, соответствующий указаниям водителя (автомобиль, ...). |
WALKING | Режим передвижения, соответствующий пешеходному маршруту. |
Модификаторы маршрута
Представляет собой набор необязательных условий, которые необходимо соблюдать при расчете маршрутов для транспортных средств. Это аналогично RouteModifiers в API Routes Preferred платформы Google Maps; см.: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers .
| JSON-представление |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| Поля | |
|---|---|
avoidTolls | Указывает, следует ли избегать платных дорог, если это целесообразно. Предпочтение будет отдаваться маршрутам, не содержащим платных дорог. Применяется только к моторизованным видам транспорта. |
avoidHighways | Указывает, следует ли избегать автомагистралей, если это целесообразно. Предпочтение будет отдаваться маршрутам, не включающим автомагистрали. Применяется только к моторизованным видам транспорта. |
avoidFerries | Указывает, следует ли избегать паромов, если это разумно. Предпочтение будет отдаваться маршрутам, не включающим переправы на паромах. Применяется только к моторизованным видам транспорта. |
avoidIndoor | Необязательно. Указывает, следует ли избегать передвижения внутри помещений, если это целесообразно. Предпочтение будет отдаваться маршрутам, не включающим передвижение внутри помещений. Применяется только к режиму передвижения |
Политика разгрузки
Правила разгрузки транспортных средств. Применяются только к перевозкам, включающим как погрузку, так и разгрузку.
Другие перевозки могут осуществляться в любом месте маршрута независимо от unloadingPolicy .
| Перечисления | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED | Правила разгрузки не указаны; доставка должна осуществляться сразу после соответствующей погрузки. |
LAST_IN_FIRST_OUT | Доставка должна осуществляться в обратном порядке по сравнению с получением. |
FIRST_IN_FIRST_OUT | Доставка должна осуществляться в том же порядке, что и получение заказа. |
LoadLimit
Определяет предельное значение нагрузки, применяемое к транспортному средству, например: «Этот грузовик может перевозить не более 3500 кг». См. loadLimits .
| JSON-представление |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Поля | |
|---|---|
softMaxLoad | Мягкое ограничение нагрузки. См. |
costPerUnitAboveSoftMax | Если на маршруте данного транспортного средства груз когда-либо превысит |
startLoadInterval | Допустимый интервал загрузки транспортного средства в начале маршрута. |
endLoadInterval | Допустимый интервал загрузки транспортного средства в конце маршрута. |
maxLoad | Максимально допустимая нагрузка. |
costPerKilometer | Стоимость перемещения одной единицы груза на один километр для данного транспортного средства. Это можно использовать в качестве показателя расхода топлива: если груз представляет собой вес (в Ньютонах), то произведение груза на километр имеет размерность энергии. Экспериментальная функция: подробности см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request . |
costPerTraveledHour | Стоимость перевозки единицы груза в течение одного часа для данного транспортного средства. Экспериментальная функция: подробности см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request . |
Интервал
Интервал допустимых объемов нагрузки.
| JSON-представление |
|---|
{ "min": string, "max": string } |
| Поля | |
|---|---|
min | Минимально допустимая нагрузка. Должна быть ≥ 0. Если указаны оба значения, |
max | Максимально допустимая нагрузка. Должна быть ≥ 0. Если не указана, максимальная нагрузка не ограничена этим сообщением. Если указаны оба параметра, |
LoadCost
Стоимость перемещения одной единицы груза во время Transition . Для данного груза стоимость представляет собой сумму двух частей:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
С учетом таких затрат, решения, как правило, сначала удовлетворяют высоким требованиям, или, наоборот, удовлетворяют им в последнюю очередь. Например, если у транспортного средства есть
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
и его маршрут состоит из начала, посадки, посадки, доставки, доставки, конца с переходами:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
Тогда затраты, понесенные в связи с этой LoadCost составят (cost_below * load_below * kilometers + cost_above * load_above * kms)
- переход 0: 0.0
- Переход 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- Переход 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- Переход 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 4: 0.0
Таким образом, LoadCost на этом маршруте составляет 120,0.
Однако, если маршрут состоит из начала, посадки, доставки, посадки, доставки и конца с переходами:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
тогда затраты, понесенные в связи с этой LoadCost составляют
- переход 0: 0.0
- Переход 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 2: 0.0
- Переход 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 4: 0.0
В данном случае LoadCost на маршруте составляет 40,0.
LoadCost делает решения с интенсивно используемыми переходами более дорогими.
Экспериментальная функция: подробности см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request .
| JSON-представление |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Поля | |
|---|---|
loadThreshold | Величина нагрузки, при превышении которой стоимость перемещения единицы груза изменяется с costPerUnitBelowThreshold на costPerUnitAboveThreshold. Должна быть >= 0. |
costPerUnitBelowThreshold | Стоимость перемещения единицы груза, для каждой единицы в диапазоне от 0 до порогового значения. Должна быть конечной величиной и >= 0. |
costPerUnitAboveThreshold | Cost of moving a unit of load, for each unit above threshold. In the special case threshold = 0, this is a fixed cost per unit. Must be a finite value, and >= 0. |
DurationLimit
A limit defining a maximum duration of the route of a vehicle. It can be either hard or soft.
When a soft limit field is defined, both the soft max threshold and its associated cost must be defined together.
| JSON-представление |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Поля | |
|---|---|
maxDuration | A hard limit constraining the duration to be at most maxDuration. A duration in seconds with up to nine fractional digits, ending with ' |
softMaxDuration | A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost. This cost adds up to other costs defined in the model, with the same unit. If defined, A duration in seconds with up to nine fractional digits, ending with ' |
quadraticSoftMaxDuration | A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost, quadratic in the duration. This cost adds up to other costs defined in the model, with the same unit. If
A duration in seconds with up to nine fractional digits, ending with ' |
costPerHourAfterSoftMax | Cost per hour incurred if the The cost must be nonnegative. |
costPerSquareHourAfterQuadraticSoftMax | Cost per square hour incurred if the The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows: The cost must be nonnegative. |
DistanceLimit
A limit defining a maximum distance which can be traveled. It can be either hard or soft.
If a soft limit is defined, both softMaxMeters and costPerKilometerAboveSoftMax must be defined and be nonnegative.
| JSON-представление |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Поля | |
|---|---|
maxMeters | A hard limit constraining the distance to be at most maxMeters. The limit must be nonnegative. |
softMaxMeters | A soft limit not enforcing a maximum distance limit, but when violated results in a cost which adds up to other costs defined in the model, with the same unit. If defined softMaxMeters must be less than maxMeters and must be nonnegative. |
costPerKilometerBelowSoftMax | Cost per kilometer incurred, increasing up to This cost is not supported in |
costPerKilometerAboveSoftMax | Cost per kilometer incurred if distance is above The cost must be nonnegative. |
BreakRule
Rules to generate time breaks for a vehicle (eg lunch breaks). A break is a contiguous period of time during which the vehicle remains idle at its current position and cannot perform any visit. A break may occur:
- during the travel between two visits (which includes the time right before or right after a visit, but not in the middle of a visit), in which case it extends the corresponding transit time between the visits,
- or before the vehicle start (the vehicle may not start in the middle of a break), in which case it does not affect the vehicle start time.
- or after the vehicle end (ditto, with the vehicle end time).
| JSON-представление |
|---|
{ "breakRequests": [ { object ( |
| Поля | |
|---|---|
breakRequests[] | Sequence of breaks. See the |
frequencyConstraints[] | Several |
BreakRequest
The sequence of breaks (ie their number and order) that apply to each vehicle must be known beforehand. The repeated BreakRequest s define that sequence, in the order in which they must occur. Their time windows ( earliestStartTime / latestStartTime ) may overlap, but they must be compatible with the order (this is checked).
| JSON-представление |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Поля | |
|---|---|
earliestStartTime | Required. Lower bound (inclusive) on the start of the break. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
latestStartTime | Required. Upper bound (inclusive) on the start of the break. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
minDuration | Required. Minimum duration of the break. Must be positive. A duration in seconds with up to nine fractional digits, ending with ' |
FrequencyConstraint
One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint :
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
The timing and duration of the breaks in the solution will respect all such constraints, in addition to the time windows and minimum durations already specified in the BreakRequest .
A FrequencyConstraint may in practice apply to non-consecutive breaks. For example, the following schedule honors the "1h every 12h" example:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| JSON-представление |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| Поля | |
|---|---|
minBreakDuration | Required. Minimum break duration for this constraint. Nonnegative. See description of A duration in seconds with up to nine fractional digits, ending with ' |
maxInterBreakDuration | Required. Maximum allowed span of any interval of time in the route that does not include at least partially a break of A duration in seconds with up to nine fractional digits, ending with ' |
Цель
Objectives replace the cost model completely, and are therefore incompatible with pre-existing costs. Each objective maps to a number of pre-defined costs for, eg, vehicles, shipments or transition attributes.
Experimental: See https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request for more details.
| JSON-представление |
|---|
{
"type": enum ( |
| Поля | |
|---|---|
type | The type of the objective. |
weight | How much this objective should count relatively to the others. This can be any non-negative number, weights do not have to sum to 1. Weights default to 1.0. |
Тип
The objective type that will be mapped to a set of costs.
| Перечисления | |
|---|---|
DEFAULT | A default set of costs will be used, to ensure a reasonable solution. Note: this objective can be used on its own, but will also always be added with weight 1.0, as a baseline, to the objectives specified by the user, if it's not already present. |
MIN_DISTANCE | "MIN" objectives. Minimize the total distance traveled. |
MIN_WORKING_TIME | Minimize the total working time, summed over all vehicles. |
MIN_TRAVEL_TIME | Same as above but focusing on travel time only. |
MIN_NUM_VEHICLES | Minimize the number of vehicles used. |
DurationDistanceMatrix
Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.
| JSON-представление |
|---|
{
"rows": [
{
object ( |
| Поля | |
|---|---|
rows[] | Specifies the rows of the duration and distance matrix. It must have as many elements as |
vehicleStartTag | Tag defining to which vehicles this duration and distance matrix applies. If empty, this applies to all vehicles, and there can only be a single matrix. Each vehicle start must match exactly one matrix, ie exactly one of their All matrices must have a different |
Ряд
Specifies a row of the duration and distance matrix.
| JSON-представление |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| Поля | |
|---|---|
durations[] | Duration values for a given row. It must have as many elements as A duration in seconds with up to nine fractional digits, ending with ' |
meters[] | Distance values for a given row. If no costs or constraints refer to distances in the model, this can be left empty; otherwise it must have as many elements as |
TransitionAttributes
Specifies attributes of transitions between two consecutive visits on a route. Several TransitionAttributes may apply to the same transition: in that case, all extra costs add up and the strictest constraint or limit applies (following natural "AND" semantics).
| JSON-представление |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Поля | |
|---|---|
srcTag | Tags defining the set of (src->dst) transitions these attributes apply to. A source visit or vehicle start matches iff its |
excludedSrcTag | See |
dstTag | A destination visit or vehicle end matches iff its |
excludedDstTag | See |
cost | Specifies a cost for performing this transition. This is in the same unit as all other costs in the model and must not be negative. It is applied on top of all other existing costs. |
costPerKilometer | Specifies a cost per kilometer applied to the distance traveled while performing this transition. It adds up to any |
distanceLimit | Specifies a limit on the distance traveled while performing this transition. As of 2021/06, only soft limits are supported. |
delay | Specifies a delay incurred when performing this transition. This delay always occurs after finishing the source visit and before starting the destination visit. A duration in seconds with up to nine fractional digits, ending with ' |
ShipmentTypeIncompatibility
Specifies incompatibilties between shipments depending on their shipmentType. The appearance of incompatible shipments on the same route is restricted based on the incompatibility mode.
| JSON-представление |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Поля | |
|---|---|
types[] | List of incompatible types. Two shipments having different |
incompatibilityMode | Mode applied to the incompatibility. |
IncompatibilityMode
Modes defining how the appearance of incompatible shipments are restricted on the same route.
| Перечисления | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED | Unspecified incompatibility mode. This value should never be used. |
NOT_PERFORMED_BY_SAME_VEHICLE | In this mode, two shipments with incompatible types can never share the same vehicle. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY | In this mode, two shipments with incompatible types can never be on the same vehicle at the same time:
|
ShipmentTypeRequirement
Specifies requirements between shipments based on their shipmentType. The specifics of the requirement are defined by the requirement mode.
| JSON-представление |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Поля | |
|---|---|
requiredShipmentTypeAlternatives[] | List of alternative shipment types required by the |
dependentShipmentTypes[] | All shipments with a type in the NOTE: Chains of requirements such that a |
requirementMode | Mode applied to the requirement. |
RequirementMode
Modes defining the appearance of dependent shipments on a route.
| Перечисления | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED | Unspecified requirement mode. This value should never be used. |
PERFORMED_BY_SAME_VEHICLE | In this mode, all "dependent" shipments must share the same vehicle as at least one of their "required" shipments. |
IN_SAME_VEHICLE_AT_PICKUP_TIME | With the A "dependent" shipment pickup must therefore have either:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME | Same as before, except the "dependent" shipments need to have a "required" shipment on their vehicle at the time of their delivery . |
PrecedenceRule
A precedence rule between two events (each event is the pickup or the delivery of a shipment): the "second" event has to start at least offsetDuration after "first" has started.
Several precedences can refer to the same (or related) events, eg, "pickup of B happens after delivery of A" and "pickup of C happens after pickup of B".
Furthermore, precedences only apply when both shipments are performed and are otherwise ignored.
| JSON-представление |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Поля | |
|---|---|
firstIsDelivery | Indicates if the "first" event is a delivery. |
secondIsDelivery | Indicates if the "second" event is a delivery. |
offsetDuration | The offset between the "first" and "second" event. It can be negative. A duration in seconds with up to nine fractional digits, ending with ' |
firstIndex | Shipment index of the "first" event. This field must be specified. |
secondIndex | Shipment index of the "second" event. This field must be specified. |