Отправляет запрос OptimizeToursRequest , содержащий ShipmentModel , и возвращает ответ OptimizeToursResponse , содержащий ShipmentRoute , которые представляют собой набор маршрутов, которые должны быть выполнены транспортными средствами для минимизации общей стоимости.
Модель ShipmentModel состоит в основном из объектов Shipment , которые необходимо выполнить, и объектов Vehicle , которые можно использовать для перевозки этих Shipment . Объекты ShipmentRoute назначают объекты Shipment объектам Vehicle . Более конкретно, они назначают каждому транспортному средству серию объектов Visit , где Visit соответствует VisitRequest , который представляет собой забор или доставку объекта Shipment .
Цель состоит в том, чтобы предоставить назначение ShipmentRoute для Vehicle , которое минимизирует общую стоимость, где стоимость состоит из многих компонентов, определенных в ShipmentModel .
HTTP-запрос
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours
Если этот тайм-аут установлен, сервер возвращает ответ до истечения периода тайм-аута или достижения крайнего срока сервера для синхронных запросов, в зависимости от того, что наступит раньше.
Для асинхронных запросов сервер сгенерирует решение (если это возможно) до истечения времени ожидания.
Длительность в секундах, содержащая до девяти знаков после запятой, заканчивается на « s ». Пример: "3.5s" .
Направьте алгоритм оптимизации на поиск первого решения, похожего на предыдущее решение.
Модель ограничена при построении первого решения. Любые перевозки, не выполненные по маршруту, неявно пропускаются в первом решении, но могут быть выполнены в последующих решениях.
Решение должно удовлетворять некоторым основным предположениям о достоверности:
для всех маршрутов vehicleIndex должен находиться в допустимом диапазоне и не дублироваться.
для всех посещений shipmentIndex и visitRequestIndex должны находиться в допустимом диапазоне.
одна отправка может быть указана только на одном маршруте.
забор груза, подлежащего доставке самовывозом, должен быть осуществлен до доставки.
допускается не более одного варианта самовывоза или доставки отправления.
для всех маршрутов время увеличивается (т.е. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime ).
Если введенное решение нецелесообразно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность.
Ограничьте алгоритм оптимизации поиском окончательного решения, аналогичного предыдущему. Например, это можно использовать для фиксации участков маршрутов, которые уже выполнены или должны быть выполнены, но не должны изменяться.
Если введенное решение нецелесообразно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность.
Если поле не пустое, заданные маршруты будут обновлены без изменения базовой последовательности посещений или времени в пути: будут обновлены только другие данные. Это не решит модель.
Начиная с 2020/11 года при этом заполняются только полилинии непустых маршрутов и требуется, чтобы populatePolylines имело значение true.
Поля routePolyline переданных маршрутов могут не соответствовать transitions маршрутов.
Это поле нельзя использовать вместе с injectedFirstSolutionRoutes или injectedSolutionConstraint .
Shipment.ignore и Vehicle.ignore не влияют на поведение. Ломаные линии по-прежнему заполняются между всеми посещениями на всех непустых маршрутах, независимо от того, игнорируются ли соответствующие грузы или транспортные средства.
Эта интерпретация применяется к полям injectedFirstSolutionRoutes , injectedSolutionConstraint и refreshDetailsRoutes . Её можно использовать, если индексы отправлений или транспортных средств в запросе изменились с момента создания решения, например, из-за удаления или добавления отправлений или транспортных средств из запроса.
Если значение true, метки в следующих категориях должны появляться не более одного раза в своей категории:
Если метка vehicleLabel во введённом решении не соответствует запрошенному транспортному средству, соответствующий маршрут удаляется из решения вместе с его посещениями. Если shipmentLabel во введённом решении не соответствует запрошенной отправке, соответствующее посещение удаляется из решения. Если метка SkippedShipment.label во введённом решении не соответствует запрошенной отправке, то SkippedShipment удаляется из решения.
Удаление посещений маршрутов или целых маршрутов из введенного решения может повлиять на подразумеваемые ограничения, что может привести к изменению решения, ошибкам проверки или невозможности его реализации.
ПРИМЕЧАНИЕ: Вызывающий объект должен гарантировать, что каждый Vehicle.label (соответственно Shipment.label ) однозначно идентифицирует сущность транспортного средства (соответственно, груз), используемую в двух соответствующих запросах: предыдущем запросе, который сгенерировал OptimizeToursResponse используемый во внедренном решении, и текущем запросе, включающем внедренное решение. Описанных выше проверок уникальности недостаточно для обеспечения выполнения этого требования.
Если true, полилинии будут заполнены в ответе ShipmentRoute s.
populateTransitionPolylines
boolean
Если значение равно true, полилинии и маркеры маршрута будут заполнены в ответе ShipmentRoute.transitions .
allowLargeDeadlineDespiteInterruptionRisk
boolean
Если этот параметр установлен, запрос может иметь срок выполнения (см. https://grpc.io/blog/deadlines ) до 60 минут. В противном случае максимальный срок составляет всего 30 минут. Обратите внимание, что для длительных запросов риск прерывания значительно выше (хотя и невелик).
useGeodesicDistances
boolean
Если значение равно true, расстояния проезда будут рассчитываться с использованием геодезических расстояний вместо расстояний Google Maps, а время проезда будет рассчитываться с использованием геодезических расстояний со скоростью, определяемой параметром geodesicMetersPerSecond .
Если useGeodesicDistances имеет значение true, это поле должно быть задано и определять скорость, используемую для расчета времени прохождения. Его значение должно быть не менее 1,0 метра в секунду.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-11-10 UTC."],[],["This content details the `OptimizeTours` API, which optimizes routes for shipments using vehicles. The core action involves sending a `POST` request to `https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours`, specifying a `ShipmentModel` within the request body. This model defines shipments, vehicles, and cost parameters. The API returns an `OptimizeToursResponse` that details `ShipmentRoute`s, assigning visits to each vehicle to minimize costs. The request body allows for parameters like `timeout`, `solvingMode`, and `injectedSolutionConstraint` to further fine-tune the route optimization process.\n"]]