- JSON-представление
- Отгрузка
- ПосетитеЗапрос
- ШиротаДлительность
- Путевая точка
- Расположение
- ВремяОкно
- Транспортное средство
- Режим путешествия
- Модификаторы маршрута
- Политика разгрузки
- Ограничение нагрузки
- Интервал
- Ограничение продолжительности
- Предел расстояния
- BreakRule
- Запрос на перерыв
- Частотное ограничение
- ПродолжительностьDistanceMatrix
- Ряд
- Атрибуты перехода
- Тип отгрузкиНесовместимость
- Режим несовместимости
- Тип отгрузкиТребование
- Режим Требования
- Правило приоритета
Модель перевозки содержит набор перевозок, которые необходимо выполнить набором транспортных средств, минимизируя при этом общую стоимость, которая представляет собой сумму:
- стоимость маршрутизации транспортных средств (сумма затрат за общее время, стоимость за время в пути и фиксированные затраты для всех транспортных средств).
- штрафы за невыполненную отгрузку.
- стоимость глобальной продолжительности поставок
JSON-представление |
---|
{ "shipments": [ { object ( |
Поля | |
---|---|
shipments[] | Набор перевозок, которые необходимо выполнить в модели. |
vehicles[] | Набор транспортных средств, которые можно использовать для совершения посещений. |
globalStartTime | Глобальное время начала и окончания модели: никакое время вне этого диапазона не может считаться действительным. Временной интервал модели должен быть меньше года, т. е. значения При использовании полей Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
globalEndTime | Если значение не установлено, по умолчанию используется 00:00:00 UTC, 1 января 1971 года (т. е. секунды: 31536000, nanos: 0). Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
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 | Указывает метку для этого |
ШиротаДлительность
Объект, представляющий пару широты и долготы. Это выражается в виде пары двойных чисел, обозначающих градусы широты и градусы долготы. Если не указано иное, этот объект должен соответствовать стандарту WGS84 . Значения должны находиться в пределах нормализованных диапазонов.
JSON-представление |
---|
{ "latitude": number, "longitude": number } |
Поля | |
---|---|
latitude | Широта в градусах. Оно должно находиться в диапазоне [-90,0, +90,0]. |
longitude | Долгота в градусах. Оно должно находиться в диапазоне [-180,0, +180,0]. |
Путевая точка
Инкапсулирует путевую точку. Путевые точки отмечают места прибытия и отправления VisitRequests, а также начальные и конечные местоположения транспортных средств.
JSON-представление |
---|
{ "sideOfRoad": boolean, // Union field |
Поля | |
---|---|
sideOfRoad | Необязательный. Указывает, что расположение этой путевой точки предназначено для того, чтобы транспортное средство остановилось на определенной стороне дороги. Если вы установите это значение, маршрут будет проходить через местоположение, так что транспортное средство сможет остановиться на той стороне дороги, к которой местоположение смещено от центра дороги. Эта опция не работает для режима передвижения «ХОДЬБА». |
Поле объединения location_type . Различные способы представления местоположения. location_type может быть только одним из следующих: | |
location | Точка, указанная с использованием географических координат, включая необязательный заголовок. |
placeId | Идентификатор места POI, связанный с путевой точкой. |
Расположение
Инкапсулирует местоположение (географическую точку и необязательный заголовок).
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 | Время начала трудного временного окна. Если не указано, будет установлено значение Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
endTime | Время окончания трудного временного окна. Если не указано, будет установлено значение Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
softStartTime | Время плавного запуска временного окна. Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
softEndTime | Мягкое время окончания временного окна. Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
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 Карт», см. https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode .
Перечисления | |
---|---|
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 | Максимально допустимый объем нагрузки. |
Интервал
Интервал допустимых объемов нагрузки.
JSON-представление |
---|
{ "min": string, "max": string } |
Поля | |
---|---|
min | Минимально допустимая нагрузка. Должно быть ≥ 0. Если указаны оба значения, |
max | Максимально допустимая нагрузка. Должно быть ≥ 0. Если не указано, максимальная нагрузка не ограничивается этим сообщением. Если они оба указаны, |
Ограничение продолжительности
Лимит, определяющий максимальную продолжительность маршрута транспортного средства. Он может быть как твердым, так и мягким.
При определении поля мягкого ограничения и порог мягкого максимума, и связанная с ним стоимость должны быть определены вместе.
JSON-представление |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Поля | |
---|---|
maxDuration | Жесткий предел, ограничивающий длительность не более maxDuration. Длительность в секундах, содержащая до девяти дробных цифр и оканчивающаяся на « |
softMaxDuration | Мягкое ограничение не устанавливает максимальную продолжительность, но при его нарушении маршрут влечет за собой затраты. Эта стоимость суммируется с другими затратами, определенными в модели, в той же единице измерения. Если определено, Продолжительность в секундах, содержащая до девяти дробных цифр и оканчивающаяся на « |
quadraticSoftMaxDuration | Мягкое ограничение не обеспечивает соблюдения максимального ограничения продолжительности, но при его нарушении маршрут влечет за собой затраты, квадратичные по продолжительности. Эта стоимость суммируется с другими затратами, определенными в модели, в той же единице измерения. Если определено, Продолжительность в секундах, содержащая до девяти дробных цифр и оканчивающаяся на « |
costPerHourAfterSoftMax | Стоимость часа, понесенная в случае нарушения порога
Стоимость должна быть неотрицательной. |
costPerSquareHourAfterQuadraticSoftMax | Стоимость квадратного часа, возникающая в случае нарушения Дополнительная стоимость равна 0, если продолжительность ниже порогового значения, в противном случае стоимость зависит от продолжительности следующим образом:
Стоимость должна быть неотрицательной. |
Предел расстояния
Предел, определяющий максимальное расстояние, которое можно преодолеть. Он может быть как твердым, так и мягким.
Если определен мягкий предел, как softMaxMeters
, так и costPerKilometerAboveSoftMax
должны быть определены и быть неотрицательными.
JSON-представление |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
Поля | |
---|---|
maxMeters | Жесткий предел, ограничивающий расстояние не более maxMeters. Предел должен быть неотрицательным. |
softMaxMeters | Мягкое ограничение не обеспечивает соблюдение ограничения максимального расстояния, но его нарушение приводит к затратам, которые суммируются с другими затратами, определенными в модели, в той же единице измерения. Если определено, softMaxMeters должно быть меньше maxMeters и должно быть неотрицательным. |
costPerKilometerBelowSoftMax | Стоимость понесенного километража увеличивается до
Эта стоимость не поддерживается в |
costPerKilometerAboveSoftMax | Стоимость за километр, если расстояние превышает предел
Стоимость должна быть неотрицательной. |
BreakRule
Правила создания временных перерывов для транспортного средства (например, перерывы на обед). Перерыв — это непрерывный период времени, в течение которого транспортное средство простаивает на своем текущем месте и не может совершить ни одного визита. Обрыв может произойти:
- во время путешествия между двумя посещениями (включая время непосредственно перед или сразу после посещения, но не в середине посещения), и в этом случае продлевается соответствующее транзитное время между посещениями,
- или перед запуском автомобиля (автомобиль может не завестись в середине перерыва), в этом случае это не влияет на время запуска автомобиля.
- или после окончания транспортного средства (то же самое, со временем окончания транспортного средства).
JSON-представление |
---|
{ "breakRequests": [ { object ( |
Поля | |
---|---|
breakRequests[] | Последовательность перерывов. См. сообщение |
frequencyConstraints[] | Могут применяться несколько |
Запрос на перерыв
Последовательность перерывов (т.е. их количество и порядок), применимых к каждому транспортному средству, должна быть известна заранее. Повторяющиеся BreakRequest
определяют эту последовательность в том порядке, в котором они должны происходить. Их временные окна ( earliestStartTime
/ latestStartTime
) могут перекрываться, но они должны быть совместимы с порядком (это отмечено).
Представление JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Поля | |
---|---|
earliestStartTime | Необходимый. Нижняя граница (включительно) в начале перерыва. Временная метка в формате RFC3339 UTC "Zulu" с наносекундным разрешением и до девяти дробных цифр. Примеры: |
latestStartTime | Необходимый. Верхняя граница (включительно) в начале перерыва. Временная метка в формате RFC3339 UTC "Zulu" с наносекундным разрешением и до девяти дробных цифр. Примеры: |
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 | Необходимый. Максимально разрешенный промежуток любого интервала времени в маршруте, который не включает, по крайней мере, частично разрыв Продолжительность за секунды с девятью дробными цифрами, заканчивая « |
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 | Индекс отправки "второго" события. Это поле должно быть указано. |