Цель API оптимизации маршрутов — планирование маршрутов для парка транспортных средств, посещающих заданный набор мест. Объект OptimizeToursRequest описывает свойства этих транспортных средств и мест и является основной структурой тела запроса каждой конечной точки.
Базовая структура объекта OptimizeToursRequest выглядит следующим образом:
- Поле
modelсодержит сообщениеShipmentModel, включающее два ключевых поля:
В этом документе описаны следующие типы сообщений:
-
ShipmentModel: Содержит список отправлений, доступных транспортных средств и других объектов, описывающих их взаимосвязи. -
Shipment: описывает места, которые должен посетить автомобиль. Это могут быть как сами посылки для забора и доставки, так и места, где водитель оказывает услуги. -
Vehicle: описывает средства передвижения между пунктами отправки. Каждое транспортное средство соответствует реальному автомобилю или человеку, передвигающемуся пешком.
ShipmentModel
ShipmentModel содержит элементы задачи оптимизации маршрута. Она включает в себя набор перевозок, которые могут быть осуществлены различными транспортными средствами с учетом ограничений и минимизацией общей стоимости.
В таблице ниже описаны некоторые важные свойства объекта ShipmentModel :
| Характеристики | Описание |
|---|---|
shipments и vehicles | Обязательные объекты, содержащие подробную информацию об одной или нескольких партиях грузов и транспортных средствах . |
globalStartTime и globalEndTime | Указывает начало и конец временного интервала, в течение которого все транспортные средства должны завершить все отгрузки. Хотя эти параметры не являются обязательными, рекомендуется их указывать, поскольку оптимизатор работает наиболее эффективно при соблюдении временных ограничений. |
Полный список свойств объекта ShipmentModel см. в справочной документации.
Пример ShipmentModel
В этом примере у вас есть служба дневного ухода за собаками, и вы начинаете формировать свой запрос. Типы грузов и транспортных средств вы определите позже, но для начала хотите установить часы работы и почасовую стоимость услуг.
В этом примере значения свойства ShipmentModel в вашем запросе следующие:
| Свойство | Ценить | Описание |
|---|---|---|
globalStartTime | 2024-02-13T00:00:00.000Z | Дата и время начала рабочего дня. |
globalEndTime | 2024-02-14T06:00:00.000Z | Дата и время окончания рабочего дня. |
Ниже приведён пример кода сообщения ShipmentModel , включающего значения из примера сценария.
{ "model": { "shipments": [ ... ], "vehicles": [ ... ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }
Shipment
Тип сообщения Shipment определяет структуру свойств груза, который может быть доставлен, или услуги, которая может быть оказана по маршруту.
Как показано на диаграмме:
- Сообщение
Shipmentсодержит всю информацию о реальной доставке или услуге. - Все сообщения
Shipmentуказываются в полеshipments. - Поле
shipmentsсодержит одно или несколько сообщенийShipment.
Shipment сообщения требуется как минимум один объект, pickups или deliveries . Эти объекты описаны ниже:
-
pickupsопределяет место получения груза. -
deliveriesопределяет место доставки отправления. - Как
pickups, так иdeliveriesиспользуется сообщение типаVisitRequest, определяющее местоположение и другие детали.
В таблице ниже описаны различные сценарии, основанные на конфигурации pickups и deliveries в сообщении Shipment .
| Сценарий | Описание |
|---|---|
только pickups | Предполагается, что вы только забираете посылку . |
только deliveries | Предполагается, что вы предварительно загрузили груз или оказываете услугу . |
Как pickups так и deliveries | Заданное транспортное средство должно сначала осуществить погрузку, а затем доставку . Доставку может осуществлять только транспортное средство, которое осуществляло погрузку. |
Несколько pickups или deliveries | Если в описании груза указано несколько вариантов pickups или deliveries , оптимизатор выбирает один вариант получения и один вариант доставки , исходя из минимизации затрат и соблюдения ограничений. |
Полный список свойств в Shipment см. в справочной документации.
Пример Shipment
В этом примере у вас есть служба дневного ухода за собаками, где вы забираете собак из дома и доставляете их в свой центр. Вы хотите указать место забора двух собак и место доставки в ваш центр:
- Первый дом для собаки находится в Койт-Тауэр, Сан-Франциско. Координаты этого места: широта 37.8024 и долгота -122.4058.
- Вторая собака живёт в парке South Sunset Playground Park в Сан-Франциско. Её координаты: широта 37.7359 и долгота -122.5011.
- Ваш центр дневного ухода за собаками находится в парке Мишн Долорес, Сан-Франциско. Координаты этого места: широта 37.759773 и долгота -122.427063.
Ниже приведён пример кода сообщения Shipment , где объект shipments содержит два типа сообщений Shipment с указанием координат.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ ... ] } }
Vehicle
Тип сообщения Vehicle определяет структуру свойств транспортного средства, способного осуществлять перевозку груза по маршруту.
Как показано на диаграмме:
- Сообщение
Vehicleсодержит всю информацию о реальном транспортном средстве. - Все сообщения,
Vehicle, указываются в полеvehicles. - Поле
vehiclesсодержит несколько сообщенийVehicle.
В таблице ниже описаны некоторые важные характеристики Vehicle .
| Характеристики | Описание |
|---|---|
startLocation и endLocation | Начальное и конечное местоположение транспортных средств, входящих в состав окончательного оптимизированного маршрута. Если не указано иное, по умолчанию используются места погрузки и разгрузки первой и последней партий груза. |
costPerHour , costPerKilometer , costPerTraveledHour | Параметры стоимости, специфичные для конкретного транспортного средства. Рекомендуется включать в запрос API как минимум один параметр стоимости, чтобы API возвращал оптимизированный маршрут. Подробнее о стоимости см. в разделе «Ключевая концепция модели стоимости» . |
startTimeWindows и endTimeWindows | Определите временные периоды , в течение которых транспортное средство может работать на маршруте. Эти периоды должны укладываться во временные рамки globalStartTime и globalEndTime , заданные в ShipmentModel . Хотя это свойство не является обязательным, рекомендуется его включить, поскольку оптимизатор работает наиболее эффективно при соблюдении временных ограничений. |
Пример Vehicle
В этом примере у вас есть служба дневного ухода за собаками, и вы хотите определить местоположение вашего транспортного средства в начале и конце дня, а также количество израсходованного им топлива. Вам не нужно указывать часы работы транспортного средства, поскольку они совпадают с часами, которые вы определили в свойствах globalStartTime и globalEndTime в объекте ShipmentModel .
В данном примере значения свойства Vehicle в вашем запросе следующие:
| Свойство | Ценить | Описание |
|---|---|---|
startLocation | latitude : 37.759773, longitude : -122.427063 | Начальные координаты маршрута для вашего автомобиля. Они совпадают с местоположением вашего центра дневного ухода за собаками, который находится в парке Мишн Долорес, Сан-Франциско. |
endLocation | latitude : 37.759773, longitude : -122.427063 | Конечные координаты маршрута для вашего автомобиля. Они совпадают с местоположением вашего центра дневного ухода за собаками, который находится в парке Мишн Долорес, Сан-Франциско. |
costPerHour | 27 | Сколько вы платите водителю за управление автомобилем для вашего собачьего детского сада? Вы платите водителю 27 долларов в час. |
Ниже приведён пример кода сообщения для Vehicle , включающий значения из примера сценария.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
Полный список свойств объекта Vehicle см. в справочной документации.
Полный пример запроса
Приведенный ниже пример кода представляет собой полный пример запроса, объединяющий примеры ShipmentModel , Shipment и Vehicle показанные в этом документе.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }