Базовая структура (ShipmentModel, Shipment и Vehicle)

ShipmentModel has one `shipments` object with a `Shipment` message type and one `vehicles` object with a `Vehicle` message type.

Цель API оптимизации маршрутов — планирование маршрутов для парка транспортных средств, посещающих заданный набор мест. Объект OptimizeToursRequest описывает свойства этих транспортных средств и мест и является основной структурой тела запроса каждой конечной точки.

Базовая структура объекта OptimizeToursRequest выглядит следующим образом:

  • Поле model содержит сообщение ShipmentModel , включающее два ключевых поля:
    • Одно поле shipments , содержащее одно или несколько сообщений Shipment .
    • Одно поле vehicles , содержащее одно или несколько сообщений Vehicle .

В этом документе описаны следующие типы сообщений:

  • 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 определяет структуру свойств груза, который может быть доставлен, или услуги, которая может быть оказана по маршруту.

A real life shipment equals one `Shipment` message, which is contained within a `shipments` object

Как показано на диаграмме:

  • Сообщение 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 определяет структуру свойств транспортного средства, способного осуществлять перевозку груза по маршруту.

A real life vehicle equals one `Vehicle` message, which is contained within a `vehicles` object

Как показано на диаграмме:

  • Сообщение 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"
  }
}