- JSON-представление
- Shipment
- VisitRequest
- LatLng
- Waypoint
- Location
- TimeWindow
- Транспортное средство
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Интервал
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Цель
- Тип
- DurationDistanceMatrix
- Строка
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Модель доставки содержит набор поставок, которые должны быть выполнены набором транспортных средств, при этом минимизируется общая стоимость, которая представляет собой сумму:
- стоимость маршрутизации транспортных средств (сумма стоимости за общее время, стоимости за время в пути и фиксированной стоимости для всех транспортных средств).
- штрафы за невыполненную отгрузку.
- стоимость доставки за весь период;
| 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. Допустимы и другие типы нормализации. Примеры: |
globalEndTime |
Если значение не задано, по умолчанию используется 00:00:00 UTC, 1 января 1971 г. (т. е. seconds: 31536000, nanos: 0). Используется формат RFC 3339. Результат всегда будет Z-нормализованным, и в нем будут использоваться цифры дробных частей 0, 3, 6 или 9. Допустимы и другие типы нормализации. Примеры: |
globalDurationCostPerHour |
"Общая продолжительность" плана – это разница между самым ранним временем начала и самым поздним временем окончания для всех транспортных средств. Пользователи могут назначить стоимость за час для этого количества, чтобы попытаться оптимизировать, например, для скорейшего завершения работы. Единицы измерения должны совпадать с теми, которые используются в файле |
durationDistanceMatrices[] |
Указывает матрицы длительности и расстояния, используемые в модели. Если это поле пустое, то вместо него будут использоваться расстояния, рассчитанные с помощью Google Карт или геодезических методов, в зависимости от значения поля Примеры использования
|
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 г. объезды поддерживаются, только если продолжительность поездки не зависит от транспортных средств. |
pickupToDeliveryTimeLimit |
Указывает максимальную продолжительность от начала самовывоза до начала доставки отправления. Если указано, оно должно быть неотрицательным, а отправка должна содержать как минимум самовывоз и доставку. Это не зависит от того, какие альтернативы выбраны для получения и доставки, а также от скорости транспортного средства. Это ограничение можно использовать вместе с ограничением на максимальное отклонение от маршрута. В решении будут учтены оба ограничения. |
shipmentType |
Непустая строка, указывающая тип отправления. С помощью этой функции можно задавать несовместимости или требования между Отличается от |
label |
Указывает ярлык для этой отправки. Этот ярлык указывается в ответе в поле |
ignore |
Если true, пропустить эту доставку, но не применять Если в модели есть Игнорирование доставки, выполняемой в |
penaltyCost |
Если доставка не завершена, этот штраф добавляется к общей стоимости маршрутов. Доставка считается завершенной, если посещен один из альтернативных пунктов самовывоза и доставки. Стоимость может быть выражена в тех же единицах, что и все остальные поля, связанные со стоимостью, в модели. Значение должно быть положительным. ВАЖНО! Если штраф не указан, он считается бесконечным, то есть доставка должна быть выполнена. |
pickupToDeliveryRelativeDetourLimit |
Указывает максимальное относительное время объезда по сравнению с кратчайшим путем от места посадки до места высадки. Если указано, оно должно быть неотрицательным, а отправка должна содержать как минимум самовывоз и доставку. Например, пусть t – это кратчайшее время, необходимое для перехода от выбранной альтернативы получения непосредственно к выбранной альтернативе доставки. Тогда параметр Если для одной и той же отправки указаны и относительные, и абсолютные ограничения, для каждой возможной пары "забор/доставка" используется более строгое ограничение. По состоянию на октябрь 2017 г. объезды поддерживаются, только если продолжительность поездки не зависит от транспортных средств. |
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. |
LatLng
Объект, содержащий географические координаты в виде значений широты и долготы. Это выражается в виде пары значений с плавающей запятой (double), представляющих градусы широты и градусы долготы. Если не указано иное, координаты задаются в системе WGS84. Также они должны попадать в нормализованные диапазоны значений.
| JSON-представление |
|---|
{ "latitude": number, "longitude": number } |
| Поля | |
|---|---|
latitude |
Градусная мера широты. Должна попадать в диапазон [-90.0, +90.0]. |
longitude |
Градусная мера долготы. Должна попадать в диапазон [-180,0, +180,0]. |
Путевая точка
Инкапсулирует путевую точку. Путевые точки обозначают места прибытия и отправления для VisitRequests, а также начальные и конечные местоположения транспортных средств.
| JSON-представление |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| Поля | |
|---|---|
sideOfRoad |
Необязательное поле. Указывает, что местоположение этой путевой точки должно иметь предпочтение для остановки транспортного средства на определенной стороне дороги. Если вы зададите это значение, маршрут будет проходить через местоположение, чтобы транспортное средство могло остановиться на той стороне дороги, к которой смещено местоположение относительно центра дороги. Этот вариант не работает для режима путешествия "ПЕШКОМ". |
vehicleStopover |
Указывает, что путевая точка предназначена для остановки транспортных средств с целью посадки или высадки пассажиров. Этот параметр работает только для режима путешествия DRIVING и когда для параметра locationType задано значение location. Экспериментальное поле. Его поведение или наличие может измениться в будущем. |
| Различные способы представления местоположения. Ниже приведен список взаимоисключающих полей. В ответе будет задано не более одного из следующих полей: | |
location |
Точка, заданная с помощью географических координат, включая необязательный заголовок. |
placeId |
Идентификатор места POI, связанный с путевой точкой. Если вы используете идентификатор места, чтобы указать место прибытия или отправления для VisitRequest, он должен быть достаточно точным, чтобы определить местоположение LatLng для навигации к месту. Например, идентификатор места, представляющий здание, подходит, а идентификатор места, представляющий дорогу, не рекомендуется. |
| Конец взаимоисключающих полей. | |
Местоположение
Инкапсулирует местоположение (географическую точку и необязательный заголовок).
| JSON-представление |
|---|
{
"latLng": {
object ( |
| Поля | |
|---|---|
latLng |
Географические координаты путевой точки. |
heading |
Направление движения транспорта по компасу. Это значение используется, чтобы указать сторону дороги, на которой нужно забрать или высадить пассажира. Значения направления могут быть от 0 до 360, где 0 – это север, 90 – восток и т. д. |
TimeWindow
Временные окна ограничивают время события, например время прибытия в пункт посещения или время начала и окончания работы транспортного средства.
Строгие границы временного окна, 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. Допустимы и другие типы нормализации. Примеры: |
endTime |
Время окончания жесткого временного окна. Если значение не указано, будет установлено Используется формат RFC 3339. Результат всегда будет Z-нормализованным, и в нем будут использоваться цифры дробных частей 0, 3, 6 или 9. Допустимы и другие типы нормализации. Примеры: |
softStartTime |
Время начала временного окна. Используется формат RFC 3339. Результат всегда будет Z-нормализованным, и в нем будут использоваться цифры дробных частей 0, 3, 6 или 9. Допустимы и другие типы нормализации. Примеры: |
softEndTime |
Мягкое время окончания временного окна. Используется формат RFC 3339. Результат всегда будет Z-нормализованным, и в нем будут использоваться цифры дробных частей 0, 3, 6 или 9. Допустимы и другие типы нормализации. Примеры: |
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
Способы передвижения, которые могут использоваться транспортными средствами.
Они должны быть подмножеством способов передвижения Routes API платформы Google Карт. Подробнее: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode.
Примечание. Маршруты для WALKING находятся на этапе бета-тестирования. Иногда на них могут отсутствовать тротуары или пешеходные дорожки. Вы должны показывать это предупреждение пользователю для всех пешеходных маршрутов, которые вы показываете в своем приложении.
| Перечисления | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Способ передвижения не указан, эквивалентно DRIVING. |
DRIVING |
Режим передвижения, соответствующий маршруту (автомобиль и т. д.). |
WALKING |
Способ передвижения, соответствующий пешеходному маршруту. |
TWO_WHEELER |
Двухколесное моторизованное транспортное средство. например мотоцикл. Обратите внимание, что этот режим отличается от режима BICYCLING, который охватывает транспортные средства, приводимые в движение человеком. |
RouteModifiers
Инкапсулирует набор необязательных условий, которые должны выполняться при расчете маршрутов транспортных средств. Это похоже на RouteModifiers в Routes Preferred 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
Правила разгрузки транспортного средства. Применяется только к отправлениям, для которых указаны и самовывоз, и доставка.
Другие перевозки могут выполняться в любой точке маршрута независимо от unloadingPolicy.
| Перечисления | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Правила разгрузки не указаны. Доставка должна выполняться после соответствующего забора. |
LAST_IN_FIRST_OUT |
Доставка должна выполняться в порядке, обратном порядку получения. |
FIRST_IN_FIRST_OUT |
Доставка должна выполняться в том же порядке, что и самовывоз. |
LoadLimit
Определяет ограничение по весу груза, которое применяется к транспортному средству, например "этот грузовик может перевозить не более 3500 кг". Посмотрите loadLimits.
| JSON-представление |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Поля | |
|---|---|
softMaxLoad |
Регулируемое ограничение нагрузки. Посмотрите |
costPerUnitAboveSoftMax |
Если нагрузка на маршруте этого транспортного средства превысит |
startLoadInterval |
Допустимый интервал загрузки транспортного средства в начале маршрута. |
endLoadInterval |
Допустимый интервал загрузки транспортного средства в конце маршрута. |
maxLoad |
Максимально допустимая нагрузка. |
costPerKilometer |
Стоимость перемещения одной единицы груза на один километр для этого транспортного средства. Это значение можно использовать как показатель расхода топлива: если нагрузка – это вес (в ньютонах), то нагрузка*километр имеет размерность энергии. Экспериментальная функция. Подробную информацию можно найти на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
costPerTraveledHour |
Стоимость перевозки единицы груза в течение одного часа на этом транспортном средстве. Экспериментальная функция. Подробную информацию можно найти на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
Интервал
Интервал допустимых объемов загрузки.
| JSON-представление |
|---|
{ "min": string, "max": string } |
| Поля | |
|---|---|
min |
Минимально допустимая нагрузка. Значение должно быть больше или равно 0. Если указаны оба, то |
max |
Максимально допустимая нагрузка. Значение должно быть больше или равно 0. Если значение не указано, максимальная нагрузка не ограничивается этим сообщением. Если указаны оба, то |
LoadCost
Стоимость перемещения одной единицы груза в течение Transition. Для определенной нагрузки стоимость состоит из двух частей:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
При такой стоимости решения предпочитают сначала доставлять высокие требования или, что эквивалентно, забирать высокие требования в последнюю очередь. Например, если у автомобиля
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
и его маршрут: старт,самовывоз,самовывоз,доставка,доставка,конец с переходами:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
тогда стоимость, понесенная этим LoadCost, равна (cost_below * load_below * kilometers + cost_above * load_above * kms)
- переход 0: 0.0
- переход 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0;
- переход 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- Переход 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 4: 0,0
Таким образом, LoadCost на маршруте составляет 120,0.
Однако если маршрут выглядит как "начало, посадка, высадка, посадка, высадка, конец" с переходами:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
тогда расходы, связанные с этим LoadCost, составят
- переход 0: 0.0
- переход 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0;
- Переход 2: 0,0
- Переход 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 4: 0,0
В данном случае LoadCost по маршруту составляет 40,0.
LoadCost делает решения с переходами с высокой нагрузкой более дорогими.
Экспериментальная функция. Подробную информацию можно найти на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| JSON-представление |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Поля | |
|---|---|
loadThreshold |
Объем груза, при превышении которого стоимость перемещения единицы груза меняется с costPerUnitBelowThreshold на costPerUnitAboveThreshold. Значение должно быть больше или равно 0. |
costPerUnitBelowThreshold |
Стоимость перемещения единицы груза для каждой единицы от 0 до порогового значения. Значение должно быть конечным и не меньше 0. |
costPerUnitAboveThreshold |
Стоимость перемещения единицы груза для каждой единицы сверх порогового значения. В особом случае, когда пороговое значение равно 0, это фиксированная стоимость за единицу. Значение должно быть конечным и не меньше 0. |
DurationLimit
Ограничение, определяющее максимальную продолжительность маршрута транспортного средства. Она может быть жесткой или мягкой.
Если задано поле мягкого ограничения, то необходимо указать как мягкий максимальный порог, так и связанную с ним стоимость.
| JSON-представление |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Поля | |
|---|---|
maxDuration |
Строгое ограничение, согласно которому продолжительность не может превышать maxDuration. |
softMaxDuration |
Мягкое ограничение, которое не устанавливает максимальную продолжительность, но при нарушении которого маршрут становится платным. Эта стоимость добавляется к другим расходам, определенным в модели, в той же единице измерения. Если задано свойство |
quadraticSoftMaxDuration |
Мягкое ограничение, которое не устанавливает максимальную продолжительность, но при нарушении которого маршрут получает штраф, квадратичный по продолжительности. Эта стоимость добавляется к другим расходам, определенным в модели, в той же единице измерения. Если задано значение
|
costPerHourAfterSoftMax |
Стоимость за час, если пороговое значение Стоимость не может быть отрицательной. |
costPerSquareHourAfterQuadraticSoftMax |
Стоимость за квадратный час, которая взимается при нарушении порогового значения Если продолжительность меньше порогового значения, дополнительная плата не взимается. В противном случае она рассчитывается следующим образом: Стоимость не может быть отрицательной. |
DistanceLimit
Ограничение, определяющее максимальное расстояние, которое можно преодолеть. Она может быть жесткой или мягкой.
Если задано мягкое ограничение, то должны быть определены и softMaxMeters, и costPerKilometerAboveSoftMax, причем оба значения должны быть неотрицательными.
| JSON-представление |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Поля | |
|---|---|
maxMeters |
Строгое ограничение, согласно которому расстояние не должно превышать maxMeters. Лимит должен быть неотрицательным. |
softMaxMeters |
Мягкое ограничение не устанавливает максимальное расстояние, но при его нарушении к другим расходам, определенным в модели, добавляются дополнительные расходы в той же единице измерения. Если это значение задано, оно должно быть неотрицательным и меньше, чем maxMeters. |
costPerKilometerBelowSoftMax |
Цена за километр, увеличивающаяся до Эта цена не поддерживается в |
costPerKilometerAboveSoftMax |
Цена за километр, если расстояние превышает Стоимость не может быть отрицательной. |
BreakRule
Правила создания перерывов для транспортного средства (например, обеденных). Перерыв – это непрерывный период времени, в течение которого транспортное средство остается бездействующим в своем текущем положении и не может выполнять никаких посещений. Разрыв может произойти:
- во время перемещения между двумя посещениями (включая время непосредственно до или после посещения, но не в середине посещения), и в этом случае он продлевает соответствующее время транспортировки между посещениями;
- или до начала движения транспортного средства (транспортное средство не может начать движение в середине перерыва), и в этом случае это не влияет на время начала движения транспортного средства.
- или после окончания поездки (аналогично, с указанием времени окончания поездки).
| JSON-представление |
|---|
{ "breakRequests": [ { object ( |
| Поля | |
|---|---|
breakRequests[] |
Последовательность рекламных пауз. Посмотрите сообщение |
frequencyConstraints[] |
Может применяться несколько |
BreakRequest
Последовательность перерывов (их количество и порядок), которые применяются к каждому транспортному средству, должна быть известна заранее. Повторяющиеся элементы BreakRequest определяют эту последовательность в том порядке, в котором они должны происходить. Их временные окна (earliestStartTime/latestStartTime) могут перекрываться, но они должны быть совместимы с заказом (это проверяется).
| JSON-представление |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Поля | |
|---|---|
earliestStartTime |
Обязательно. Нижняя граница (включительно) начала перерыва. Используется формат RFC 3339. Результат всегда будет Z-нормализованным, и в нем будут использоваться цифры дробных частей 0, 3, 6 или 9. Допустимы и другие типы нормализации. Примеры: |
latestStartTime |
Обязательно. Верхняя граница (включительно) начала перерыва. Используется формат RFC 3339. Результат всегда будет Z-нормализованным, и в нем будут использоваться цифры дробных частей 0, 3, 6 или 9. Допустимы и другие типы нормализации. Примеры: |
minDuration |
Обязательно. Минимальная длительность рекламной паузы. Значение должно быть положительным. |
FrequencyConstraint
Вы можете дополнительно ограничить частоту и продолжительность перерывов, указанных выше, установив минимальную частоту перерывов, например "Каждые 12 часов должен быть перерыв не менее 1 часа". Если это можно интерпретировать как "В течение любого скользящего временного окна продолжительностью 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". Минимизировать общее пройденное расстояние. |
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 г. поддерживаются только мягкие ограничения. |
delay |
Указывает задержку, возникающую при выполнении этого перехода. Эта задержка всегда происходит после завершения посещения источника и до начала посещения места назначения. |
ShipmentTypeIncompatibility
Указывает на несовместимость между отправлениями в зависимости от их shipmentType. Появление несовместимых отправлений на одном маршруте ограничено в зависимости от режима несовместимости.
| JSON-представление |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Поля | |
|---|---|
types[] |
Список несовместимых типов. Две поставки с разными значениями |
incompatibilityMode |
Режим, примененный к несовместимости. |
IncompatibilityMode
Режимы, определяющие, как ограничивается появление несовместимых отправлений на одном маршруте.
| Перечисления | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Неуказанный режим несовместимости. Это значение не должно использоваться. |
NOT_PERFORMED_BY_SAME_VEHICLE |
В этом режиме две доставки несовместимых типов не могут выполняться одним транспортным средством. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
В этом режиме две доставки несовместимых типов не могут находиться в одном транспортном средстве одновременно.
|
ShipmentTypeRequirement
Указывает требования между отправлениями на основе их shipmentType. Особенности требования определяются режимом требования.
| JSON-представление |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Поля | |
|---|---|
requiredShipmentTypeAlternatives[] |
Список альтернативных типов доставки, необходимых для |
dependentShipmentTypes[] |
Для всех отправлений с типом в поле ПРИМЕЧАНИЕ. Цепочки требований, в которых |
requirementMode |
Режим, примененный к требованию. |
RequirementMode
Режимы, определяющие внешний вид зависимых отправлений на маршруте.
| Перечисления | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Режим требования не указан. Это значение не должно использоваться. |
PERFORMED_BY_SAME_VEHICLE |
В этом режиме все "зависимые" отправления должны использовать то же транспортное средство, что и хотя бы одно из их "обязательных" отправлений. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
В режиме Поэтому у зависимого самовывоза должно быть одно из двух:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
То же, что и в предыдущем случае, но зависимые отправления должны находиться в транспортном средстве вместе с обязательными в момент доставки. |
PrecedenceRule
Правило приоритета между двумя событиями (каждое событие – это получение или доставка отправления): "второе" событие должно начаться не ранее чем через offsetDuration после начала "первого".
Несколько приоритетов могут относиться к одним и тем же (или связанным) событиям, например "забор B происходит после доставки A" и "забор C происходит после забора B".
Кроме того, приоритеты применяются, только если выполняются обе перевозки. В противном случае они игнорируются.
| JSON-представление |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Поля | |
|---|---|
firstIsDelivery |
Указывает, является ли "первое" событие доставкой. |
secondIsDelivery |
Указывает, является ли "второе" событие доставкой. |
offsetDuration |
Смещение между первым и вторым событием. Значение может быть отрицательным. |
firstIndex |
Индекс отправления для первого события. Это поле должно быть заполнено. |
secondIndex |
Индекс отправления для второго события. Это поле должно быть заполнено. |