Как мы разработали алгоритм, который консолидирует заявки и оптимизирует логистические маршруты
Задача
Разработать алгоритм, который консолидирует заявки и оптимизирует логистические маршруты
Для маршрутизации нескольких заявок логисту необходимо учесть множество факторов: от параметров груза и временных окон до особенностей требований каждого клиента. Но даже если человеку удается держать в голове всю эту информацию, это не означает, что процесс нельзя упростить и сделать более эффективным с помощью алгоритма. То есть, логист учитывает ограничения, но физически он не может перебрать все возможные варианты, что усложняет масштабирование процесса. В таком случае нужен автоматизированный алгоритм. К нам обратилась логистическая компания, которая хотела улучшить внутренний процесс составления заявок на собственной платформе
Решение
Определение целевой функции, учет ограничений, создание и тестирование MVP
1 этап. Целевая функция и ограничения
Необходимо было не просто автоматизировать работу логистов при консолидации грузов, но и сделать это наиболее оптимальным образом, чтобы суммарная стоимость доставки была минимальной. Для этого было нужно разработать целевую функцию — функцию стоимости перевозки. Основная сложность расчета стоимости заключалась в отсутствии единой методологии рыночного ценообразования, из-за чего мы решили тестировать различные подходы до тех пор, пока у нас не получилось достаточно точно воспроизвести рыночные цены. По итогам нескольких итераций, выделив особенности для сложных и кольцевых маршрутов, мы создали модель ценообразования, работающую с незначительными отклонениями для всех регионов России.
Основные ограничения
Ограничения для алгоритма разбили на три группы:
- Ограничения по весогабаритным характеристикам (ВГХ).
- Временные ограничения: временные окна для забора и доставки груза, производственный календарь, ограничения ТК РФ на рабочее время водителя.
- Особенности конкретных точек или клиентов, например, невозможность принять 20т фуру из-за размера парковки у грузоотправителя.
2 этап. Создание MVP и тестирование
Создав алгоритм, мы начали тестирование, в котором алгоритм и логисты маршрутизировали одинаковые заявки.
Действительно, алгоритм всегда собирал маршруты с общей стоимостью ниже, чем у логистов, и чем больше было заявок на вход, тем больше была разница в экономическом эффекте между алгоритмом и человеком. На этом этапе мы собрали обратную связь и доработали ограничения, которые не были учтены на предыдущем этапе.
Как выбрать оптимальную логистическую схему
Алгоритм, разработанный на этапе MVP, подходил для крупно- и среднетоннажных перевозок, но более 60% заявок клиента составляли мелкотоннажные грузы, консолидируемые через склады.
Оставался вопрос: как определить, что поедет на склад, а что напрямую грузополучателю? Очевидное решение, которое сразу приходит в голову: для каждой заявки определить ближайший склад в радиусе n км, вес не более 1,5т, учет сроков доставки. Но данный подход не учитывает, что для принятия решения о консолидации логист смотрит не на заявку, а на её окружение, и оценивает «кучность» грузов.
То есть, чтобы выбрать, поедет ли заявка на склад, логист в голове уже пробует построить маршрут из неё и нескольких других: где-то груз в 3 тонны выгодно отдать на склад, а где-то — 200 кг отдать в другую транспортную компанию.
Подобный подход мы реализовали в алгоритме: чтобы выбрать, какая логистическая схема выгоднее, мы строим предварительные маршруты, принимаем решение, по какой схеме везти дешевле, и потом уже строим в рамках каждой схемы конечные маршруты.
Итоговая связка алгоритмов
Итоговый алгоритм работает следующим образом:
1. Определяется оптимальная логистическая схема: определяется набор ограничений: сроки, максимальные ВГХ для приемки на склад. Строятся прогнозные маршруты через склады, определяется удельная стоимость доставки каждой заявки.
2. Сравнивается три цены: удельная через склад, напрямую отдельным транспортом, сборный груз транспортной компанией. На уровне каждой заявки выбирается самая дешевая логистическая схема. Заявки распределяются по соответствующим группам и конечные маршруты строятся в рамках каждой группы.
3. Отдельно для групп заявок напрямую и на склад строим маршруты: быстро находим субоптимальное решение. За отведенное время ищем лучшее решение метаэвристическим способом.
Но создание алгоритма — это ещё не всё. На его основе мы построили сервис, который затем встроили в платформу.
Этап 3. Разработка сервиса
При разработке сервиса консолидации было два основных требования:
1. Исходные данные по заявкам получаем из системы клиента.
2. Пользователь должен видеть все актуальные заявки и маршруты из них, а так же иметь возможность верифицировать или скорректировать маршрут.
В конечном виде система состоит из трех блоков: сам сервис консолидации с алгоритмами внутри, отдельный сервис ценообразования и сервис верификации маршрутов.
Результаты
Алгоритм, который определяет оптимальную логистическую схему и маршрутизирует заявки
Мы создали алгоритм, который определяет оптимальную логистическую схему и маршрутизирует заявки, а вокруг него — сервис, которым ежедневно пользуются логисты.
Экономический эффект отчетливо наблюдается при масштабировании системы: имея сотни заявок в день, логисты успевают найти основной потенциал консолидации по очевидным направлениям. Алгоритм же в среднем даёт на 15% больше экономии, чем при ручной консолидации, а созданный сервис делает все решения прозрачными и отслеживаемыми.
Такой эффект достигается за счет:
Построения маршрутов с минимальной ценой
В отличие от человека, для алгоритма нет критерия «прямой» или «красивый» маршрут. Есть только маршруты, которые выгоднее других.
Выбора оптимальной логистической схемы
Алгоритм выбирает способ доставки не на правилах и опыте логиста, а из множества вариантов выбирает самый выгодный на данный момент.
Передачи части заявок в «невыгодных» направлениях в транспортные компании
В зависимости от наличия заявок, в ряде направлений доставка «сложным» маршрутом может оказаться дороже, чем доставка через транспортную компанию. Перебирая возможные маршруты, алгоритм определяет, какие заявки выгоднее отдать в ТК.
В результате логистическая компания получила эффективный сервис с понятным интерфейсом, оптимизирующий целый ряд внутренних процессов и экономящий силы сотрудников.