Жизненный цикл плана маршрута

На этой странице описан жизненный цикл плана маршрута с использованием API оптимизации маршрутов, начиная с определения потребностей в маршрутизации и заканчивая интегрированным планом маршрута в вашей системе.

Следуя этапам плана маршрута, вы можете достичь следующих целей:

  • Сопоставьте операции автопарка. Переведите данные о физическом автопарке, сложных ограничениях и бизнес-целях в код для API.
  • Оптимизация планов маршрутов для вашего бизнеса. Узнайте, как улучшить план маршрута, чтобы он соответствовал вашим целям и повышал эффективность повседневной работы.
  • Развертывание в рабочей среде. Внедрите план маршрутов в повседневную работу.

На схеме ниже показан жизненный цикл плана маршрута.

Блок-схема жизненного цикла плана маршрута, описанная в тексте ниже

Этап реализации плана маршрута происходит при первой интеграции API или при значительном изменении бизнес-требований. Она охватывает этапы с 1 по 5.

Этап повседневной работы менее трудоемкий, и доработка минимальна. Она охватывает этапы со второго по четвертый.

Жизненный цикл маршрута состоит из следующих этапов:

  1. Определите масштаб проблемы. Прежде чем начать работу с API, определите и систематизируйте свои цели, ресурсы, задачи и ограничения, чтобы получить полное представление о своих операциях.
  2. Сопоставьте данные. Преобразуйте информацию о вашем бизнесе в параметры API, чтобы план маршрута соответствовал вашим требованиям к работе автопарка.
  3. Создайте запрос и получите план маршрута. Введите данные в API и получите оптимизированный план маршрута.
  4. Уточните план маршрута. Протестируйте план маршрута и доработайте его, скорректировав ограничения и цели, чтобы он соответствовал всем вашим потребностям.
  5. Интегрируйте план маршрута. Подключите план маршрута к существующим системам, чтобы обеспечить навигацию.

Определите масштаб проблемы

Прежде чем использовать API, вам нужно распределить сведения о повседневных операциях по категориям данных. Это позволит вам начать процесс внедрения с чётким пониманием того, каковы ваши текущие ресурсы и задачи, что их ограничивает и каких целей вы хотите достичь с помощью своего автопарка.

Определите ресурсы и задачи

Важный этап планирования маршрута – определение ресурсов и задач, то есть транспортных средств и грузов.

Транспортные средства отправки;
  • Количество. Сколько у вас транспортных средств?
  • Местоположения. Где транспортные средства начинают и заканчивают маршруты?
  • Время. Каковы рабочие часы водителей транспортных средств?
  • Вместимость. Каковы ограничения для ваших транспортных средств?
  • Расходы. Каковы расходы на эксплуатацию автопарка?
  • Местоположения. Где находятся пункты приема и доставки?
  • Требования. Каковы вес и размер посылок?
  • Ограничения. Есть ли определенные временные интервалы для доставки?
  • Время обслуживания. Сколько времени нужно водителю, чтобы припарковаться и разгрузить автомобиль?
  • Требования. Нужен ли для доставки определенный тип транспортного средства или водитель?

Определите ограничения

Ограничения – это лимиты и правила, касающиеся использования транспортных средств и обработки грузов. Они определяют большую часть ваших операций и жизненно важны при создании оптимизированного плана маршрута.

Ограничения обычно делятся на две категории:

Жесткие ограничения Мягкие ограничения
Эти ограничения нельзя нарушать. Например, грузовик не может перевозить больше груза, чем позволяет его грузоподъемность, а водитель не может забрать товар после закрытия магазина. Это предпочтения, которые при необходимости можно нарушить, обычно за дополнительную плату. Например, вы можете предпочитать загружать грузовик только на 80% или доставлять груз до определенного времени, но при этом допускать превышение этих ограничений, чтобы получить более оптимальный маршрут.

Вот некоторые из них:

  • Ограничения по вместимости. Максимальный вес, объем или количество товаров, которые может перевозить транспортное средство.
  • Временные окна. Конкретные временные интервалы, когда местоположение открыто для посещения, или конкретные часы смены водителя.
  • Расходы. Стоимость эксплуатации транспортного средства или пропуска доставки. Одна из основных целей API – создать экономически эффективный план маршрута.
  • Перерывы водителя. Периоды отдыха водителя, которые обычно требуются по трудовому законодательству после определенного количества рабочих часов.

Определите бизнес-цели

После того, как вы определите свои ресурсы и задачи и их ограничения, пришло время определить, какие показатели наиболее важны для вашего бизнеса. Цели связаны с ограничениями и помогают определить, что наиболее важно при планировании маршрута.

Вот несколько примеров бизнес-целей:

Объем парка Расстояние Время Стоимость
Вы хотите минимизировать количество используемых транспортных средств или задействовать весь автопарк, чтобы закончить рабочий день раньше? Вы хотите выбрать самый короткий путь, чтобы сэкономить топливо, или предпочитаете более быстрый маршрут, который может быть длиннее из-за использования автомагистралей? Вы хотите минимизировать общее количество рабочих часов или сделать приоритетом прибытие в определенное время, что может увеличить время в пути? Хотите ли вы минимизировать операционные расходы, такие как заработная плата и топливо, или готовы принять более высокие затраты, чтобы соблюсти строгие сроки?

Сопоставьте данные

Собрав данные, сопоставьте их со свойствами API. Это позволит оптимизатору получить всю необходимую информацию и составить маршрут с учетом особенностей вашего бизнеса.

Используйте параметры из следующих таблиц, чтобы сопоставить ресурсы, задачи, ограничения и цели, которые вы сопоставили в разделе Определение проблемы.

Сопоставление переменных

Пример из жизни Параметр API Описание
Водитель или транспортное средство model.vehicles[] Представляет одно транспортное средство в вашем автопарке.
Адреса складов vehicles[].startWaypoint
vehicles[].endWaypoint
Место, где транспортное средство начинает и заканчивает маршрут.
Часы работы model.globalStartTime
model.globalEndTime
Самое раннее время начала и самое позднее время окончания работы всего автопарка.
Задача или пакет model.shipments[] Представляет задание. Можно указать pickup, delivery или оба параметра.
Местоположение задачи pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
Географическое местоположение, в котором выполняется работа.
Время обслуживания pickups[].duration
deliveries[].duration
Время, затраченное на выполнение задачи в определенном месте (например, на разгрузку), без учета времени в пути.

Сопоставление ограничений

Ограничения реального мира Параметр API Описание
Вместимость автомобиля vehicles[].loadLimits Задает жесткое или мягкое ограничение вместимости транспортного средства. Если loadDemand отправления превышает оставшийся лимит, оно не назначается.
Размер пакета shipments[].loadDemands Объем грузоподъемности транспортного средства, который занимает отправление.
Ограничения для транспортных средств shipments[].allowedVehicleIndices Ограничивает доставку, чтобы ее могли выполнить только определенные транспортные средства или водители.
Часы работы shipments[].pickups[].timeWindows или shipments[].deliveries[].timeWindows Задает часы, в которые можно посетить место. Если транспортное средство не может прибыть в указанный период, доставка пропускается.
Ограничение на продолжительность смены vehicles[].routeDurationLimit Устанавливает жесткое или мягкое ограничение на продолжительность работы конкретного водителя (например, максимум 8 часов) независимо от глобального времени окончания.
Перерывы для водителя vehicles[].breakRule Принудительно применяет определенные правила отдыха, например обязательные перерывы после определенного количества часов работы.
Ограничения для дорог vehicles[].travelMode Указывает способ передвижения (например, DRIVE или BICYCLE). Это ограничивает маршрут разрешенными дорогами и определяет скорости, используемые для расчета времени в пути.

Сопоставление целей

Цель в реальном мире Параметр API Описание
Минимизация размера парка vehicles[].fixedCost Применяется к разовой стоимости использования транспортного средства. Высокие постоянные расходы вынуждают маршрут отдавать приоритет использованию меньшего количества транспортных средств, а не увеличению общего расстояния или времени работы.
Минимизировать расстояние vehicles[].costPerKilometer За каждый километр пути взимается плата. Приоритет отдается более коротким маршрутам, чтобы экономить топливо и уменьшать износ автомобиля.
Минимизация общего времени vehicles[].costPerHour Применяет стоимость за каждый час, когда транспортное средство активно (включая время в пути и время ожидания). отдает приоритет скорости выполнения.
Минимизация времени в пути vehicles[].costPerTraveledHour Применяется стоимость, относящаяся к времени, затраченному на перемещение. Это позволяет различать ситуации, когда вы стоите в пробке (дорого), и когда вы ждете на остановке(потенциально дешевле).
Как задавать приоритетность задач shipments[].penaltyCost Применяется, если определенная доставка пропущена. Установите высокое значение, чтобы критически важные задачи выполнялись в первую очередь.

Создайте запрос и получите ответ

Чтобы создать план маршрута с помощью Route Optimization API, выполните следующие действия:

  1. Настройте среду. Настройте проект Google Cloud, включите API и настройте аутентификацию. Инструкции приведены в разделе Начало работы. Это нужно сделать лишь один раз.
  2. Отправьте запрос. Создайте тело запроса, используя сопоставление данных, определенное в предыдущем разделе. Информацию о конечных точках, заголовках и форматировании запросов можно найти в разделе Как сделать запрос к API.
  3. Изучите ответ. Получив ответ от API, изучите план маршрута и значение каждого параметра. Подробнее о том, как интерпретировать ответ…

Как уточнить план маршрута

Преобразование реальных логистических задач в ограничения и расходы API – сложная задача. Первоначальный план маршрута может не соответствовать вашим бизнес-целям или ожиданиям водителей. Уточнение плана маршрута – это итеративный процесс тестирования возвращенных маршрутов и корректировки параметров до тех пор, пока вы не найдете настройку, которая позволит достичь ваших целей.

Корректировка целей и ограничений

Если сгенерированный план маршрута вам не подходит, вы можете изменить некоторые параметры, чтобы получить другие результаты. Ужесточение или ослабление параметров меняет способ решения конфликтующих целей в плане маршрута, а ослабление параметров – это эффективный способ обнаружить параметры, которые вызывают ошибки в ваших планах маршрутов.

В таблице ниже перечислены распространенные проблемы с маршрутизацией и параметры, которые можно настроить для их устранения.

Сценарий Параметр Корректировка Описание
Важная посылка не отправлена shipments[].penaltyCost увеличить ее стоимость или добавить штрафные расходы к другим отправлениям; Если отправка необязательна, увеличьте стоимость штрафа, чтобы сделать ее приоритетной. Если доставка обязательна (не предусматривает штрафных санкций), добавьте штрафные санкции к другим, менее важным вариантам доставки. Это делает их необязательными, что освобождает время и вместимость транспортного средства для важной доставки.
Вы отказались от получения напечатанных фото в этом месяце. softStartTime/softEndTime Добавление мягких временных окон При жестких временных окнах задачи, которые опаздывают даже на одну минуту, отбрасываются. Мягкие временные окна позволяют водителю прибыть немного не по расписанию, заплатив "стоимость", а не провалив задание.
Отправка пропущена из-за веса loadLimits[].softMaxLoad и costPerUnitAbove Как добавить требования к мягкой загрузке Позволяет немного превысить идеальную вместимость автомобиля (за штраф), чтобы не оставлять посылку.
Доставка пропущена из-за перегрузки флота model.vehicles[] или shipments[].timeWindows Добавьте транспортные средства или увеличьте временные интервалы Если у вас слишком много поставок для текущего автопарка, особенно в пиковые часы, добавьте больше транспортных средств или расширьте окна доставки, чтобы распределить рабочую нагрузку.
Маршруты слишком длинные или неэффективные vehicles[].costPerKilometer/costPerHour Добавлять расходы или увеличивать их значение. Сообщает API, что поездки обходятся дорого, и побуждает его исключать удаленные изолированные остановки, чтобы создавать более плотные маршруты для автопарка.
Смены водителей слишком длинные vehicles[].routeDurationLimit или model.vehicles[] Добавьте ограничения по продолжительности или добавьте транспортные средства и ограничения. Устанавливает жесткое ограничение (например, 8 часов) на общее время, которое водитель проводит в пути. Добавление транспортных средств само по себе не сократит маршруты, если вы также не примените ограничения по продолжительности, чтобы заставить решатель распределить рабочую нагрузку по большему парку.

Как изменить план маршрута

Часто требуется обновить план маршрута, сохранив его основу, например добавить в расписание активного водителя пункт забора. Для этого используйте параметры внедрения, которые предоставляют API начальную точку на основе вашего предыдущего решения, позволяя ему изменять существующий план, а не рассчитывать новый с нуля.

Ниже описаны способы обновления плана маршрута с помощью параметров внедрения.

  • Передайте маршруты из предыдущего ответа в поле injectedFirstSolutionRoutes нового запроса. Это ускоряет поиск оптимального решения и позволяет перепланировать маршруты перед началом рабочего дня, например чтобы добавить в них срочные заказы.
  • Укажите степень изменения в поле injectedSolutionConstraint. Это полезно, когда операции уже выполняются, поскольку позволяет сохранить текущую последовательность действий водителя или исправить части плана, которые уже были выполнены.
  • Убедитесь, что обновленный маршрут по-прежнему назначен правильному транспортному средству, установив для interpretInjectedSolutionsUsingLabels значение true. Это полезно при экспериментах с добавлением или удалением грузов и транспортных средств, поскольку маршруты сопоставляются с помощью ярлыков, а не индексов. Для этого все ярлыки транспортных средств и отправлений должны быть уникальными.

Интегрируйте план маршрута

Окончательный план маршрута – это объект данных, представляющий собой оптимизированное управление ресурсами и задачами с учетом ваших ограничений и целей. Интегрируйте этот план маршрута в свою систему, чтобы использовать его в повседневной работе. Обычно это включает визуализацию плана маршрута для менеджеров автопарка и отправку пошаговых инструкций водителям.

Визуализация

Чтобы менеджеры автопарка могли проверять и отслеживать ваш план маршрута, вы можете визуализировать его следующими способами:

Чтобы менеджеры автопарка могли проверять и отслеживать ваш план маршрута, его можно отобразить на карте на панели управления. В зависимости от текущего этапа разработки вы можете визуализировать план маршрута следующими способами:

  • Изучайте без кода. Вы можете использовать приложение Оптимизация маршрутов с открытым исходным кодом, чтобы посмотреть, как API преобразует ваши данные в физические маршруты на карте. Это веб-приложение служит инструментом исследования, который позволяет создавать сценарии, настраивать параметры ограничений и визуально отображать полученные планы маршрутов перед написанием кода.
  • Показ порядка посещений. Вы можете показать последовательность посещений в виде пронумерованных точек на карте, чтобы оценить планы оптимизации и отправки в своей системе. Для этого найдите массив visits в каждом маршруте ответа API. Элементы в этом массиве упорядочены в точности так, как водитель должен их выполнять. Вы можете перебрать этот список, использовать shipmentIndex, чтобы получить координаты местоположения для каждой остановки, и использовать библиотеку сопоставления, чтобы отобразить пронумерованные маркеры на карте в соответствии с их порядком в списке.
  • Нарисуйте физический маршрут. Вы можете визуализировать точный запланированный путь на карте, чтобы понять, почему оптимизатор выбрал определенную последовательность. Эта ломаная линия представляет собой предполагаемый путь для планирования и оценки, а не маршрут, по которому водитель едет в реальном времени. Установите в запросе параметр populatePolylines: true, чтобы получить поле encodedPolyline для каждого маршрута, и декодируйте его с помощью метода google.maps.geometry.encoding.decodePath() из Maps JavaScript API.

Отправка водителям

Вы можете интегрировать пошаговые маршруты в приложение для водителей с помощью Navigation SDK или добавить ссылки на контент в потребительское приложение Google Карт.

  • Navigation SDK. Если у вас есть собственное приложение для водителей, вы можете интегрировать Navigation SDK для Android или iOS, чтобы получать пошаговые инструкции прямо в приложении. Вы можете интегрировать информацию о задаче из ответа API в свою систему и использовать SDK для навигации. Чтобы передать маршруты из ответа API в SDK, укажите в запросе populateTransitionPolylines: true. Это создает routeToken для каждого перехода в ответе.
  • Fleet Engine. Чтобы получить доступ к расширенным функциям управления автопарком, импортируйте план маршрута, созданный API, в Fleet Engine. Это позволит вам отслеживать выполнение маршрута в реальном времени. В то время как API предоставляет ломаную линию предполагаемого пути для оценки, Fleet Engine связывает запланированную последовательность посещений с отслеживанием транспортных средств в реальном времени.