Интерпретация ответа Route Optimization API… с собаками

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

Примечание для рабочей версии

Для простоты в этом руководстве используются REST и JSON. Однако для рабочей среды рекомендуется использовать gRPC и клиентские библиотеки, чтобы повысить производительность. Подробнее о клиентских библиотеках Route Optimization API…

После того как вы отправите запрос, как описано в разделе Как отправить первый запрос, оптимизатор вернет ответ OptimizeToursResponse. Этот ответ представляет собой план маршрута, которому должен следовать ваш водитель. В этом руководстве рассказывается, как его читать.

Сводка по плану маршрута

В сценарии с передержкой собак оптимизатор назначает бернского зенненхунда и чихуахуа в ваш фургон и пропускает немецкую овчарку. Маршрут водителя:

  • Начать смену в 7:55 в детском саду.
  • Забрать бернского зенненхунда у башни Койт в 8:20.
  • Забрать чихуахуа в парке Саут-Сансет-Плейграунд в 8:58.
  • Вернуться в детский сад в 9:24 и подождать до 9:30, когда откроется окно приема детей.
  • Привезите бернского зенненхунда в 9:30.
  • Отвезти чихуахуа к 9:35.
  • Завершение смены в 9:40.

Стоимость маршрута составляет 147,22 доллара США, включая штраф в размере 100 долларов США за пропуск немецкой овчарки.

Чтобы проверить результаты, сравните свой ответ с полным примером ответа. Ваши результаты могут немного отличаться, поскольку время в пути и расстояние зависят от текущих данных о дорогах.

Полный пример ответа

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "detour": "0s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "detour": "2600s",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "startTime": "2024-02-13T17:30:00Z",
          "detour": "2297s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2024-02-13T17:35:00Z",
          "detour": "656s",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ],
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        {
          "travelDuration": "1252s",
          "travelDistanceMeters": 7860,
          "waitDuration": "356s",
          "totalDuration": "1608s",
          "startTime": "2024-02-13T17:03:12Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:35:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:40:00Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "4740s",
        "waitDuration": "356s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "6296s",
        "travelDistanceMeters": 31531,
        "performedShipmentPenaltyCostSum": 2000
      },
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22,
      "vehicleFullness": {
        "maxFullness": 0.3497777777777778,
        "activeSpan": 0.3497777777777778
      }
    }
  ],
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "4740s",
      "waitDuration": "356s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "6296s",
      "travelDistanceMeters": 31531,
      "performedShipmentPenaltyCostSum": 2000
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T15:55:04Z",
    "latestVehicleEndTime": "2024-02-13T17:40:00Z",
    "totalCost": 147.22,
    "costs": {
      "model.vehicles.cost_per_hour": 47.22,
      "model.shipments.penalty_cost": 100
    }
  }
}
    

Структура ответа

OptimizeToursResponse имеет объект ShipmentRoute с типом сообщения о посещениях и объект Metrics с агрегированнымиRouteMetrics и totalCost.

OptimizeToursResponse состоит из двух основных компонентов:

  • routes – план маршрута для каждого транспортного средства в вашем автопарке, включая порядок и время для каждого получения и доставки. У вас один фургон, поэтому есть один план маршрута.
  • metrics – сводка по всему маршруту, включая общую стоимость, продолжительность и расстояние.

Поскольку оптимизатор пропускает немецкую овчарку, ответ также включает skippedShipments.

В следующих разделах показано, где в ответе найти каждую деталь сводки плана маршрута.

какое транспортное средство обслуживает тот или иной маршрут;

Оптимизатор генерирует план маршрута (массив routes), который соответствует порядку vehicles в вашем запросе.

Поле vehicleIndex идентифицирует каждое транспортное средство на основе его позиции, отсчитываемой от нуля. Для вашего фургона это 0. Поля vehicleStartTime и vehicleEndTime указывают водителю, когда начинать и заканчивать смену.

Route Optimization API возвращает временные метки в формате UTC, отмеченные суффиксом Z, независимо от смещения в запросе. Чтобы узнать время в Сан-Франциско, вычтите 8 часов. Для фургона смена длится с 7:55 до 9:40, как показано в следующем примере кода.

{
"routes": [
    {
    // "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
    "vehicleStartTime": "2024-02-13T15:55:04Z",
    "vehicleEndTime": "2024-02-13T17:40:00Z",
    ...
    }
  ]
  ...
}

В каком порядке нужно забирать и высаживать пассажиров?

Внутри каждого маршрута массив visits содержит все пункты получения и доставки для назначенного транспортного средства в хронологическом порядке.

Значение shipmentIndex каждого посещения – это позиция доставки в запросе, начиная с нуля: 0 – бернский зенненхунд, а 1 – чихуахуа. В поле shipmentLabel указывается ярлык, который вы задали для каждой доставки.

Чтобы отличить посадку от высадки (или доставку от получения), проверьте поля visitType или isPickup:

  • visitType – явным образом определяет действие посещения.
    • Самовывоз: visitType = "PICKUP_SHIPMENT"
    • Доставка: visitType = "DELIVER_SHIPMENT"
  • isPickup – вспомогательное поле с логическим значением.
    • Самовывоз: isPickup = true
    • Доставка: isPickup = false (пропущено в JSON)

Чтобы определить точную последовательность событий и ожидаемое время прибытия в каждое место, прочитайте массив visits по порядку. В таблице ниже показано, как действия в плане маршрута зависят от порядка и значений полей shipmentIndex, isPickup или visitType и startTime.

Серия На сумму shipmentIndex Значение isPickup или visitType startTime значение (UTC) Действие
Первое посещение 0 (в JSON не указывается) True или PICKUP_SHIPMENT. 2024-02-13T16:20:00Z Забрать бернского зенненхунда в 8:20.
Второе посещение 1 True или PICKUP_SHIPMENT. 2024-02-13T16:58:12Z Забрать чихуахуа в 8:58.
Третье посещение 0 (в JSON не указывается) False (опущено) или DELIVER_SHIPMENT 2024-02-13T17:30:00Z Отвези бернского зенненхунда в детский сад для собак к 9:30.
Четвертое посещение 1 False (опущено) или DELIVER_SHIPMENT 2024-02-13T17:35:00Z Отвези чихуахуа в детский сад для собак в 9:35.

В приведенном ниже фрагменте кода показано, как ответ обеспечивает эту последовательность:

{
  "routes": [
    {
      "visits": [
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:30:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:35:00Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ]
    }
  ]
}

У каждого посещения также есть visitRequestIndex – индекс (начиная с нуля) варианта получения или доставки, выбранного оптимизатором для отправления. У каждой собаки в этом сценарии есть только один вариант посадки и один вариант высадки, поэтому visitRequestIndex всегда равен 0, и в ответе он опускается.

Что происходит между посещениями?

В каждом маршруте массив transitions содержит сведения о поездках между посещениями. Хотя visits и transitions – это разные списки, они чередуются во времени следующим образом:

  1. transitions[0] (поездка от начала до первого посещения)
  2. visits[0] (первое посещение)
  3. transitions[1] (стимулирование повторных посещений)
  4. visits[1] (второе посещение)
  5. ...
  6. visits[N-1] (последнее посещение, где N – общее количество посещений)
  7. transitions[N] (поездка от места последнего посещения до конечной точки)

Вы можете отслеживать хронологию маршрута, просматривая поле startTime в обоих массивах. startTime перехода – это время, когда водитель начинает движение, а startTime посещения – время, когда водитель начинает посадку или высадку.

Для каждого перехода указывается ожидаемое время в пути и расстояние между местоположениями. В таблице ниже показано, как поля transitions и visits сопоставляются с хронологическими действиями на маршруте для сценария с детским садом для собак.

Серия Название поля startTime значение (UTC) Сведения Действие
Первый переход transitions[0] 2024-02-13T15:55:04Z travelDuration: 1496s
travelDistanceMeters: 7082
Проехать 7 км за 25 минут от детского сада, чтобы забрать бернского зенненхунда. Смена начинается в 7:55.
Первое посещение visits[0] 2024-02-13T16:20:00Z shipmentIndex: 0 (опущено в JSON)
isPickup: True
Забрать бернского зенненхунда в 8:20. Визит займет 5 минут.
Второй переход transitions[1] 2024-02-13T16:25:00Z travelDuration: 1992s
travelDistanceMeters: 16589
Проехать 17 км за 33 минуты от башни Койт, чтобы забрать чихуахуа, начиная с 8:25.
Второе посещение visits[1] 2024-02-13T16:58:12Z shipmentIndex: 1
isPickup: True
Забрать чихуахуа. Начало в 8:58. Продолжительность – 5 минут.
Третий переход transitions[2] 2024-02-13T17:03:12Z travelDuration: 1252 с
travelDistanceMeters: 7860
waitDuration: 356 с
В 9:03 отправляется обратно в детский сад от South Sunset Playground. Проезжает 8 км за 21 минуту. Прибывает в 9:24 и ждет 6 минут, пока не откроется окно высадки.
Третье посещение visits[2] 2024-02-13T17:30:00Z shipmentIndex: 0 (опущено в JSON)
isPickup: False (опущено в JSON)
Отвезите бернского зенненхунда в центр дневного ухода за собаками к 9:30. Это займет 5 минут.
Четвертый переход transitions[3] 2024-02-13T17:35:00Z travelDuration: 0s
travelDistanceMeters: 0 (опущено в JSON)
Не начинайте движение. Готово. Напоминание "Отвезти чихуахуа в детский сад для собак" установлено на 9:35.
Четвертое посещение visits[3] 2024-02-13T17:35:00Z shipmentIndex: 1
isPickup: False (опущено в JSON)
Отвезите чихуахуа в детский сад для собак. Прибытие в 9:35. Посещение займет 5 минут.
Пятый переход transitions[4] 2024-02-13T17:40:00Z travelDuration: 0s
travelDistanceMeters: 0 (опущено в JSON)
Не начинайте движение. Водитель заканчивает смену в 9:40.

В приведенном ниже примере кода показано, как ответ предоставляет эту последовательность для transitions[0] и transitions[1]:

{
  "routes": [
    {
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        ...
      ]
    }
  ]
}

Сколько стоит проезд по маршруту?

В ответе можно посмотреть несколько полей в зависимости от того, нужна ли вам стоимость для конкретного транспортного средства или общая стоимость для всего автопарка.

В таблице ниже перечислены все способы найти информацию о стоимости в ответе.

Родитель Параметр Область действия Описание
ShipmentRoute routeCosts Для каждого маршрута Разбивка по конкретным компонентам стоимости (например, стоимость за час) для этого конкретного маршрута.
routeTotalCost Для каждого маршрута Общая стоимость, рассчитанная для этого маршрута.
Metrics totalCost Всего (все маршруты) Общая стоимость всех маршрутов в решении.
costs Всего (все маршруты) Разбивка агрегированных компонентов стоимости по всем маршрутам в решении.

Расходы, указанные в полях routeCosts и costs, отражают ограничения расходов, которые вы задаете в запросе. Дополнительную информацию можно найти в статье Основные понятия модели затрат.

В этом сценарии с передержкой собак, поскольку у вас есть пропущенная доставка, стоимость маршрута и общая стоимость различаются. Стоимость маршрута включает только расходы, связанные с этим конкретным маршрутом (заработная плата водителя), в то время как общая совокупная стоимость также включает штраф за пропущенную доставку. В приведенном ниже примере кода показано, где найти эти значения в ответе.

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      ...
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22
    }
  ],
  "metrics": {
    "totalCost": 147.22,
    "costs": {
      "model.shipments.penalty_cost": 100,
      "model.vehicles.cost_per_hour": 47.22
    },
    ...
  }
}

Согласно плану маршрута, водитель управляет фургоном с 7:55 до 9:40, то есть примерно 1 час и 45 минут (6296 секунд). При заданной вами ставке 27 долларов США в час стоимость маршрута составляет 47, 22 доллара США. Поскольку оптимизатор пропустил доставку немецкой овчарки, он добавляет штрафную стоимость в размере 100 долларов США, в результате чего общая совокупная стоимость составляет 147,22 доллара США.

Почему отправка была пропущена?

Оптимизатор перечисляет все невыполненные отправки в массиве skippedShipments. Причина пропуска зависит от того, задали ли вы penaltyCost:

  • Обязательные перевозки (без penaltyCost). Оптимизатор никогда не пропускает их только потому, что они дорогие. Пропуск возможен, только если отправление не удается включить ни в один маршрут, например из-за того, что его временное окно конфликтует с другими отправлениями.
  • Необязательные перевозки (с penaltyCost). Оптимизатор может пропускать их, если стоимость их выполнения превышает штраф. Вы можете задать разные штрафы, чтобы отдать приоритет одним перевозкам перед другими.

В этом сценарии время, когда нужно забрать немецкую овчарку, совпадает со временем, когда нужно забрать бернского зенненхунда. Башня Койт и Лэндс-Энд находятся в 25 минутах езды друг от друга, поэтому водитель не сможет забрать обоих пассажиров в течение 20 минут. Оптимизатор должен пропустить один из них. Поскольку у немецкой овчарки штраф меньше (100 долларов США против 1000 долларов США за обычного клиента), оптимизатор пропускает ее и налагает штраф в размере 100 долларов США.

В приведенном ниже фрагменте кода показан объект skippedShipments в ответе:

{
  ...
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  ...
}

Объект skippedShipments в ответе содержит следующие поля:

  • index – индекс отправления в запросе, отсчитываемый от нуля (2 для третьего отправления).
  • label – ярлык, указанный в запросе ("немецкая овчарка").
  • penaltyCost – штраф, указанный в запросе. API добавляет его к общей стоимости.

Чтобы оптимизатор не пропускал отправку, ослабьте ограничение, вызывающее конфликт. Например, попросите владельца немецкой овчарки расширить временной интервал для передачи собаки, а затем обновите timeWindows для этой передачи в своем запросе.

Поля ответа в примере

В таблице ниже описаны все поля ответа, возвращаемые в OptimizeToursResponse в примере сценария. Для понимания плана маршрута не обязательно использовать все поля, но вы можете проанализировать их, чтобы определить, как настроить OptimizeToursRequest в соответствии с потребностями вашего бизнеса. Подробнее о жизненном цикле плана маршрута…

Вы можете отфильтровать содержимое по родительскому элементу или с помощью текстового поиска.

Родитель Параметр Тип ресурса Описание
OptimizeToursResponse routes Массив объектов (ShipmentRoute) Он содержит список маршрутов, рассчитанных для каждого транспортного средства (по одному на транспортное средство). Для этого сценария детского сада для собак он содержит подробный план маршрута для вашего единственного фургона.
metrics Объект (Metrics) Содержит общие показатели для решения, агрегированные по всем маршрутам. Для этого сценария с детским садом для собак это сводка затрат и продолжительности работы за день.
skippedShipments Массив объектов (SkippedShipment) Содержит список отправлений, которые были пропущены в решении. В этом случае третья собака (немецкая овчарка) пропускается.
ShipmentRoute vehicleStartTime Временная метка Это время, когда транспортное средство начинает движение по маршруту. В нашем сценарии с детским садом для собак водитель начинает движение в 7:55.
vehicleEndTime Временная метка Время, когда транспортное средство завершает маршрут. В нашем примере с детским садом для собак водитель заканчивает поездку в 9:40.
visits Массив объектов (Visit) Это упорядоченный список пунктов получения и доставки на маршруте. Для этого сценария передержки собак это последовательность забора и высадки двух собак.
transitions Массив объектов (Transition) Это упорядоченный список расстояний, времени в пути и времени ожидания между посещениями. Для этого сценария с детским садом для собак здесь подробно описаны расстояние и время в пути между башней Койт, парком South Sunset Playground и детским садом.
metrics Объект (AggregatedMetrics) Это показатели, относящиеся к этому единственному маршруту. Для этого сценария с детским садом для собак это статистика для этого конкретного фургона. Эти показатели рассчитываются на основе расходов, указанных в запросе. Подробную информацию можно найти в статье Основные понятия модели затрат.
routeCosts Объект (карта) Это разбивка конкретных расходов для этого маршрута. Для этого сценария с детским садом для собак это показывает стоимость, рассчитанную на основе заработной платы водителя в размере 27 долларов в час.
routeTotalCost Число Это общая стоимость для этого конкретного маршрута. Для этого сценария с детским садом для собак общая стоимость маршрута этого фургона составляет 47.22.
vehicleFullness Объект (VehicleFullness) Это разбивка, показывающая, насколько близко транспортное средство подходит к своим эксплуатационным ограничениям, таким как время, расстояние и нагрузка. В сценарии с детским садом для собак водителя ограничивает только время начала и окончания смены, поэтому оптимизатор вычисляет vehicleFullness как долю фактической продолжительности маршрута и максимального времени, доступного для смены водителя.
Visit shipmentIndex Целое число Это индекс отправления в исходном запросе, отсчитываемый от нуля. В нашем примере с детским садом для собак 0 соответствует бернскому зенненхунду, а 1 – чихуахуа.
isPickup Логическое значение Это поле имеет значение true, если посещение является самовывозом. В нашем примере с передержкой собак это значение будет true, когда собаку забирают, и false (или отсутствует), когда собаку оставляют.
startTime Временная метка Это расчетное время начала посещения. В нашем сценарии с передержкой собак это момент, когда водитель стучит в дверь.
detour длительность; Это дополнительное время, которое оптимизатор добавляет к пути этой конкретной поставки. Объезд – это разница между фактическим планом маршрута и идеальной прямой поездкой, если у водителя нет других поставок или задач.

В нашем сценарии с детским садом для собак у первого посещения (чтобы забрать бернского зенненхунда) отклонение равно 0, потому что водитель едет прямо из детского сада к этому месту. Для чихуахуа отклонение от маршрута составляет 43 минуты, потому что водитель сначала забирает бернского зенненхунда (и тратит 5 минут на погрузку).
shipmentLabel Строка Это этикетка из запроса на каждую отправку. В нашем примере с собаками ярлыками будут "чихуахуа" и "бернский зенненхунд".
visitType Строка (перечисление) Указывает тип посещения: PICKUP_SHIPMENT для самовывоза или DELIVER_SHIPMENT для доставки. В нашем случае это PICKUP_SHIPMENT или DELIVER_SHIPMENT.
Transition travelDuration длительность; Это время, потраченное на перемещение между посещениями. Например, в этом сценарии с детским садом для собак водитель тратит примерно 25 минут на поездку от детского сада до башни Койт, чтобы забрать бернского зенненхунда.
travelDistanceMeters Целое число Расстояние в метрах, пройденное во время этого перехода. Например, в этом сценарии с детским садом для собак водитель проезжает 7 километров от детского сада до башни Койт, чтобы забрать бернского зенненхунда.
waitDuration длительность; Это время ожидания перед следующей посадкой или доставкой. В нашем примере с детским садом для собак это значение составляет 6 минут (356 секунд) для третьего перехода, поскольку водитель прибывает в детский сад до открытия окна высадки в 9:30. Для других переходов это значение равно 0.
totalDuration длительность; Это общая продолжительность перехода, включая вождение и ожидание. Например, водитель тратит 25 минут (25 минут в пути и 0 минут ожидания) на первый переход и 27 минут (21 минута в пути и 6 минут ожидания) на третий переход обратно в детский сад.
startTime Временная метка Время начала поездки. Оно совпадает со временем завершения предыдущего посещения (или, для первого перехода, со временем начала работы транспортного средства). В сценарии с детским садом для собак первый переход начинается в 7:55, когда водитель уезжает из детского сада, а второй переход начинается в 8:25, когда водитель уезжает из башни Койт.
Metrics aggregatedRouteMetrics Объект (AggregatedMetrics) Это сумма показателей по всем маршрутам. Для этого сценария с детским садом для собак это общие показатели для вашего фургона.
usedVehicleCount Целое число Это количество транспортных средств, используемых в решении. Для этого сценария с детским садом для собак вы используете только один фургон.
earliestVehicleStartTime Временная метка Это самое раннее время начала среди всех транспортных средств. В нашем сценарии с детским садом для собак маршрут фургона начинается в 7:55.
latestVehicleEndTime Временная метка Это самое позднее время окончания среди всех транспортных средств. В нашем примере с детским садом для собак маршрут фургона заканчивается в 9:40.
totalCost Число Это общая стоимость решения. Для этого сценария с детским садом для собак весь план маршрута стоит 147.22 за день (включая заработную плату водителя 47.22 и штраф за пропущенную доставку 100).
costs Объект (карта) Это разбивка общей стоимости по категориям. Для этого сценария с детским садом для собак оптимизатор рассчитал стоимость маршрута на основе стоимости за час и стоимости штрафа за пропущенную немецкую овчарку.
AggregatedMetrics performedShipmentCount Целое число Количество отправлений, для которых успешно построен маршрут. В этом сценарии с детским садом для собак водитель перевозит двух собак.
travelDuration длительность; Это общее время, проведенное в пути. В этом сценарии с детским садом для собак водитель едет 79 минут.
waitDuration длительность; Это общее время ожидания. В нашем примере водитель ждет открытия центра 6 минут (356 секунд).
delayDuration длительность; Это дополнительное время, которое вы определяете с помощью атрибутов перехода, например время, зарезервированное для парковки. В нашем примере с передержкой собак вы не определили в запросе атрибуты перехода, поэтому это значение равно нулю.
breakDuration длительность; Это общее время, потраченное на перерывы. В этом сценарии с передержкой собак перерывов нет.
visitDuration длительность; Это общее время, потраченное на оказание услуг во время посещений. В нашем примере с передержкой собак это 20 минут (5 минут на посещение, умноженные на 4 посещения).
totalDuration длительность; Это сумма всех компонентов продолжительности. Для этого сценария с передержкой собак общая продолжительность составляет 105 минут (6296 секунд).
travelDistanceMeters Целое число Это общее расстояние в метрах. В этом сценарии с детским садом для собак водитель проезжает общее расстояние 31, 5 км.
performedShipmentPenaltyCostSum Двойной трекер Это сумма штрафов за все выполненные перевозки. В нашем случае это 2000, потому что водитель забрал бернского зенненхунда и чихуахуа (штраф за каждую собаку – 1000).
VehicleFullness maxFullness Число Это самый высокий коэффициент использования среди всех полей VehicleFullness. Для нашего сценария с детским садом для собак это значение равно 0,35, поскольку водитель управляет фургоном только 105 минут из всей утренней смены, которая в запросе определена как 5 часов.
activeSpan Число Это отношение общей продолжительности смены водителя к часам работы плана маршрута. Меньшее число означает, что водитель проводит меньше времени за рулем в течение рабочего дня. Для этого сценария детского сада для собак это 0,35, потому что водитель управляет фургоном в течение 105 минут во время 5-часовой смены.
SkippedShipment index Целое число Это индекс отправления в исходном запросе, отсчитываемый от нуля. В этом сценарии 2 представляет немецкую овчарку.
label Строка Это ярлык, который вы указали для отправления в запросе.
penaltyCost Число Это штраф, который вы платите, если оптимизатор пропускает эту отправку. Оно соответствует значению penaltyCost, указанному в запросе.