- JSON-представление
- Отгрузка
- ПосетитеЗапрос
- ШиротаДлительность
- Путевая точка
- Расположение
- ВремяОкно
- Транспортное средство
- Режим путешествия
- Модификаторы маршрута
- Политика разгрузки
- Ограничение нагрузки
- Интервал
- Лоадкост
- Ограничение продолжительности
- Предел расстояния
- BreakRule
- Запрос на перерыв
- Частотное ограничение
- Цель
- Тип
- ПродолжительностьDistanceMatrix
- Ряд
- Атрибуты перехода
- Тип отгрузкиНесовместимость
- Режим несовместимости
- Тип отгрузкиТребование
- Режим Требования
- Правило приоритета
Модель перевозки содержит набор перевозок, которые необходимо выполнить набором транспортных средств, минимизируя при этом общую стоимость, которая представляет собой сумму:
- стоимость маршрутизации транспортных средств (сумма затрат за общее время, стоимость за время в пути и фиксированная стоимость для всех транспортных средств).
- штрафы за невыполненную отгрузку.
- стоимость глобальной продолжительности поставок
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, nanos: 0). Использует RFC 3339, где генерируемые выходные данные всегда будут Z-нормализованы и используют 0, 3, 6 или 9 дробных цифр. Также принимаются смещения, отличные от «Z». Примеры: |
globalDurationCostPerHour | «Глобальная продолжительность» общего плана — это разница между самым ранним эффективным временем начала и самым поздним эффективным временем окончания для всех транспортных средств. Пользователи могут присвоить этому количеству стоимость часа, чтобы попытаться оптимизировать его, например, для скорейшего завершения задания. Эта стоимость должна быть в той же единице измерения, что и |
durationDistanceMatrices[] | Задает матрицы длительности и расстояния, используемые в модели. Если это поле пусто, вместо него будут использоваться Карты Google или геодезические расстояния, в зависимости от значения поля Примеры использования:
|
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 . |
ШиротаДлительность
Объект, представляющий пару широты и долготы. Это выражается в виде пары двойных чисел, обозначающих градусы широты и градусы долготы. Если не указано иное, этот объект должен соответствовать стандарту WGS84 . Значения должны находиться в пределах нормализованных диапазонов.
JSON-представление |
---|
{ "latitude": number, "longitude": number } |
Поля | |
---|---|
latitude | Широта в градусах. Оно должно находиться в диапазоне [-90,0, +90,0]. |
longitude | Долгота в градусах. Оно должно находиться в диапазоне [-180,0, +180,0]. |
Путевая точка
Инкапсулирует путевую точку. Путевые точки отмечают места прибытия и отправления VisitRequests, а также начальные и конечные местоположения транспортных средств.
JSON-представление |
---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
Поля | |
---|---|
sideOfRoad | Необязательный. Указывает, что местоположение этой путевой точки предназначено для того, чтобы транспортное средство остановилось на определенной стороне дороги. Если вы установите это значение, маршрут будет проходить через местоположение, так что транспортное средство сможет остановиться на той стороне дороги, к которой местоположение смещено от центра дороги. Эта опция не работает для режима передвижения «ХОДЬБА». |
vehicleStopover | Указывает, что путевая точка предназначена для остановки транспортных средств, где они собираются либо заехать, либо высадиться. Эта опция работает только для режима передвижения «ВОЖДЕНИЕ», а также когда «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 | Путевая точка, представляющая географическое местоположение, в котором заканчивается транспортное средство после завершения последнего |
startTags[] | Указывает теги, прикрепленные к началу маршрута транспортного средства. Пустые или повторяющиеся строки не допускаются. |
endTags[] | Указывает теги, прикрепленные к концу маршрута транспортного средства. Пустые или повторяющиеся строки не допускаются. |
startTimeWindows[] | Временные окна, в течение которых транспортное средство может покинуть исходное место. Они должны находиться в пределах глобальных ограничений по времени (см. поля Временные окна, принадлежащие одному и тому же повторяющемуся полю, должны быть непересекающимися, т.е. ни одно временное окно не может перекрываться или примыкать к другому, и они должны располагаться в хронологическом порядке. |
endTimeWindows[] | Временные окна, в течение которых транспортное средство может прибыть в конечное место. Они должны находиться в пределах глобальных ограничений по времени (см. поля Временные окна, принадлежащие одному и тому же повторяющемуся полю, должны быть непересекающимися, т.е. ни одно временное окно не может перекрываться или примыкать к другому, и они должны располагаться в хронологическом порядке. |
unloadingPolicy | Политика разгрузки применяется к транспортному средству. |
loadLimits | Вместимость транспортного средства (например, вес, объем, количество поддонов). Ключами в карте являются идентификаторы типа груза, соответствующие ключам поля |
costPerHour | Стоимость транспортного средства: все затраты суммируются и должны быть в той же единице измерения, что и Стоимость часа проезда автомобиля. Эта стоимость применяется к общему времени, затраченному на маршрут, и включает время в пути, время ожидания и время посещения. Использование |
costPerTraveledHour | Стоимость за час проезда транспортного средства по маршруту. Эта стоимость применяется только ко времени в пути, затраченному на маршрут (т. е. указанному в |
costPerKilometer | Стоимость за километр пути автомобиля. Эта стоимость применяется к расстоянию, указанному в |
fixedCost | Фиксированная стоимость применяется, если это транспортное средство используется для обработки груза. |
usedIfRouteIsEmpty | Это поле применимо только к транспортным средствам, по маршруту которых не обслуживаются грузы. Он указывает, следует ли в данном случае считать транспортное средство бывшим в употреблении или нет. Если это правда, транспортное средство движется от начала до конечного местоположения, даже если оно не обслуживает никаких грузов, а затраты времени и расстояния, возникающие в результате его начала --> конечного путешествия, принимаются во внимание. В противном случае он не перемещается от своего начального к конечному местоположению, и для этого транспортного средства не запланировано никаких |
routeDurationLimit | Ограничение применяется к общей продолжительности маршрута транспортного средства. В данном |
travelDurationLimit | Ограничение применяется к продолжительности проезда по маршруту транспортного средства. В данном |
routeDistanceLimit | Ограничение применяется к общему расстоянию маршрута транспортного средства. В данном |
extraVisitDurationForVisitType | Определяет сопоставление строк visitTypes с длительностью. Продолжительность — это время в дополнение к Если запрос на посещение имеет несколько типов, продолжительность будет добавлена для каждого типа на карте. |
breakRule | Описывает график перерывов, который должен соблюдаться на этом автомобиле. Если он пуст, для этого автомобиля не будет запланировано никаких перерывов. |
label | Указывает метку для этого автомобиля. Эта метка указывается в ответе как |
ignore | Если значение true, значение Если отгрузка выполняется игнорируемым транспортным средством в Если отгрузка выполняется игнорируемым транспортным средством в |
travelDurationMultiple | Указывает мультипликативный коэффициент, который можно использовать для увеличения или уменьшения времени в пути этого транспортного средства. Например, установка значения 2.0 означает, что этот автомобиль медленнее и его время в пути вдвое больше, чем у стандартных транспортных средств. Этот коэффициент не влияет на продолжительность посещения. Это влияет на стоимость, если указаны ВНИМАНИЕ: Время в пути будет округлено до ближайшей секунды после применения этого коэффициента, но до выполнения каких-либо числовых операций, поэтому небольшое значение кратного может привести к потере точности. См. также |
Режим путешествия
Режимы движения, которые могут использоваться транспортными средствами.
Это должно быть подмножеством режимов передвижения API маршрутов платформы Google Maps, см. https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode .
Примечание. WALKING
маршруты находятся в стадии бета-тестирования, и иногда на них могут отсутствовать свободные тротуары или пешеходные дорожки. Вы должны отображать это предупреждение пользователю для всех пешеходных маршрутов, отображаемых в вашем приложении.
Перечисления | |
---|---|
TRAVEL_MODE_UNSPECIFIED | Неопределенный режим движения, эквивалентный DRIVING . |
DRIVING | Режим движения, соответствующий направлениям движения (автомобиль, ...). |
WALKING | Режим движения, соответствующий пешеходным направлениям. |
Модификаторы маршрута
Инкапсулирует набор дополнительных условий, которые необходимо выполнить при расчете маршрутов транспортных средств. Это похоже на RouteModifiers
в предпочтительном API маршрутов платформы 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 | Доставка должна осуществляться в том же порядке, что и самовывоз. |
Ограничение нагрузки
Определяет предельную нагрузку, применимую к транспортному средству, например: «Этот грузовик может перевозить не более 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. Если не указано, максимальная нагрузка не ограничивается этим сообщением. Если они оба указаны, |
Лоадкост
Стоимость перемещения одной единицы груза во время 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
, равна (стоимость_ниже * нагрузка_ниже * километры + стоимость_выше * нагрузка_выше * км)
- переход 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 | Стоимость перемещения единицы груза за каждую единицу сверх порогового значения. В особом случае порог = 0 — это фиксированная стоимость за единицу. Должно быть конечное значение и >= 0. |
Ограничение продолжительности
Лимит, определяющий максимальную продолжительность маршрута транспортного средства. Он может быть как твердым, так и мягким.
Когда определяется мягкое предельное поле, как мягкий максимальный порог, так и связанная с ним затраты должны быть определены вместе.
JSON-представление |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Поля | |
---|---|
maxDuration | Тяжелый ограничение, ограничивающая продолжительность, чтобы быть максимально максимум. Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
softMaxDuration | Мягкий лимит, не обеспечивающий максимальный предел продолжительности, но при нарушении, что делает маршрут нести стоимость. Эта стоимость составляет другие затраты, определенные в модели, с той же единицей. Если определено, Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
quadraticSoftMaxDuration | Мягкий лимит, не обеспечивающий максимальный предел продолжительности, но при нарушении маршрута полагается на стоимость, квадратично в продолжительности. Эта стоимость составляет другие затраты, определенные в модели, с той же единицей. Если определено, Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
costPerHourAfterSoftMax | Стоимость в час понесена, если нарушен порог
Стоимость должна быть неотрицательной. |
costPerSquareHourAfterQuadraticSoftMax | Стоимость за квадратный час, понесенная, если нарушен порог Дополнительная стоимость составляет 0, если продолжительность находится под порогом, в противном случае стоимость зависит от продолжительности следующим образом:
Стоимость должна быть неотрицательной. |
Distancelimit
Ограничение, определяющее максимальное расстояние, которое можно пройти. Это может быть жестким или мягким.
Если определяется мягкий предел, как softMaxMeters
, так и costPerKilometerAboveSoftMax
должны быть определены и быть неотрицательными.
JSON-представление |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
Поля | |
---|---|
maxMeters | Жесткий предел, ограничивающий расстояние, чтобы быть максимально максимальным. Предел должен быть неотрицательным. |
softMaxMeters | Мягкий лимит, не обеспечивающий максимальный лимит расстояния, но при нарушении приводит к стоимости, которая составляет другие затраты, определенные в модели, с той же единицей. Если определенные SoftmaxTers должны быть меньше, чем максмеры и должны быть неотрицательными. |
costPerKilometerBelowSoftMax | Стоимость за километр, увеличиваясь до
Эта стоимость не поддерживается в |
costPerKilometerAboveSoftMax | Стоимость за километр, понесенная, если расстояние выше предела
Стоимость должна быть неотрицательной. |
Разрыв
Правила для создания временных перерывов для транспортного средства (например, перерывы на обед). Перерыв - это смежный период времени, в течение которого транспортное средство остается бездействующим в ее нынешнем положении и не может выполнять какое -либо посещение. Может произойти перерыв:
- Во время перемещения между двумя посещениями (которое включает время прямо до или сразу после посещения, но не в середине посещения), и в этом случае оно продлевает соответствующее время транзита между посещениями,
- Или до запуска автомобиля (транспортное средство может не начать в середине перерыва), и в этом случае это не влияет на время запуска автомобиля.
- или после конца автомобиля (то же самое, с временем окончания транспортного средства).
JSON-представление |
---|
{ "breakRequests": [ { object ( |
Поля | |
---|---|
breakRequests[] | Последовательность перерывов. Смотрите сообщение |
frequencyConstraints[] | Может применяться несколько |
Breakrequest
Последовательность перерывов (то есть их номер и порядок), которые применяются к каждому транспортному средству, должна быть известна заранее. Повторное BreakRequest
определяют эту последовательность, в том порядке, в котором они должны происходить. Их временные окна ( earliestStartTime
/ latestStartTime
) могут совпадать, но они должны быть совместимы с заказом (это проверяется).
JSON-представление |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Поля | |
---|---|
earliestStartTime | Необходимый. Нижняя граница (включительно) в начале перерыва. Использует RFC 3339, где сгенерированный выход всегда будет нормализован Z и использует 0, 3, 6 или 9 дробных цифр. Смещения, кроме «z», также принимаются. Примеры: |
latestStartTime | Необходимый. Верхняя граница (включительно) в начале перерыва. Использует RFC 3339, где сгенерированный выход всегда будет нормализован Z и использует 0, 3, 6 или 9 дробных цифр. Смещения, кроме «z», также принимаются. Примеры: |
minDuration | Необходимый. Минимальная продолжительность перерыва. Должен быть положительным. Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
Частотаконконструкция
Можно дополнительно ограничить частоту и продолжительность разрывов, указанных выше, принуждая минимальную частоту разрыва, например, «должен быть разрыв не менее 1 часа каждые 12 часов». Предполагая, что это можно интерпретировать как «в любое время скользящего времени 12 часов, должен быть как минимум один разрыв, по крайней мере, один час», этот пример будет переведен в следующую FrequencyConstraint
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Время и продолжительность разрывов в решении будут уважать все такие ограничения, в дополнение к временным окнам и минимальной продолжительности, уже указанным в BreakRequest
.
FrequencyConstraint
может на практике применить к неконтролирующим перерывам. Например, в следующем графике приведен пример «1 ч каждые 12 часов»:
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 | Необходимый. Минимальная продолжительность разрыва для этого ограничения. Неотрицательный. См. Описание Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
maxInterBreakDuration | Необходимый. Максимально разрешенный промежуток любого интервала времени в маршруте, который не включает, по крайней мере, частично разрыв Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
Цель
Цели полностью заменяют модель затрат и, следовательно, несовместимы с ранее существовавшими затратами. Каждая цель отображает ряд заранее определенных затрат на, например, транспортные средства, поставки или атрибуты перехода.
Экспериментальный: см. Https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request для получения более подробной информации.
JSON-представление |
---|
{
"type": enum ( |
Поля | |
---|---|
type | Тип цели. |
weight | Насколько эта цель должна считать относительно других. Это может быть любое неотрицательное число, веса не должны суммироваться до 1. Веса по умолчанию до 1,0. |
Тип
Целевой тип, который будет сопоставлен с набором затрат.
Перечисления | |
---|---|
DEFAULT | Будет использован набор затрат по умолчанию, чтобы обеспечить разумное решение. ПРИМЕЧАНИЕ. Эта цель может использоваться самостоятельно, но также всегда будет добавлено с весом 1.0, в качестве базовой линии, к целям, указанным пользователем, если она еще не присутствует. |
MIN_DISTANCE | «Мин» Цели. Минимизируйте общее пройденное расстояние. |
MIN_WORKING_TIME | Минимизируйте общее рабочее время, суммируется над всеми транспортными средствами. |
MIN_TRAVEL_TIME | То же, что и выше, но сосредоточившись только на времени в пути. |
MIN_NUM_VEHICLES | Минимизируйте количество используемых транспортных средств. |
DurationDistanceMatrix
Определяет матрицу продолжительности и расстояния от мест посещения и запуска автомобиля для посещения и местоположения автомобиля.
JSON-представление |
---|
{
"rows": [
{
object ( |
Поля | |
---|---|
rows[] | Указывает ряды матрицы продолжительности и расстояния. У него должно быть столько элементов, сколько и |
vehicleStartTag | Определение тега, к которому применяются транспортные средства. Если это пусто, это относится ко всем транспортным средствам, и там может быть только одна матрица. Каждый старт автомобиля должен соответствовать ровской матрице, то есть, то есть одно из их поля Все матрицы должны иметь другой |
Ряд
Указывает ряд матрицы продолжительности и расстояния.
JSON-представление |
---|
{ "durations": [ string ], "meters": [ number ] } |
Поля | |
---|---|
durations[] | Значения продолжительности для данной строки. У него должно быть столько элементов, сколько и Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
meters[] | Значения расстояния для данной строки. Если никакие затраты или ограничения относятся к расстояниям в модели, это можно оставить пустым; В противном случае он должен иметь столько элементов, сколько и |
Transitionattributes
Определяет атрибуты переходов между двумя последовательными посещениями по маршруту. Несколько TransitionAttributes
могут применяться к одному и тому же переходу: в этом случае все дополнительные затраты увеличиваются, и применяется строгое ограничение или ограничение (после естественной »и« семантики).
JSON-представление |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Поля | |
---|---|
srcTag | Теги, определяющие набор (SRC-> DST) переходов, к этим атрибутам применяется. Посещение источника или начало транспортного средства совпадает с тем, что его |
excludedSrcTag | Смотрите |
dstTag | Посещение пункта назначения или конец транспортного средства совпадает с тем, что его |
excludedDstTag | Смотрите |
cost | Определяет стоимость выполнения этого перехода. Это в той же единице, что и все другие затраты в модели, и не должно быть отрицательным. Он применяется поверх всех других существующих затрат. |
costPerKilometer | Определяет стоимость за километр, применяемый на расстояние, пройденное при выполнении этого перехода. Это добавляется к любому |
distanceLimit | Определяет ограничение на расстояние, пройденное во время выполнения этого перехода. По состоянию на 2021/06 поддерживаются только мягкие пределы. |
delay | Указывает задержку, понесенную при выполнении этого перехода. Эта задержка всегда происходит после завершения посещения источника и перед началом посещения пункта назначения. Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
Отгрузка
Указывает несовместимости между поставками в зависимости от их отгрузки. Появление несовместимых поставки на том же маршруте ограничено на основе режима несовместимости.
JSON-представление |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Поля | |
---|---|
types[] | Список несовместимых типов. Две отправки, имеющие разные |
incompatibilityMode | Режим применяется к несовместимости. |
Несовместимость
Режимы, определяющие, как появление несовместимых поставки ограничено на одном и том же маршруте.
Перечисления | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED | Неуказанный режим несовместимости. Это значение никогда не должно использоваться. |
NOT_PERFORMED_BY_SAME_VEHICLE | В этом режиме две поставки с несовместимыми типами никогда не могут разделить один и тот же автомобиль. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY | Для двух поставок с несовместимыми типами с помощью режима несовместимости
|
Отгрузка
Указывает требования между поставками на основе их отгрузки. Специфика требования определяется режимом требований.
JSON-представление |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Поля | |
---|---|
requiredShipmentTypeAlternatives[] | Список альтернативных типов отгрузки, необходимых для |
dependentShipmentTypes[] | Все поставки с типом в области ПРИМЕЧАНИЕ. Цепочки требований, так что |
requirementMode | Режим применяется к требованию. |
Требование
Режимы, определяющие внешний вид зависимых отгрузок на маршруте.
Перечисления | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED | Неуказанный режим требования. Это значение никогда не должно использоваться. |
PERFORMED_BY_SAME_VEHICLE | В этом режиме все «зависимые» поставки должны иметь то же автомобиль, что и по крайней мере одна из их «требуемых» поставки. |
IN_SAME_VEHICLE_AT_PICKUP_TIME | В режиме Таким образом, «зависимый» выписка должен иметь либо:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME | То же, что и раньше, за исключением того, что «зависимые» поставки должны иметь «обязательную» отправку на их транспортное средство во время их доставки . |
Предшествующий
Правило приоритета между двумя событиями (каждое событие - это пикап или доставка отгрузки): событие «Второе» должно начать, по крайней мере, offsetDuration
после начала «первого».
Несколько предложений могут ссылаться на те же (или связанные) события, например, «пикап B происходит после доставки« и «пикап C происходит после пикапа B».
Кроме того, предыдущие средства применяются только тогда, когда обе поставки выполняются и в противном случае игнорируются.
JSON-представление |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Поля | |
---|---|
firstIsDelivery | Указывает, является ли «первое» событие доставкой. |
secondIsDelivery | Указывает, является ли событие «второе» доставкой. |
offsetDuration | Смещение между «первым» и «вторым» событием. Это может быть отрицательным. Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
firstIndex | Индекс отправки "первого" события. Это поле должно быть указано. |
secondIndex | Индекс отправки "второго" события. Это поле должно быть указано. |