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

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

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

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

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

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

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

Этап ежедневной эксплуатации более упрощенный, и доработка минимальна. Он охватывает этапы со 2 по 4.

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

  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 Применяет плату в случае пропуска конкретной отгрузки. Установка высокого значения гарантирует, что критически важные задачи будут иметь приоритет над необязательными.

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

Для создания плана маршрута с помощью API оптимизации маршрута необходимо выполнить следующие шаги:

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

Уточните свой маршрут.

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

Скорректируйте цели и ограничения.

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

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

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

Обновить план маршрута

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

Ниже описаны различные способы обновления плана маршрута с параметрами впрыска:

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

Интегрируйте свой план маршрута.

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

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

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

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

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

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

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

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