Для случаев, когда мы хотим посчитать, сколько заработал курьер было добавлено новое поле payout. В нем можно задать формулы для расчета выплат курьеру.
Пример
{
...
"vehicles": [
{
"id": "1",
"max_runs": 1,
"cost": "150 * duration_h + 10 * distance_km + 100 * stops + 3000",
" payout" : "100 * stops + 3000",
...
},
...
]
}
Выплата курьеру составляет фиксированные 3000, а также 100 за каждую остановку на маршруте.
Если бы мы задали формулу для выплат в поле cost, это бы привело к неоптимальному решению. А использование поля payout никак не влияет на конечное решение.
В метрики, входящие в ответ на запрос планирования, добавили новое поле total_served_orders — общее число обслуженных заказов. Поле выводится как в метриках всего решения, так и по отдельным заездам. В число обслуженных заказов входят локации с типами delivery и pickup. Обслуживания pickup-delivery и pickup-drop_off пар считаются одним заказом.
Добавили в описание заказов поле can_be_merged со значением по умолчанию true. При указании значения false у данного поля заказ не будет объединяться с другими в мультизаказ и делить shared-время обслуживания.
На карте маршрута и в разделе Заказы появились столбцы «Часовой пояс заказа», а время, которое относится к заказу, теперь отображается в той тайм-зоне, в которой находится адрес доставки.
Кроме того были добавлены еще два столбца, время посещения и время, когда заказ был доставлен (либо отменен).
Раньше мы не могли видеть данные по удаленным курьерам, в отчете «Качество работы курьера». Теперь в блоке фильтров появился переключатель, который позволяет таких курьеров показать. А сами удаленные курьеры для удобства помечаются статусом «удален» около названия.
Чтобы облегчить поиск на странице спланированного решения, мы добавили строку поиска по Свойствам заказа и автомобиля, наименованию получателя заказа и комментариям к заказу.
К примеру, вы хотите найти заказ свойством «Тяжелый». Начните печатать «Тяжелый» в строке поиска, и заказ (или заказы) который содержит это свойство можно будет сразу выбрать и перейти на него.
Появился новый тип перерыва для водителей – он учитывает только время движения, игнорируя время ожидания и обслуживания. Условие начала перерыва задается через свойство driving_time_range.
Пример задания перерыва
"template_rest_schedules": [
{
"id": "template",
"breaks": [
{
"driving_time_range": "2:00 - 3:00",
"rest_duration_s": 1800
}
]
}
]
В данном примере перерыв нужно начать не раньше, чем через 2 часа и не позже чем через 3 часа движения
Добавилась возможность разрешать машинам начинать заезд не на том, складе, на котором завершился предыдущий заезд. Для этого нужно указать у машины опцию can_change_depot_between_runs. Расстояние между складами и время на перемещение между ними будет учтено в метриках (но не будет отражено, например, на маршруте в mvrp-map, там машина просто телепортируется).
Пример. В запросе у машины в starting_depot_id содержится один склад с идентификатором 0, а в ending_depot_id один склад с идентификатором 1. Без использования опции can_change_depot_between_runs машина в принципе не смогла бы совершить два заезда, поскольку не существует склада, который мог бы разделить их, то есть был бы одновременно и начальным и конечным. Однако опция указана, поэтому машина совершает оба заезда, переезжая со склада на склад между ними.
На этом сегодня все, по всем вопросам пишите на routing-support@yandex-team.ru