Как мы решали задачу оптимизации доставки грузов с использованием численных методов на примере метода имитации отжига
В статье хотим поделиться своим опытом реализации алгоритма решения задачи маршрутизации на основе метода имитации отжига в Norbit CDS – умной системе управления доставкой.
Проанализировав материалы, можно обнаружить различные предлагаемые способы решения VRP-задач (Vehicle Routing Problem). Главная их цель – планирование маршрутов для транспортных средств оптимальным способом. Основными критериями, как всегда, остаются наикратчайший путь для транспортного средства и доставка услуг во все заданные точки. В рабочем месте логиста Norbit CDS задача не отличается.
Создавая свой алгоритм оптимизации построения маршрутов доставки, мы исходили из следующих входных данных: количество транспортных средств, число заявок для распределения с учетом их габаритов и окон желаемого времени доставки. Для реализации был выбран метод отжига.
Метод имитации отжига
Метод отжига является одним из наиболее эффективных методов случайного поиска оптимального решения для различных задач, состоящих в нахождении такого состояния
Алгоритм метода заключается в следующем.
Формируется начальное состояние
, , . -я итерация алгоритма:
; ; если
, , то , .
Реализация метода имитации отжига в Norbit CDS
Обозначения
Рассмотрев основные понятия метода, перейдем к реализации метода имитации отжига в системе Norbit CDS.
Для более комфортного обсуждения введем некоторые понятия.
DeliveryInfoMatrix – матрица M×M, содержащая информацию о дальности расположения точек заявок на доставку друг от друга.
Для формирования матрицы используется проект OSRM API, написанный на C++ c открытым исходным кодом и позволяющий строить наикратчайшие пути между точками на карте. Для наших нужд был использован Route Service, предоставляющий ответ в виде объекта Route, который содержит в себе расстояние пути в метрах и время в секундах для данного пути.
Стоит обратить внимание, что время указывается среднее, так как в OSRM API отсутствуют данные о прогнозах пробок. На рисунке 1 представлен наглядный вид формируемой матрицы. Для каждого пересечения указаны два значения – расстояние в метрах и необходимое время в секундах, чтобы добраться из одной точки доставки в другую.
Алгоритм
Входными параметрами реализованного алгоритма являются: список транспортных средств
Следующим шагом идет формирование начального состояния
При добавлении заявка проверяется – может ли она быть размещена в транспортном средстве. Учитываются следующие пункты: проходит ли по весу, превышает ли маршрут максимальное количество заявок
При формировании
Для каждого маршрута происходит подсчет параметра BeginDateTime – время, к которому водитель доставит первую заявку. Следом происходит подсчет приблизительного времени доставки для всех заявок в маршруте. После этого мы можем рассчитать критерии
Теперь рассмотрим алгоритм на
В состоянии x из каждого маршрута в случайном порядке выбирается и удаляется по одной заявке. Данная выборка перемешивается с ранее нераспределенными по маршрутам заявкам
Каждую из заявок пытаемся распределить по маршрутам. Заявка помещается в первый попавшийся маршрут, подходящий под условия – проходит по весу и количеству заявок в маршруте. Заявка помещается в маршрут исходя из расчетов из какой точки уже существующих заявок быстрее будет до нее добраться. Так продолжается до момента пока все заявки не будут разгружены. По данному алгоритму первый подходящий маршрут не заполняется полностью заявками. Наполнение происходит постепенно в каждый из них. Пример наполнения представлен на рисунке 2.
После того, как все маршруты укомплектованы, получаем следующее состояние решения
Следующим этапом решим, подходит ли
Функция
После определения состояния решения
Так итерации будут выполняться до того момента, пока
Чтобы повысить шансы по поиску самого оптимального состояния решения, данный алгоритм выполняется в двух параллельных потоках. После прогона из двух состояний решений выбирался вариант с лучшими показателями критериев
После метод отжига применяется еще раз, но относительно маршрутов
Результаты работы метода
Рассмотрим результаты работы алгоритма. Подадим на вход следующие данные: 18 заявок, расположенных следующим образом на рисунках 3, 4 транспортных средства,
Алгоритм справился за 4 минуты 15 секунд, было сформировано 2 маршрута. На рисунках 4 и 5 представлены сформированные маршруты. Несмотря на то, что было задано большее число транспортных средств на входе, происходит проверка на их необходимое количество от объема и веса заявок на доставку. Так как по нашему алгоритму максимальное количество заявок на доставку в транспортном средстве 11, то машины рассчитываются исходя из формулы
В маршрут №1 попали заявки, которые находятся почти по одному адресу и где алгоритм отрабатывает корректно, выстраивая посещение этих точек друг за другом (рисунок 6). Однако также присутствует пара заявок, которые не вошли ни в один сформированный маршрут.
Рассмотрим маршруты, сформированные на рисунке 7. Можно заметить, что точка под номером 1 (рисунок 7a) и точка под номером 2 (рисунок 7б) находятся в одной и той же области доставки. Следовательно, было бы логично послать в дальнюю область доставки не два транспортных средства, а одно. Данная ситуация появляется за счет того, что написанный алгоритм распределения заявок по маршрутам не учитывает глобальное состояние всех маршрутов, а рассматривает и улучшает только уже сформированный, внося в него с каждой итерацией минимальное случайное изменение.
Также наполнение маршрута сильно зависит от начального состояния, которое состоит из полностью заполненных сформированных маршрутов и части маршрутов с парой заявок, не поместившихся в другие. Итого мы получаем следующую картину: на рисунке 8 представлено отображение созданных алгоритмом маршрутов, отсортированных по заполненности. Красный означает полную загрузку, а зеленый, что транспортное средство почти не загружено. Это обращает наше внимание на то, что распределение заявок по маршрутам неравномерно. Где-то очень много доставок, а где-то почти нет.
Данная проблема также оказывает влияние на большой разброс заявок по карте, что видно на двух примерах формирования маршрутов. В алгоритме отсутствует возможность рассмотрения заявок по области их месторасположения. А начальное состояние и последующие изменения в виде перестановки по одной заявке из маршрута в другие не приводит к желаемому результату.
Заключение
Таким образом, на основе метода имитации отжига был сформирован один из алгоритмов автоматического планирования маршрутов, который является частью программного решения Norbit CDS, разработанного компанией НОРБИТ. В ходе анализа его работы можно заключить, что требуется доработка алгоритма в будущем для лучшего распределения заявок. Также стоит отметить, что система Norbit CDS поддерживает множественность алгоритмов и даже алгоритмы заказчиков. В частности, присутствуют комбинаторные и генетические алгоритмы, которые дают не только лучшую сходимость, но и время выполнения, однако при этом хуже горизонтально параллелятся.