Присоединяйтесь к нам на следующем Дне сообщества разработчиков платформы Google Карт в Сан-Франциско в декабре. Чтобы принять участие, подайте заявку.
Отправляет запрос OptimizeToursRequest содержащий ShipmentModel , и возвращает запрос OptimizeToursResponse , содержащий объекты ShipmentRoute , представляющие собой набор маршрутов, которые должны быть выполнены транспортными средствами с целью минимизации общей стоимости.
Модель ShipmentModel состоит в основном из объектов Shipment , которые необходимо осуществить, и Vehicle , которые могут быть использованы для перевозки этих Shipment . Объекты ShipmentRoute назначают объекты ShipmentVehicle . Более конкретно, они назначают каждому транспортному средству серию Visit , где Visit соответствует VisitRequest , то есть получению или доставке объекта Shipment .
Цель состоит в том, чтобы обеспечить такое распределение ShipmentRoute ) между Vehicle ), которое минимизирует общую стоимость, где стоимость имеет множество компонентов, определенных в ShipmentModel .
HTTP-запрос
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours
Если этот тайм-аут установлен, сервер возвращает ответ до истечения периода ожидания или до достижения крайнего срока сервера для синхронных запросов, в зависимости от того, что наступит раньше.
Для асинхронных запросов сервер сгенерирует решение (если это возможно) до истечения времени ожидания.
Направьте алгоритм оптимизации на поиск первого решения, аналогичного предыдущему решению.
Модель ограничена на момент построения первого решения. Любые отгрузки, не выполненные по маршруту, неявно пропускаются в первом решении, но могут быть выполнены в последующих решениях.
Решение должно удовлетворять ряду основных предположений о его достоверности:
Для всех маршрутов vehicleIndex должен находиться в допустимом диапазоне и не должен дублироваться.
Для всех посещений shipmentIndex и visitRequestIndex должны находиться в заданном диапазоне.
Один груз может быть указан только на одном маршруте.
Забор груза, подлежащего доставке, должен быть осуществлен до доставки.
Допускается выполнение не более одного варианта забора или доставки груза.
Для всех маршрутов время увеличивается (т. е. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime ).
Если предложенное решение нецелесообразно, ошибка проверки не обязательно будет возвращена, вместо этого может быть возвращена ошибка, указывающая на нецелесообразность.
Ограничьте алгоритм оптимизации, чтобы найти окончательное решение, аналогичное предыдущему. Например, это может использоваться для замораживания участков маршрутов, которые уже завершены или которые должны быть завершены, но не должны быть изменены.
Если предложенное решение нецелесообразно, ошибка проверки не обязательно будет возвращена, вместо этого может быть возвращена ошибка, указывающая на нецелесообразность.
Если поле не пустое, указанные маршруты будут обновлены без изменения последовательности посещений или времени в пути: будут обновлены только другие детали. Это не решает задачу модели.
Начиная с ноября 2020 года, эта функция заполняет полилинии только непустых маршрутов и требует, чтобы populatePolylines был установлен в значение true.
Поля routePolyline переданных маршрутов могут не соответствовать transitions между маршрутами.
Это поле нельзя использовать вместе с injectedFirstSolutionRoutes или injectedSolutionConstraint .
Shipment.ignore и Vehicle.ignore не влияют на поведение. Полилинии остаются заполненными между всеми посещениями во всех непустых маршрутах, независимо от того, игнорируются ли соответствующие грузы или транспортные средства.
Данная интерпретация применяется к полям injectedFirstSolutionRoutes , injectedSolutionConstraint и refreshDetailsRoutes . Она может использоваться, если индексы отгрузок или транспортных средств в запросе изменились с момента создания решения, например, из-за удаления или добавления отгрузок или транспортных средств в запрос.
Если это так, то метки в следующих категориях должны встречаться в своей категории не более одного раза:
If a vehicleLabel in the injected solution does not correspond to a request vehicle, the corresponding route is removed from the solution along with its visits. If a shipmentLabel in the injected solution does not correspond to a request shipment, the corresponding visit is removed from the solution. If a SkippedShipment.label in the injected solution does not correspond to a request shipment, the SkippedShipment is removed from the solution.
Удаление отдельных посещений маршрутов или целых маршрутов из внедренного решения может повлиять на подразумеваемые ограничения, что может привести к изменению решения, ошибкам проверки или невозможности его реализации.
NOTE: The caller must ensure that each Vehicle.label (resp. Shipment.label ) uniquely identifies a vehicle (resp. shipment) entity used across the two relevant requests: the past request that produced the OptimizeToursResponse used in the injected solution and the current request that includes the injected solution. The uniqueness checks described above are not enough to guarantee this requirement.
Если это так, полилинии будут заполнены в ответ на запрос ShipmentRoute .
populateTransitionPolylines
boolean
Если значение истинно, полилинии и токены маршрута будут заполнены в ответе ShipmentRoute.transitions .
allowLargeDeadlineDespiteInterruptionRisk
boolean
Если этот параметр установлен, то запрос может иметь крайний срок (см. https://grpc.io/blog/deadlines ) до 60 минут. В противном случае максимальный срок составляет всего 30 минут. Обратите внимание, что длительные запросы сопряжены со значительно большим (но все еще небольшим) риском прерывания.
useGeodesicDistances
boolean
Если это так, то расстояния в пути будут вычисляться с использованием геодезических расстояний вместо расстояний Google Maps, а время в пути будет вычисляться с использованием геодезических расстояний со скоростью, определяемой параметром geodesicMetersPerSecond .
Если значение useGeodesicDistances равно true, это поле должно быть установлено и определять скорость, применяемую для расчета времени в пути. Его значение должно быть не менее 1,0 метра/секунду.
maxValidationErrors
integer
Усекает количество возвращаемых ошибок валидации. Эти ошибки обычно добавляются к полезной нагрузке ошибки INVALID_ARGUMENT в качестве подробной информации об ошибке BadRequest ( https://cloud.google.com/apis/design/errors#error_details) , если только solvingMode=VALIDATE_ONLY: см. поле OptimizeToursResponse.validation_errors . По умолчанию это значение равно 100, а максимальное — 10 000.
Ответный текст
В случае успеха тело ответа будет содержать экземпляр класса OptimizeToursResponse .
Области полномочий
Требуется следующая область действия OAuth:
https://www.googleapis.com/auth/cloud-platform
Разрешения IAM
Для работы с parent ресурсом требуются следующие разрешения IAM :
[[["Прост для понимания","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"]],["Последнее обновление: 2026-09-29 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"]]