Интерпретируйте ответ

Разработчики Европейской экономической зоны (ЕЭЗ)

Route Optimization API возвращает маршруты для транспортных средств в соответствующем запросе. Отправления назначаются транспортным средствам или могут быть пропущены в зависимости от свойств запроса.

Сообщение OptimizeToursResponse ( REST , gRPC ) имеет два основных свойства верхнего уровня:

  • routes[] — это маршруты для каждого транспортного средства с назначенными ему грузами. Каждый Route содержит метрики, отражающие свойства этого индивидуального маршрута.
  • metrics — это агрегированные метрики для всего ответа, по всем транспортным средствам и планам маршрутов. Метрики верхнего уровня содержат те же свойства, что и метрики по маршруту, со значениями, агрегированными по всем маршрутам.

Некоторые свойства не всегда могут быть заполнены в зависимости от результатов оптимизации:

  1. skippedShipments[] перечисляет перевозки, которые не выполняются ни одним транспортным средством. Перевозка может быть пропущена, если она не может быть выполнена в рамках указанных ограничений или если стоимость выполнения перевозки превышает стоимость штрафа. Например, если забор или доставка груза имеет очень узкий timeWindow то транспортному средству может быть невыгодно или невыгодно совершить визит в течение требуемого временного интервала.
  2. validationErrors[] указывает ошибки, которые делают запрос недействительным или невозможным для решения, когда solvingMode запроса установлен на VALIDATE_ONLY . В обычном режиме DEFAULT_SOLVE ошибки проверки будут отображаться в сообщении об ошибке вместо тела ответа. Обратите внимание, что режим решения VALIDATE_ONLY может сообщать о нескольких ошибках одновременно, что полезно для быстрой отладки запросов.

Свойства маршрута

Каждая запись routes[] представляет собой сообщение ShipmentRoute ( REST , gRPC ). Каждый ShipmentRoute представляет собой назначение маршрута для конкретного транспортного средства из запроса. Важные свойства ShipmentRoute , связанные с соответствующим ему Vehicle включают:

  • vehicleIndex — это индекс Vehicle в соответствующем запросе, начинающийся с нуля. Ответы REST пропускают это свойство, если значение равно нулю.
  • vehicleStartTime — время, когда транспортное средство должно начать свой маршрут.
  • vehicleEndTime — ожидаемое время завершения маршрута транспортного средства.

В ответе routes будут выглядеть так:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

Каждый ShipmentRoute включает упорядоченный список visits , которые совершит транспортное средство. Каждый Visit ( REST , gRPC ) представляет собой VisitRequest ( REST , gRPC ) из соответствующего запроса. Важные свойства Visit включают:

  • shipmentIndex — это индекс отправления, отсчитываемый от нуля, к которому относится данное посещение в соответствующем запросе.
  • isPickup имеет значение true, когда посещение представляет собой самовывоз, и false, когда посещение представляет собой доставку. Ответы REST пропускают это свойство, когда значение равно false.
  • visitRequestIndex — это индекс VisitRequest от нуля из Shipment.pickups или Shipment.deliveries в соответствующем запросе, который представляет Visit . Ответы REST пропускают это свойство, если значение равно нулю.
  • startTime — ожидаемое время начала визита.
  • loadDemands сопоставляет тип загрузки с объемом загрузки, требуемым для завершения Visit . Объемы загрузки отрицательны для визитов доставки, что означает, что груз снимается с транспортного средства.

Пример Visit выглядит так:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

Каждый ShipmentRoute включает упорядоченный список transitions , которые представляют собой поездки между visits для данного транспортного средства. Важные свойства сообщения Transition ( REST , gRPC ) включают:

  • startTime — это время, в которое транспортное средство начнет выполнять переход.
  • travelDuration — это время, в течение которого транспортное средство должно проехать, чтобы завершить переход.
  • travelDistanceMeters — расстояние в метрах, которое транспортному средству необходимо проехать, чтобы завершить переход.
  • trafficInfoUnavailable указывает, доступны ли данные о трафике для перехода.
  • waitDuration представляет собой время простоя, которое транспортное средство проводит в ожидании, прежде чем сможет начать свой следующий Visit . Это может быть вызвано start_time следующего Visit .
  • totalDuration — общая продолжительность перехода, включая время в пути, ожидания, перерыва и задержки.
  • vehicleLoads сопоставляет тип груза с объемом груза, перевозимого транспортным средством во время этого перехода.

Пример Transition выглядит так:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

Для получения дополнительной информации о связи между vists и transitions см. разделы Pickup and Delivery Stop Order Optimization и ShipmentRoute reference documentation ( REST , gRPC ). Для получения дополнительной информации о свойствах routePolyline и routeToken сообщения Transition см. разделы Transition Polylines и Route Tokens .

Свойства метрик

Сообщение Metrics ( REST , gRPC ) суммирует все решение. Некоторые важные свойства Metrics включают:

  • totalCost — это общая стоимость, понесенная при завершении маршрутов. Подробнее о стоимости читайте в разделе Параметры модели стоимости .
  • usedVehicleCount — общее количество транспортных средств, используемых в решении. Транспортные средства могут иметь пустые маршруты, когда оптимизатор определяет, что их использование не нужно.
  • skippedMandatoryShipmentCount — это количество пропущенных поставок, которые являются «обязательными». Обязательная поставка не определяет penaltyCost , которая взимается, если поставка пропущена. Обязательные поставки все равно можно пропустить, если их выполнение нецелесообразно при указанных ограничениях. Подробнее о расходах читайте в разделе Параметры модели затрат .

Дополнительные метрики сообщаются как сообщения AggregatedMetrics ( REST , gRPC ). Тип сообщения AggregatedMetrics используется для свойства Metrics.aggregatedRouteMetrics и для свойства ShipmentRoute.metrics Metrics.aggregatedRouteMetrics содержит метрики, агрегированные по всем ShipmentRoute в OptimizeToursResponse . Каждое свойство ShipmentRoute.metrics содержит метрики для этого конкретного ShipmentRoute .

Важные свойства AggregatedMetrics включают в себя:

  • performedShipmentCount — количество перевозок, выполненных транспортными средствами по всему маршруту.
  • travelDuration — это общее время, которое транспортные средства проводят в пути, выполняя свои маршруты.
  • waitDuration — это общее время ожидания транспортных средств при завершении своих маршрутов.
  • delayDuration — общее время задержки для транспортных средств. Обычно равно нулю, если в запросе не используются TransitionAttributes .
  • breakDuration — общее время, которое транспортные средства проводят в перерывах при выполнении своих маршрутов.
  • visitDuration — это общее время, которое транспортные средства тратят на выполнение визитов при завершении своих маршрутов. Это фактически сумма всех значений VisitRequest.duration для VisitRequest s, соответствующих Visit s, назначенным соответствующему транспортному средству.
  • totalDuration — общая продолжительность, необходимая для завершения маршрутов транспортных средств.
  • travelDistanceMeters — общее расстояние, пройденное транспортными средствами по маршрутам.
  • maxLoads сопоставляет типы нагрузки с максимальным объемом груза, перевозимого транспортными средствами в любой точке маршрута.

Пример сообщения Metrics выглядит так:

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

Полный пример

Полный пример ответа на запрос от Construct a Request выглядит так:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}