- JSON-представление
- Отгрузка
- VisitRequest
- Широта и долгота
- Путевая точка
- Расположение
- TimeWindow
- Транспортное средство
- TravelMode
- RouteModifiers
- Политика разгрузки
- LoadLimit
- Интервал
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- Ограничение частоты
- Цель
- Тип
- DurationDistanceMatrix
- Ряд
- Атрибуты перехода
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ТипОтгрузкиТребования
- RequirementMode
- Правило приоритета
Модель перевозки содержит набор перевозок, которые необходимо выполнить набором транспортных средств, минимизируя при этом общую стоимость, которая представляет собой сумму:
- стоимость маршрутизации транспортных средств (сумма стоимости за общее время, стоимости за время в пути и фиксированной стоимости всех транспортных средств).
- штрафы за невыполненную отгрузку.
- стоимость глобальной продолжительности доставки
| 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[] | Наборы несовместимых shipment_types (см. |
shipmentTypeRequirements[] | Наборы требований |
precedenceRules[] | Набор правил приоритета, которые должны соблюдаться в модели. ВАЖНО : Использование правил приоритета ограничивает размер задачи, которую можно оптимизировать. Запросы, использующие правила приоритета, которые включают множество поставок, могут быть отклонены. |
maxActiveVehicles | Ограничивает максимальное количество активных транспортных средств. Транспортное средство считается активным, если его маршрут выполняет хотя бы одну перевозку. Это можно использовать для ограничения количества маршрутов в случае, когда количество водителей меньше количества транспортных средств, а автопарк неоднороден. В результате оптимизации будет выбрано оптимальное подмножество транспортных средств для использования. Значение должно быть строго положительным. |
Отгрузка
Перевозка одного товара из одного пункта выдачи в один из пунктов доставки. Чтобы перевозка считалась выполненной, транспортное средство должно посетить один из пунктов выдачи (и соответственно уменьшить свои свободные места), а затем позже посетить один из пунктов доставки (и, следовательно, соответственно увеличить свои свободные места).
| JSON-представление |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Поля | |
|---|---|
displayName | Отображаемое имя отправления, определяемое пользователем. Длина имени может составлять до 63 символов, допускается использование символов UTF-8. |
pickups[] | Набор вариантов забора груза, связанных с отправкой. Если не указано иное, транспортное средство должно заехать только в место, соответствующее доставке. |
deliveries[] | Набор вариантов доставки, связанных с отправлением. Если не указано иное, транспортное средство должно заехать только в место, соответствующее месту забора груза. |
loadDemands | Требования к загрузке груза (например, вес, объём, количество поддонов и т. д.). Ключами на карте должны быть идентификаторы, описывающие тип соответствующего груза, в идеале также с указанием единиц измерения. Например: «weight_kg», «volume_gallons», «pallet_count» и т. д. Если заданный ключ отсутствует на карте, соответствующий груз считается пустым. |
allowedVehicleIndices[] | Набор транспортных средств, которые могут выполнить эту перевозку. Если этот список пуст, её могут выполнить все транспортные средства. Транспортные средства указаны по индексу в списке |
costsPerVehicle[] | Указывает стоимость доставки груза каждым транспортным средством. Если указано, необходимо указать ОДНО ИЗ следующих условий:
Эти расходы должны быть выражены в тех же единицах, что и |
costsPerVehicleIndices[] | Индексы транспортных средств, к которым применяется |
pickupToDeliveryAbsoluteDetourLimit | Указывает максимальное абсолютное время в пути по сравнению с кратчайшим путём от пункта забора до пункта доставки. Если указано, оно должно быть неотрицательным, а отправление должно включать как минимум пункт забора и пункт доставки. Например, пусть t — кратчайшее время, необходимое для достижения выбранного варианта самовывоза непосредственно до выбранного варианта доставки. Тогда установка Если для одной и той же партии груза указаны как относительные, так и абсолютные ограничения, для каждой возможной пары «забор/доставка» используется более строгий предел. С 2017/10 года объезды поддерживаются только в тех случаях, когда продолжительность поездки не зависит от транспортных средств. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивается на « |
pickupToDeliveryTimeLimit | Указывает максимальную продолжительность от начала забора до начала доставки груза. Если указано, это значение должно быть неотрицательным, и груз должен включать как минимум забор и доставку. Это не зависит от выбранных вариантов забора и доставки, а также от скорости транспортного средства. Это значение можно указать вместе с ограничениями на максимальный объезд: решение будет учитывать оба параметра. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивается на « |
shipmentType | Непустая строка, указывающая «тип» для данной поставки. Эту функцию можно использовать для определения несовместимостей или требований между Отличается от |
label | Указывает метку для данного отправления. Эта метка указывается в ответе |
ignore | Если да, пропустите эту отправку, но не применяйте Игнорирование отгрузки приводит к ошибке проверки, если в модели есть хотя бы одно Игнорирование отгрузки, выполненной в |
penaltyCost | Если отправка не выполнена, этот штраф добавляется к общей стоимости маршрутов. Отправка считается выполненной, если использован один из вариантов забора и доставки. Стоимость может быть выражена в тех же единицах, что и все остальные поля модели, связанные со стоимостью, и должна быть положительной. ВАЖНО : Если данный штраф не указан, он считается бесконечным, т.е. отправка должна быть завершена. |
pickupToDeliveryRelativeDetourLimit | Указывает максимальное относительное время в пути по сравнению с кратчайшим путём от пункта забора до пункта доставки. Если указано, оно должно быть неотрицательным, а отправление должно включать как минимум пункт забора и пункт доставки. Например, пусть t — кратчайшее время, необходимое для достижения выбранного варианта самовывоза непосредственно до выбранного варианта доставки. Тогда установка Если для одной и той же партии груза указаны как относительные, так и абсолютные ограничения, для каждой возможной пары «забор/доставка» используется более строгий предел. С 2017/10 года объезды поддерживаются только в тех случаях, когда продолжительность поездки не зависит от транспортных средств. |
VisitRequest
Запрос на посещение, который может быть выполнен транспортным средством: у него есть геолокация (или две, см. ниже), время открытия и закрытия, представленное временными окнами, и продолжительность обслуживания (время, затраченное транспортным средством с момента прибытия для забора или доставки товаров).
| 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 . |
Широта и долгота
Объект, представляющий пару широта/долгота. Выражается в виде пары чисел двойной точности, представляющих градусы широты и долготы. Если не указано иное, этот объект должен соответствовать стандарту WGS84 . Значения должны находиться в нормализованных диапазонах.
| JSON-представление |
|---|
{ "latitude": number, "longitude": number } |
| Поля | |
|---|---|
latitude | Широта в градусах. Должна быть в диапазоне [-90,0, +90,0]. |
longitude | Долгота в градусах. Должна быть в диапазоне [-180,0, +180,0]. |
Путевая точка
Инкапсулирует путевую точку. Путевые точки отмечают места прибытия и отправления запросов VisitRequest, а также начальное и конечное места транспортных средств.
| JSON-представление |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| Поля | |
|---|---|
sideOfRoad | Необязательно. Указывает, что местоположение этой путевой точки должно быть приоритетным для остановки транспортного средства на определённой стороне дороги. При установке этого значения маршрут будет проходить через эту точку, чтобы транспортное средство могло остановиться на той стороне дороги, к которой она смещена относительно центра дороги. Эта опция не работает в режиме движения «ПЕШКОМ». |
vehicleStopover | Указывает, что путевая точка предназначена для остановки транспортных средств с целью посадки или высадки пассажиров. Эта опция работает только для режима движения «ВОЖДЕНИЕ» и если для параметра «locationType» задано значение «location». Экспериментальный: поведение или существование этого поля может измениться в будущем. |
Объединенное поле location_type . Различные способы представления местоположения. location_type может быть только одним из следующих: | |
location | Точка, указанная с использованием географических координат, включая необязательный заголовок. |
placeId | Идентификатор точки интереса (POI), связанный с путевой точкой. При использовании идентификатора места для указания места прибытия или отправления в запросе VisitRequest используйте идентификатор, достаточно точный для определения координат LatLng для навигации к этому месту. Например, идентификатор здания подойдёт, но идентификатор дороги использовать не рекомендуется. |
Расположение
Содержит местоположение (географическую точку и необязательный заголовок).
| JSON-представление |
|---|
{
"latLng": {
object ( |
| Поля | |
|---|---|
latLng | Географические координаты точки маршрута. |
heading | Направление по компасу, соответствующее направлению движения транспорта. Это значение используется для указания стороны дороги, с которой следует производить посадку и высадку пассажиров. Значение направления может быть от 0 до 360, где 0 указывает направление на север, 90 — на восток и т. д. |
TimeWindow
Временные окна ограничивают время события, например время прибытия в место посещения или время начала и окончания движения транспортного средства.
Жесткие границы временного окна, startTime и endTime , определяют самое раннее и самое позднее время события, так что startTime <= event_time <= endTime . Нижняя граница мягкого временного окна, 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 | Точка маршрута, представляющая географическое местоположение, в котором транспортное средство завершает свой последний |
startTags[] | Указывает теги, прикрепленные к началу маршрута транспортного средства. Пустые или дублирующиеся строки не допускаются. |
endTags[] | Указывает теги, прикрепленные к концу маршрута транспортного средства. Пустые или дублирующиеся строки не допускаются. |
startTimeWindows[] | Временные интервалы, в течение которых транспортное средство может покинуть пункт отправления. Они должны соответствовать глобальным временным ограничениям (см. поля Временные окна, принадлежащие одному и тому же повторяющемуся полю, должны быть непересекающимися, т.е. ни одно временное окно не может перекрываться или быть смежным с другим, и они должны располагаться в хронологическом порядке. |
endTimeWindows[] | Временные интервалы, в течение которых транспортное средство может прибыть в конечный пункт назначения. Они должны соответствовать глобальным временным ограничениям (см. поля Временные окна, принадлежащие одному и тому же повторяющемуся полю, должны быть непересекающимися, т.е. ни одно временное окно не может перекрываться или быть смежным с другим, и они должны располагаться в хронологическом порядке. |
unloadingPolicy | В отношении транспортного средства применяются правила разгрузки. |
loadLimits | Грузоподъёмность транспортного средства (например, вес, объём, количество поддонов). Ключи в карте — это идентификаторы типа груза, соответствующие ключам поля |
costPerHour | Стоимость транспортного средства: все расходы суммируются и должны быть выражены в тех же единицах, что и Стоимость часа в пути транспортного средства. Эта стоимость применяется к общему времени, затраченному на маршрут, и включает время в пути, время ожидания и время посещения. Использование |
costPerTraveledHour | Стоимость за час в пути по маршруту транспортного средства. Эта стоимость применяется только к времени, затраченному на поездку по маршруту (т.е. указанному в |
costPerKilometer | Стоимость за километр маршрута транспортного средства. Эта стоимость применяется к расстоянию, указанному в |
fixedCost | Фиксированная стоимость применяется, если данное транспортное средство используется для перевозки груза. |
usedIfRouteIsEmpty | Это поле применяется только к транспортным средствам, маршрут которых не обслуживает грузы. Оно указывает, следует ли в этом случае считать транспортное средство подержанным. Если значение true, транспортное средство следует из начальной точки в конечную, даже если оно не обслуживает никаких грузов, а также учитываются затраты времени и расстояния, возникающие в результате его перемещения из начальной точки в конечную. В противном случае он не перемещается из начальной точки в конечную, и для этого транспортного средства не запланированы |
routeDurationLimit | Ограничение, применяемое к общей продолжительности маршрута транспортного средства. В заданном |
travelDurationLimit | Ограничение, применяемое к длительности движения транспортного средства по маршруту. В заданном |
routeDistanceLimit | Ограничение применяется к общей дистанции маршрута транспортного средства. В данном |
extraVisitDurationForVisitType | Задаёт соответствие строк visitTypes значениям длительности. Длительность — это время, дополнительное к Если запрос на посещение имеет несколько типов, для каждого типа на карте будет добавлена длительность. |
breakRule | Описывает график перерывов, который будет применяться для данного транспортного средства. Если поле пусто, перерывы для данного транспортного средства не будут запланированы. |
label | Указывает метку для данного транспортного средства. Эта метка указывается в ответе как |
ignore | Если true, Если отправка выполняется игнорируемым транспортным средством в Если отправка выполняется игнорируемым транспортным средством в рамках |
travelDurationMultiple | Указывает мультипликативный коэффициент, который можно использовать для увеличения или уменьшения времени в пути данного транспортного средства. Например, значение 2,0 означает, что данное транспортное средство медленнее и время в пути вдвое больше, чем у стандартных транспортных средств. Этот множитель не влияет на продолжительность поездок. Он влияет на стоимость, если указаны ВНИМАНИЕ: Время в пути будет округлено до ближайшей секунды после применения этого множителя, но до выполнения любых числовых операций, поэтому небольшое множитель может привести к потере точности. См. также |
TravelMode
Виды транспорта, которые могут использоваться транспортными средствами.
Они должны быть подмножеством режимов перемещения API маршрутов платформы Google Карт, см.: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Примечание: WALKING маршруты находятся в стадии бета-тестирования и иногда могут отсутствовать чёткие тротуары или пешеходные дорожки. Это предупреждение необходимо отображать для всех пешеходных маршрутов, отображаемых в приложении.
| Перечисления | |
|---|---|
TRAVEL_MODE_UNSPECIFIED | Неуказанный режим движения, эквивалентный DRIVING . |
DRIVING | Способ передвижения, соответствующий направлению движения (автомобиль, ...). |
WALKING | Режим передвижения, соответствующий пешеходным маршрутам. |
RouteModifiers
Инкапсулирует набор дополнительных условий, которые необходимо учитывать при расчёте маршрутов транспортных средств. Аналогично RouteModifiers в API предпочтительных маршрутов платформы Google Карт; см.: 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 - макс(0, нагрузка -
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 * miles + 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 defined, 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. |