Получение результата
При планировании через API пользователь запрашивает текущий статус или результат выполнения задачи с помощью метода /result/mvrp/{id}
. Ответ приходит в виде кода. Сервис дополнительно передает тело сообщения в формате JSON, подробнее см. в разделе со спецификацией.
Ожидаемое время выполнения запроса
Когда пользователь отправляет POST-запрос с помощью метода /add/mvrp/{id}
(см. раздел Добавление задачи), в ответе приходит сообщение о постановке задачи в очередь.
Ответ на POST-запрос
{
"id": "<ID задачи>",
"status": {
"estimate": <ориентировочное время решения задачи>,
"queued": <время, когда задача поставлена в очередь на решение>
},
"yt_operations": [],
"message": "Task queued"
}
Если во время решения задачи отправить GET-запрос /result/mvrp/{id}
, в ответе приходит сообщение о том, что задача решается.
Ответ на GET-запрос
{
"id": "<ID задачи>",
"status": {
"estimate": <ориентировочное время решения задачи>,
"queued": <время, когда задача поставлена в очередь на решение>,
"started": <время начала решения задачи>,
"matrix_downloaded": <время загрузки матрицы решения>
},
"yt_operations": [],
"message": "Task is running and available for polling",
"matrix_statistics": {
...
}
}
Дата и время отображаются в формате Timestamp.
В ответах на POST и GET-запросы приходит ориентировочное время решения задачи в параметре estimate
.
Если в задаче меньше 50 заказов, обычно она решается в течение одной минуты, см. Время обработки запроса.
При решении больших задач рекомендуем отправлять проверочный GET-запрос примерно через 30 секунд после отправки POST-запроса. Повторные GET-запросы можно отправлять ближе к ориентировочному времени решения задачи, не чаще одного раза в 10 секунд.
Описание ответа с кодом 200
Структура JSON
{
"id": {
// Уникальный ID задачи.
},
"status": {
// Объект, содержащий изменения статусов задачи. Ключи — статусы, значения — время в формате UNIX timestamp.
"matrix_downloaded": <value>,
"queued": <value>,
"started": <value>,
"calculated": <value>,
"completed": <value>
},
"yt_operations": [...],
"message": <value>,
// Текстовое сообщение о состоянии задачи. Может меняться, поэтому для получения информации о статусе задачи необходимо использовать код.
"matrix_statistics": {...},
"result": {
// Результат выполнения запроса.
"detailed_cost_metrics": [
// Детальные метрики стоимости маршрутов.
],
"dropped_locations": [
// Нераспределенные заказы.
],
"metrics": {
// Общие метрики решения.
},
"options": {...},
"routes": [
// Массив маршрутов.
{...},
{...},
{
"metrics": {
// Метрики отдельного маршрута.
},
"route": [
// Массив точек маршрута.
{...},
{...},
{
"arrival_time_s": <value>,
"departure_time_s": <value>,
"multi_order": <value>,
"node": {...},
"stop_sequence_number": <value>,
"transit_distance_m": <value>,
"transit_duration_s": <value>,
"violations": {...},
"waiting_duration_s": <value>
},
{...},
{...}
],
"run_number": <value>,
"shift": {...},
"vehicle_id": <value>
}
],
"solver_status": <value>,
"vehicles": [
// Список автомобилей или курьеров.
]
}
}
Статус решения задачи solver_status
может принимать следующие значения:
SOLVED
— задача полностью решается в рамках заданных ограничений;PARTIAL_SOLVED
— задача решена, но некоторые заказы остались нераспределенными;UNFEASIBLE
— невозможно найти решение, удовлетворяющее всем строгим ограничениям.
Статус задачи
Текущий статус задачи можно посмотреть в объекте status
. Пока задача решается, при запросе ответа возвращается ее статус и прогноз времени решения задачи estimate
в формате UNIX timestamp. Оценочное время решения задачи может меняться в процессе решения. Оценка верна примерно в 75% случаев (задачи решаются за 5-15 секунд до estimate
). Для некоторых задач фактическое время решения может быть больше, чем указано в estimate
(обычно, не более чем на 3 минуты).
Примечание
Время в поле status.estimate
зависит от количества обрабатываемых данных. Не отправляйте повторные запросы к сервису до истечения этого времени.
После решения задачи в ответе появляется параметр status.calculated
— время, когда задача была решена в формате UNIX timestamp. Также в ответе отражается информация по общим метрикам, маршрутам и последовательности исполнения маршрута.
Примечание
При обработке ответов для понимания статуса задачи анализируйте код ответа (200, 202 и т. д.), но не ключи в объекте status
и не тексты сообщений в объекте message
, так как они могут меняться.
Общие метрики полученного решения
Общие метрики полученного решения можно посмотреть в массиве metrics
объекта result
. В таблице представлены метрики, которые чаще всего используются для анализа решения:
Поле |
Описание |
|
Общий пробег в метрах. Если параметр |
|
Общая длительность поездок в секундах. |
|
Общее ожидание на маршруте в секундах. |
|
Общее количество выполненных заказов. |
|
Стоимость решения. См. раздел Алгоритм маршрутизации. |
|
Размер штрафов. См. раздел Информация о штрафах при маршрутизации. |
|
Стоимость решения, включая штрафы. См. раздел Алгоритм маршрутизации. |
|
Количество остановок транспортного средства — различных точек назначения в порядке их посещения по маршруту, исключая заезды на склад и в гараж. Например, в этом поле учитываются также остановки в точках с типом |
|
Количество транспортных средств, используемых в решении. |
Описание остальных метрик объекта result
вы найдете в спецификации.
Если какие-то заказы не могут быть доставлены, они перечисляются в массиве dropped_locations
объекта result
.
Маршрут
Запланированные маршруты можно посмотреть в массиве routes
объекта result
. Последовательность выполнения заказов указана в массиве route
.
Для каждой точки на маршруте можно посмотреть затраченное на поездку до точки время в поле transit_duration_s
и расстояние до точки transit_distance_m
.
Плановое время прибытия и отправления с каждого заказа можно посмотреть в полях arrival_time_s
и departure_time_s
соответственно. Фактическое время — в полях actual_arrival_time_s
и actual_departure_time_s
(используется для допланирования). Время отображается в формате количества секунд от начала суток планирования.
Если в решении есть мультизаказы, то у первого заказа параметр multi_order
равен false
, у последующих — true
.
Если после приезда на заказ возникло ожидание, его длительность содержится в поле waiting_duration_s
.
Визуализация результата
Вы можете посмотреть решение на карте mvrp-map.
Срок хранения данных
Данные по спланированным маршрутам хранятся на серверах Яндекса 1 год от даты решения задачи.
После окончания срока хранения данные могут быть удалены без возможности восстановления.