Алгоритм Кларка-Райта
Алгоритм Кларка-Райта (также известный как алгоритм экономии или метод «сбережений») — это эвристический метод решения задачи маршрутизации транспорта (Vehicle Routing Problem, VRP), предназначенный для построения приближённого к оптимальному набора маршрутов для парка транспортных средств, обслуживающих заданное множество клиентов из одного или нескольких депо. Алгоритм был предложен в 1964 году американскими исследователями Джеффри Кларком и Джоном Райтом и до сих пор остаётся одной из наиболее широко применяемых базовых эвристик в транспортной логистике.
История
Задача маршрутизации транспорта в её классической формулировке (CVRP — Capacitated VRP) была впервые описана в 1959 году Джорджем Данцигом и Джоном Рамзером. К началу 1960-х годов стало очевидно, что точные методы решения (например, методы целочисленного линейного программирования) неспособны эффективно обрабатывать задачи с десятками и сотнями клиентов из-за экспоненциального роста вычислительной сложности. В 1964 году Джеффри Кларк и Джон Райт, работавшие в компании «Arthur D. Little», опубликовали статью «Scheduling of Vehicles from a Central Depot to a Number of Delivery Points», в которой предложили простой и интуитивно понятный эвристический алгоритм, основанный на идее последовательного объединения маршрутов с максимальной экономией пробега. Алгоритм быстро завоевал популярность в промышленности и академических кругах, став стандартным инструментом для начального этапа решения VRP.
Описание алгоритма
Алгоритм Кларка-Райта относится к классу конструктивных эвристик: он строит решение постепенно, начиная с тривиального набора маршрутов и последовательно улучшая его путём слияния отдельных маршрутов. Основная идея заключается в расчёте «экономии» (saving) от объединения двух клиентов в один маршрут вместо обслуживания их отдельными рейсами.
Исходные данные
Для работы алгоритма необходимы:
- координаты депо и каждого клиента (или матрица расстояний между всеми точками);
- грузоподъёмность (вместимость) каждого транспортного средства (обычно предполагается, что все автомобили однотипны);
- объём спроса (вес, количество единиц) для каждого клиента.
Этапы
- Начальное решение: строится тривиальный набор маршрутов, в котором каждый клиент обслуживается отдельным рейсом от депо и обратно. Таким образом, для N клиентов получается N маршрутов вида (депо → клиент i → депо).
- Расчёт экономии: для каждой пары клиентов (i, j) вычисляется значение экономии S(i, j) по формуле:
S(i, j) = d(депо, i) + d(депо, j) — d(i, j), где d(A, B) — расстояние между точками A и B. Экономия показывает, насколько уменьшится общий пробег, если вместо двух отдельных рейсов (депо → i → депо и депо → j → депо) выполнить один маршрут (депо → i → j → депо). Чем больше значение S(i, j), тем выгоднее объединить этих клиентов.
- Сортировка: все пары (i, j) сортируются по убыванию значения экономии. Получается список кандидатов на объединение.
- Итеративное объединение: алгоритм последовательно просматривает отсортированный список. Для каждой пары проверяется:
- могут ли оба клиента быть объединены в один маршрут (то есть ни один из них ещё не связан с другим клиентом в рамках текущего маршрута, либо один из них является концевым);
- не превысит ли суммарный спрос клиентов на объединённом маршруте грузоподъёмность транспортного средства.
Если оба условия выполняются, маршруты объединяются: два отдельных маршрута заменяются одним, проходящим через депо и обоих клиентов в порядке, соответствующем экономии.
- Завершение: процесс продолжается до тех пор, пока не будут рассмотрены все пары из списка или пока дальнейшее объединение станет невозможным из-за ограничений по вместимости.
Модификации
Существует несколько вариантов алгоритма, различающихся порядком обработки пар и правилами объединения:
- Параллельная версия: на каждом шаге рассматривается несколько пар с наибольшей экономией, и объединения выполняются одновременно, если они не конфликтуют.
- Последовательная версия: объединения выполняются строго по одному, начиная с пары с максимальной экономией, после чего список пересчитывается.
- Версия с учётом ограничений по времени: вводится дополнительное ограничение на максимальное время в пути или время работы водителя.
Применение
Алгоритм Кларка-Райта широко используется в практических задачах транспортной логистики, особенно на этапе построения начального решения, которое затем может быть улучшено методами локального поиска или метаэвристиками (например, имитацией отжига, генетическими алгоритмами). Основные области применения:
- Планирование доставки товаров: оптимизация маршрутов для курьерских служб, сетей розничной торговли, дистрибьюторов продуктов питания.
- Сбор и вывоз отходов: построение маршрутов для мусоровозов.
- Обслуживание клиентов: маршрутизация для полевых сервисных бригад (ремонт, установка оборудования).
- Школьные автобусы: планирование маршрутов для подвоза учащихся.
- Почтовые и логистические службы: «Почта России», «СберЛогистика» и другие операторы используют подобные алгоритмы в своих системах оптимизации.
Преимущества и недостатки
Преимущества
- Простота реализации: алгоритм легко программируется и не требует сложных математических вычислений.
- Быстродействие: для N клиентов вычислительная сложность составляет O(N² log N) (из-за сортировки пар), что позволяет обрабатывать задачи с сотнями и тысячами точек.
- Интуитивная понятность: логика объединения маршрутов по принципу максимальной экономии расстояния легко объяснима менеджерам и диспетчерам.
- Хорошее качество начального решения: в большинстве случаев алгоритм даёт решение, близкое к оптимальному (обычно в пределах 10–15 % от глобального оптимума).
Недостатки
- Жадный характер: алгоритм не возвращается к уже принятым решениям, что может приводить к субоптимальным результатам в сложных конфигурациях (например, при неравномерном распределении спроса).
- Чувствительность к порядку обработки: параллельная и последовательная версии могут давать разные решения, и выбор версии влияет на качество.
- Не учитывает временные окна: базовая версия не поддерживает ограничения по времени прибытия к клиенту (VRPTW), хотя существуют расширения алгоритма для этого случая.
- Отсутствие гарантии оптимальности: как и все эвристики, алгоритм не гарантирует нахождение глобального оптимума.
Критика и развитие
Несмотря на широкое распространение, алгоритм Кларка-Райта подвергался критике за то, что в некоторых случаях он может строить маршруты, пересекающие друг друга, что увеличивает общий пробег. Для устранения этого недостатка были предложены модификации, такие как алгоритм «сбережений с перекрёстным обменом» (savings with exchange) и гибридные методы, сочетающие алгоритм Кларка-Райта с методами локального поиска (например, 2-opt, 3-opt). В современных системах маршрутизации алгоритм часто используется как один из этапов в составе более сложных решателей, таких как OR-Tools (Google), LKH (Lin-Kernighan Helsgaun) или коммерческие пакеты (например, «Логистика: Планирование маршрутов» от российской компании «1С-Рарус»).
Источники
- Clarke, G., & Wright, J. W. (1964). Scheduling of Vehicles from a Central Depot to a Number of Delivery Points. Operations Research, 12(4), 568–581.
- Laporte, G. (1992). The Vehicle Routing Problem: An overview of exact and approximate algorithms. European Journal of Operational Research, 59(3), 345–358.
- Toth, P., & Vigo, D. (Eds.). (2014). Vehicle Routing: Problems, Methods, and Applications (2nd ed.). SIAM.
- Lysgaard, J. (1997). Clarke & Wright's Savings Algorithm. Department of Management Science and Logistics, Aarhus School of Business.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →