Индекс
-
RouteOptimization(интерфейс) -
AggregatedMetrics(сообщение) -
BatchOptimizeToursMetadata(сообщение) -
BatchOptimizeToursRequest(сообщение) -
BatchOptimizeToursRequest.AsyncModelConfig(сообщение) -
BatchOptimizeToursResponse(сообщение) -
BreakRule(сообщение) -
BreakRule.BreakRequest(сообщение) -
BreakRule.FrequencyConstraint(сообщение) -
DataFormat(перечисление) -
DistanceLimit(сообщение) -
GcsDestination(сообщение) -
GcsSource(сообщение) -
InjectedSolutionConstraint(сообщение) -
InjectedSolutionConstraint.ConstraintRelaxation(сообщение) -
InjectedSolutionConstraint.ConstraintRelaxation.Relaxation(сообщение) -
InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level(перечисление) -
InputConfig(сообщение) -
Location(сообщение) -
OptimizeToursLongRunningMetadata(сообщение) -
OptimizeToursRequest(сообщение) -
OptimizeToursRequest.SearchMode(перечисление) -
OptimizeToursRequest.SolvingMode(перечисление) -
OptimizeToursResponse(сообщение) -
OptimizeToursResponse.Metrics(сообщение) -
OptimizeToursUriMetadata(сообщение) -
OptimizeToursUriRequest(сообщение) -
OptimizeToursUriResponse(сообщение) -
OptimizeToursValidationError(сообщение) -
OptimizeToursValidationError.FieldReference(сообщение) -
OutputConfig(сообщение) -
RouteModifiers(сообщение) -
Shipment(сообщение) -
Shipment.Load(сообщение) -
Shipment.VisitRequest(сообщение) -
ShipmentModel(сообщение) -
ShipmentModel.DurationDistanceMatrix(сообщение) -
ShipmentModel.DurationDistanceMatrix.Row(сообщение) -
ShipmentModel.Objective(сообщение) -
ShipmentModel.Objective.Type(перечисление) -
ShipmentModel.PrecedenceRule(сообщение) -
ShipmentRoute(сообщение) -
ShipmentRoute.Break(сообщение) -
ShipmentRoute.EncodedPolyline(сообщение) -
ShipmentRoute.Transition(сообщение) -
ShipmentRoute.VehicleLoad(сообщение) -
ShipmentRoute.Visit(сообщение) -
ShipmentTypeIncompatibility(сообщение) -
ShipmentTypeIncompatibility.IncompatibilityMode(перечисление) -
ShipmentTypeRequirement(сообщение) -
ShipmentTypeRequirement.RequirementMode(перечисление) -
SkippedShipment(сообщение) -
SkippedShipment.Reason(сообщение) -
SkippedShipment.Reason.Code(перечисление) -
TimeWindow(сообщение) -
TransitionAttributes(сообщение) -
Uri(сообщение) -
Vehicle(сообщение) -
Vehicle.DurationLimit(сообщение) -
Vehicle.LoadLimit(сообщение) -
Vehicle.LoadLimit.Interval(сообщение) -
Vehicle.LoadLimit.LoadCost(сообщение) -
Vehicle.TravelMode(перечисление) -
Vehicle.UnloadingPolicy(перечисление) -
VehicleFullness(сообщение) -
Waypoint(сообщение)
Оптимизация маршрута
Сервис по оптимизации автомобильных туров.
Действительность некоторых типов полей:
-
google.protobuf.Timestamp- Время указано в формате Unix: секунды с 1970-01-01T00:00:00+00:00.
- секунды должны быть в диапазоне [0, 253402300799], т.е. в диапазоне [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- nanos должен быть отключен или установлен в 0.
-
google.protobuf.Duration- секунды должны быть в диапазоне [0, 253402300799], т.е. в диапазоне [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- nanos должен быть отключен или установлен в 0.
-
google.type.LatLng- широта должна быть в диапазоне [-90.0, 90.0].
- долгота должна быть в диапазоне [-180.0, 180.0].
- по крайней мере одно из значений широты и долготы должно быть ненулевым.
| Пакетная оптимизация туров |
|---|
Оптимизирует туры транспортных средств для одного или нескольких сообщений This method is a Long Running Operation (LRO). The inputs for optimization ( Пользователь может опросить Если поле LRO Если поле
|
| OptimizeTours |
|---|
Отправляет запрос Модель Цель состоит в том, чтобы предоставить назначение
|
| OptimizeToursLongRunning |
|---|
Это вариант метода Возвращаемая Экспериментальный вариант: более подробную информацию см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request .
|
| OptimizeToursUri |
|---|
Это вариант метода Клиент указывает URI Этот метод следует предпочесть методу Возвращаемая Экспериментальный вариант: более подробную информацию см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request .
|
Агрегированные показатели
Агрегированные показатели для ShipmentRoute (соответственно для OptimizeToursResponse по всем элементам Transition и/или Visit (соответственно по всем элементам ShipmentRoute ).
| Поля | |
|---|---|
performed_shipment_count | Количество выполненных доставок. Обратите внимание, что пара «забор-доставка» учитывается только один раз. |
travel_duration | Общая продолжительность пути по маршруту или решению. |
wait_duration | Общая продолжительность ожидания маршрута или решения. |
delay_duration | Общая продолжительность задержки маршрута или решения. |
break_duration | Общая продолжительность перерыва для маршрута или решения. |
visit_duration | Общая продолжительность посещения маршрута или решения. |
total_duration | Общая продолжительность должна быть равна сумме всех указанных выше продолжительностей. Для маршрутов она также соответствует: |
travel_distance_meters | Общее расстояние прохождения маршрута или решения. |
max_loads | Максимальная загрузка, достигнутая на всем маршруте (соответственно решение), для каждого из количеств на этом маршруте (соответственно решение), вычисленная как максимум по всем |
performed_mandatory_shipment_count | Количество выполненных обязательных отгрузок. Экспериментальный: поведение или существование этого поля может измениться в будущем. |
performed_shipment_penalty_cost_sum | Сумма Экспериментальный: поведение или существование этого поля может измениться в будущем. |
Пакетная оптимизацияToursMetadata
Этот тип не имеет полей.
Метаданные операции для вызовов BatchOptimizeToursRequest .
Пакетная оптимизацияToursRequest
Запрос на пакетную оптимизацию туров в асинхронном режиме. Каждый входной файл должен содержать один OptimizeToursRequest , а каждый выходной файл — один OptimizeToursResponse . Запрос содержит информацию для чтения/записи и анализа файлов. Все входные и выходные файлы должны находиться в одном проекте.
| Поля | |
|---|---|
parent | Обязательно. Укажите проект и место для звонка. Формат:
Если местоположение не указано, регион будет выбран автоматически. |
model_configs[] | Обязательно. Входная/выходная информация для каждой модели покупки, например, пути к файлам и форматы данных. |
AsyncModelConfig
Информация для асинхронного решения одной модели оптимизации.
| Поля | |
|---|---|
display_name | Необязательно. Имя модели, определяемое пользователем, может использоваться пользователями в качестве псевдонима для отслеживания моделей. |
input_config | Обязательно. Информация о входной модели. |
output_config | Обязательно. Требуемая информация о местоположении выходных данных. |
BatchOptimizeToursResponse
Этот тип не имеет полей.
Ответ на запрос BatchOptimizeToursRequest . Он возвращается в ходе длительной операции после её завершения.
BreakRule
Правила создания перерывов для транспортного средства (например, обеденных перерывов). Перерыв — это непрерывный период времени, в течение которого транспортное средство простаивает в текущем положении и не может совершить ни одного визита. Перерыв может возникнуть:
- во время путешествия между двумя визитами (включая время непосредственно перед или сразу после визита, но не в середине визита), в этом случае он продлевает соответствующее транзитное время между визитами,
- или до запуска транспортного средства (транспортное средство не может запуститься во время перерыва), в этом случае это не влияет на время запуска транспортного средства.
- или после окончания движения транспортного средства (то же самое, с окончанием движения транспортного средства).
| Поля | |
|---|---|
break_requests[] | Последовательность прерываний. См. сообщение |
frequency_constraints[] | Могут применяться несколько |
BreakRequest
Последовательность перерывов (т.е. их количество и порядок), применяемых к каждому транспортному средству, должна быть известна заранее. Повторяющиеся запросы BreakRequest определяют эту последовательность в порядке их выполнения. Их временные окна ( earliest_start_time / latest_start_time ) могут перекрываться, но они должны быть совместимы с порядком (это проверяется).
| Поля | |
|---|---|
earliest_start_time | Обязательно. Нижняя граница (включительно) на начало перерыва. |
latest_start_time | Обязательно. Верхняя граница (включительно) начала перерыва. |
min_duration | Обязательно. Минимальная продолжительность перерыва. Должна быть положительным числом. |
Ограничение частоты
One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint :
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { 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
| Поля | |
|---|---|
min_break_duration | Обязательно. Минимальная продолжительность перерыва для этого ограничения. Неотрицательное значение. См. описание |
max_inter_break_duration | Обязательно. Максимально допустимая продолжительность любого интервала времени на маршруте, который хотя бы частично не включает перерыв |
Формат данных
Форматы данных для входных и выходных файлов.
| Перечисления | |
|---|---|
DATA_FORMAT_UNSPECIFIED | Недопустимое значение, формат не должен быть НЕУКАЗАН. |
JSON | Нотация объектов JavaScript. |
PROTO_TEXT | Текстовый формат буферов протокола. См. https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
Ограничение, определяющее максимальное расстояние, которое можно преодолеть. Может быть как жёстким, так и мягким.
Если определен мягкий предел, то оба soft_max_meters и cost_per_kilometer_above_soft_max должны быть определены и быть неотрицательными.
| Поля | |
|---|---|
max_meters | Жесткое ограничение, ограничивающее расстояние максимумом в метры. Предел должен быть неотрицательным. |
soft_max_meters | Мягкое ограничение не устанавливает ограничение на максимальное расстояние, но при его нарушении возникают затраты, которые суммируются с другими затратами, определенными в модели, в той же единице измерения. Если определено, soft_max_meters должно быть меньше max_meters и должно быть неотрицательным. |
cost_per_kilometer_below_soft_max | Стоимость за километр пробега увеличивается до Эта стоимость не поддерживается в |
cost_per_kilometer_above_soft_max | Стоимость за километр рассчитывается, если расстояние превышает лимит Стоимость должна быть неотрицательной. |
GcsDestination
Местоположение облачного хранилища Google, куда будут записаны выходные файлы.
| Поля | |
|---|---|
uri | Обязательно. URI облачного хранилища Google. |
GcsSource
Местоположение облачного хранилища Google, из которого будет считан входной файл.
| Поля | |
|---|---|
uri | Обязательно. URI объекта Google Cloud Storage в формате |
InjectedSolutionConstraint
Решение, внедренное в запрос, включает информацию о том, какие посещения должны быть ограничены и как именно это должно быть сделано.
| Поля | |
|---|---|
routes[] | Маршруты решения для инъекции. Некоторые маршруты могут быть исключены из исходного решения. Маршруты и пропущенные поставки должны соответствовать основным предположениям о валидности, перечисленным для |
skipped_shipments[] | Пропущенные поставки раствора для инъекций. Некоторые партии могли быть исключены из исходного раствора. См. поле |
constraint_relaxations[] | Для нуля или более групп транспортных средств определяет, когда и насколько ослаблять ограничения. Если это поле пусто, все непустые маршруты транспортных средств полностью ограничены. |
ОграничениеРелаксация
Для группы транспортных средств указывает, при каких пороговых значениях будут смягчены ограничения на посещения и до какого уровня. Перевозки, указанные в поле skipped_shipment , могут быть пропущены, т.е. не могут быть выполнены.
| Поля | |
|---|---|
relaxations[] | Все смягчения ограничений посещений, которые будут применяться к посещениям на маршрутах с транспортными средствами, указанными в |
vehicle_indices[] | Specifies the vehicle indices to which the visit constraint Индекс транспортного средства сопоставляется так же, как |
Релаксация
Если relaxations пусто, время начала и последовательность всех посещений на routes полностью ограничены, и в эти маршруты нельзя добавлять или добавлять новые посещения. Кроме того, время начала и окончания движения транспортного средства на routes полностью ограничено, за исключением случаев, когда транспортное средство пусто (т.е. у него нет посещений, а used_if_route_is_empty в модели установлен в значение false).
relaxations(i).level определяет уровень релаксации ограничений, применяемый к посещению #j, который удовлетворяет:
-
route.visits(j).start_time >= relaxations(i).threshold_timeИ -
j + 1 >= relaxations(i).threshold_visit_count
Аналогично, запуск транспортного средства смягчается до relaxations(i).level если он удовлетворяет:
-
vehicle_start_time >= relaxations(i).threshold_timeИ -
relaxations(i).threshold_visit_count == 0и конец транспортного средства расслабляется доrelaxations(i).level, если он удовлетворяет: -
vehicle_end_time >= relaxations(i).threshold_timeИ -
route.visits_size() + 1 >= relaxations(i).threshold_visit_count
To apply a relaxation level if a visit meets the threshold_visit_count OR the threshold_time add two relaxations with the same level : one with only threshold_visit_count set and the other with only threshold_time set. If a visit satisfies the conditions of multiple relaxations , the most relaxed level applies. As a result, from the vehicle start through the route visits in order to the vehicle end, the relaxation level becomes more relaxed: ie, the relaxation level is non-decreasing as the route progresses.
Время и последовательность посещений маршрутов, не удовлетворяющих пороговым условиям каких-либо relaxations , полностью ограничены, и никакие посещения не могут быть включены в эти последовательности. Кроме того, если начало или конец движения транспортного средства не удовлетворяет условиям какого-либо послабления, время фиксируется, за исключением случаев, когда транспортное средство пусто.
| Поля | |
|---|---|
level | Уровень ослабления ограничений, который применяется, когда выполняются условия на |
threshold_time | Время, в течение которого или после которого может быть применен |
threshold_visit_count | Количество посещений, при достижении или после которого может быть применен Если значение равно |
Уровень
Выражает различные уровни релаксации ограничений, которые применяются для посещения и те, которые следуют за ним, когда оно удовлетворяет пороговым условиям.
Нижеприведенный перечень дан в порядке возрастания релаксации.
| Перечисления | |
|---|---|
LEVEL_UNSPECIFIED | Неявный уровень релаксации по умолчанию: никакие ограничения не ослаблены, т. е. все посещения полностью ограничены. Это значение не должно явно использоваться на |
RELAX_VISIT_TIMES_AFTER_THRESHOLD | Время начала визита и время начала/окончания использования транспортного средства будут смягчены, но каждый визит по-прежнему будет привязан к одному и тому же транспортному средству, и должна соблюдаться последовательность визитов: ни один визит не может быть вставлен между ними или перед ними. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD | То же, что и RELAX_VISIT_TIMES_AFTER_THRESHOLD , но последовательность посещений также смягчена: посещения могут быть выполнены только этим транспортным средством, но потенциально могут стать невыполненными. |
RELAX_ALL_AFTER_THRESHOLD | То же, что и RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , но транспортное средство также расслаблено: посещения полностью бесплатны в или после порогового времени и потенциально могут стать невыполненными. |
InputConfig
Укажите входные данные для [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
| Поля | |
|---|---|
data_format | Обязательно. Формат входных данных. |
source поля объединения. Обязательно. source может быть только одним из следующих: | |
gcs_source | Место хранения в облачном хранилище Google. Это должен быть один объект (файл). |
Расположение
Содержит местоположение (географическую точку и необязательный заголовок).
| Поля | |
|---|---|
lat_lng | Географические координаты точки маршрута. |
heading | Направление по компасу, соответствующее направлению движения транспорта. Это значение используется для указания стороны дороги, с которой следует производить посадку и высадку пассажиров. Значение направления может быть от 0 до 360, где 0 указывает направление на север, 90 — на восток и т. д. |
ОптимизацияToursLongRunningMetadata
Этот тип не имеет полей.
Метаданные операции для вызовов OptimizeToursLongRunning .
OptimizeToursRequest
Запрос должен быть направлен на решение задачи оптимизации тура, которое определит модель отгрузки для решения, а также параметры оптимизации.
| Поля | |
|---|---|
parent | Обязательно. Укажите проект или место для звонка. Формат:
Если местоположение не указано, регион будет выбран автоматически. |
timeout | Если этот тайм-аут установлен, сервер возвращает ответ до истечения периода тайм-аута или достижения крайнего срока сервера для синхронных запросов, в зависимости от того, что наступит раньше. Для асинхронных запросов сервер сгенерирует решение (если это возможно) до истечения времени ожидания. |
model | Решить модель отгрузки. |
solving_mode | По умолчанию режим решения — |
search_mode | Режим поиска, используемый для решения запроса. |
injected_first_solution_routes[] | Направьте алгоритм оптимизации на поиск первого решения, похожего на предыдущее решение. Модель ограничена при построении первого решения. Любые перевозки, не выполненные по маршруту, неявно пропускаются в первом решении, но могут быть выполнены в последующих решениях. Решение должно удовлетворять некоторым основным предположениям о достоверности:
Если введенное решение нецелесообразно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность. |
injected_solution_constraint | Ограничьте алгоритм оптимизации поиском окончательного решения, аналогичного предыдущему. Например, это можно использовать для фиксации участков маршрутов, которые уже выполнены или должны быть выполнены, но не должны изменяться. Если введенное решение нецелесообразно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность. |
refresh_details_routes[] | Если поле не пустое, заданные маршруты будут обновлены без изменения базовой последовательности посещений или времени в пути: будут обновлены только другие данные. Это не решит модель. Начиная с 2020/11 года при этом заполняются только полилинии непустых маршрутов и требуется, чтобы Поля Это поле нельзя использовать вместе с |
interpret_injected_solutions_using_labels | Если верно:
Эта интерпретация применяется к полям Если значение true, метки в следующих категориях должны появляться не более одного раза в своей категории:
If a Удаление посещений маршрутов или целых маршрутов из введенного решения может повлиять на подразумеваемые ограничения, что может привести к изменению решения, ошибкам проверки или невозможности его реализации. NOTE: The caller must ensure that each |
consider_road_traffic | Учитывайте оценку трафика при расчете полей |
populate_polylines | Если true, полилинии будут заполнены в ответе |
populate_transition_polylines | Если значение равно true, полилинии и маркеры маршрута будут заполнены в ответе |
allow_large_deadline_despite_interruption_risk | Если этот параметр установлен, запрос может иметь срок выполнения (см. https://grpc.io/blog/deadlines ) до 60 минут. В противном случае максимальный срок составляет всего 30 минут. Обратите внимание, что для длительных запросов риск прерывания значительно выше (хотя и невелик). |
use_geodesic_distances | Если значение равно true, расстояния перемещения будут вычисляться с использованием геодезических расстояний вместо расстояний Google Maps, а время перемещения будет вычисляться с использованием геодезических расстояний со скоростью, определяемой параметром |
label | Метка, которая может использоваться для идентификации этого запроса, возвращается в |
geodesic_meters_per_second | Если |
max_validation_errors | Усекает количество возвращаемых ошибок валидации. Эти ошибки обычно прикрепляются к полезной нагрузке ошибки INVALID_ARGUMENT в виде сведений об ошибке BadRequest ( https://cloud.google.com/apis/design/errors#error_details) , если не задан параметр solved_mode=VALIDATE_ONLY: см. поле |
Режим поиска
Режим, определяющий поведение поиска, балансируя между задержкой и качеством решения. Во всех режимах соблюдается глобальный срок выполнения запроса.
| Перечисления | |
|---|---|
SEARCH_MODE_UNSPECIFIED | Неуказанный режим поиска, эквивалент RETURN_FAST . |
RETURN_FAST | Остановите поиск после нахождения первого хорошего решения. |
CONSUME_ALL_AVAILABLE_TIME | Уделите все имеющееся время поиску лучших решений. |
SolvingMode
Определяет, как решатель должен обрабатывать запрос. Во всех режимах, кроме VALIDATE_ONLY , если запрос недействителен, вы получите ошибку INVALID_REQUEST . См. max_validation_errors чтобы узнать максимальное количество возвращаемых ошибок.
| Перечисления | |
|---|---|
DEFAULT_SOLVE | Решите модель. Предупреждения могут быть выданы в [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. |
VALIDATE_ONLY | Только проверяет модель, не решая ее: заполняет как можно больше OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS | Only populates ВАЖНО : сюда возвращаются не все невозможные поставки, а только те, которые были определены как невозможные во время предварительной обработки. |
TRANSFORM_AND_RETURN_REQUEST | Этот режим работает только если Экспериментальный вариант: более подробную информацию см. по адресу https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request . |
OptimizeToursResponse
Ответ после решения задачи оптимизации тура, содержащий маршруты следования каждого транспортного средства, пропущенные поставки и общую стоимость решения.
| Поля | |
|---|---|
routes[] | Маршруты рассчитаны для каждого транспортного средства; i-й маршрут соответствует i-му транспортному средству в модели. |
request_label | Копия |
skipped_shipments[] | Список всех пропущенных поставок. |
validation_errors[] | Список всех ошибок валидации, которые нам удалось обнаружить независимо. См. пояснение к сообщению |
processed_request | В некоторых случаях мы изменяем входящий запрос перед его решением, то есть добавляем стоимость. Если solved_mode == TRANSFORM_AND_RETURN_REQUEST, изменённый запрос возвращается сюда. Экспериментальный вариант: более подробную информацию см. по адресу https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request . |
metrics | Показатели продолжительности, расстояния и использования для этого решения. |
Метрики
Общие показатели, агрегированные по всем маршрутам.
| Поля | |
|---|---|
aggregated_route_metrics | Агрегируется по маршрутам. Каждая метрика представляет собой сумму (или максимальное значение для грузов) всех полей |
skipped_mandatory_shipment_count | Количество пропущенных обязательных поставок. |
used_vehicle_count | Количество использованных транспортных средств. Примечание: если маршрут транспортного средства пуст и |
earliest_vehicle_start_time | Самое раннее время начала движения подержанного транспортного средства, рассчитанное как минимум по всем подержанным транспортным средствам |
latest_vehicle_end_time | Самое позднее время окончания для подержанного транспортного средства, рассчитанное как максимальное значение для всех подержанных транспортных средств |
costs | Cost of the solution, broken down by cost-related request fields. The keys are proto paths, relative to the input OptimizeToursRequest, eg "model.shipments.pickups.cost", and the values are the total cost generated by the corresponding cost field, aggregated over the whole solution. In other words, costs["model.shipments.pickups.cost"] is the sum of all pickup costs over the solution. All costs defined in the model are reported in detail here with the exception of costs related to TransitionAttributes that are only reported in an aggregated way as of 2022/01. |
total_cost | Общая стоимость решения. Сумма всех значений на карте затрат. |
OptimizeToursUriMetadata
Этот тип не имеет полей.
Метаданные операций для вызовов OptimizeToursUri .
OptimizeToursUriRequest
Запрос, используемый методом OptimizeToursUri .
| Поля | |
|---|---|
parent | Обязательно. Укажите проект или место для звонка. Формат:
Если местоположение не указано, регион будет выбран автоматически. |
input | Обязательно. URI объекта облачного хранилища, содержащего |
output | Обязательно. URI объекта облачного хранилища, который будет содержать |
OptimizeToursUriResponse
Ответ, возвращаемый методом OptimizeToursUri .
| Поля | |
|---|---|
output | Необязательно. URI объекта облачного хранилища, содержащего Контрольную |
OptimizeToursValidationError
Описывает ошибку или предупреждение, возникшее при проверке OptimizeToursRequest .
| Поля | |
|---|---|
code | Ошибка проверки определяется парой ( Поля, следующие за этим разделом, предоставляют более подробную информацию об ошибке. MULTIPLE ERRORS : When there are multiple errors, the validation process tries to output several of them. Much like a compiler, this is an imperfect process. Some validation errors will be "fatal", meaning that they stop the entire validation process. This is the case for СТАБИЛЬНОСТЬ : |
display_name | Отображаемое имя ошибки. |
fields[] | Контекст ошибки может включать 0, 1 (чаще всего) или более полей. Например, ссылку на транспортное средство №4 и первый забор груза №2 можно реализовать следующим образом: Однако следует отметить, что количество |
error_message | Строка, описывающая ошибку, понятная человеку. Между СТАБИЛЬНОСТЬ : Нестабильно: сообщение об ошибке, связанное с данным |
offending_values | Может содержать значение(я) поля(ей). Эта информация доступна не всегда. Ни в коем случае не следует полагаться на неё и использовать только для ручной отладки модели. |
FieldReference
Указывает контекст ошибки проверки. FieldReference всегда ссылается на заданное поле в этом файле и следует той же иерархической структуре. Например, мы можем указать элемент №2 в start_time_windows транспортного средства №5, используя:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
Однако мы опускаем сущности верхнего уровня, такие как OptimizeToursRequest или ShipmentModel чтобы не загромождать сообщение.
| Поля | |
|---|---|
name | Название поля, например, «транспортные средства». |
sub_field | Рекурсивно вложенное подполе, если необходимо. |
Поле объединения | |
index | Индекс поля, если повторяется. |
key | Ключ, если поле представляет собой карту. |
OutputConfig
Укажите пункт назначения для результатов [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
| Поля | |
|---|---|
data_format | Обязательно. Формат выходных данных. |
Union field destination . Required. destination can be only one of the following: | |
gcs_destination | The Google Cloud Storage location to write the output to. |
RouteModifiers
Инкапсулирует набор дополнительных условий, которые необходимо учитывать при расчёте маршрутов транспортных средств. Аналогично RouteModifiers в API предпочтительных маршрутов платформы Google Карт; см.: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers .
| Поля | |
|---|---|
avoid_tolls | Указывает, следует ли избегать платных дорог, где это целесообразно. Предпочтение будет отдаваться маршрутам, не содержащим платных дорог. Применяется только к транспортным средствам с моторизованным двигателем. |
avoid_highways | Указывает, следует ли избегать автомагистралей, где это целесообразно. Предпочтение будет отдано маршрутам, не содержащим автомагистралей. Применяется только к моторизованным видам транспорта. |
avoid_ferries | Указывает, следует ли избегать паромных переправ, где это целесообразно. Предпочтение будет отдано маршрутам, не включающим паромные переправы. Применяется только к моторизованным видам транспорта. |
avoid_indoor | Необязательно. Указывает, следует ли избегать навигации внутри помещений, где это целесообразно. Предпочтение будет отдаваться маршрутам, не содержащим навигации внутри помещений. Применимо только к режиму передвижения |
Отгрузка
Перевозка одного товара из одного пункта выдачи в один из пунктов доставки. Чтобы перевозка считалась выполненной, транспортное средство должно посетить один из пунктов выдачи (и соответственно уменьшить свои свободные места), а затем позже посетить один из пунктов доставки (и, следовательно, соответственно увеличить свои свободные места).
| Поля | |
|---|---|
display_name | Отображаемое имя отправления, определяемое пользователем. Длина имени может составлять до 63 символов, допускается использование символов UTF-8. |
pickups[] | Набор вариантов забора груза, связанных с отправкой. Если не указано иное, транспортное средство должно заехать только в место, соответствующее доставке. |
deliveries[] | Набор вариантов доставки, связанных с отправлением. Если не указано иное, транспортное средство должно заехать только в место, соответствующее месту забора груза. |
load_demands | Требования к загрузке груза (например, вес, объём, количество поддонов и т. д.). Ключами на карте должны быть идентификаторы, описывающие тип соответствующего груза, в идеале также с указанием единиц измерения. Например: «weight_kg», «volume_gallons», «pallet_count» и т. д. Если заданный ключ отсутствует на карте, соответствующий груз считается пустым. |
allowed_vehicle_indices[] | Набор транспортных средств, которые могут выполнить эту перевозку. Если этот список пуст, её могут выполнить все транспортные средства. Транспортные средства указаны по индексу в списке |
costs_per_vehicle[] | Указывает стоимость доставки груза каждым транспортным средством. Если указано, необходимо указать ОДНО ИЗ следующих условий:
These costs must be in the same unit as |
costs_per_vehicle_indices[] | Indices of the vehicles to which |
pickup_to_delivery_absolute_detour_limit | Указывает максимальное абсолютное время в пути по сравнению с кратчайшим путём от пункта забора до пункта доставки. Если указано, оно должно быть неотрицательным, а отправление должно включать как минимум пункт забора и пункт доставки. For example, let t be the shortest time taken to go from the selected pickup alternative directly to the selected delivery alternative. Then setting Если для одной и той же партии груза указаны как относительные, так и абсолютные ограничения, для каждой возможной пары «забор/доставка» используется более строгий предел. С 2017/10 года объезды поддерживаются только в тех случаях, когда продолжительность поездки не зависит от транспортных средств. |
pickup_to_delivery_time_limit | Указывает максимальную продолжительность от начала забора до начала доставки груза. Если указано, это значение должно быть неотрицательным, и груз должен включать как минимум забор и доставку. Это не зависит от выбранных вариантов забора и доставки, а также от скорости транспортного средства. Это значение можно указать вместе с ограничениями на максимальный объезд: решение будет учитывать оба параметра. |
shipment_type | Non-empty string specifying a "type" for this shipment. This feature can be used to define incompatibilities or requirements between Differs from |
label | Specifies a label for this shipment. This label is reported in the response in the |
ignore | If true, skip this shipment, but don't apply a Ignoring a shipment results in a validation error when there are any Ignoring a shipment that is performed in |
penalty_cost | Если отправка не выполнена, этот штраф добавляется к общей стоимости маршрутов. Отправка считается выполненной, если использован один из вариантов забора и доставки. Стоимость может быть выражена в тех же единицах, что и все остальные поля модели, связанные со стоимостью, и должна быть положительной. ВАЖНО : Если данный штраф не указан, он считается бесконечным, т.е. отправка должна быть завершена. |
pickup_to_delivery_relative_detour_limit | Указывает максимальное относительное время в пути по сравнению с кратчайшим путём от пункта забора до пункта доставки. Если указано, оно должно быть неотрицательным, а отправление должно включать как минимум пункт забора и пункт доставки. For example, let t be the shortest time taken to go from the selected pickup alternative directly to the selected delivery alternative. Then setting Если для одной и той же партии груза указаны как относительные, так и абсолютные ограничения, для каждой возможной пары «забор/доставка» используется более строгий предел. С 2017/10 года объезды поддерживаются только в тех случаях, когда продолжительность поездки не зависит от транспортных средств. |
Нагрузка
When performing a visit, a predefined amount may be added to the vehicle load if it's a pickup, or subtracted if it's a delivery. This message defines such amount. See load_demands .
| Поля | |
|---|---|
amount | The amount by which the load of the vehicle performing the corresponding visit will vary. Since it is an integer, users are advised to choose an appropriate unit to avoid loss of precision. Must be ≥ 0. |
VisitRequest
Запрос на посещение, который может быть выполнен транспортным средством: у него есть геолокация (или две, см. ниже), время открытия и закрытия, представленное временными окнами, и продолжительность обслуживания (время, затраченное транспортным средством с момента прибытия для забора или доставки товаров).
| Поля | |
|---|---|
arrival_location | The geo-location where the vehicle arrives when performing this |
arrival_waypoint | The waypoint where the vehicle arrives when performing this |
departure_location | The geo-location where the vehicle departs after completing this |
departure_waypoint | The waypoint where the vehicle departs after completing this |
tags[] | Указывает теги, прикреплённые к запросу на посещение. Пустые или дублирующиеся строки не допускаются. |
time_windows[] | Временные окна, ограничивающие время прибытия в момент посещения. Обратите внимание, что транспортное средство может отбыть за пределами временного окна прибытия, то есть время прибытия и продолжительность не обязательно должны находиться внутри временного окна. Это может привести к ожиданию, если транспортное средство прибудет до Отсутствие Временные окна должны быть непересекающимися, т.е. ни одно временное окно не должно перекрываться или быть смежным с другим, и они должны располагаться в порядке возрастания. |
duration | Duration of the visit, ie time spent by the vehicle between arrival and departure (to be added to the possible waiting time; see |
cost | Стоимость обслуживания этого запроса на посещение по маршруту транспортного средства. Эта сумма может быть использована для оплаты различных вариантов забора или доставки груза. Эта стоимость должна быть выражена в тех же единицах, что и |
load_demands | Требования к загрузке для этого запроса на посещение. Это похоже на поле |
visit_types[] | Указывает типы визита. Это может быть использовано для выделения дополнительного времени, необходимого транспортному средству для завершения этого визита (см. Тип может встречаться только один раз. |
label | Specifies a label for this |
avoid_u_turns | Указывает, следует ли избегать разворотов на маршрутах в данном месте. Избегать разворотов — это наилучший вариант, и полное предотвращение разворотов не гарантируется. Это экспериментальная функция, и её поведение может измениться. Экспериментальный вариант: более подробную информацию см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request . |
ShipmentModel
Модель перевозки содержит набор перевозок, которые необходимо выполнить набором транспортных средств, минимизируя при этом общую стоимость, которая представляет собой сумму:
- стоимость маршрутизации транспортных средств (сумма стоимости за общее время, стоимости за время в пути и фиксированной стоимости всех транспортных средств).
- штрафы за невыполненную отгрузку.
- стоимость глобальной продолжительности доставки
| Поля | |
|---|---|
shipments[] | Набор отгрузок, которые необходимо выполнить в модели. |
vehicles[] | Набор транспортных средств, которые могут быть использованы для осуществления визитов. |
objectives[] | The set of objectives for this model, that we will transform into costs. If not empty, the input model has to be costless. To obtain the modified request, please use Экспериментальный вариант: более подробную информацию см. по адресу https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request . |
global_start_time | Глобальное время начала и окончания модели: никакое время за пределами этого диапазона не может считаться действительным. The model's time span must be less than a year, ie the При использовании полей |
global_end_time | Если не установлено, по умолчанию используется 00:00:00 UTC, 1 января 1971 г. (т. е. секунды: 31536000, наносекунды: 0). |
global_duration_cost_per_hour | «Глобальная продолжительность» общего плана — это разница между самым ранним фактическим временем начала и самым поздним фактическим временем окончания для всех транспортных средств. Пользователи могут назначить этому количеству почасовую стоимость, например, чтобы оптимизировать её для скорейшего завершения работы. Эта стоимость должна быть выражена в тех же единицах, что и |
duration_distance_matrices[] | Specifies duration and distance matrices used in the model. If this field is empty, Google Maps or geodesic distances will be used instead, depending on the value of the Примеры использования:
|
duration_distance_matrix_src_tags[] | Tags defining the sources of the duration and distance matrices; Tags correspond to |
duration_distance_matrix_dst_tags[] | Tags defining the destinations of the duration and distance matrices; Tags correspond to |
transition_attributes[] | В модель добавлены атрибуты перехода. |
shipment_type_incompatibilities[] | Наборы несовместимых shipment_types (см. |
shipment_type_requirements[] | Sets of |
precedence_rules[] | Набор правил приоритета, которые должны соблюдаться в модели. ВАЖНО : Использование правил приоритета ограничивает размер задачи, которую можно оптимизировать. Запросы, использующие правила приоритета, которые включают множество поставок, могут быть отклонены. |
max_active_vehicles | Ограничивает максимальное количество активных транспортных средств. Транспортное средство считается активным, если его маршрут выполняет хотя бы одну перевозку. Это можно использовать для ограничения количества маршрутов в случае, когда количество водителей меньше количества транспортных средств, а автопарк неоднороден. В результате оптимизации будет выбрано оптимальное подмножество транспортных средств для использования. Значение должно быть строго положительным. |
DurationDistanceMatrix
Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.
| Поля | |
|---|---|
rows[] | Specifies the rows of the duration and distance matrix. It must have as many elements as |
vehicle_start_tag | Tag defining to which vehicles this duration and distance matrix applies. If empty, this applies to all vehicles, and there can only be a single matrix. Each vehicle start must match exactly one matrix, ie exactly one of their All matrices must have a different |
Ряд
Specifies a row of the duration and distance matrix.
| Поля | |
|---|---|
durations[] | Duration values for a given row. It must have as many elements as |
meters[] | Distance values for a given row. If no costs or constraints refer to distances in the model, this can be left empty; otherwise it must have as many elements as |
Цель
Objectives replace the cost model completely, and are therefore incompatible with pre-existing costs. Each objective maps to a number of pre-defined costs for, eg, vehicles, shipments or transition attributes.
Экспериментальный вариант: более подробную информацию см. по адресу https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request .
| Поля | |
|---|---|
type | The type of the objective. |
weight | How much this objective should count relatively to the others. This can be any non-negative number, weights do not have to sum to 1. Weights default to 1.0. |
Тип
The objective type that will be mapped to a set of costs.
| Перечисления | |
|---|---|
DEFAULT | A default set of costs will be used, to ensure a reasonable solution. Note: this objective can be used on its own, but will also always be added with weight 1.0, as a baseline, to the objectives specified by the user, if it's not already present. |
MIN_DISTANCE | "MIN" objectives. Minimize the total distance traveled. |
MIN_WORKING_TIME | Minimize the total working time, summed over all vehicles. |
MIN_TRAVEL_TIME | Same as above but focusing on travel time only. |
MIN_NUM_VEHICLES | Minimize the number of vehicles used. |
Правило приоритета
A precedence rule between two events (each event is the pickup or the delivery of a shipment): the "second" event has to start at least offset_duration after "first" has started.
Several precedences can refer to the same (or related) events, eg, "pickup of B happens after delivery of A" and "pickup of C happens after pickup of B".
Furthermore, precedences only apply when both shipments are performed and are otherwise ignored.
| Поля | |
|---|---|
first_is_delivery | Indicates if the "first" event is a delivery. |
second_is_delivery | Indicates if the "second" event is a delivery. |
offset_duration | The offset between the "first" and "second" event. It can be negative. |
first_index | Shipment index of the "first" event. This field must be specified. |
second_index | Shipment index of the "second" event. This field must be specified. |
ShipmentRoute
A vehicle's route can be decomposed, along the time axis, like this (we assume there are n visits):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
Note that we make a difference between:
- "punctual events", such as the vehicle start and end and each visit's start and end (aka arrival and departure). They happen at a given second.
- "time intervals", such as the visits themselves, and the transition between visits. Though time intervals can sometimes have zero duration, ie start and end at the same second, they often have a positive duration.
Invariants:
- If there are n visits, there are n+1 transitions.
- A visit is always surrounded by a transition before it (same index) and a transition after it (index + 1).
- The vehicle start is always followed by transition #0.
- The vehicle end is always preceded by transition #n.
Zooming in, here is what happens during a Transition and a Visit :
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
Lastly, here is how the TRAVEL, BREAKS, DELAY and WAIT can be arranged during a transition.
- Они не пересекаются.
- The DELAY is unique and must be a contiguous period of time right before the next visit (or vehicle end). Thus, it suffice to know the delay duration to know its start and end time.
- The BREAKS are contiguous, non-overlapping periods of time. The response specifies the start time and duration of each break.
- TRAVEL and WAIT are "preemptable": they can be interrupted several times during this transition. Clients can assume that travel happens "as soon as possible" and that "wait" fills the remaining time.
A (complex) example:
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
| Поля | |
|---|---|
vehicle_index | Vehicle performing the route, identified by its index in the source |
vehicle_label | Label of the vehicle performing this route, equal to |
vehicle_start_time | Time at which the vehicle starts its route. |
vehicle_end_time | Time at which the vehicle finishes its route. |
visits[] | Ordered sequence of visits representing a route. visits[i] is the i-th visit in the route. If this field is empty, the vehicle is considered as unused. |
transitions[] | Ordered list of transitions for the route. |
has_traffic_infeasibilities | When Arrival at next_visit will likely happen later than its current time window due the increased estimate of travel time |
route_polyline | The encoded polyline representation of the route. This field is only populated if |
breaks[] | Breaks scheduled for the vehicle performing this route. The |
metrics | Duration, distance and load metrics for this route. The fields of |
vehicle_fullness | Экспериментальный: поведение или существование этого поля может измениться в будущем. |
route_costs | Cost of the route, broken down by cost-related request fields. The keys are proto paths, relative to the input OptimizeToursRequest, eg "model.shipments.pickups.cost", and the values are the total cost generated by the corresponding cost field, aggregated over the whole route. In other words, costs["model.shipments.pickups.cost"] is the sum of all pickup costs over the route. All costs defined in the model are reported in detail here with the exception of costs related to TransitionAttributes that are only reported in an aggregated way as of 2022/01. |
route_total_cost | Total cost of the route. The sum of all costs in the cost map. |
Перерыв
Data representing the execution of a break.
| Поля | |
|---|---|
start_time | Start time of a break. |
duration | Duration of a break. |
EncodedPolyline
The encoded representation of a polyline. More information on polyline encoding can be found here: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding .
| Поля | |
|---|---|
points | String representing encoded points of the polyline. |
Переход
Transition between two events on the route. See the description of ShipmentRoute .
If the vehicle does not have a start_location and/or end_location , the corresponding travel metrics are 0.
| Поля | |
|---|---|
travel_duration | Travel duration during this transition. |
travel_distance_meters | Distance traveled during the transition. |
traffic_info_unavailable | When traffic is requested via |
delay_duration | Sum of the delay durations applied to this transition. If any, the delay starts exactly |
break_duration | Sum of the duration of the breaks occurring during this transition, if any. Details about each break's start time and duration are stored in |
wait_duration | Time spent waiting during this transition. Wait duration corresponds to idle time and does not include break time. Also note that this wait time may be split into several non-contiguous intervals. |
total_duration | Total duration of the transition, provided for convenience. It is equal to:
|
start_time | Start time of this transition. |
route_polyline | The encoded polyline representation of the route followed during the transition. This field is only populated if |
route_token | Output only. An opaque token that can be passed to Navigation SDK to reconstruct the route during navigation, and, in the event of rerouting, honor the original intention when the route was created. Treat this token as an opaque blob. Don't compare its value across requests as its value may change even if the service returns the exact same route. This field is only populated if |
vehicle_loads | Vehicle loads during this transition, for each type that either appears in this vehicle's The loads during the first transition are the starting loads of the vehicle route. Then, after each visit, the visit's |
VehicleLoad
Reports the actual load of the vehicle at some point along the route, for a given type (see Transition.vehicle_loads ).
| Поля | |
|---|---|
amount | The amount of load on the vehicle, for the given type. The unit of load is usually indicated by the type. See |
Посещать
A visit performed during a route. This visit corresponds to a pickup or a delivery of a Shipment .
| Поля | |
|---|---|
shipment_index | Index of the |
is_pickup | If true the visit corresponds to a pickup of a |
visit_request_index | Index of |
start_time | Time at which the visit starts. Note that the vehicle may arrive earlier than this at the visit location. Times are consistent with the |
load_demands | Total visit load demand as the sum of the shipment and the visit request |
detour | Extra detour time due to the shipments visited on the route before the visit and to the potential waiting time induced by time windows. If the visit is a delivery, the detour is computed from the corresponding pickup visit and is equal to: Otherwise, it is computed from the vehicle |
shipment_label | Copy of the corresponding |
visit_label | Copy of the corresponding |
injected_solution_location_token | An opaque token representing information about a visit location. This field may be populated in the result routes' visits when Экспериментальный вариант: более подробную информацию см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request . |
ShipmentTypeIncompatibility
Specifies incompatibilties between shipments depending on their shipment_type. The appearance of incompatible shipments on the same route is restricted based on the incompatibility mode.
| Поля | |
|---|---|
types[] | List of incompatible types. Two shipments having different |
incompatibility_mode | Mode applied to the incompatibility. |
IncompatibilityMode
Modes defining how the appearance of incompatible shipments are restricted on the same route.
| Перечисления | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED | Unspecified incompatibility mode. This value should never be used. |
NOT_PERFORMED_BY_SAME_VEHICLE | In this mode, two shipments with incompatible types can never share the same vehicle. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY | In this mode, two shipments with incompatible types can never be on the same vehicle at the same time:
|
ТипОтгрузкиТребования
Specifies requirements between shipments based on their shipment_type. The specifics of the requirement are defined by the requirement mode.
| Поля | |
|---|---|
required_shipment_type_alternatives[] | List of alternative shipment types required by the |
dependent_shipment_types[] | All shipments with a type in the NOTE: Chains of requirements such that a |
requirement_mode | Mode applied to the requirement. |
RequirementMode
Modes defining the appearance of dependent shipments on a route.
| Перечисления | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED | Unspecified requirement mode. This value should never be used. |
PERFORMED_BY_SAME_VEHICLE | In this mode, all "dependent" shipments must share the same vehicle as at least one of their "required" shipments. |
IN_SAME_VEHICLE_AT_PICKUP_TIME | With the A "dependent" shipment pickup must therefore have either:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME | Same as before, except the "dependent" shipments need to have a "required" shipment on their vehicle at the time of their delivery . |
SkippedShipment
Specifies details of unperformed shipments in a solution. For trivial cases and/or if we are able to identify the cause for skipping, we report the reason here.
| Поля | |
|---|---|
index | The index corresponds to the index of the shipment in the source |
label | Copy of the corresponding |
reasons[] | A list of reasons that explain why the shipment was skipped. See comment above |
penalty_cost | This is a copy of the Экспериментальный: поведение или существование этого поля может измениться в будущем. |
estimated_incompatible_vehicle_ratio | Estimated ratio of vehicles that cannot perform this shipment for at least one of the reasons below. Note: this is only filled when reasons involve a vehicle. Экспериментальный: поведение или существование этого поля может измениться в будущем. |
Причина
If we can explain why the shipment was skipped, reasons will be listed here. If the reason is not the same for all vehicles, reason will have more than 1 element. A skipped shipment cannot have duplicate reasons, ie where all fields are the same except for example_vehicle_index . Example:
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 1
example_exceeded_capacity_type: "Apples"
}
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 3
example_exceeded_capacity_type: "Pears"
}
reasons {
code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
example_vehicle_index: 1
}
The skipped shipment is incompatible with all vehicles. The reasons may be different for all vehicles but at least one vehicle's "Apples" capacity would be exceeded (including vehicle 1), at least one vehicle's "Pears" capacity would be exceeded (including vehicle 3) and at least one vehicle's distance limit would be exceeded (including vehicle 1).
| Поля | |
|---|---|
code | Refer to the comments of Code. |
example_vehicle_indices[] | Same as Экспериментальный: поведение или существование этого поля может измениться в будущем. |
example_exceeded_capacity_type | If the reason code is |
example_vehicle_index | If the reason is related to a shipment-vehicle incompatibility, this field provides the index of one relevant vehicle. |
Код
Code identifying the reason type. The order here is meaningless. In particular, it gives no indication of whether a given reason will appear before another in the solution, if both apply.
| Перечисления | |
|---|---|
CODE_UNSPECIFIED | This should never be used. |
NO_VEHICLE | There is no vehicle in the model making all shipments infeasible. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY | The demand of the shipment exceeds a vehicle's capacity for some capacity types, one of which is example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT | The minimum distance necessary to perform this shipment, ie from the vehicle's Note that for this computation we use the geodesic distances. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT | The minimum time necessary to perform this shipment, including travel time, wait time and service time exceeds the vehicle's Note: travel time is computed in the best-case scenario, namely as geodesic distance x 36 m/s (roughly 130 km/hour). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT | Same as above but we only compare minimum travel time and the vehicle's travel_duration_limit . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS | The vehicle cannot perform this shipment in the best-case scenario (see CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT for time computation) if it starts at its earliest start time: the total time would make the vehicle end after its latest end time. |
VEHICLE_NOT_ALLOWED | The allowed_vehicle_indices field of the shipment is not empty and this vehicle does not belong to it. |
VEHICLE_IGNORED | The vehicle's Экспериментальный: поведение или существование этого поля может измениться в будущем. |
SHIPMENT_IGNORED | The shipment's Экспериментальный: поведение или существование этого поля может измениться в будущем. |
SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT | The shipment is skipped in the Экспериментальный: поведение или существование этого поля может измениться в будущем. |
VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED | The vehicle route relaxation specified in the Экспериментальный: поведение или существование этого поля может измениться в будущем. |
ZERO_PENALTY_COST | The shipment has a zero penalty cost. While this can be useful as an advanced modelling choice, it may also explain after the fact why a shipment was skipped. Экспериментальный: поведение или существование этого поля может измениться в будущем. |
TimeWindow
Временные окна ограничивают время события, например время прибытия в место посещения или время начала и окончания движения транспортного средства.
Hard time window bounds, start_time and end_time , enforce the earliest and latest time of the event, such that start_time <= event_time <= end_time . The soft time window lower bound, soft_start_time , expresses a preference for the event to happen at or after soft_start_time by incurring a cost proportional to how long before soft_start_time the event occurs. The soft time window upper bound, soft_end_time , expresses a preference for the event to happen at or before soft_end_time by incurring a cost proportional to how long after soft_end_time the event occurs. start_time , end_time , soft_start_time and soft_end_time should be within the global time limits (see ShipmentModel.global_start_time and ShipmentModel.global_end_time ) and should respect:
0 <= `start_time` <= `end_time` and
0 <= `start_time` <= `soft_start_time` and
0 <= `soft_end_time` <= `end_time`.
| Поля | |
|---|---|
start_time | Время начала жёсткого временного окна. Если не указано, будет установлено значение |
end_time | Время окончания жёсткого временного окна. Если не указано, будет установлено значение |
soft_start_time | Время плавного запуска временного окна. |
soft_end_time | Мягкое конечное время временного окна. |
cost_per_hour_before_soft_start_time | A cost per hour added to other costs in the model if the event occurs before soft_start_time, computed as: This cost must be positive, and the field can only be set if soft_start_time has been set. |
cost_per_hour_after_soft_end_time | A cost per hour added to other costs in the model if the event occurs after This cost must be positive, and the field can only be set if |
Атрибуты перехода
Specifies attributes of transitions between two consecutive visits on a route. Several TransitionAttributes may apply to the same transition: in that case, all extra costs add up and the strictest constraint or limit applies (following natural "AND" semantics).
| Поля | |
|---|---|
src_tag | Tags defining the set of (src->dst) transitions these attributes apply to. A source visit or vehicle start matches iff its |
excluded_src_tag | See |
dst_tag | A destination visit or vehicle end matches iff its |
excluded_dst_tag | See |
cost | Specifies a cost for performing this transition. This is in the same unit as all other costs in the model and must not be negative. It is applied on top of all other existing costs. |
cost_per_kilometer | Specifies a cost per kilometer applied to the distance traveled while performing this transition. It adds up to any |
distance_limit | Specifies a limit on the distance traveled while performing this transition. As of 2021/06, only soft limits are supported. |
delay | Specifies a delay incurred when performing this transition. This delay always occurs after finishing the source visit and before starting the destination visit. |
Ури
A Universal Resource Identifier that points to a resource that can be read and written by the Route Optimization API.
| Поля | |
|---|---|
uri | The URI of the resource. The resource may not yet exist. The contents of the resource are encoded as either JSON or textproto. Only Google Cloud Storage resources are supported. If the resource is encoded as JSON, the resource name must be suffixed with |
Транспортное средство
Models a vehicle in a shipment problem. Solving a shipment problem will build a route starting from start_location and ending at end_location for this vehicle. A route is a sequence of visits (see ShipmentRoute ).
| Поля | |
|---|---|
display_name | Отображаемое имя транспортного средства, определяемое пользователем. Длина имени может составлять до 63 символов, в кодировке UTF-8. |
travel_mode | The travel mode which affects the roads usable by the vehicle and its speed. See also |
route_modifiers | Набор условий, которые необходимо выполнить и которые влияют на способ расчета маршрутов для данного транспортного средства. |
start_location | Geographic location where the vehicle starts before picking up any shipments. If not specified, the vehicle starts at its first pickup. If the shipment model has duration and distance matrices, |
start_waypoint | Waypoint representing a geographic location where the vehicle starts before picking up any shipments. If neither |
end_location | Geographic location where the vehicle ends after it has completed its last |
end_waypoint | Waypoint representing a geographic location where the vehicle ends after it has completed its last |
start_tags[] | Указывает теги, прикрепленные к началу маршрута транспортного средства. Пустые или дублирующиеся строки не допускаются. |
end_tags[] | Указывает теги, прикрепленные к концу маршрута транспортного средства. Пустые или дублирующиеся строки не допускаются. |
start_time_windows[] | Временные интервалы, в течение которых транспортное средство может покинуть пункт отправления. Они должны соответствовать глобальным временным ограничениям (см. поля Временные окна, принадлежащие одному и тому же повторяющемуся полю, должны быть непересекающимися, т.е. ни одно временное окно не может перекрываться или быть смежным с другим, и они должны располагаться в хронологическом порядке. |
end_time_windows[] | Временные интервалы, в течение которых транспортное средство может прибыть в конечный пункт назначения. Они должны соответствовать глобальным временным ограничениям (см. поля Временные окна, принадлежащие одному и тому же повторяющемуся полю, должны быть непересекающимися, т.е. ни одно временное окно не может перекрываться или быть смежным с другим, и они должны располагаться в хронологическом порядке. |
unloading_policy | В отношении транспортного средства применяются правила разгрузки. |
load_limits | Грузоподъёмность транспортного средства (например, вес, объём, количество поддонов). Ключи в карте — это идентификаторы типа груза, соответствующие ключам поля |
cost_per_hour | Стоимость транспортного средства: все расходы суммируются и должны быть выражены в тех же единицах, что и Cost per hour of the vehicle route. This cost is applied to the total time taken by the route, and includes travel time, waiting time, and visit time. Using |
cost_per_traveled_hour | Стоимость за час в пути по маршруту транспортного средства. Эта стоимость применяется только к времени, затраченному на поездку по маршруту (т.е. указанному в |
cost_per_kilometer | Cost per kilometer of the vehicle route. This cost is applied to the distance reported in the |
fixed_cost | Фиксированная стоимость применяется, если данное транспортное средство используется для перевозки груза. |
used_if_route_is_empty | Это поле применяется только к транспортным средствам, маршрут которых не обслуживает грузы. Оно указывает, следует ли в этом случае считать транспортное средство подержанным. Если значение true, транспортное средство следует из начальной точки в конечную, даже если оно не обслуживает никаких грузов, а также учитываются затраты времени и расстояния, возникающие в результате его перемещения из начальной точки в конечную. Otherwise, it doesn't travel from its start to its end location, and no |
route_duration_limit | Limit applied to the total duration of the vehicle's route. In a given |
travel_duration_limit | Ограничение, применяемое к длительности движения транспортного средства по маршруту. В заданном |
route_distance_limit | Ограничение применяется к общей дистанции маршрута транспортного средства. В данном |
extra_visit_duration_for_visit_type | Specifies a map from visit_types strings to durations. The duration is time in addition to Если запрос на посещение имеет несколько типов, для каждого типа на карте будет добавлена длительность. |
break_rule | Описывает график перерывов, который будет применяться для данного транспортного средства. Если поле пусто, перерывы для данного транспортного средства не будут запланированы. |
label | Specifies a label for this vehicle. This label is reported in the response as the |
ignore | If true, If a shipment is performed by an ignored vehicle in If a shipment is performed by an ignored vehicle in |
travel_duration_multiple | Specifies a multiplicative factor that can be used to increase or decrease travel times of this vehicle. For example, setting this to 2.0 means that this vehicle is slower and has travel times that are twice what they are for standard vehicles. This multiple does not affect visit durations. It does affect cost if ВНИМАНИЕ: Время в пути будет округлено до ближайшей секунды после применения этого множителя, но до выполнения любых числовых операций, поэтому небольшое множитель может привести к потере точности. See also |
DurationLimit
A limit defining a maximum duration of the route of a vehicle. It can be either hard or soft.
When a soft limit field is defined, both the soft max threshold and its associated cost must be defined together.
| Поля | |
|---|---|
max_duration | A hard limit constraining the duration to be at most max_duration. |
soft_max_duration | A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost. This cost adds up to other costs defined in the model, with the same unit. If defined, |
quadratic_soft_max_duration | A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost, quadratic in the duration. This cost adds up to other costs defined in the model, with the same unit. If defined, |
cost_per_hour_after_soft_max | Cost per hour incurred if the The cost must be nonnegative. |
cost_per_square_hour_after_quadratic_soft_max | Cost per square hour incurred if the The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows: The cost must be nonnegative. |
LoadLimit
Defines a load limit applying to a vehicle, eg "this truck may only carry up to 3500 kg". See load_limits .
| Поля | |
|---|---|
soft_max_load | A soft limit of the load. See |
cost_per_unit_above_soft_max | If the load ever exceeds |
start_load_interval | Допустимый интервал загрузки транспортного средства в начале маршрута. |
end_load_interval | Допустимый интервал загрузки транспортного средства в конце маршрута. |
max_load | Максимально допустимая величина нагрузки. |
cost_per_kilometer | Стоимость перемещения одной единицы груза на расстояние одного километра для данного транспортного средства. Это можно использовать в качестве показателя расхода топлива: если груз — это вес (в ньютонах), то нагрузка*километр имеет размерность энергии. Экспериментальный вариант: более подробную информацию см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request . |
cost_per_traveled_hour | Стоимость проезда с единицей груза в течение одного часа для данного транспортного средства. Экспериментальный вариант: более подробную информацию см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request . |
Интервал
Интервал допустимых величин нагрузки.
| Поля | |
|---|---|
min | Минимально допустимая нагрузка. Должна быть ≥ 0. Если указаны оба значения, |
max | Максимально допустимая нагрузка. Должна быть ≥ 0. Если значение не указано, максимальная нагрузка не ограничивается этим сообщением. Если указаны оба значения, |
LoadCost
Стоимость перемещения одной единицы груза за время Transition . Для данного груза стоимость складывается из двух частей:
- min(load,
load_threshold) *cost_per_unit_below_threshold - max(0, load -
load_threshold) *cost_per_unit_above_threshold
При такой стоимости решения предпочитают сначала удовлетворять высокие требования или, что то же самое, реагировать на них в последнюю очередь. Например, если у транспортного средства есть
load_limit {
key: "weight"
value {
cost_per_kilometer {
load_threshold: 15
cost_per_unit_below_threshold: 2.0
cost_per_unit_above_threshold: 10.0
}
}
}
и его маршрут - начало, самовывоз, самовывоз, доставка, доставка, конец с переходами:
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
тогда стоимость, понесенная этим LoadCost составляет (cost_below * load_below * miles + cost_above * load_above * kms)
- переход 0: 0.0
- переход 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- переход 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- переход 4: 0.0
Таким образом, LoadCost по маршруту составляет 120,0.
Однако, если маршрут имеет вид «начало, самовывоз, доставка, самовывоз, доставка, конец» с переходами:
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 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 .
| Поля | |
|---|---|
load_threshold | Amount of load above which the cost of moving a unit of load changes from cost_per_unit_below_threshold to cost_per_unit_above_threshold. Must be >= 0. |
cost_per_unit_below_threshold | Стоимость перемещения единицы груза для каждой единицы от 0 до порогового значения. Должна быть конечным значением и >= 0. |
cost_per_unit_above_threshold | Cost of moving a unit of load, for each unit above threshold. In the special case threshold = 0, this is a fixed cost per unit. Must be a finite value, and >= 0. |
TravelMode
Виды транспорта, которые могут использоваться транспортными средствами.
Они должны быть подмножеством режимов перемещения API маршрутов платформы Google Карт, см.: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Примечание: WALKING маршруты находятся в стадии бета-тестирования и иногда могут отсутствовать чёткие тротуары или пешеходные дорожки. Это предупреждение необходимо отображать для всех пешеходных маршрутов, отображаемых в приложении.
| Перечисления | |
|---|---|
TRAVEL_MODE_UNSPECIFIED | Неуказанный режим движения, эквивалентный DRIVING . |
DRIVING | Способ передвижения, соответствующий направлению движения (автомобиль, ...). |
WALKING | Режим передвижения, соответствующий пешеходным маршрутам. |
Политика разгрузки
Правила разгрузки транспортного средства. Применяются только к грузам, предполагающим как самовывоз, так и доставку.
Other shipments are free to occur anywhere on the route independent of unloading_policy .
| Перечисления | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED | Политика разгрузки не определена; поставки должны осуществляться только после соответствующего забора груза. |
LAST_IN_FIRST_OUT | Доставка должна осуществляться в порядке, обратном порядку получения. |
FIRST_IN_FIRST_OUT | Доставка должна осуществляться в том же порядке, что и самовывоз. |
VehicleFullness
VehicleFullness is a metric which computes how full a vehicle is. Each VehicleFullness field is between 0 and 1, computed as the ratio between a capped metric field (eg AggregatedMetrics.travel_distance_meters ) and its related vehicle limit (eg Vehicle.route_distance_limit ), if it exists. Otherwise the fullness ratio stays unset. If the limit is 0, the field is set to 1. Note: when a route is subject to traffic infeasibilities, some raw fullness ratios might exceed 1.0, eg the vehicle might exceed its distance limit. In these cases, we cap the fullness values at 1.0.
| Поля | |
|---|---|
max_fullness | Maximum of all other fields in this message. |
distance | The ratio between |
travel_duration | The ratio between [AggregatedMetrics.travel_duration_seconds][] and |
active_duration | The ratio between [AggregatedMetrics.total_duration_seconds][] and |
max_load | The maximum ratio among all types of [AggregatedMetrics.max_load][] and their respective |
active_span | The ratio (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) for a given vehicle. If the denominator is not present, it uses ( |
Путевая точка
Инкапсулирует путевую точку. Путевые точки отмечают места прибытия и отправления запросов VisitRequest, а также начальное и конечное места транспортных средств.
| Поля | |
|---|---|
side_of_road | Необязательно. Указывает, что местоположение этой путевой точки должно быть приоритетным для остановки транспортного средства на определённой стороне дороги. При установке этого значения маршрут будет проходить через эту точку, чтобы транспортное средство могло остановиться на той стороне дороги, к которой она смещена относительно центра дороги. Эта опция не работает в режиме движения «ПЕШКОМ». |
vehicle_stopover | Indicates that the waypoint is meant for vehicles to stop at, where the intention is to either pick up or drop off. This option works only for the 'DRIVING' travel mode, and when the 'location_type' is 'location'. Экспериментальный: поведение или существование этого поля может измениться в будущем. |
Объединенное поле location_type . Различные способы представления местоположения. location_type может быть только одним из следующих: | |
location | Точка, указанная с использованием географических координат, включая необязательный заголовок. |
place_id | Идентификатор точки интереса (POI), связанный с путевой точкой. При использовании идентификатора места для указания места прибытия или отправления в запросе VisitRequest используйте идентификатор, достаточно точный для определения координат LatLng для навигации к этому месту. Например, идентификатор здания подойдёт, но идентификатор дороги использовать не рекомендуется. |