Отправляет 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
Если этот тайм-аут установлен, сервер возвращает ответ до истечения периода тайм-аута или достижения крайнего срока сервера для синхронных запросов, в зависимости от того, что наступит раньше.
Для асинхронных запросов сервер сгенерирует решение (если возможно) до истечения времени ожидания.
Длительность в секундах, содержащая до девяти дробных цифр и оканчивающаяся на « 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 . Его можно использовать, когда индексы груза или транспортных средств в запросе изменились с момента создания решения, возможно, потому, что грузы или транспортные средства были удалены из запроса или добавлены в него.
Если это правда, метки в следующих категориях должны появляться не более одного раза в своей категории:
Если vehicleLabel во внедренном решении не соответствует запрошенному транспортному средству, соответствующий маршрут удаляется из решения вместе с его посещениями. Если shipmentLabel во внедренном решении не соответствует запросу на отгрузку, соответствующее посещение удаляется из решения. Если SkippedShipment.label во внедренном решении не соответствует запросу на отправку, SkippedShipment удаляется из решения.
Удаление посещений маршрута или целых маршрутов из внедренного решения может повлиять на подразумеваемые ограничения, что может привести к изменению решения, ошибкам проверки или невыполнимости.
ПРИМЕЧАНИЕ. Вызывающий объект должен гарантировать, что каждый Vehicle.label (соответственно Shipment.label ) уникально идентифицирует объект транспортного средства (соответственно отгрузку), используемый в двух соответствующих запросах: прошлый запрос, который создал OptimizeToursResponse используемый во внедренном решении, и текущий запрос. запрос, включающий введенный раствор. Описанных выше проверок уникальности недостаточно, чтобы гарантировать выполнение этого требования.
Если этот параметр установлен, то срок выполнения запроса (см. https://grpc.io/blog/deadlines ) может составлять до 60 минут. В противном случае максимальный срок составляет всего 30 минут. Обратите внимание, что долгоживущие запросы имеют значительно больший (но все же небольшой) риск прерывания.
useGeodesicDistances
boolean
Если это правда, расстояния путешествия будут рассчитываться с использованием геодезических расстояний вместо расстояний 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-01-11 UTC."],[[["The Route Optimization API minimizes the total cost of routes by assigning `ShipmentRoute`s to `Vehicle`s."],["The API takes an `OptimizeToursRequest` with a `ShipmentModel` and returns an `OptimizeToursResponse` with `ShipmentRoute`s."],["The `ShipmentModel` defines the `Shipment`s to be transported, the `Vehicle`s available, and the cost components."],["The API considers various factors, including traffic, time windows, and vehicle capacities, to optimize the routes."],["Authorization is required using OAuth scope `https://www.googleapis.com/auth/cloud-platform` and IAM permission `routeoptimization.locations.use`."]]],["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"]]