На этой странице описывается весь жизненный цикл плана маршрута, созданного с помощью API оптимизации маршрутов, начиная с определения ваших потребностей в маршрутизации и заканчивая интегрированным планом маршрута в вашей системе.
Следуя этапам маршрутного плана, вы сможете достичь следующих целей:
- Составьте карту работы вашего автопарка: преобразуйте данные о вашем автопарке, сложные ограничения и бизнес-цели в код для API.
- Оптимизируйте маршруты для своего бизнеса: разберитесь, как улучшить свой маршрутный план, чтобы он соответствовал вашим целям и повышал эффективность повседневной работы.
- Внедрение в рабочую среду: Внедрите свой план маршрута, включив его в повседневную работу.
На следующей диаграмме показан жизненный цикл плана маршрута.
Этап реализации плана маршрута начинается при первой интеграции API или при существенном изменении бизнес-требований. Он охватывает этапы с 1 по 5.
Этап ежедневной эксплуатации более упрощенный, и доработка минимальна. Он охватывает этапы со 2 по 4.
Жизненный цикл этапов маршрута включает следующие этапы:
- Определите масштаб проблемы: выявите и систематизируйте свои цели, ресурсы, задачи и ограничения, чтобы получить полное представление о вашей деятельности, прежде чем начать использовать API.
- Составьте карту ваших данных: преобразуйте реальные бизнес-ситуации в параметры API, чтобы план маршрута отражал потребности вашего автопарка.
- Создайте запрос и получите план маршрута: введите свои данные в API и получите оптимизированный план маршрута.
- Уточните свой маршрут: протестируйте свой маршрут и внесите в него изменения, скорректировав ограничения и цели, чтобы убедиться, что он отвечает всем вашим потребностям.
- Интегрируйте план маршрута: подключите план маршрута к существующим системам для обеспечения удобной навигации.
Определите масштаб вашей проблемы.
Перед использованием API необходимо систематизировать данные о вашей повседневной деятельности, разделив их на четкие категории. Это позволит начать процесс внедрения, имея четкое представление о ваших текущих ресурсах и задачах, их ограничениях и целях, которых вы хотите достичь с помощью своего автопарка.
Определите свои ресурсы и задачи.
Важным шагом при планировании маршрута является определение ваших ресурсов и задач, а именно: транспортных средств и грузов.
| Транспортные средства | Поставки |
|---|---|
|
|
Определите свои ограничения
Ваши ограничения — это лимиты и правила использования ваших транспортных средств и обработки грузов. Они определяют большую часть ваших операций и имеют решающее значение при составлении оптимизированного плана маршрута.
Ограничения, как правило, делятся на две категории:
| Жесткие ограничения | Мягкие ограничения |
|---|---|
| Это ограничения, которые нельзя нарушать . Например, грузовик не может перевозить груз, превышающий его максимальную грузоподъемность, а водитель не может забрать груз после закрытия магазина. | Это предпочтения, которые при необходимости можно нарушить , обычно с учётом штрафных санкций. Например, вы можете предпочитать загружать грузовик только на 80% или доставлять груз раньше целевого времени, но при этом готовы превысить эти лимиты, чтобы получить более выгодный маршрут. |
К числу распространенных ограничений относятся:
- Ограничения по грузоподъемности: максимальный вес, объем или количество предметов, которые может перевозить транспортное средство.
- Временные интервалы: конкретные временные промежутки, когда место открыто для посещения, или конкретные часы смены водителя.
- Затраты: Стоимость эксплуатации транспортного средства или отмены доставки. Одна из главных целей API — создание экономически эффективного плана маршрута.
- Перерывы водителя: Периоды отдыха для водителя, как правило, предусмотренные трудовым законодательством после определенного количества рабочих часов.
Определите цели вашего бизнеса.
После определения ваших ресурсов, задач и их ограничений, настало время определить, какие показатели наиболее важны для вашего бизнеса. Эти цели тесно связаны с ограничениями и помогают вам решить, что наиболее важно при планировании маршрута.
Ниже приведены некоторые примеры бизнес-целей:
| Размер флота | Расстояние | Время | Расходы |
|---|---|---|---|
| Вы хотите свести к минимуму количество используемых транспортных средств или задействовать весь свой автопарк, чтобы закончить рабочий день раньше? | Вы предпочитаете кратчайший путь, чтобы сэкономить топливо, или более быстрый маршрут, который может оказаться длиннее из-за использования автомагистралей? | Вы хотите свести к минимуму общее количество отработанных часов или отдать приоритет прибытию в определенное время, что может увеличить время в пути? | Вы хотите минимизировать операционные расходы, такие как заработная плата и топливо, или смириться с более высокими затратами для соблюдения жестких сроков? |
Составьте карту ваших данных
После сбора данных сопоставьте их со свойствами API. Это предоставит оптимизатору всю необходимую информацию для построения маршрута, учитывающего реалии вашего бизнеса.
Используйте параметры из следующих таблиц, чтобы сопоставить ресурсы, задачи, ограничения и цели, которые вы определили в разделе «Определение масштаба проблемы» .
Сопоставление переменных
| Концепция реального мира | Параметр API | Описание |
|---|---|---|
| Водитель или транспортное средство | model.vehicles[] | Представляет собой отдельный автомобиль из вашего автопарка. |
| Места расположения складов | vehicles[].startWaypointvehicles[].endWaypoint | Место, где транспортное средство начинает и заканчивает свой маршрут. |
| Ваши рабочие часы | model.globalStartTimemodel.globalEndTime | Самое раннее время начала и самое позднее время окончания работы всего флота. |
| Задача или пакет | model.shipments[] | Обозначает задание. Может быть pickup , delivery или и тем, и другим. |
| Место выполнения задачи | pickups[].arrivalWaypointdeliveries[].arrivalWaypoint | Географическое местоположение, где выполняется работа. |
| Время службы | pickups[].durationdeliveries[].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 оптимизации маршрута необходимо выполнить следующие шаги:
- Настройте свою среду: создайте свой проект Google Cloud, включите API и настройте аутентификацию. Инструкции см. в разделе «Начало работы» . Этот шаг нужно выполнить только один раз.
- Отправьте запрос: сформируйте тело запроса, используя сопоставление данных, определенное в предыдущем разделе. Информацию о конечных точках, заголовках и форматировании запроса см. в разделе «Выполнение запроса к API» .
- Разберитесь в ответе: получив ответ от 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 сопоставляет вашу запланированную последовательность посещений с отслеживанием транспортных средств в режиме реального времени.