Method: projects.locations.optimizeTours
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Отправляет 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/*/locations/*}:optimizeTours
URL-адрес использует синтаксис транскодирования gRPC .
Параметры пути
Параметры |
---|
parent | string Необходимый. Целевой проект или место для звонка. Формат: * projects/{project-id} * projects/{project-id}/locations/{location-id} Если местоположение не указано, регион будет выбран автоматически. |
Тело запроса
Тело запроса содержит данные следующей структуры:
JSON-представление |
---|
{
"timeout": string,
"model": {
object (ShipmentModel )
},
"solvingMode": enum (SolvingMode ),
"searchMode": enum (SearchMode ),
"injectedFirstSolutionRoutes": [
{
object (ShipmentRoute )
}
],
"injectedSolutionConstraint": {
object (InjectedSolutionConstraint )
},
"refreshDetailsRoutes": [
{
object (ShipmentRoute )
}
],
"interpretInjectedSolutionsUsingLabels": boolean,
"considerRoadTraffic": boolean,
"populatePolylines": boolean,
"populateTransitionPolylines": boolean,
"allowLargeDeadlineDespiteInterruptionRisk": boolean,
"useGeodesicDistances": boolean,
"label": string,
"geodesicMetersPerSecond": number,
"maxValidationErrors": integer
} |
Поля |
---|
timeout | string ( Duration format) Если этот тайм-аут установлен, сервер возвращает ответ до истечения периода тайм-аута или достижения крайнего срока сервера для синхронных запросов, в зависимости от того, что наступит раньше. Для асинхронных запросов сервер сгенерирует решение (если возможно) до истечения времени ожидания. Длительность в секундах, содержащая до девяти дробных цифр и оканчивающаяся на « s ». Пример: "3.5s" . |
model | object ( ShipmentModel ) Модель отгрузки, которую нужно решить. |
solvingMode | enum ( SolvingMode ) По умолчанию режим решения DEFAULT_SOLVE (0). |
searchMode | enum ( SearchMode ) Режим поиска, используемый для решения запроса. |
injectedFirstSolutionRoutes[] | object ( ShipmentRoute ) Помогите алгоритму оптимизации найти первое решение, похожее на предыдущее. Модель ограничена при построении первого решения. Любые перевозки, не осуществляемые по маршруту, неявно пропускаются в первом решении, но могут выполняться в последующих решениях. Решение должно удовлетворять некоторым основным предположениям достоверности: - для всех маршрутов
vehicleIndex должен находиться в диапазоне и не дублироваться. - для всех посещений значения
shipmentIndex и visitRequestIndex должны находиться в допустимом диапазоне. - Отгрузка может быть указана только на одном маршруте.
- прием отправления самовывоз-доставка должен быть осуществлен до доставки.
- Может быть реализовано не более одного варианта самовывоза или варианта доставки отправления.
- для всех маршрутов время увеличивается (т. е.
vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime ). - Отгрузка может осуществляться только на разрешенном к перевозке транспортном средстве. Транспортное средство разрешено, если
Shipment.allowed_vehicle_indices пусто или его vehicleIndex включен в Shipment.allowed_vehicle_indices .
Если введенное решение невозможно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность. |
injectedSolutionConstraint | object ( InjectedSolutionConstraint ) Ограничьте алгоритм оптимизации поиском окончательного решения, похожего на предыдущее решение. Например, это можно использовать для заморозки частей маршрутов, которые уже завершены или которые должны быть завершены, но не должны быть изменены. Если введенное решение невозможно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность. |
refreshDetailsRoutes[] | object ( ShipmentRoute ) Если поле не пусто, данные маршруты будут обновлены без изменения базовой последовательности посещений или времени в пути: будут обновлены только другие сведения. Это не решает модель. Начиная с 2020/11 года, это заполняет только полилинии непустых маршрутов и требует, чтобы populatePolylines имело значение true. Поля routePolyline переданных маршрутов могут не соответствовать transitions маршрутов. Это поле нельзя использовать вместе с injectedFirstSolutionRoutes или injectedSolutionConstraint . Shipment.ignore и Vehicle.ignore не влияют на поведение. Полилинии по-прежнему заполняются между всеми посещениями на всех непустых маршрутах независимо от того, игнорируются ли соответствующие перевозки или транспортные средства. |
interpretInjectedSolutionsUsingLabels | boolean Если это правда: Эта интерпретация применяется к полям injectedFirstSolutionRoutes , injectedSolutionConstraint и refreshDetailsRoutes . Его можно использовать, когда индексы отгрузки или транспортного средства в запросе изменились с момента создания решения, возможно, потому, что отгрузки или транспортные средства были удалены из запроса или добавлены в него. Если это правда, метки в следующих категориях должны появляться не более одного раза в своей категории: Если vehicleLabel во внедренном решении не соответствует запрошенному транспортному средству, соответствующий маршрут удаляется из решения вместе с его посещениями. Если shipmentLabel во внедренном решении не соответствует запросу на отгрузку, соответствующее посещение удаляется из решения. Если SkippedShipment.label во внедренном решении не соответствует запросу на отправку, SkippedShipment удаляется из решения. Удаление посещений маршрута или целых маршрутов из внедренного решения может повлиять на подразумеваемые ограничения, что может привести к изменению решения, ошибкам проверки или неосуществимости. ПРИМЕЧАНИЕ. Вызывающий объект должен гарантировать, что каждый Vehicle.label (соответственно Shipment.label ) уникально идентифицирует объект транспортного средства (соответственно отгрузку), используемый в двух соответствующих запросах: прошлый запрос, который создал OptimizeToursResponse используемый во внедренном решении, и текущий запрос. запрос, включающий введенный раствор. Описанных выше проверок уникальности недостаточно, чтобы гарантировать выполнение этого требования. |
considerRoadTraffic | boolean Учитывайте оценку трафика при вычислении полей ShipmentRoute Transition.travel_duration , Visit.start_time и vehicleEndTime ; при настройке поля ShipmentRoute.has_traffic_infeasibilities и при расчете поля OptimizeToursResponse.total_cost . |
populatePolylines | boolean Если это правда, полилинии будут заполнены в ответе ShipmentRoute s. |
populateTransitionPolylines | boolean Если это правда, полилинии и токены маршрута будут заполнены в ответе ShipmentRoute.transitions . |
allowLargeDeadlineDespiteInterruptionRisk | boolean Если этот параметр установлен, то срок выполнения запроса может составлять до 60 минут (см. https://grpc.io/blog/deadlines ). В противном случае максимальный срок составляет всего 30 минут. Обратите внимание, что долгоживущие запросы имеют значительно больший (но все же небольшой) риск прерывания. |
useGeodesicDistances | boolean Если это правда, расстояния путешествия будут рассчитываться с использованием геодезических расстояний вместо расстояний Google Maps, а время в пути будет рассчитываться с использованием геодезических расстояний со скоростью, определенной geodesicMetersPerSecond . |
label | string Метка, которая может использоваться для идентификации этого запроса, указана в OptimizeToursResponse.request_label . |
geodesicMetersPerSecond | number Если useGeodesicDistances имеет значение true, это поле должно быть установлено и определяет скорость, применяемую для расчета времени в пути. Его значение должно быть не менее 1,0 метра/секунду. |
maxValidationErrors | integer Усекает количество возвращаемых ошибок проверки. Эти ошибки обычно прикрепляются к полезным данным ошибки INVALID_ARGUMENT в виде сведений об ошибке BadRequest ( https://cloud.google.com/apis/design/errors#error_details) , за исключением случаев, когда solveMode=VALIDATE_ONLY: см. поле OptimizeToursResponse.validation_errors . По умолчанию это значение равно 100 и ограничено 10 000. |
Тело ответа
В случае успеха тело ответа содержит экземпляр OptimizeToursResponse
.
Области авторизации
Требуется следующая область действия OAuth:
-
https://www.googleapis.com/auth/cloud-platform
IAM-разрешения
Требуется следующее разрешение IAM для parent
ресурса:
-
routeoptimization.locations.use
Дополнительную информацию см. в документации IAM .
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-08-29 UTC.
[[["Прост для понимания","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-08-29 UTC."],[[["\u003cp\u003eThis API optimizes delivery routes by assigning shipments to vehicles, aiming to minimize the overall cost defined within the \u003ccode\u003eShipmentModel\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e includes a \u003ccode\u003eShipmentModel\u003c/code\u003e (defining shipments and vehicles) and returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e containing \u003ccode\u003eShipmentRoute\u003c/code\u003es (the vehicle routes with assigned shipments).\u003c/p\u003e\n"],["\u003cp\u003eThe API supports specifying parameters such as \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003esolvingMode\u003c/code\u003e, \u003ccode\u003esearchMode\u003c/code\u003e, and multiple fields for injecting and refreshing existing solutions, as well as considering road traffic and geodesic distances.\u003c/p\u003e\n"],["\u003cp\u003eThe HTTP request to use this API is a POST request to \u003ccode\u003ehttps://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours\u003c/code\u003e which will require the parent parameter for the target project.\u003c/p\u003e\n"],["\u003cp\u003eTo use the API, it requires the OAuth scope \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e and the IAM permission \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e on the \u003ccode\u003eparent\u003c/code\u003e resource.\u003c/p\u003e\n"]]],[],null,[]]