Method: projects.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/*}: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 . - если для параметра
avoidUTurns установлено значение true, для соответствующих посещений должен быть установлен injectedSolutionLocationToken .
Если введенное решение невозможно, ошибка проверки не обязательно возвращается, вместо этого может быть возвращена ошибка, указывающая на невозможность. |
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 . |
populateTransitionPolylines | boolean Если это правда, полилинии будут заполнены в ответ ShipmentRoute.transitions . |
allowLargeDeadlineDespiteInterruptionRisk | boolean Если этот параметр установлен, то срок выполнения запроса (см. https://grpc.io/blog/deadlines ) может составлять до 60 минут. В противном случае максимальный срок составляет всего 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 sending an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e with a \u003ccode\u003eShipmentModel\u003c/code\u003e, and it returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e that includes \u003ccode\u003eShipmentRoute\u003c/code\u003es, which outline the routes for vehicles to minimize cost.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eShipmentModel\u003c/code\u003e includes \u003ccode\u003eShipment\u003c/code\u003es that require transport and \u003ccode\u003eVehicle\u003c/code\u003es available for use, with the goal being to assign \u003ccode\u003eShipmentRoute\u003c/code\u003es to \u003ccode\u003eVehicle\u003c/code\u003es efficiently to reduce overall cost.\u003c/p\u003e\n"],["\u003cp\u003eThe HTTP request uses a \u003ccode\u003ePOST\u003c/code\u003e method to the \u003ccode\u003ehttps://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours\u003c/code\u003e endpoint, utilizing gRPC Transcoding syntax, and requiring the \u003ccode\u003eparent\u003c/code\u003e parameter to specify the project or location.\u003c/p\u003e\n"],["\u003cp\u003eThe request body includes fields such as \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003emodel\u003c/code\u003e, \u003ccode\u003esolvingMode\u003c/code\u003e, and \u003ccode\u003esearchMode\u003c/code\u003e, allowing for customization of the optimization process, and other parameters related to route details, and injected solutions.\u003c/p\u003e\n"],["\u003cp\u003eThe API requires the \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e OAuth scope and the \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e IAM permission on the parent resource for authorization.\u003c/p\u003e\n"]]],[],null,[]]